Merge pull request #7499 from JosJuice/purge-game-list-cache
DolphinQt: Implement "Purge Game List Cache"
This commit is contained in:
commit
98b0efb6de
|
@ -89,6 +89,11 @@ GameList::GameList(QWidget* parent) : QStackedWidget(parent)
|
||||||
[this] { m_grid_proxy->invalidate(); });
|
[this] { m_grid_proxy->invalidate(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameList::PurgeCache()
|
||||||
|
{
|
||||||
|
m_model->PurgeCache();
|
||||||
|
}
|
||||||
|
|
||||||
void GameList::MakeListView()
|
void GameList::MakeListView()
|
||||||
{
|
{
|
||||||
m_list = new QTableView(this);
|
m_list = new QTableView(this);
|
||||||
|
|
|
@ -41,6 +41,8 @@ public:
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent* event) override;
|
void resizeEvent(QResizeEvent* event) override;
|
||||||
|
|
||||||
|
void PurgeCache();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void GameSelected();
|
void GameSelected();
|
||||||
void NetPlayHost(const QString& game_id);
|
void NetPlayHost(const QString& game_id);
|
||||||
|
|
|
@ -362,3 +362,8 @@ void GameListModel::DeleteTag(const QString& name)
|
||||||
|
|
||||||
Settings::GetQSettings().setValue(QStringLiteral("gamelist/tags"), m_tag_list);
|
Settings::GetQSettings().setValue(QStringLiteral("gamelist/tags"), m_tag_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameListModel::PurgeCache()
|
||||||
|
{
|
||||||
|
m_tracker.PurgeCache();
|
||||||
|
}
|
||||||
|
|
|
@ -75,6 +75,8 @@ public:
|
||||||
void NewTag(const QString& name);
|
void NewTag(const QString& name);
|
||||||
void DeleteTag(const QString& name);
|
void DeleteTag(const QString& name);
|
||||||
|
|
||||||
|
void PurgeCache();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Index in m_games, or -1 if it isn't found
|
// Index in m_games, or -1 if it isn't found
|
||||||
int FindGame(const std::string& path) const;
|
int FindGame(const std::string& path) const;
|
||||||
|
|
|
@ -75,6 +75,9 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
|
||||||
});
|
});
|
||||||
QueueOnObject(this, [this] { Settings::Instance().NotifyMetadataRefreshComplete(); });
|
QueueOnObject(this, [this] { Settings::Instance().NotifyMetadataRefreshComplete(); });
|
||||||
break;
|
break;
|
||||||
|
case CommandType::PurgeCache:
|
||||||
|
m_cache.Clear(UICommon::GameFileCache::DeleteOnDisk::Yes);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -322,3 +325,9 @@ void GameTracker::LoadGame(const QString& path)
|
||||||
m_cache.Save();
|
m_cache.Save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameTracker::PurgeCache()
|
||||||
|
{
|
||||||
|
m_load_thread.EmplaceItem(Command{CommandType::PurgeCache, {}});
|
||||||
|
RefreshAll();
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ public:
|
||||||
void AddDirectory(const QString& dir);
|
void AddDirectory(const QString& dir);
|
||||||
void RemoveDirectory(const QString& dir);
|
void RemoveDirectory(const QString& dir);
|
||||||
void RefreshAll();
|
void RefreshAll();
|
||||||
|
void PurgeCache();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void GameLoaded(const std::shared_ptr<const UICommon::GameFile>& game);
|
void GameLoaded(const std::shared_ptr<const UICommon::GameFile>& game);
|
||||||
|
@ -70,7 +71,8 @@ private:
|
||||||
RemoveDirectory,
|
RemoveDirectory,
|
||||||
UpdateDirectory,
|
UpdateDirectory,
|
||||||
UpdateFile,
|
UpdateFile,
|
||||||
UpdateMetadata
|
UpdateMetadata,
|
||||||
|
PurgeCache
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Command
|
struct Command
|
||||||
|
|
|
@ -429,6 +429,7 @@ void MainWindow::ConnectMenuBar()
|
||||||
// View
|
// View
|
||||||
connect(m_menu_bar, &MenuBar::ShowList, m_game_list, &GameList::SetListView);
|
connect(m_menu_bar, &MenuBar::ShowList, m_game_list, &GameList::SetListView);
|
||||||
connect(m_menu_bar, &MenuBar::ShowGrid, m_game_list, &GameList::SetGridView);
|
connect(m_menu_bar, &MenuBar::ShowGrid, m_game_list, &GameList::SetGridView);
|
||||||
|
connect(m_menu_bar, &MenuBar::PurgeGameListCache, m_game_list, &GameList::PurgeCache);
|
||||||
connect(m_menu_bar, &MenuBar::ToggleSearch, m_search_bar, &SearchBar::Toggle);
|
connect(m_menu_bar, &MenuBar::ToggleSearch, m_search_bar, &SearchBar::Toggle);
|
||||||
|
|
||||||
connect(m_menu_bar, &MenuBar::ColumnVisibilityToggled, m_game_list,
|
connect(m_menu_bar, &MenuBar::ColumnVisibilityToggled, m_game_list,
|
||||||
|
|
|
@ -457,6 +457,8 @@ void MenuBar::AddViewMenu()
|
||||||
AddShowPlatformsMenu(view_menu);
|
AddShowPlatformsMenu(view_menu);
|
||||||
AddShowRegionsMenu(view_menu);
|
AddShowRegionsMenu(view_menu);
|
||||||
|
|
||||||
|
view_menu->addSeparator();
|
||||||
|
view_menu->addAction(tr("Purge Game List Cache"), this, &MenuBar::PurgeGameListCache);
|
||||||
view_menu->addSeparator();
|
view_menu->addSeparator();
|
||||||
view_menu->addAction(tr("Search"), this, &MenuBar::ToggleSearch,
|
view_menu->addAction(tr("Search"), this, &MenuBar::ToggleSearch,
|
||||||
QKeySequence(QStringLiteral("Ctrl+F")));
|
QKeySequence(QStringLiteral("Ctrl+F")));
|
||||||
|
|
|
@ -90,6 +90,7 @@ signals:
|
||||||
// View
|
// View
|
||||||
void ShowList();
|
void ShowList();
|
||||||
void ShowGrid();
|
void ShowGrid();
|
||||||
|
void PurgeGameListCache();
|
||||||
void ToggleSearch();
|
void ToggleSearch();
|
||||||
void ColumnVisibilityToggled(const QString& row, bool visible);
|
void ColumnVisibilityToggled(const QString& row, bool visible);
|
||||||
void GameListPlatformVisibilityToggled(const QString& row, bool visible);
|
void GameListPlatformVisibilityToggled(const QString& row, bool visible);
|
||||||
|
|
|
@ -58,8 +58,11 @@ size_t GameFileCache::GetSize() const
|
||||||
return m_cached_files.size();
|
return m_cached_files.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameFileCache::Clear()
|
void GameFileCache::Clear(DeleteOnDisk delete_on_disk)
|
||||||
{
|
{
|
||||||
|
if (delete_on_disk != DeleteOnDisk::No)
|
||||||
|
File::Delete(m_path);
|
||||||
|
|
||||||
m_cached_files.clear();
|
m_cached_files.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,13 +24,19 @@ std::vector<std::string> FindAllGamePaths(const std::vector<std::string>& direct
|
||||||
class GameFileCache
|
class GameFileCache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum class DeleteOnDisk
|
||||||
|
{
|
||||||
|
No = 0,
|
||||||
|
Yes = 1,
|
||||||
|
};
|
||||||
|
|
||||||
GameFileCache(); // Uses the default path
|
GameFileCache(); // Uses the default path
|
||||||
explicit GameFileCache(std::string path);
|
explicit GameFileCache(std::string path);
|
||||||
|
|
||||||
void ForEach(std::function<void(const std::shared_ptr<const GameFile>&)> f) const;
|
void ForEach(std::function<void(const std::shared_ptr<const GameFile>&)> f) const;
|
||||||
|
|
||||||
size_t GetSize() const;
|
size_t GetSize() const;
|
||||||
void Clear();
|
void Clear(DeleteOnDisk delete_on_disk);
|
||||||
|
|
||||||
// Returns nullptr if the file is invalid.
|
// Returns nullptr if the file is invalid.
|
||||||
std::shared_ptr<const GameFile> AddOrGet(const std::string& path, bool* cache_changed);
|
std::shared_ptr<const GameFile> AddOrGet(const std::string& path, bool* cache_changed);
|
||||||
|
|
Loading…
Reference in New Issue