Adding merged list functionality

This commit is contained in:
emb 2015-07-28 07:55:21 -05:00
parent ea8ac902a6
commit 695da5d367
3 changed files with 27 additions and 12 deletions

View File

@ -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<std::string, Item *> 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<std::string> extensions;
std::vector<std::string>::iterator extensionsIt;

View File

@ -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<std::string, Item *> &list);
bool ImportDirectory(CollectionInfo *info);
bool ImportDirectory(CollectionInfo *info, std::string mergedCollectionName);
};

View File

@ -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);
}
}