#pragma once #include #include #include "FileData.h" #include "Window.h" #include "MetaData.h" #include "PlatformId.h" #include "ThemeData.h" #include "FileFilterIndex.h" #include "SystemData.h" #include "views/ViewController.h" enum CollectionSystemType { AUTO_ALL_GAMES, AUTO_LAST_PLAYED, AUTO_FAVORITES, CUSTOM_COLLECTION }; struct CollectionSystemDecl { CollectionSystemType type; // type of system std::string name; std::string longName; std::string defaultSort; std::string themeFolder; bool isCustom; }; struct CollectionSystemData { SystemData* system; CollectionSystemDecl decl; bool isEnabled; bool isPopulated; bool needsSave; }; class CollectionSystemManager { public: CollectionSystemManager(Window* window); ~CollectionSystemManager(); static CollectionSystemManager* get(); static void init(Window* window); static void deinit(); void saveCustomCollection(SystemData* sys); void loadCollectionSystems(); void loadEnabledListFromSettings(); void updateSystemsList(); void refreshCollectionSystems(FileData* file); void updateCollectionSystem(FileData* file, CollectionSystemData sysData); void deleteCollectionFiles(FileData* file); inline std::map getAutoCollectionSystems() { return mAutoCollectionSystemsData; }; inline std::map getCustomCollectionSystems() { return mCustomCollectionSystemsData; }; inline SystemData* getCustomCollectionsBundle() { return mCustomCollectionsBundle; }; std::vector getUnusedSystemsFromTheme(); SystemData* addNewCustomCollection(std::string name); bool isThemeGenericCollectionCompatible(bool genericCustomCollections); bool isThemeCustomCollectionCompatible(std::vector stringVector); std::string getValidNewCollectionName(std::string name, int index = 0); void setEditMode(std::string collectionName); void exitEditMode(); inline bool isEditing() { return mIsEditingCustom; }; inline std::string getEditingCollection() { return mEditingCollection; }; bool toggleGameInCollection(FileData* file); SystemData* getSystemToView(SystemData* sys); void updateCollectionFolderMetadata(SystemData* sys); private: static CollectionSystemManager* sInstance; SystemEnvironmentData* mCollectionEnvData; std::map mCollectionSystemDeclsIndex; std::map mAutoCollectionSystemsData; std::map mCustomCollectionSystemsData; Window* mWindow; bool mIsEditingCustom; std::string mEditingCollection; CollectionSystemData* mEditingCollectionSystemData; void initAutoCollectionSystems(); void initCustomCollectionSystems(); SystemData* getAllGamesCollection(); SystemData* createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index = true); void populateAutoCollection(CollectionSystemData* sysData); void populateCustomCollection(CollectionSystemData* sysData); void removeCollectionsFromDisplayedSystems(); void addEnabledCollectionsToDisplayedSystems(std::map* colSystemData); std::vector getSystemsFromConfig(); std::vector getSystemsFromTheme(); std::vector getCollectionsFromConfigFolder(); std::vector getCollectionThemeFolders(bool custom); std::vector getUserCollectionThemeFolders(); bool themeFolderExists(std::string folder); bool includeFileInAutoCollections(FileData* file); SystemData* mCustomCollectionsBundle; }; std::string getCustomCollectionConfigPath(std::string collectionName); std::string getCollectionsFolder(); bool systemSort(SystemData* sys1, SystemData* sys2);