Merge pull request #7499 from JosJuice/purge-game-list-cache

DolphinQt: Implement "Purge Game List Cache"
This commit is contained in:
Pierre Bourdon 2018-10-28 17:00:04 +01:00 committed by GitHub
commit 98b0efb6de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 41 additions and 3 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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();
}

View File

@ -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;

View File

@ -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();
}

View File

@ -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

View File

@ -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,

View File

@ -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")));

View File

@ -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);

View File

@ -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();
} }

View File

@ -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);