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(); });
|
||||
}
|
||||
|
||||
void GameList::PurgeCache()
|
||||
{
|
||||
m_model->PurgeCache();
|
||||
}
|
||||
|
||||
void GameList::MakeListView()
|
||||
{
|
||||
m_list = new QTableView(this);
|
||||
|
|
|
@ -41,6 +41,8 @@ public:
|
|||
|
||||
void resizeEvent(QResizeEvent* event) override;
|
||||
|
||||
void PurgeCache();
|
||||
|
||||
signals:
|
||||
void GameSelected();
|
||||
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);
|
||||
}
|
||||
|
||||
void GameListModel::PurgeCache()
|
||||
{
|
||||
m_tracker.PurgeCache();
|
||||
}
|
||||
|
|
|
@ -75,6 +75,8 @@ public:
|
|||
void NewTag(const QString& name);
|
||||
void DeleteTag(const QString& name);
|
||||
|
||||
void PurgeCache();
|
||||
|
||||
private:
|
||||
// Index in m_games, or -1 if it isn't found
|
||||
int FindGame(const std::string& path) const;
|
||||
|
|
|
@ -75,6 +75,9 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
|
|||
});
|
||||
QueueOnObject(this, [this] { Settings::Instance().NotifyMetadataRefreshComplete(); });
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
void GameTracker::PurgeCache()
|
||||
{
|
||||
m_load_thread.EmplaceItem(Command{CommandType::PurgeCache, {}});
|
||||
RefreshAll();
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
void AddDirectory(const QString& dir);
|
||||
void RemoveDirectory(const QString& dir);
|
||||
void RefreshAll();
|
||||
void PurgeCache();
|
||||
|
||||
signals:
|
||||
void GameLoaded(const std::shared_ptr<const UICommon::GameFile>& game);
|
||||
|
@ -70,7 +71,8 @@ private:
|
|||
RemoveDirectory,
|
||||
UpdateDirectory,
|
||||
UpdateFile,
|
||||
UpdateMetadata
|
||||
UpdateMetadata,
|
||||
PurgeCache
|
||||
};
|
||||
|
||||
struct Command
|
||||
|
|
|
@ -429,6 +429,7 @@ void MainWindow::ConnectMenuBar()
|
|||
// View
|
||||
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::PurgeGameListCache, m_game_list, &GameList::PurgeCache);
|
||||
connect(m_menu_bar, &MenuBar::ToggleSearch, m_search_bar, &SearchBar::Toggle);
|
||||
|
||||
connect(m_menu_bar, &MenuBar::ColumnVisibilityToggled, m_game_list,
|
||||
|
|
|
@ -457,6 +457,8 @@ void MenuBar::AddViewMenu()
|
|||
AddShowPlatformsMenu(view_menu);
|
||||
AddShowRegionsMenu(view_menu);
|
||||
|
||||
view_menu->addSeparator();
|
||||
view_menu->addAction(tr("Purge Game List Cache"), this, &MenuBar::PurgeGameListCache);
|
||||
view_menu->addSeparator();
|
||||
view_menu->addAction(tr("Search"), this, &MenuBar::ToggleSearch,
|
||||
QKeySequence(QStringLiteral("Ctrl+F")));
|
||||
|
|
|
@ -90,6 +90,7 @@ signals:
|
|||
// View
|
||||
void ShowList();
|
||||
void ShowGrid();
|
||||
void PurgeGameListCache();
|
||||
void ToggleSearch();
|
||||
void ColumnVisibilityToggled(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();
|
||||
}
|
||||
|
||||
void GameFileCache::Clear()
|
||||
void GameFileCache::Clear(DeleteOnDisk delete_on_disk)
|
||||
{
|
||||
if (delete_on_disk != DeleteOnDisk::No)
|
||||
File::Delete(m_path);
|
||||
|
||||
m_cached_files.clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -24,13 +24,19 @@ std::vector<std::string> FindAllGamePaths(const std::vector<std::string>& direct
|
|||
class GameFileCache
|
||||
{
|
||||
public:
|
||||
enum class DeleteOnDisk
|
||||
{
|
||||
No = 0,
|
||||
Yes = 1,
|
||||
};
|
||||
|
||||
GameFileCache(); // Uses the default path
|
||||
explicit GameFileCache(std::string path);
|
||||
|
||||
void ForEach(std::function<void(const std::shared_ptr<const GameFile>&)> f) const;
|
||||
|
||||
size_t GetSize() const;
|
||||
void Clear();
|
||||
void Clear(DeleteOnDisk delete_on_disk);
|
||||
|
||||
// Returns nullptr if the file is invalid.
|
||||
std::shared_ptr<const GameFile> AddOrGet(const std::string& path, bool* cache_changed);
|
||||
|
|
Loading…
Reference in New Issue