summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorConnor McLaughlin <stenzek@gmail.com>2019-11-08 11:22:09 +1000
committerGitHub <noreply@github.com>2019-11-08 11:22:09 +1000
commit71b098a69d813b51bde79fc5b673c50db0454aa9 (patch)
tree87c23fc03d39b9a3ae683a9a88d17f4e282683a4 /Source/Core
parent9700b1e320974989e13a73ea37697b256a997fb4 (diff)
parent68694e003938252eac35960969aa4834a66c9207 (diff)
Merge pull request #8399 from CookiePLMonster/gametracker-fixes
Qt: Game Tracker fixes
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/GameList/GameTracker.cpp26
-rw-r--r--Source/Core/DolphinQt/GameList/GameTracker.h6
-rw-r--r--Source/Core/DolphinQt/Settings.cpp5
-rw-r--r--Source/Core/DolphinQt/Settings.h2
-rw-r--r--Source/Core/DolphinQt/ToolBar.cpp14
5 files changed, 42 insertions, 11 deletions
diff --git a/Source/Core/DolphinQt/GameList/GameTracker.cpp b/Source/Core/DolphinQt/GameList/GameTracker.cpp
index 765e98a710..4caf643dd5 100644
--- a/Source/Core/DolphinQt/GameList/GameTracker.cpp
+++ b/Source/Core/DolphinQt/GameList/GameTracker.cpp
@@ -34,7 +34,7 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
connect(this, &QFileSystemWatcher::directoryChanged, this, &GameTracker::UpdateDirectory);
connect(this, &QFileSystemWatcher::fileChanged, this, &GameTracker::UpdateFile);
- connect(&Settings::Instance(), &Settings::AutoRefreshToggled, this, [] {
+ connect(&Settings::Instance(), &Settings::AutoRefreshToggled, [] {
const auto paths = Settings::Instance().GetPaths();
for (const auto& path : paths)
@@ -44,7 +44,7 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
}
});
- connect(&Settings::Instance(), &Settings::MetadataRefreshRequested, this, [this] {
+ connect(&Settings::Instance(), &Settings::MetadataRefreshRequested, [this] {
m_load_thread.EmplaceItem(Command{CommandType::UpdateMetadata, {}});
});
@@ -56,6 +56,7 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
break;
case CommandType::Start:
StartInternal();
+ break;
case CommandType::AddDirectory:
AddDirectoryInternal(command.path);
break;
@@ -78,6 +79,20 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
case CommandType::PurgeCache:
m_cache.Clear(UICommon::GameFileCache::DeleteOnDisk::Yes);
break;
+ case CommandType::BeginRefresh:
+ if (m_busy_count++ == 0)
+ {
+ for (auto& file : m_tracked_files.keys())
+ emit GameRemoved(file.toStdString());
+ m_tracked_files.clear();
+ }
+ break;
+ case CommandType::EndRefresh:
+ if (--m_busy_count == 0)
+ {
+ QueueOnObject(this, [] { Settings::Instance().NotifyRefreshGameListComplete(); });
+ }
+ break;
}
});
@@ -176,16 +191,15 @@ void GameTracker::RemoveDirectory(const QString& dir)
void GameTracker::RefreshAll()
{
- for (auto& file : m_tracked_files.keys())
- emit GameRemoved(file.toStdString());
-
- m_tracked_files.clear();
+ m_load_thread.EmplaceItem(Command{CommandType::BeginRefresh});
for (const QString& dir : Settings::Instance().GetPaths())
{
m_load_thread.EmplaceItem(Command{CommandType::RemoveDirectory, dir});
m_load_thread.EmplaceItem(Command{CommandType::AddDirectory, dir});
}
+
+ m_load_thread.EmplaceItem(Command{CommandType::EndRefresh});
}
void GameTracker::UpdateDirectory(const QString& dir)
diff --git a/Source/Core/DolphinQt/GameList/GameTracker.h b/Source/Core/DolphinQt/GameList/GameTracker.h
index 79a2678d33..93720614b3 100644
--- a/Source/Core/DolphinQt/GameList/GameTracker.h
+++ b/Source/Core/DolphinQt/GameList/GameTracker.h
@@ -72,7 +72,9 @@ private:
UpdateDirectory,
UpdateFile,
UpdateMetadata,
- PurgeCache
+ PurgeCache,
+ BeginRefresh,
+ EndRefresh,
};
struct Command
@@ -90,6 +92,8 @@ private:
Common::Event m_initial_games_emitted_event;
bool m_initial_games_emitted = false;
bool m_started = false;
+ // Count of currently running refresh jobs
+ u32 m_busy_count = 0;
};
Q_DECLARE_METATYPE(std::shared_ptr<const UICommon::GameFile>)
diff --git a/Source/Core/DolphinQt/Settings.cpp b/Source/Core/DolphinQt/Settings.cpp
index 99322db7fe..8dc68cd742 100644
--- a/Source/Core/DolphinQt/Settings.cpp
+++ b/Source/Core/DolphinQt/Settings.cpp
@@ -141,6 +141,11 @@ void Settings::RefreshGameList()
emit GameListRefreshRequested();
}
+void Settings::NotifyRefreshGameListComplete()
+{
+ emit GameListRefreshCompleted();
+}
+
void Settings::RefreshMetadata()
{
emit MetadataRefreshRequested();
diff --git a/Source/Core/DolphinQt/Settings.h b/Source/Core/DolphinQt/Settings.h
index f16ce2a474..7997ca0ec3 100644
--- a/Source/Core/DolphinQt/Settings.h
+++ b/Source/Core/DolphinQt/Settings.h
@@ -75,6 +75,7 @@ public:
QString GetDefaultGame() const;
void SetDefaultGame(QString path);
void RefreshGameList();
+ void NotifyRefreshGameListComplete();
void RefreshMetadata();
void NotifyMetadataRefreshComplete();
void ReloadTitleDB();
@@ -150,6 +151,7 @@ signals:
void PathRemoved(const QString&);
void DefaultGameChanged(const QString&);
void GameListRefreshRequested();
+ void GameListRefreshCompleted();
void TitleDBReloadRequested();
void MetadataRefreshRequested();
void MetadataRefreshCompleted();
diff --git a/Source/Core/DolphinQt/ToolBar.cpp b/Source/Core/DolphinQt/ToolBar.cpp
index d6ba3e9c96..80ce2d755c 100644
--- a/Source/Core/DolphinQt/ToolBar.cpp
+++ b/Source/Core/DolphinQt/ToolBar.cpp
@@ -32,10 +32,10 @@ ToolBar::ToolBar(QWidget* parent) : QToolBar(parent)
connect(&Settings::Instance(), &Settings::ThemeChanged, this, &ToolBar::UpdateIcons);
UpdateIcons();
- connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
+ connect(&Settings::Instance(), &Settings::EmulationStateChanged,
[this](Core::State state) { OnEmulationStateChanged(state); });
- connect(Host::GetInstance(), &Host::UpdateDisasmDialog, this,
+ connect(Host::GetInstance(), &Host::UpdateDisasmDialog,
[this] { OnEmulationStateChanged(Core::GetState()); });
connect(&Settings::Instance(), &Settings::DebugModeToggled, this, &ToolBar::OnDebugModeToggled);
@@ -43,9 +43,12 @@ ToolBar::ToolBar(QWidget* parent) : QToolBar(parent)
connect(&Settings::Instance(), &Settings::ToolBarVisibilityChanged, this, &ToolBar::setVisible);
connect(this, &ToolBar::visibilityChanged, &Settings::Instance(), &Settings::SetToolBarVisible);
- connect(&Settings::Instance(), &Settings::WidgetLockChanged, this,
+ connect(&Settings::Instance(), &Settings::WidgetLockChanged,
[this](bool locked) { setMovable(!locked); });
+ connect(&Settings::Instance(), &Settings::GameListRefreshCompleted,
+ [this] { m_refresh_action->setEnabled(true); });
+
OnEmulationStateChanged(Core::GetState());
OnDebugModeToggled(Settings::Instance().IsDebugModeEnabled());
}
@@ -109,7 +112,10 @@ void ToolBar::MakeActions()
m_set_pc_action = addAction(tr("Set PC"), this, &ToolBar::SetPCPressed);
m_open_action = addAction(tr("Open"), this, &ToolBar::OpenPressed);
- m_refresh_action = addAction(tr("Refresh"), this, &ToolBar::RefreshPressed);
+ m_refresh_action = addAction(tr("Refresh"), [this] {
+ m_refresh_action->setEnabled(false);
+ emit RefreshPressed();
+ });
addSeparator();