From d5c2bc90c1e40e9caee672a18ccbca9ace1d8d56 Mon Sep 17 00:00:00 2001
From: radius <andres.430@gmail.com>
Date: Mon, 28 May 2018 23:43:30 -0500
Subject: [PATCH] add discord files

---
 Makefile.common     |  13 +++++
 command.c           |   6 ++-
 discord/discord.c   | 121 ++++++++++++++++++++++++++++++++++++++++++++
 discord/discord.h   |  47 +++++++++++++++++
 media/canvas.png    | Bin 18243 -> 15886 bytes
 qb/config.libs.sh   |   1 +
 qb/config.params.sh |   1 +
 retroarch.c         |  19 ++++++-
 8 files changed, 205 insertions(+), 3 deletions(-)
 create mode 100644 discord/discord.c
 create mode 100644 discord/discord.h

diff --git a/Makefile.common b/Makefile.common
index 5dd66d7a87..06ff9f83eb 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -1623,6 +1623,19 @@ ifeq ($(HAVE_NETWORKING), 1)
          $(LIBRETRO_COMM_DIR)/utils/md5.o
    endif
 
+   ifeq ($(HAVE_DISCORD), 1)
+      DEFINES += -DHAVE_DISCORD
+      DEFINES += -Ideps/discord-rpc/include/ -Ideps/discord-rpc/thirdparty/rapidjson-1.1.0/include/
+      OBJ += deps/discord-rpc/src/connection_win.o \
+             deps/discord-rpc/src/discord_register_win.o \
+             deps/discord-rpc/src/discord_rpc.o \
+             deps/discord-rpc/src/rpc_connection.o \
+             deps/discord-rpc/src/serialization.o \
+             discord/discord.o
+      LIBS += -lpsapi -ladvapi32
+
+   endif
+
    ifeq ($(HAVE_NETWORKGAMEPAD), 1)
       OBJ += input/input_remote.o \
              cores/libretro-net-retropad/net_retropad_core.o
diff --git a/command.c b/command.c
index 1606ec41a4..693d32cfa1 100644
--- a/command.c
+++ b/command.c
@@ -44,6 +44,10 @@
 #include "cheevos/var.h"
 #endif
 
+#ifdef HAVE_DISCORD
+#include "discord/discord.h"
+#endif
+
 #ifdef HAVE_MENU
 #include "menu/menu_driver.h"
 #include "menu/menu_content.h"
@@ -1275,8 +1279,8 @@ static bool command_event_init_core(enum rarch_core_type *data)
    if (!core_load(settings->uints.input_poll_type_behavior))
       return false;
 
-   rarch_ctl(RARCH_CTL_SET_FRAME_LIMIT, NULL);
 
+   rarch_ctl(RARCH_CTL_SET_FRAME_LIMIT, NULL);
    return true;
 }
 
diff --git a/discord/discord.c b/discord/discord.c
new file mode 100644
index 0000000000..c8b5f527f7
--- /dev/null
+++ b/discord/discord.c
@@ -0,0 +1,121 @@
+/*  RetroArch - A frontend for libretro.
+  *  Copyright (C) 2018 - Andrés Suárez
+ *
+ *  RetroArch is free software: you can redistribute it and/or modify it under the terms
+ *  of the GNU General Public License as published by the Free Software Found-
+ *  ation, either version 3 of the License, or (at your option) any later version.
+ *
+ *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ *  PURPOSE.  See the GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along with RetroArch.
+ *  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "discord.h"
+
+static const char* APPLICATION_ID = "450822022025576457";
+static int FrustrationLevel = 0;
+static int64_t start_time;
+
+static bool discord_ready = false;
+static unsigned discord_status = 0;
+
+DiscordRichPresence discord_presence;
+
+static void handle_discord_ready(const DiscordUser* connectedUser)
+{
+   RARCH_LOG("[discord] connected to user %s#%s - %s\n",
+      connectedUser->username,
+      connectedUser->discriminator,
+      connectedUser->userId);
+}
+
+static void handle_discord_disconnected(int errcode, const char* message)
+{
+   RARCH_LOG("[discord] disconnected (%d: %s)\n", errcode, message);
+}
+
+static void handle_discord_error(int errcode, const char* message)
+{
+   RARCH_LOG("[discord] error (%d: %s)\n", errcode, message);
+}
+
+static void handle_discord_join(const char* secret)
+{
+   RARCH_LOG("[discord] join (%s)\n", secret);
+}
+
+static void handle_discord_spectate(const char* secret)
+{
+   RARCH_LOG("[discord] spectate (%s)\n", secret);
+}
+
+static void handle_discord_join_request(const DiscordUser* request)
+{
+   int response = -1;
+   char yn[4];
+   RARCH_LOG("[discord] join request from %s#%s - %s\n",
+      request->username,
+      request->discriminator,
+      request->userId);
+}
+
+void discord_update(unsigned presence)
+{
+   if (!discord_ready || discord_status != DISCORD_PRESENCE_MENU && discord_status == presence)
+      return;
+
+   RARCH_LOG("[discord] updating (%d)\n", presence);
+   memset(&discord_presence, 0, sizeof(discord_presence));
+
+   switch (presence)
+   {
+      case DISCORD_PRESENCE_MENU:
+         discord_presence.state = "In-Menu";
+         discord_presence.largeImageKey = "icon";
+         discord_presence.instance = 0;
+         discord_presence.startTimestamp = start_time;
+         break;
+      case DISCORD_PRESENCE_GAME:
+         start_time = time(0);
+         discord_presence.state = "Link's House";
+         discord_presence.details = "Legend of Zelda, The - Link's Awakening DX";
+         discord_presence.largeImageKey = "icon";
+         //discord_presence.smallImageKey = "icon";
+         discord_presence.instance = 0;
+         discord_presence.startTimestamp = start_time;
+         break;
+      default:
+         break;
+   }
+   Discord_UpdatePresence(&discord_presence);
+   discord_status = presence;
+}
+
+void discord_init()
+{
+   RARCH_LOG("[discord] initializing\n");
+   start_time = time(0);
+
+   DiscordEventHandlers handlers;
+   memset(&handlers, 0, sizeof(handlers));
+   handlers.ready = handle_discord_ready;
+   handlers.disconnected = handle_discord_disconnected;
+   handlers.errored = handle_discord_error;
+   handlers.joinGame = handle_discord_join;
+   handlers.spectateGame = handle_discord_spectate;
+   handlers.joinRequest = handle_discord_join_request;
+   Discord_Initialize(APPLICATION_ID, &handlers, 1, NULL);
+
+   discord_ready = true;
+}
+
+void discord_shutdown()
+{
+   RARCH_LOG("[discord] shutting down\n");
+   Discord_ClearPresence();
+   Discord_Shutdown();
+   discord_ready = false;
+}
\ No newline at end of file
diff --git a/discord/discord.h b/discord/discord.h
new file mode 100644
index 0000000000..0db386bc5e
--- /dev/null
+++ b/discord/discord.h
@@ -0,0 +1,47 @@
+/*  RetroArch - A frontend for libretro.
+ *  Copyright (C) 2018 - Andrés Suárez
+ *
+ *  RetroArch is free software: you can redistribute it and/or modify it under the terms
+ *  of the GNU General Public License as published by the Free Software Found-
+ *  ation, either version 3 of the License, or (at your option) any later version.
+ *
+ *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ *  PURPOSE.  See the GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along with RetroArch.
+ *  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __RARCH_DISCORD_H
+#define __RARCH_DISCORD_H
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <string.h>
+#include <math.h>
+
+#include <boolean.h>
+#include <string/stdstring.h>
+#include <lists/string_list.h>
+#include <retro_timers.h>
+
+#include "discord_rpc.h"
+#include "verbosity.h"
+
+enum discord_presence
+{
+   DISCORD_PRESENCE_MENU = 0,
+   DISCORD_PRESENCE_GAME,
+   DISCORD_PRESENCE_CHEEVO_UNLOCKED,
+   DISCORD_PRESENCE_NETPLAY_HOSTING,
+   DISCORD_PRESENCE_NETPLAY_CLIENT
+};
+
+
+void discord_init();
+void discord_shutdown();
+void discord_update(unsigned presence);
+
+#endif /* __RARCH_DISCORD_H */
diff --git a/media/canvas.png b/media/canvas.png
index 9db4f97136e82ae17067ae7cd8c854b3a5f8ee04..4bc25c00350496cf03f51fb49c9231df1e31a9f7 100644
GIT binary patch
literal 15886
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

