From baaa53749035115446cbb0f2b3d50437bf616dda Mon Sep 17 00:00:00 2001 From: emb <> Date: Tue, 10 Mar 2015 23:03:33 -0500 Subject: [PATCH] Added configuration parameter to include items from include.txt even if the rom does not exist. --- .../Common/collections/Arcade/settings.conf | 7 ++++ .../collections/Sega Genesis/settings.conf | 7 ++++ .../Collection/CollectionInfoBuilder.cpp | 38 +++++++++++++++---- .../Source/Collection/CollectionInfoBuilder.h | 2 +- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/Package/Environment/Common/collections/Arcade/settings.conf b/Package/Environment/Common/collections/Arcade/settings.conf index a39ba49..01390cd 100644 --- a/Package/Environment/Common/collections/Arcade/settings.conf +++ b/Package/Environment/Common/collections/Arcade/settings.conf @@ -8,6 +8,13 @@ ############################################################################### #list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%/roms +############################################################################### +# If a game is specified in include.txt then it will be included in the list +# regardless of if the rom actually exists or not. Set this variable to false +# to exclude any items that cannot be found. +############################################################################### +list.includeMissingItems = true + ############################################################################### # Extensions are comma separated without spaces ############################################################################### diff --git a/Package/Environment/Common/collections/Sega Genesis/settings.conf b/Package/Environment/Common/collections/Sega Genesis/settings.conf index 6e99e85..b3cf701 100644 --- a/Package/Environment/Common/collections/Sega Genesis/settings.conf +++ b/Package/Environment/Common/collections/Sega Genesis/settings.conf @@ -9,6 +9,13 @@ ############################################################################### # list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%/roms +############################################################################### +# If a game is specified in include.txt then it will be included in the list +# regardless of if the rom actually exists or not. Set this variable to false +# to exclude any items that cannot be found. +############################################################################### +list.includeMissingItems = true + ############################################################################### # Extensions are comma separated without spaces ############################################################################### diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp index 2554868..940f6af 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp @@ -114,6 +114,7 @@ bool CollectionInfoBuilder::CreateCollectionDirectory(std::string name) settingsFile << "# Uncomment and edit the following line to use a different ROM path." << std::endl; settingsFile << "#list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%/roms" << std::endl; + settingsFile << "list.includeMissingItems = true" << std::endl; settingsFile << "list.extensions = zip" << std::endl; settingsFile << "launcher = mame" << std::endl; settingsFile << "metadata.type = MAME" << std::endl; @@ -193,7 +194,7 @@ CollectionInfo *CollectionInfoBuilder::BuildCollection(std::string name) } -bool CollectionInfoBuilder::ImportBasicList(CollectionInfo * /*info*/, std::string file, std::map &list) +bool CollectionInfoBuilder::ImportBasicList(CollectionInfo * /*info*/, std::string file, std::string launcher, std::map &list) { std::ifstream includeStream(file.c_str()); @@ -214,6 +215,10 @@ bool CollectionInfoBuilder::ImportBasicList(CollectionInfo * /*info*/, std::stri line.erase( std::remove(line.begin(), line.end(), '\r'), line.end() ); i->SetFullTitle(line); + i->SetName(line); + i->SetFullTitle(line); + i->SetTitle(line); + i->SetLauncher(launcher); list[line] = i; } @@ -232,17 +237,19 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) std::string includeFile = Configuration::GetAbsolutePath() + "/collections/" + info->GetName() + "/include.txt"; std::string excludeFile = Configuration::GetAbsolutePath() + "/collections/" + info->GetName() + "/exclude.txt"; std::string launcher; + bool showMissing = true; + + (void)Conf.GetProperty("collections." + info->GetName() + ".launcher", launcher); + (void)Conf.GetProperty("collections." + info->GetName() + ".list.includeMissingItems", showMissing); - - ImportBasicList(info, includeFile, includeFilter); - ImportBasicList(info, excludeFile, excludeFilter); + ImportBasicList(info, includeFile, launcher, includeFilter); + ImportBasicList(info, excludeFile, launcher, excludeFilter); std::vector extensions; std::vector::iterator extensionsIt; info->GetExtensions(extensions); - (void)Conf.GetProperty("collections." + info->GetName() + ".launcher", launcher); Logger::Write(Logger::ZONE_INFO, "CollectionInfoBuilder", "Checking for \"" + includeFile + "\""); dp = opendir(path.c_str()); @@ -253,6 +260,17 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) return false; } + if(showMissing) + { + for(std::map::iterator it = includeFilter.begin(); it != includeFilter.end(); it++) + { + if(excludeFilter.find(it->first) == excludeFilter.end()) + { + info->GetItems()->push_back(it->second); + } + } + } + while((dirp = readdir(dp)) != NULL) { std::string file = dirp->d_name; @@ -292,12 +310,14 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) info->SortItems(); - MetaDB.InjectMetadata(info); - while(includeFilter.size() > 0) { std::map::iterator it = includeFilter.begin(); - delete it->second; + // delete the unused items if they were never pushed to the main collection + if(!showMissing) + { + delete it->second; + } includeFilter.erase(it); } while(excludeFilter.size() > 0) @@ -307,5 +327,7 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) excludeFilter.erase(it); } + MetaDB.InjectMetadata(info); + return true; } diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.h b/RetroFE/Source/Collection/CollectionInfoBuilder.h index d87eaf9..a613b49 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.h +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.h @@ -35,6 +35,6 @@ public: private: Configuration &Conf; MetadataDatabase &MetaDB; - bool ImportBasicList(CollectionInfo *info, std::string file, std::map &list); + bool ImportBasicList(CollectionInfo *info, std::string file, std::string launcher, std::map &list); bool ImportDirectory(CollectionInfo *info); };