Permalink
Browse files

DolphinQt: Implement "Purge Game List Cache"

This is a missing feature from DolphinWX.
  • Loading branch information...
JosJuice committed Oct 14, 2018
1 parent 8d1e996 commit 8bbec312953277fa7970fd3adf88976eb6515dd7
@@ -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 @@ class GameList final : public QStackedWidget
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 @@ class GameListModel final : public QAbstractTableModel
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 @@ class GameTracker final : public QFileSystemWatcher
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 @@ class GameTracker final : public QFileSystemWatcher
RemoveDirectory,
UpdateDirectory,
UpdateFile,
UpdateMetadata
UpdateMetadata,
PurgeCache
};
struct Command
@@ -385,6 +385,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 @@ class MenuBar final : public QMenuBar
// 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);

0 comments on commit 8bbec31

Please sign in to comment.