diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp index d1b6efc..26b8c78 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp @@ -152,8 +152,12 @@ bool CollectionInfoBuilder::createCollectionDirectory(std::string name) return true; } - CollectionInfo *CollectionInfoBuilder::buildCollection(std::string name) +{ + return buildCollection(name, ""); +} + +CollectionInfo *CollectionInfoBuilder::buildCollection(std::string name, std::string mergedCollectionName) { std::string listItemsPathKey = "collections." + name + ".list.path"; std::string listFilterKey = "collections." + name + ".list.filter"; @@ -169,8 +173,7 @@ CollectionInfo *CollectionInfoBuilder::buildCollection(std::string name) std::string extensions; std::string metadataType = name; std::string metadataPath; - std::string mergedCollectionName; - + conf_.getCollectionAbsolutePath(name, listItemsPath); (void)conf_.getProperty(extensionsKey, extensions); @@ -194,7 +197,7 @@ CollectionInfo *CollectionInfoBuilder::buildCollection(std::string name) (void)conf_.getProperty("collections." + collection->name + ".launcher", collection->launcher); - ImportDirectory(collection); + ImportDirectory(collection, mergedCollectionName); return collection; } @@ -233,7 +236,7 @@ bool CollectionInfoBuilder::ImportBasicList(CollectionInfo *info, std::string fi return true; } -bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) +bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string mergedCollectionName) { DIR *dp; struct dirent *dirp; @@ -242,13 +245,23 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info) std::map excludeFilter; std::string includeFile = Utils::combinePath(Configuration::absolutePath, "collections", info->name, "include.txt"); std::string excludeFile = Utils::combinePath(Configuration::absolutePath, "collections", info->name, "exclude.txt"); + std::string launcher; bool showMissing = false; - (void)conf_.getProperty("collections." + info->name + ".list.includeMissingItems", showMissing); + if(mergedCollectionName != "") + { + includeFile = Utils::combinePath(Configuration::absolutePath, "collections", mergedCollectionName, info->name + ".merge"); + (void)conf_.getProperty("collections." + mergedCollectionName + ".list.includeMissingItems", showMissing); + ImportBasicList(info, includeFile, includeFilter); + } + else + { + (void)conf_.getProperty("collections." + info->name + ".list.includeMissingItems", showMissing); + ImportBasicList(info, includeFile, includeFilter); + ImportBasicList(info, excludeFile, excludeFilter); + } - ImportBasicList(info, includeFile, includeFilter); - ImportBasicList(info, excludeFile, excludeFilter); std::vector extensions; std::vector::iterator extensionsIt; diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.h b/RetroFE/Source/Collection/CollectionInfoBuilder.h index 5bd5221..250f384 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.h +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.h @@ -30,11 +30,12 @@ public: CollectionInfoBuilder(Configuration &c, MetadataDatabase &mdb); virtual ~CollectionInfoBuilder(); CollectionInfo *buildCollection(std::string collectionName); + CollectionInfo *buildCollection(std::string collectionName, std::string mergedCollectionName); static bool createCollectionDirectory(std::string collectionName); private: Configuration &conf_; MetadataDatabase &metaDB_; bool ImportBasicList(CollectionInfo *info, std::string file, std::map &list); - bool ImportDirectory(CollectionInfo *info); + bool ImportDirectory(CollectionInfo *info, std::string mergedCollectionName); }; diff --git a/RetroFE/Source/Collection/MenuParser.cpp b/RetroFE/Source/Collection/MenuParser.cpp index b07beb3..124ec9b 100644 --- a/RetroFE/Source/Collection/MenuParser.cpp +++ b/RetroFE/Source/Collection/MenuParser.cpp @@ -100,10 +100,11 @@ bool MenuParser::buildMenuItems(CollectionInfo *collection, bool sort, Collectio } else { - std::string collectionName = collectionAttribute->value(); - Logger::write(Logger::ZONE_INFO, "Menu", "Loading collection into menu: " + collectionName); + std::string subcollectionName = collectionAttribute->value(); + Logger::write(Logger::ZONE_INFO, "Menu", "Loading collection into menu: " + collection->name); - CollectionInfo *subcollection = builder.buildCollection(collectionName); + + CollectionInfo *subcollection = builder.buildCollection(subcollectionName, collection->name); collection->addSubcollection(subcollection); } }