Theme sets are now repopulated when there were new downloads or updates using GuiThemeDownloader

This commit is contained in:
Leon Styhre 2023-03-31 22:12:31 +02:00
parent 4fcd956156
commit 1953d42f92
3 changed files with 21 additions and 3 deletions

View file

@ -9,6 +9,7 @@
#include "guis/GuiThemeDownloader.h"
#include "EmulationStation.h"
#include "ThemeData.h"
#include "components/MenuComponent.h"
#include "resources/ResourceManager.h"
@ -25,6 +26,7 @@ GuiThemeDownloader::GuiThemeDownloader()
, mFetching {false}
, mLatestThemesList {false}
, mAttemptedFetch {false}
, mHasThemeUpdates {false}
, mFullscreenViewing {false}
, mFullscreenViewerIndex {0}
{
@ -173,6 +175,11 @@ GuiThemeDownloader::~GuiThemeDownloader()
mFetchThread.join();
git_libgit2_shutdown();
if (mHasThemeUpdates) {
LOG(LogInfo) << "GuiThemeDownloader: There are updates, repopulating theme sets";
ThemeData::populateThemeSets();
}
}
bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName,
@ -240,6 +247,8 @@ bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName,
git_reference_free(oldTargetRef);
}
git_buf_dispose(&buffer);
if (repositoryName != "themes-list")
mHasThemeUpdates = true;
}
errorCode = git_revparse_single(&object, repository, "FETCH_HEAD");
@ -266,6 +275,8 @@ bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName,
errorCode = git_revparse_single(&objectHead, repository, "HEAD");
errorCode = git_reset(repository, objectHead, GIT_RESET_HARD, nullptr);
git_object_free(objectHead);
if (repositoryName != "themes-list")
mHasThemeUpdates = true;
}
else {
LOG(LogWarning) << "Repository \"" << repositoryName
@ -282,6 +293,8 @@ bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName,
LOG(LogInfo) << "Repository \"" << repositoryName
<< "\" contains local changes, performing hard reset";
resetRepository(repository);
if (repositoryName != "themes-list")
mHasThemeUpdates = true;
}
if (mergeAnalysis & GIT_MERGE_ANALYSIS_UP_TO_DATE) {
@ -344,8 +357,10 @@ bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName,
return true;
}
if (repositoryName != "themes-list")
if (repositoryName != "themes-list") {
mMessage = "THEME HAS BEEN UPDATED";
mHasThemeUpdates = true;
}
mPromise.set_value(true);
return false;
@ -1087,6 +1102,9 @@ bool GuiThemeDownloader::cloneRepository(const std::string& repositoryName, cons
return true;
}
if (repositoryName != "themes-list")
mHasThemeUpdates = true;
mLatestThemesList = true;
mPromise.set_value(true);
return false;

View file

@ -136,6 +136,7 @@ private:
std::atomic<bool> mFetching;
std::atomic<bool> mLatestThemesList;
bool mAttemptedFetch;
bool mHasThemeUpdates;
static inline std::atomic<float> mReceivedObjectsProgress {0.0f};
static inline std::atomic<float> mResolveDeltaProgress {0.0f};
std::vector<ThemeEntry> mThemeSets;

View file

@ -768,8 +768,7 @@ const ThemeData::ThemeElement* ThemeData::getElement(const std::string& view,
void ThemeData::populateThemeSets()
{
assert(sThemeSets.empty());
sThemeSets.clear();
LOG(LogInfo) << "Checking for available theme sets...";
// Check for themes first under the home directory, then under the data installation