Fixed Discord Rich Presence not working on games that are on MLC (#383)

This commit is contained in:
MythicalPlayz 2022-10-18 17:08:09 +02:00 committed by GitHub
parent 15b3a3f77d
commit 271a4e4719
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 3 additions and 79 deletions

View File

@ -704,9 +704,8 @@ namespace CafeSystem
std::string GetForegroundTitleName() std::string GetForegroundTitleName()
{ {
if (sLaunchModeIsStandalone) if (sLaunchModeIsStandalone)
return "Missing meta data"; return "Unknown Game";
// todo - use language based on Cemu console language return sGameInfo_ForegroundTitle.GetBase().GetMetaInfo()->GetShortName(GetConfig().console_language);
return sGameInfo_ForegroundTitle.GetBase().GetMetaInfo()->GetShortName(CafeConsoleLanguage::EN);
} }
std::string GetForegroundTitleArgStr() std::string GetForegroundTitleArgStr()

View File

@ -543,8 +543,7 @@ bool MainWindow::FileLoad(std::wstring fileName, wxLaunchGameEvent::INITIATED_BY
m_game_list = nullptr; m_game_list = nullptr;
} }
const auto game_name = GetGameName(fileName); m_launched_game_name = CafeSystem::GetForegroundTitleName();
m_launched_game_name = boost::nowide::narrow(game_name);
#ifdef ENABLE_DISCORD_RPC #ifdef ENABLE_DISCORD_RPC
if (m_discord) if (m_discord)
m_discord->UpdatePresence(DiscordPresence::Playing, m_launched_game_name); m_discord->UpdatePresence(DiscordPresence::Playing, m_launched_game_name);
@ -1496,79 +1495,6 @@ void MainWindow::DestroyCanvas()
} }
} }
std::wstring MainWindow::GetGameName(std::wstring_view file_name)
{
fs::path path{ std::wstring{file_name} };
const auto extension = path.extension();
if (extension == ".wud" || extension == ".wux")
{
std::unique_ptr<FSTVolume> volume(FSTVolume::OpenFromDiscImage(path));
if (!volume)
return path.filename().generic_wstring();
bool foundFile = false;
std::vector<uint8> metaContent = volume->ExtractFile("meta/meta.xml", &foundFile);
if (!foundFile)
return path.filename().generic_wstring();
namespace xml = tinyxml2;
xml::XMLDocument doc;
doc.Parse((const char*)metaContent.data(), metaContent.size());
// parse meta.xml
xml::XMLElement* root = doc.FirstChildElement("menu");
if (root)
{
xml::XMLElement* element = root->FirstChildElement("longname_en");
if (element)
{
auto game_name = boost::nowide::widen(element->GetText());
const auto it = game_name.find(L'\n');
if (it != std::wstring::npos)
game_name.replace(it, 1, L" - ");
return game_name;
}
}
return path.filename().generic_wstring();
}
else if (extension == ".rpx")
{
if (path.has_parent_path() && path.parent_path().has_parent_path())
{
auto meta_xml = path.parent_path().parent_path() / "meta/meta.xml";
auto metaXmlData = FileStream::LoadIntoMemory(meta_xml);
if (metaXmlData)
{
namespace xml = tinyxml2;
xml::XMLDocument doc;
if (doc.Parse((const char*)metaXmlData->data(), metaXmlData->size()) == xml::XML_SUCCESS)
{
xml::XMLElement* root = doc.FirstChildElement("menu");
if (root)
{
xml::XMLElement* element = root->FirstChildElement("longname_en");
if (element)
{
auto game_name = boost::nowide::widen(element->GetText());
const auto it = game_name.find(L'\n');
if (it != std::wstring::npos)
game_name.replace(it, 1, L" - ");
return game_name;
}
}
}
}
}
}
return path.filename().generic_wstring();
}
void MainWindow::OnSizeEvent(wxSizeEvent& event) void MainWindow::OnSizeEvent(wxSizeEvent& event)
{ {
if (!IsMaximized() && !gui_isFullScreen()) if (!IsMaximized() && !gui_isFullScreen())

View File

@ -130,7 +130,6 @@ public:
void CreateCanvas(); void CreateCanvas();
void DestroyCanvas(); void DestroyCanvas();
std::wstring GetGameName(std::wstring_view file_name);
static void ShowCursor(bool state); static void ShowCursor(bool state);
uintptr_t GetRenderCanvasHWND(); uintptr_t GetRenderCanvasHWND();