literal 18243
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
Szaj>6^4OW9Ie*yy`M&^N(j(CT

diff --git a/qb/config.libs.sh b/qb/config.libs.sh
index e36974ceef..ab7bf0f0d6 100644
--- a/qb/config.libs.sh
+++ b/qb/config.libs.sh
@@ -213,6 +213,7 @@ else
    HAVE_NETWORK_CMD='no'
    HAVE_NETWORKGAMEPAD='no'
    HAVE_CHEEVOS='no'
+   HAVE_DISCORD='no'
 fi
 
 check_lib '' STDIN_CMD "$CLIB" fcntl
diff --git a/qb/config.params.sh b/qb/config.params.sh
index 487bc003a5..af48758f53 100644
--- a/qb/config.params.sh
+++ b/qb/config.params.sh
@@ -105,6 +105,7 @@ HAVE_QT=auto               # Qt companion support
 C89_QT=no
 HAVE_XSHM=no               # XShm video driver support
 HAVE_CHEEVOS=yes           # Retro Achievements
+HAVE_DISCORD=yes           # Discord Integration
 HAVE_SHADERPIPELINE=yes    # Additional shader-based pipelines
 C89_SHADERPIPELINE=no
 HAVE_VULKAN=auto           # Vulkan support
diff --git a/retroarch.c b/retroarch.c
index e26f3128a9..d20b2fc28e 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -70,6 +70,10 @@
 #include "cheevos/cheevos.h"
 #endif
 
+#ifdef HAVE_DISCORD
+#include "discord/discord.h"
+#endif
+
 #ifdef HAVE_NETWORKING
 #include "network/netplay/netplay.h"
 #endif
@@ -1374,9 +1378,13 @@ bool retroarch_main_init(int argc, char *argv[])
    rarch_error_on_init     = false;
    rarch_is_inited         = true;
 
+#ifdef HAVE_DISCORD
+   discord_init();
+   discord_update(DISCORD_PRESENCE_MENU);
+#endif
+
    if (rarch_first_start)
       rarch_first_start = false;
-
    return true;
 
 error:
@@ -1384,7 +1392,7 @@ error:
    rarch_is_inited         = false;
 
    if (rarch_first_start)
-      rarch_first_start = false;
+         rarch_first_start = false;
 
    return false;
 }
@@ -2322,6 +2330,10 @@ bool retroarch_main_quit(void)
    runloop_shutdown_initiated = true;
    rarch_menu_running_finished();
 
+#ifdef HAVE_DISCORD
+   discord_shutdown();
+#endif
+
    return true;
 }
 
@@ -3325,6 +3337,9 @@ int runloop_iterate(unsigned *sleep_ms)
    if (runloop_check_cheevos())
       cheevos_test();
 #endif
+#ifdef HAVE_DISCORD
+   discord_update(DISCORD_PRESENCE_GAME);
+#endif
 
    for (i = 0; i < max_users; i++)
    {