// Copyright 2017 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include #include #include "Common/CommonTypes.h" class PointerWrap; namespace UICommon { class GameFile; std::vector FindAllGamePaths(const std::vector& directories_to_scan, bool recursive_scan); class GameFileCache { public: enum class DeleteOnDisk { No = 0, Yes = 1, }; GameFileCache(); void ForEach(std::function&)> f) const; size_t GetSize() const; void Clear(DeleteOnDisk delete_on_disk); // Returns nullptr if the file is invalid. std::shared_ptr AddOrGet(const std::string& path, bool* cache_changed); // These functions return true if the call modified the cache. bool Update(const std::vector& all_game_paths, std::function&)> game_added_to_cache = {}, std::function game_removed_from_cache = {}, const std::atomic_bool& processing_halted = false); bool UpdateAdditionalMetadata( std::function&)> game_updated = {}, const std::atomic_bool& processing_halted = false); bool Load(); bool Save(); private: bool UpdateAdditionalMetadata(std::shared_ptr* game_file); bool SyncCacheFile(bool save); void DoState(PointerWrap* p, u64 size = 0); std::string m_path; std::vector> m_cached_files; }; } // namespace UICommon