Add initial work on Qt frontend

This commit is contained in:
Connor McLaughlin
2019-12-31 16:17:17 +10:00
parent 98214a9327
commit f3e9c3ec8c
64 changed files with 3490 additions and 14 deletions

View File

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

View File

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