From 2dc8b85aee69f5441947004ca08e46aa689f5e66 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 30 Oct 2020 11:49:51 +0100 Subject: [PATCH] Fixed a game counting issue for grouped custom collections. --- es-app/src/FileData.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 15e1e4a69..8c297f066 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -446,16 +446,24 @@ void FileData::sort(ComparisonFunction& comparator, bool ascending, std::vector mChildrenFolders; std::vector mChildrenOthers; + if (mSystem->isGroupedCustomCollection()) + gameCount = {}; + // The main custom collections view is sorted during startup in CollectionSystemManager. // The individual collections are however sorted as any normal systems/folders. if (mSystem->isCollection() && mSystem->getFullName() == "collections") { + std::pair tempGameCount = {}; for (auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { // Build mFirstLetterIndex. const char firstChar = toupper((*it)->getSortName().front()); mFirstLetterIndex.push_back(std::string(1, firstChar)); if ((*it)->getChildren().size() > 0) (*it)->sort(comparator, ascending, gameCount); + tempGameCount.first += gameCount.first; + tempGameCount.second += gameCount.second; + gameCount = {}; } + gameCount = tempGameCount; // Sort and make each entry unique in mFirstLetterIndex. std::sort(mFirstLetterIndex.begin(), mFirstLetterIndex.end()); auto last = std::unique(mFirstLetterIndex.begin(), mFirstLetterIndex.end()); @@ -529,6 +537,9 @@ void FileData::sort(ComparisonFunction& comparator, bool ascending, (*it)->sort(comparator, ascending, gameCount); } + if (mSystem->isGroupedCustomCollection()) + mGameCount = gameCount; + // If there are only folders in the gamelist, then it makes sense to still // generate a letter index. if (mOnlyFolders) { @@ -561,16 +572,24 @@ void FileData::sortFavoritesOnTop(ComparisonFunction& comparator, bool ascending bool foldersOnTop = Settings::getInstance()->getBool("FoldersOnTop"); bool hasFolders = false; + if (mSystem->isGroupedCustomCollection()) + gameCount = {}; + // The main custom collections view is sorted during startup in CollectionSystemManager. // The individual collections are however sorted as any normal systems/folders. if (mSystem->isCollection() && mSystem->getFullName() == "collections") { + std::pair tempGameCount = {}; for (auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { // Build mFirstLetterIndex. const char firstChar = toupper((*it)->getSortName().front()); mFirstLetterIndex.push_back(std::string(1, firstChar)); if ((*it)->getChildren().size() > 0) (*it)->sortFavoritesOnTop(comparator, ascending, gameCount); + tempGameCount.first += gameCount.first; + tempGameCount.second += gameCount.second; + gameCount = {}; } + gameCount = tempGameCount; // Sort and make each entry unique in mFirstLetterIndex. std::sort(mFirstLetterIndex.begin(), mFirstLetterIndex.end()); auto last = std::unique(mFirstLetterIndex.begin(), mFirstLetterIndex.end()); @@ -609,6 +628,9 @@ void FileData::sortFavoritesOnTop(ComparisonFunction& comparator, bool ascending mOnlyFolders = false; } + if (mSystem->isGroupedCustomCollection()) + mGameCount = gameCount; + // If there are favorite folders and this is a mixed list, then don't handle these // separately but instead merge them into the same vector. This is a quite wasteful // approach but the scenario where a user has a mixed folder and files list and marks