mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-16 05:42:55 +00:00
DiscordPresence: use game-specific artwork if available
Since we don't have a way (AFAIK) to dynamically collect the list of available art assets, we hardcode a list of gameids with available artwork inside Dolphin. It's not great, but I don't think it's a terrible solution either. Art has to be manually uploaded to our Discord app configuration, and we have a limit of ~150 assets, so most likely we'll limit ourselves to a small set of popular games.
This commit is contained in:
parent
0fdb6f4267
commit
4ecee3cb99
@ -13,23 +13,28 @@
|
|||||||
|
|
||||||
#ifdef USE_DISCORD_PRESENCE
|
#ifdef USE_DISCORD_PRESENCE
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cctype>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <discord-rpc/include/discord_rpc.h>
|
#include <discord-rpc/include/discord_rpc.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Discord
|
namespace Discord
|
||||||
{
|
{
|
||||||
#ifdef USE_DISCORD_PRESENCE
|
#ifdef USE_DISCORD_PRESENCE
|
||||||
static Handler* event_handler = nullptr;
|
namespace
|
||||||
static const char* username = "";
|
{
|
||||||
|
Handler* event_handler = nullptr;
|
||||||
|
const char* username = "";
|
||||||
|
|
||||||
static void HandleDiscordReady(const DiscordUser* user)
|
void HandleDiscordReady(const DiscordUser* user)
|
||||||
{
|
{
|
||||||
username = user->username;
|
username = user->username;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HandleDiscordJoinRequest(const DiscordUser* user)
|
void HandleDiscordJoinRequest(const DiscordUser* user)
|
||||||
{
|
{
|
||||||
if (event_handler == nullptr)
|
if (event_handler == nullptr)
|
||||||
return;
|
return;
|
||||||
@ -38,7 +43,7 @@ static void HandleDiscordJoinRequest(const DiscordUser* user)
|
|||||||
event_handler->DiscordJoinRequest(user->userId, discord_tag, user->avatar);
|
event_handler->DiscordJoinRequest(user->userId, discord_tag, user->avatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HandleDiscordJoin(const char* join_secret)
|
void HandleDiscordJoin(const char* join_secret)
|
||||||
{
|
{
|
||||||
if (event_handler == nullptr)
|
if (event_handler == nullptr)
|
||||||
return;
|
return;
|
||||||
@ -82,6 +87,25 @@ static void HandleDiscordJoin(const char* join_secret)
|
|||||||
|
|
||||||
event_handler->DiscordJoin();
|
event_handler->DiscordJoin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string ArtworkForGameId(const std::string& gameid)
|
||||||
|
{
|
||||||
|
static const std::set<std::string> REGISTERED_GAMES{
|
||||||
|
"GAL", // Super Smash Bros. Melee
|
||||||
|
};
|
||||||
|
|
||||||
|
std::string region_neutral_gameid = gameid.substr(0, 3);
|
||||||
|
if (REGISTERED_GAMES.count(region_neutral_gameid) != 0)
|
||||||
|
{
|
||||||
|
// Discord asset keys can only be lowercase.
|
||||||
|
std::transform(region_neutral_gameid.begin(), region_neutral_gameid.end(),
|
||||||
|
region_neutral_gameid.begin(), tolower);
|
||||||
|
return "game_" + region_neutral_gameid;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Discord::Handler::~Handler() = default;
|
Discord::Handler::~Handler() = default;
|
||||||
@ -130,10 +154,21 @@ void UpdateDiscordPresence(int party_size, SecretType type, const std::string& s
|
|||||||
|
|
||||||
const std::string& title =
|
const std::string& title =
|
||||||
current_game.empty() ? SConfig::GetInstance().GetTitleDescription() : current_game;
|
current_game.empty() ? SConfig::GetInstance().GetTitleDescription() : current_game;
|
||||||
|
std::string game_artwork = ArtworkForGameId(SConfig::GetInstance().GetGameID());
|
||||||
|
|
||||||
DiscordRichPresence discord_presence = {};
|
DiscordRichPresence discord_presence = {};
|
||||||
discord_presence.largeImageKey = "dolphin_logo";
|
if (game_artwork.empty())
|
||||||
discord_presence.largeImageText = "Dolphin is an emulator for the GameCube and the Wii.";
|
{
|
||||||
|
discord_presence.largeImageKey = "dolphin_logo";
|
||||||
|
discord_presence.largeImageText = "Dolphin is an emulator for the GameCube and the Wii.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
discord_presence.largeImageKey = game_artwork.c_str();
|
||||||
|
discord_presence.largeImageText = title.c_str();
|
||||||
|
discord_presence.smallImageKey = "dolphin_logo";
|
||||||
|
discord_presence.smallImageText = "Dolphin is an emulator for the GameCube and the Wii.";
|
||||||
|
}
|
||||||
discord_presence.details = title.empty() ? "Not in-game" : title.c_str();
|
discord_presence.details = title.empty() ? "Not in-game" : title.c_str();
|
||||||
discord_presence.startTimestamp = std::time(nullptr);
|
discord_presence.startTimestamp = std::time(nullptr);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user