summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2018-06-06 10:52:27 +0200
committerspycrab <spycrab@users.noreply.github.com>2018-06-06 13:49:45 +0200
commitee479260d0e90eb56e5e2e66f10c528271f60687 (patch)
tree3358a30dab46a408c53cf5fd52f5342be9326707 /Source/Core
parent0dfd0cfa24c0152e4112c184aa04c380c2b7a579 (diff)
Qt: Add option to disable auto-refresh
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt2/GameList/GameTracker.cpp46
-rw-r--r--Source/Core/DolphinQt2/GameList/GameTracker.h5
-rw-r--r--Source/Core/DolphinQt2/Settings.cpp15
-rw-r--r--Source/Core/DolphinQt2/Settings.h3
-rw-r--r--Source/Core/DolphinQt2/Settings/PathPane.cpp15
5 files changed, 74 insertions, 10 deletions
diff --git a/Source/Core/DolphinQt2/GameList/GameTracker.cpp b/Source/Core/DolphinQt2/GameList/GameTracker.cpp
index b585fe88fd..71f4db70d6 100644
--- a/Source/Core/DolphinQt2/GameList/GameTracker.cpp
+++ b/Source/Core/DolphinQt2/GameList/GameTracker.cpp
@@ -30,6 +30,15 @@ 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, [this] {
+ const auto paths = Settings::Instance().GetPaths();
+
+ for (const auto& path : paths)
+ {
+ Settings::Instance().RemovePath(path);
+ Settings::Instance().AddPath(path);
+ }
+ });
m_load_thread.Reset([this](Command command) {
switch (command.type)
@@ -110,6 +119,31 @@ void GameTracker::StartInternal()
m_cache.Save();
}
+bool GameTracker::AddPath(const QString& dir)
+{
+ if (Settings::Instance().IsAutoRefreshEnabled())
+ return addPath(dir);
+
+ m_tracked_paths.push_back(dir);
+
+ return true;
+}
+
+bool GameTracker::RemovePath(const QString& dir)
+{
+ if (Settings::Instance().IsAutoRefreshEnabled())
+ return removePath(dir);
+
+ const auto index = m_tracked_paths.indexOf(dir);
+
+ if (index == -1)
+ return false;
+
+ m_tracked_paths.remove(index);
+
+ return true;
+}
+
void GameTracker::AddDirectory(const QString& dir)
{
m_load_thread.EmplaceItem(Command{CommandType::AddDirectory, dir});
@@ -140,7 +174,7 @@ void GameTracker::AddDirectoryInternal(const QString& dir)
{
if (!QFileInfo(dir).exists())
return;
- addPath(dir);
+ AddPath(dir);
UpdateDirectoryInternal(dir);
}
@@ -154,7 +188,7 @@ static std::unique_ptr<QDirIterator> GetIterator(const QString& dir)
void GameTracker::RemoveDirectoryInternal(const QString& dir)
{
- removePath(dir);
+ RemovePath(dir);
auto it = GetIterator(dir);
while (it->hasNext())
{
@@ -164,7 +198,7 @@ void GameTracker::RemoveDirectoryInternal(const QString& dir)
m_tracked_files[path].remove(dir);
if (m_tracked_files[path].empty())
{
- removePath(path);
+ RemovePath(path);
m_tracked_files.remove(path);
if (m_started)
emit GameRemoved(path.toStdString());
@@ -188,7 +222,7 @@ void GameTracker::UpdateDirectoryInternal(const QString& dir)
}
else
{
- addPath(path);
+ AddPath(path);
m_tracked_files[path] = QSet<QString>{dir};
LoadGame(path);
}
@@ -214,10 +248,10 @@ void GameTracker::UpdateFileInternal(const QString& file)
{
if (m_started)
GameRemoved(file.toStdString());
- addPath(file);
+ AddPath(file);
LoadGame(file);
}
- else if (removePath(file))
+ else if (RemovePath(file))
{
m_tracked_files.remove(file);
if (m_started)
diff --git a/Source/Core/DolphinQt2/GameList/GameTracker.h b/Source/Core/DolphinQt2/GameList/GameTracker.h
index 0504e06bab..9a1e9f353a 100644
--- a/Source/Core/DolphinQt2/GameList/GameTracker.h
+++ b/Source/Core/DolphinQt2/GameList/GameTracker.h
@@ -11,6 +11,7 @@
#include <QMap>
#include <QSet>
#include <QString>
+#include <QVector>
#include "Common/Event.h"
#include "Common/WorkQueueThread.h"
@@ -54,6 +55,9 @@ private:
QSet<QString> FindMissingFiles(const QString& dir);
void LoadGame(const QString& path);
+ bool AddPath(const QString& path);
+ bool RemovePath(const QString& path);
+
enum class CommandType
{
LoadCache,
@@ -72,6 +76,7 @@ private:
// game path -> directories that track it
QMap<QString, QSet<QString>> m_tracked_files;
+ QVector<QString> m_tracked_paths;
Common::WorkQueueThread<Command> m_load_thread;
UICommon::GameFileCache m_cache;
Common::Event m_cache_loaded_event;
diff --git a/Source/Core/DolphinQt2/Settings.cpp b/Source/Core/DolphinQt2/Settings.cpp
index b377b833ea..65097a2825 100644
--- a/Source/Core/DolphinQt2/Settings.cpp
+++ b/Source/Core/DolphinQt2/Settings.cpp
@@ -133,6 +133,21 @@ void Settings::ReloadTitleDB()
emit TitleDBReloadRequested();
}
+bool Settings::IsAutoRefreshEnabled() const
+{
+ return GetQSettings().value(QStringLiteral("gamelist/autorefresh"), true).toBool();
+}
+
+void Settings::SetAutoRefreshEnabled(bool enabled)
+{
+ if (IsAutoRefreshEnabled() == enabled)
+ return;
+
+ GetQSettings().setValue(QStringLiteral("gamelist/autorefresh"), enabled);
+
+ emit AutoRefreshToggled(enabled);
+}
+
QString Settings::GetDefaultGame() const
{
return QString::fromStdString(SConfig::GetInstance().m_strDefaultISO);
diff --git a/Source/Core/DolphinQt2/Settings.h b/Source/Core/DolphinQt2/Settings.h
index 27082ae491..9e9a8fb9a0 100644
--- a/Source/Core/DolphinQt2/Settings.h
+++ b/Source/Core/DolphinQt2/Settings.h
@@ -71,6 +71,8 @@ public:
void SetDefaultGame(QString path);
void ReloadPath(const QString& qpath);
void ReloadTitleDB();
+ bool IsAutoRefreshEnabled() const;
+ void SetAutoRefreshEnabled(bool enabled);
// Emulation
int GetStateSlot() const;
@@ -137,6 +139,7 @@ signals:
void DefaultGameChanged(const QString&);
void PathReloadRequested(const QString&);
void TitleDBReloadRequested();
+ void AutoRefreshToggled(bool enabled);
void HideCursorChanged();
void KeepWindowOnTopChanged(bool top);
void VolumeChanged(int volume);
diff --git a/Source/Core/DolphinQt2/Settings/PathPane.cpp b/Source/Core/DolphinQt2/Settings/PathPane.cpp
index 69062f6e32..ee6441d7e7 100644
--- a/Source/Core/DolphinQt2/Settings/PathPane.cpp
+++ b/Source/Core/DolphinQt2/Settings/PathPane.cpp
@@ -127,20 +127,27 @@ QGroupBox* PathPane::MakeGameFolderBox()
m_remove_path->setEnabled(false);
- auto* checkbox = new QCheckBox(tr("Search Subfolders"));
- checkbox->setChecked(SConfig::GetInstance().m_RecursiveISOFolder);
+ auto* recursive_checkbox = new QCheckBox(tr("Search Subfolders"));
+ recursive_checkbox->setChecked(SConfig::GetInstance().m_RecursiveISOFolder);
+
+ auto* auto_checkbox = new QCheckBox(tr("Check for Game List Changes in the Background"));
+ auto_checkbox->setChecked(Settings::Instance().IsAutoRefreshEnabled());
hlayout->addWidget(add);
hlayout->addWidget(m_remove_path);
vlayout->addLayout(hlayout);
- vlayout->addWidget(checkbox);
+ vlayout->addWidget(recursive_checkbox);
+ vlayout->addWidget(auto_checkbox);
- connect(checkbox, &QCheckBox::toggled, this, [](bool checked) {
+ connect(recursive_checkbox, &QCheckBox::toggled, this, [](bool checked) {
SConfig::GetInstance().m_RecursiveISOFolder = checked;
for (const auto& path : Settings::Instance().GetPaths())
Settings::Instance().ReloadPath(path);
});
+ connect(auto_checkbox, &QCheckBox::toggled, &Settings::Instance(),
+ &Settings::SetAutoRefreshEnabled);
+
connect(add, &QPushButton::pressed, this, &PathPane::Browse);
connect(m_remove_path, &QPushButton::pressed, this, &PathPane::RemovePath);