From cdba6f5df7e5b7943c8faa2e3b7584b9a1bba9b3 Mon Sep 17 00:00:00 2001 From: emb <> Date: Wed, 21 Oct 2015 21:29:39 -0500 Subject: [PATCH] Playlist save support --- RetroFE/Source/Collection/CollectionInfo.cpp | 53 +++++++++++--------- RetroFE/Source/Collection/CollectionInfo.h | 1 + RetroFE/Source/Graphics/Page.cpp | 20 +++++++- RetroFE/Source/RetroFE.cpp | 1 - 4 files changed, 50 insertions(+), 25 deletions(-) diff --git a/RetroFE/Source/Collection/CollectionInfo.cpp b/RetroFE/Source/Collection/CollectionInfo.cpp index 083054d..59f8f0c 100644 --- a/RetroFE/Source/Collection/CollectionInfo.cpp +++ b/RetroFE/Source/Collection/CollectionInfo.cpp @@ -42,29 +42,6 @@ CollectionInfo::~CollectionInfo() { // remove items from the subcollections so their destructors do not // delete the items since the parent collection will delete them. - if(saveRequest) - { - std::string file = Utils::combinePath(Configuration::absolutePath, "collections", name, "playlists/favorites.txt"); - Logger::write(Logger::ZONE_INFO, "Collection", "Saving " + file); - - std::ofstream filestream; - try - { - filestream.open(file.c_str()); - std::vector *saveitems = playlists["favorites"]; - for(std::vector::iterator it = saveitems->begin(); it != saveitems->end(); it++) - { - filestream << (*it)->name << std::endl; - } - - filestream.close(); - } - catch(std::exception &) - { - Logger::write(Logger::ZONE_ERROR, "Collection", "Save failed: " + file); - } - } - std::vector::iterator subit; for (subit = subcollections_.begin(); subit != subcollections_.end(); subit++) { @@ -94,6 +71,36 @@ CollectionInfo::~CollectionInfo() } } +bool CollectionInfo::Save() +{ + bool retval = true; + if(saveRequest) + { + std::string file = Utils::combinePath(Configuration::absolutePath, "collections", name, "playlists/favorites.txt"); + Logger::write(Logger::ZONE_INFO, "Collection", "Saving " + file); + + std::ofstream filestream; + try + { + filestream.open(file.c_str()); + std::vector *saveitems = playlists["favorites"]; + for(std::vector::iterator it = saveitems->begin(); it != saveitems->end(); it++) + { + filestream << (*it)->name << std::endl; + } + + filestream.close(); + } + catch(std::exception &) + { + Logger::write(Logger::ZONE_ERROR, "Collection", "Save failed: " + file); + retval = false; + } + } + + return retval; +} + std::string CollectionInfo::settingsPath() const { return Utils::combinePath(Configuration::absolutePath, "collections", name); diff --git a/RetroFE/Source/Collection/CollectionInfo.h b/RetroFE/Source/Collection/CollectionInfo.h index c520f4f..dd15d1a 100644 --- a/RetroFE/Source/Collection/CollectionInfo.h +++ b/RetroFE/Source/Collection/CollectionInfo.h @@ -27,6 +27,7 @@ public: CollectionInfo(std::string name, std::string listPath, std::string extensions, std::string metadataType, std::string metadataPath); virtual ~CollectionInfo(); std::string settingsPath() const; + bool Save(); void sortItems(); void addSubcollection(CollectionInfo *info); bool hasSubcollections(); diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index fb59e3d..6776caf 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -90,6 +90,19 @@ Page::~Page() delete selectSoundChunk_; selectSoundChunk_ = NULL; } + CollectionVector_T::iterator itc = collections_.begin(); + + while(itc != collections_.end()) + { + itc->collection->Save(); + + if(itc->collection) + { + delete itc->collection; + } + collections_.erase(itc); + itc = collections_.begin(); + } } @@ -554,6 +567,7 @@ bool Page::popCollection() 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) @@ -619,7 +633,11 @@ void Page::update(float dt) std::list::iterator next = del; ++next; - if(info.collection) delete info.collection; + if(info.collection) + { + info.collection->Save(); + delete info.collection; + } deleteCollections_.erase(del); del = next; } diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 8fdcea1..009a032 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -389,7 +389,6 @@ void RetroFE::run() render(); } } - }