mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-10 17:55:47 -04:00
Add initial work on Qt frontend
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
#include "bios.h"
|
||||
#include "common/cd_image.h"
|
||||
#include "common/iso_reader.h"
|
||||
#include "settings.h"
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cctype>
|
||||
@ -194,11 +195,6 @@ std::optional<ConsoleRegion> GameList::GetRegionForPath(const char* image_path)
|
||||
return GetRegionForImage(cdi.get());
|
||||
}
|
||||
|
||||
void GameList::AddDirectory(const char* path, bool recursive)
|
||||
{
|
||||
ScanDirectory(path, recursive);
|
||||
}
|
||||
|
||||
bool GameList::IsExeFileName(const char* path)
|
||||
{
|
||||
const char* extension = std::strrchr(path, '.');
|
||||
@ -404,6 +400,40 @@ private:
|
||||
GameList::DatabaseMap& m_database;
|
||||
};
|
||||
|
||||
void GameList::AddDirectory(std::string path, bool recursive)
|
||||
{
|
||||
auto iter = std::find_if(m_search_directories.begin(), m_search_directories.end(),
|
||||
[&path](const DirectoryEntry& de) { return de.path == path; });
|
||||
if (iter != m_search_directories.end())
|
||||
{
|
||||
iter->recursive = recursive;
|
||||
return;
|
||||
}
|
||||
|
||||
m_search_directories.push_back({path, recursive});
|
||||
}
|
||||
|
||||
void GameList::SetDirectoriesFromSettings(SettingsInterface& si)
|
||||
{
|
||||
m_search_directories.clear();
|
||||
|
||||
std::vector<std::string> dirs = si.GetStringList("GameList", "Paths");
|
||||
for (std::string& dir : dirs)
|
||||
m_search_directories.push_back({std::move(dir), false});
|
||||
|
||||
dirs = si.GetStringList("GameList", "RecursivePaths");
|
||||
for (std::string& dir : dirs)
|
||||
m_search_directories.push_back({std::move(dir), true});
|
||||
}
|
||||
|
||||
void GameList::RescanAllDirectories()
|
||||
{
|
||||
m_entries.clear();
|
||||
|
||||
for (const DirectoryEntry& de : m_search_directories)
|
||||
ScanDirectory(de.path.c_str(), de.recursive);
|
||||
}
|
||||
|
||||
bool GameList::ParseRedumpDatabase(const char* redump_dat_path)
|
||||
{
|
||||
tinyxml2::XMLDocument doc;
|
||||
@ -427,3 +457,8 @@ bool GameList::ParseRedumpDatabase(const char* redump_dat_path)
|
||||
Log_InfoPrintf("Loaded %zu entries from Redump.org database '%s'", m_database.size(), redump_dat_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
void GameList::ClearDatabase()
|
||||
{
|
||||
m_database.clear();
|
||||
}
|
||||
|
@ -8,6 +8,8 @@
|
||||
|
||||
class CDImage;
|
||||
|
||||
class SettingsInterface;
|
||||
|
||||
class GameList
|
||||
{
|
||||
public:
|
||||
@ -54,18 +56,28 @@ public:
|
||||
const EntryList& GetEntries() const { return m_entries; }
|
||||
const u32 GetEntryCount() const { return static_cast<u32>(m_entries.size()); }
|
||||
|
||||
void AddDirectory(const char* path, bool recursive);
|
||||
void AddDirectory(std::string path, bool recursive);
|
||||
void SetDirectoriesFromSettings(SettingsInterface& si);
|
||||
void RescanAllDirectories();
|
||||
|
||||
bool ParseRedumpDatabase(const char* redump_dat_path);
|
||||
void ClearDatabase();
|
||||
|
||||
private:
|
||||
struct DirectoryEntry
|
||||
{
|
||||
std::string path;
|
||||
bool recursive;
|
||||
};
|
||||
|
||||
static bool IsExeFileName(const char* path);
|
||||
static bool GetExeListEntry(const char* path, GameListEntry* entry);
|
||||
|
||||
bool GetGameListEntry(const char* path, GameListEntry* entry);
|
||||
|
||||
void ScanDirectory(const char* path, bool recursive);
|
||||
|
||||
DatabaseMap m_database;
|
||||
EntryList m_entries;
|
||||
|
||||
std::vector<DirectoryEntry> m_search_directories;
|
||||
};
|
||||
|
Reference in New Issue
Block a user