diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp index 6914c16..7acfad3 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp @@ -349,39 +349,65 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me } -void CollectionInfoBuilder::addFavorites(CollectionInfo *info) +void CollectionInfoBuilder::addPlaylists(CollectionInfo *info) { - std::map favoritesFilter; - std::string favoritesFile = Utils::combinePath(Configuration::absolutePath, "collections", info->name, "playlists/favorites.txt"); - ImportBasicList(info, favoritesFile, favoritesFilter); + DIR *dp; + struct dirent *dirp; + std::string path = Utils::combinePath(Configuration::absolutePath, "collections", info->name, "playlists"); + dp = opendir(path.c_str()); - info->playlists["favorites"] = new std::vector(); - - // add the favorites list - for(std::map::iterator it = favoritesFilter.begin(); it != favoritesFilter.end(); it++) + while((dirp = readdir(dp)) != NULL) { - std::string collectionName = info->name; - std::string itemName = it->first; - if (itemName.at(0) == '_') // name consists of _: - { - itemName.erase(0, 1); // Remove _ - size_t position = itemName.find(":"); - if (position != std::string::npos ) - { - collectionName = itemName.substr(0, position); - itemName = itemName.erase(0, position+1); - } - } + std::string file = dirp->d_name; - for(std::vector::iterator it = info->items.begin(); it != info->items.end(); it++) + size_t position = file.find_last_of("."); + std::string basename = (std::string::npos == position)? file : file.substr(0, position); + + std::string comparator = ".txt"; + int start = file.length() - comparator.length(); + + if(start >= 0) { - if ( (*it)->name == itemName && (*it)->collectionInfo->name == collectionName) + if(file.compare(start, comparator.length(), comparator) == 0) { - info->playlists["favorites"]->push_back((*it)); + Logger::write(Logger::ZONE_INFO, "RetroFE", "Loading playlist: " + basename); + + std::map playlistFilter; + std::string playlistFile = Utils::combinePath(Configuration::absolutePath, "collections", info->name, "playlists", file); + ImportBasicList(info, playlistFile, playlistFilter); + + info->playlists[basename] = new std::vector(); + + // add the playlist list + for(std::map::iterator it = playlistFilter.begin(); it != playlistFilter.end(); it++) + { + std::string collectionName = info->name; + std::string itemName = it->first; + if (itemName.at(0) == '_') // name consists of _: + { + itemName.erase(0, 1); // Remove _ + size_t position = itemName.find(":"); + if (position != std::string::npos ) + { + collectionName = itemName.substr(0, position); + itemName = itemName.erase(0, position+1); + } + } + + for(std::vector::iterator it = info->items.begin(); it != info->items.end(); it++) + { + if ( (*it)->name == itemName && (*it)->collectionInfo->name == collectionName) + { + info->playlists[basename]->push_back((*it)); + } + } + } + } } } + return; } diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.h b/RetroFE/Source/Collection/CollectionInfoBuilder.h index 6282fac..7ad7c4c 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.h +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.h @@ -31,7 +31,7 @@ public: virtual ~CollectionInfoBuilder(); CollectionInfo *buildCollection(std::string collectionName); CollectionInfo *buildCollection(std::string collectionName, std::string mergedCollectionName); - void addFavorites(CollectionInfo *info); + void addPlaylists(CollectionInfo *info); void injectMetadata(CollectionInfo *info); static bool createCollectionDirectory(std::string collectionName); diff --git a/RetroFE/Source/Control/UserInput.cpp b/RetroFE/Source/Control/UserInput.cpp index 3ed1013..8c09d4d 100644 --- a/RetroFE/Source/Control/UserInput.cpp +++ b/RetroFE/Source/Control/UserInput.cpp @@ -76,7 +76,9 @@ bool UserInput::initialize() MapKey("letterDown", KeyCodeLetterDown, false); MapKey("letterUp", KeyCodeLetterUp, false); + MapKey("favPlaylist", KeyCodeFavPlaylist, false); MapKey("nextPlaylist", KeyCodeNextPlaylist, false); + MapKey("prevPlaylist", KeyCodePrevPlaylist, false); MapKey("addPlaylist", KeyCodeAddPlaylist, false); MapKey("removePlaylist", KeyCodeRemovePlaylist, false); MapKey("random", KeyCodeRandom, false); diff --git a/RetroFE/Source/Control/UserInput.h b/RetroFE/Source/Control/UserInput.h index 92f9684..b183107 100644 --- a/RetroFE/Source/Control/UserInput.h +++ b/RetroFE/Source/Control/UserInput.h @@ -39,7 +39,9 @@ public: KeyCodePageUp, KeyCodeLetterDown, KeyCodeLetterUp, + KeyCodeFavPlaylist, KeyCodeNextPlaylist, + KeyCodePrevPlaylist, KeyCodeRandom, KeyCodeAddPlaylist, KeyCodeRemovePlaylist, diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index a05af80..1fc1229 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -579,10 +579,23 @@ std::string Page::getPlaylistName() } +void Page::favPlaylist() +{ + if(playlist_->first == "favorites") + { + selectPlaylist("all"); + } + else + { + selectPlaylist("favorites"); + } + return; +} + + void Page::nextPlaylist() { MenuInfo_S &info = collections_.back(); - info.collection->Save(); unsigned int numlists = info.collection->playlists.size(); for(unsigned int i = 0; i <= numlists; ++i) @@ -599,6 +612,30 @@ void Page::nextPlaylist() playlistChange(); } + +void Page::prevPlaylist() +{ + MenuInfo_S &info = collections_.back(); + unsigned int numlists = info.collection->playlists.size(); + + for(unsigned int i = 0; i <= numlists; ++i) + { + // wrap + if(playlist_ == info.collection->playlists.begin()) + { + playlist_ = info.collection->playlists.end(); + } + playlist_--; + + // find the first playlist + if(playlist_->second->size() != 0) break; + } + + activeMenu_->setItems(playlist_->second); + playlistChange(); +} + + void Page::selectPlaylist(std::string playlist) { MenuInfo_S &info = collections_.back(); diff --git a/RetroFE/Source/Graphics/Page.h b/RetroFE/Source/Graphics/Page.h index b3672e5..2b5c877 100644 --- a/RetroFE/Source/Graphics/Page.h +++ b/RetroFE/Source/Graphics/Page.h @@ -50,7 +50,9 @@ public: void enterMenu(); void exitMenu(); std::string getPlaylistName(); + void favPlaylist(); void nextPlaylist(); + void prevPlaylist(); void selectPlaylist(std::string playlist); void pushMenu(ScrollingList *s); bool isMenusFull(); diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 6bcf343..14da163 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -702,7 +702,9 @@ RetroFE::RETROFE_STATE RetroFE::processUserInput(Page *page) !input_.keystate(UserInput::KeyCodePageDown) && !input_.keystate(UserInput::KeyCodeLetterUp) && !input_.keystate(UserInput::KeyCodeLetterDown) && + !input_.keystate(UserInput::KeyCodeFavPlaylist) && !input_.keystate(UserInput::KeyCodeNextPlaylist) && + !input_.keystate(UserInput::KeyCodePrevPlaylist) && !input_.keystate(UserInput::KeyCodeAddPlaylist) && !input_.keystate(UserInput::KeyCodeRemovePlaylist) && !input_.keystate(UserInput::KeyCodeRandom)) @@ -741,11 +743,21 @@ RetroFE::RETROFE_STATE RetroFE::processUserInput(Page *page) page->reallocateMenuSpritePoints(); state = RETROFE_HIGHLIGHT_REQUEST; } + if(input_.newKeyPressed(UserInput::KeyCodeFavPlaylist)) + { + page->favPlaylist(); + state = RETROFE_PLAYLIST_REQUEST; + } if(input_.newKeyPressed(UserInput::KeyCodeNextPlaylist)) { page->nextPlaylist(); state = RETROFE_PLAYLIST_REQUEST; } + if(input_.newKeyPressed(UserInput::KeyCodePrevPlaylist)) + { + page->prevPlaylist(); + state = RETROFE_PLAYLIST_REQUEST; + } if(input_.newKeyPressed(UserInput::KeyCodeRemovePlaylist)) { page->removePlaylist(); @@ -895,7 +907,7 @@ CollectionInfo *RetroFE::getCollection(std::string collectionName) MenuParser mp; mp.buildMenuItems(collection, menuSort); - cib.addFavorites(collection); + cib.addPlaylists(collection); collection->sortFavoriteItems(); return collection; diff --git a/RetroFE/Source/Version.cpp b/RetroFE/Source/Version.cpp index a06eab7..a7b10a5 100644 --- a/RetroFE/Source/Version.cpp +++ b/RetroFE/Source/Version.cpp @@ -20,7 +20,7 @@ std::string retrofe_version_major = "0"; std::string retrofe_version_minor = "7"; -std::string retrofe_version_build = "20"; +std::string retrofe_version_build = "20b1"; std::string Version::getString()