mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 16:19:28 +01:00
Merge pull request #9461 from cbartondock/master
Working Game IDs for Elf/Dol files
This commit is contained in:
commit
ddacbf83f6
@ -4,11 +4,14 @@
|
|||||||
|
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
#include <variant>
|
#include <variant>
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
@ -653,6 +656,11 @@ void SConfig::SetRunningGameMetadata(const IOS::ES::TMDReader& tmd, DiscIO::Plat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SConfig::SetRunningGameMetadata(const std::string& game_id)
|
||||||
|
{
|
||||||
|
SetRunningGameMetadata(game_id, "", 0, 0, DiscIO::Region::Unknown);
|
||||||
|
}
|
||||||
|
|
||||||
void SConfig::SetRunningGameMetadata(const std::string& game_id, const std::string& gametdb_id,
|
void SConfig::SetRunningGameMetadata(const std::string& game_id, const std::string& gametdb_id,
|
||||||
u64 title_id, u16 revision, DiscIO::Region region)
|
u64 title_id, u16 revision, DiscIO::Region region)
|
||||||
{
|
{
|
||||||
@ -770,6 +778,15 @@ bool SConfig::IsUSBDeviceWhitelisted(const std::pair<u16, u16> vid_pid) const
|
|||||||
return m_usb_passthrough_devices.find(vid_pid) != m_usb_passthrough_devices.end();
|
return m_usb_passthrough_devices.find(vid_pid) != m_usb_passthrough_devices.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Static method to make a simple game ID for elf/dol files
|
||||||
|
std::string SConfig::MakeGameID(std::string_view file_name)
|
||||||
|
{
|
||||||
|
size_t lastdot = file_name.find_last_of(".");
|
||||||
|
if (lastdot == std::string::npos)
|
||||||
|
return "ID-" + std::string(file_name);
|
||||||
|
return "ID-" + std::string(file_name.substr(0, lastdot));
|
||||||
|
}
|
||||||
|
|
||||||
// The reason we need this function is because some memory card code
|
// The reason we need this function is because some memory card code
|
||||||
// expects to get a non-NTSC-K region even if we're emulating an NTSC-K Wii.
|
// expects to get a non-NTSC-K region even if we're emulating an NTSC-K Wii.
|
||||||
DiscIO::Region SConfig::ToGameCubeRegion(DiscIO::Region region)
|
DiscIO::Region SConfig::ToGameCubeRegion(DiscIO::Region region)
|
||||||
@ -840,6 +857,13 @@ struct SetGameMetadata
|
|||||||
// Strip the .elf/.dol file extension and directories before the name
|
// Strip the .elf/.dol file extension and directories before the name
|
||||||
SplitPath(executable.path, nullptr, &config->m_debugger_game_id, nullptr);
|
SplitPath(executable.path, nullptr, &config->m_debugger_game_id, nullptr);
|
||||||
|
|
||||||
|
// Set DOL/ELF game ID appropriately
|
||||||
|
std::string executable_path = executable.path;
|
||||||
|
constexpr char BACKSLASH = '\\';
|
||||||
|
constexpr char FORWARDSLASH = '/';
|
||||||
|
std::replace(executable_path.begin(), executable_path.end(), BACKSLASH, FORWARDSLASH);
|
||||||
|
config->SetRunningGameMetadata(SConfig::MakeGameID(PathToFileName(executable_path)));
|
||||||
|
|
||||||
Host_TitleChanged();
|
Host_TitleChanged();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <optional>
|
#include <optional>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -195,8 +196,9 @@ struct SConfig
|
|||||||
void ResetRunningGameMetadata();
|
void ResetRunningGameMetadata();
|
||||||
void SetRunningGameMetadata(const DiscIO::Volume& volume, const DiscIO::Partition& partition);
|
void SetRunningGameMetadata(const DiscIO::Volume& volume, const DiscIO::Partition& partition);
|
||||||
void SetRunningGameMetadata(const IOS::ES::TMDReader& tmd, DiscIO::Platform platform);
|
void SetRunningGameMetadata(const IOS::ES::TMDReader& tmd, DiscIO::Platform platform);
|
||||||
|
void SetRunningGameMetadata(const std::string& game_id);
|
||||||
void LoadDefaults();
|
void LoadDefaults();
|
||||||
|
static std::string MakeGameID(std::string_view file_name);
|
||||||
// Replaces NTSC-K with some other region, and doesn't replace non-NTSC-K regions
|
// Replaces NTSC-K with some other region, and doesn't replace non-NTSC-K regions
|
||||||
static DiscIO::Region ToGameCubeRegion(DiscIO::Region region);
|
static DiscIO::Region ToGameCubeRegion(DiscIO::Region region);
|
||||||
// The region argument must be valid for GameCube (i.e. must not be NTSC-K)
|
// The region argument must be valid for GameCube (i.e. must not be NTSC-K)
|
||||||
|
@ -318,15 +318,14 @@ void GameList::ShowContextMenu(const QPoint&)
|
|||||||
{
|
{
|
||||||
const auto game = GetSelectedGame();
|
const auto game = GetSelectedGame();
|
||||||
DiscIO::Platform platform = game->GetPlatform();
|
DiscIO::Platform platform = game->GetPlatform();
|
||||||
|
menu->addAction(tr("&Properties"), this, &GameList::OpenProperties);
|
||||||
if (platform != DiscIO::Platform::ELFOrDOL)
|
if (platform != DiscIO::Platform::ELFOrDOL)
|
||||||
{
|
{
|
||||||
menu->addAction(tr("&Properties"), this, &GameList::OpenProperties);
|
|
||||||
menu->addAction(tr("&Wiki"), this, &GameList::OpenWiki);
|
menu->addAction(tr("&Wiki"), this, &GameList::OpenWiki);
|
||||||
|
|
||||||
menu->addSeparator();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menu->addSeparator();
|
||||||
|
|
||||||
if (DiscIO::IsDisc(platform))
|
if (DiscIO::IsDisc(platform))
|
||||||
{
|
{
|
||||||
menu->addAction(tr("Set as &Default ISO"), this, &GameList::SetDefaultISO);
|
menu->addAction(tr("Set as &Default ISO"), this, &GameList::SetDefaultISO);
|
||||||
|
@ -157,6 +157,7 @@ GameFile::GameFile(std::string path) : m_file_path(std::move(path))
|
|||||||
{
|
{
|
||||||
m_valid = true;
|
m_valid = true;
|
||||||
m_file_size = m_volume_size = File::GetSize(m_file_path);
|
m_file_size = m_volume_size = File::GetSize(m_file_path);
|
||||||
|
m_game_id = SConfig::MakeGameID(m_file_name);
|
||||||
m_volume_size_is_accurate = true;
|
m_volume_size_is_accurate = true;
|
||||||
m_is_datel_disc = false;
|
m_is_datel_disc = false;
|
||||||
m_is_nkit = false;
|
m_is_nkit = false;
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
namespace UICommon
|
namespace UICommon
|
||||||
{
|
{
|
||||||
static constexpr u32 CACHE_REVISION = 19; // Last changed in PR 9135
|
static constexpr u32 CACHE_REVISION = 20; // Last changed in PR 9461
|
||||||
|
|
||||||
std::vector<std::string> FindAllGamePaths(const std::vector<std::string>& directories_to_scan,
|
std::vector<std::string> FindAllGamePaths(const std::vector<std::string>& directories_to_scan,
|
||||||
bool recursive_scan)
|
bool recursive_scan)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user