Add Discord Enable option to Settings -> Privacy

This commit is contained in:
twinaphex 2018-05-29 12:41:13 +02:00
parent 81ce02cf74
commit ddbc0d53c0
4 changed files with 65 additions and 20 deletions

View File

@ -1744,8 +1744,8 @@ void command_playlist_update_write(
**/ **/
bool command_event(enum event_command cmd, void *data) bool command_event(enum event_command cmd, void *data)
{ {
settings_t *settings = config_get_ptr(); static bool discord_inited = false;
bool boolean = false; bool boolean = false;
switch (cmd) switch (cmd)
{ {
@ -1942,25 +1942,26 @@ bool command_event(enum event_command cmd, void *data)
case CMD_EVENT_REINIT_FROM_TOGGLE: case CMD_EVENT_REINIT_FROM_TOGGLE:
retroarch_unset_forced_fullscreen(); retroarch_unset_forced_fullscreen();
case CMD_EVENT_REINIT: case CMD_EVENT_REINIT:
video_driver_reinit();
{ {
video_driver_reinit(); const input_driver_t *input_drv = input_get_ptr();
{ void *input_data = input_get_data();
const input_driver_t *input_drv = input_get_ptr(); /* Poll input to avoid possibly stale data to corrupt things. */
void *input_data = input_get_data(); if (input_drv && input_drv->poll)
/* Poll input to avoid possibly stale data to corrupt things. */ input_drv->poll(input_data);
if (input_drv && input_drv->poll) }
input_drv->poll(input_data); command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, (void*)(intptr_t)-1);
}
command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, (void*)(intptr_t)-1);
#ifdef HAVE_MENU #ifdef HAVE_MENU
{
settings_t *settings = config_get_ptr();
menu_display_set_framebuffer_dirty_flag(); menu_display_set_framebuffer_dirty_flag();
if (settings->bools.video_fullscreen) if (settings->bools.video_fullscreen)
video_driver_hide_mouse(); video_driver_hide_mouse();
if (menu_driver_is_alive()) if (menu_driver_is_alive())
command_event(CMD_EVENT_VIDEO_SET_BLOCKING_STATE, NULL); command_event(CMD_EVENT_VIDEO_SET_BLOCKING_STATE, NULL);
#endif
} }
#endif
break; break;
case CMD_EVENT_CHEATS_DEINIT: case CMD_EVENT_CHEATS_DEINIT:
cheat_manager_state_free(); cheat_manager_state_free();
@ -2826,6 +2827,35 @@ TODO: Add a setting for these tweaks */
libui_main(); libui_main();
#endif #endif
break; break;
case CMD_EVENT_DISCORD_INIT:
{
settings_t *settings = config_get_ptr();
if (!settings->bools.discord_enable)
return false;
if (discord_inited)
return true;
discord_init();
discord_inited = true;
}
break;
case CMD_EVENT_DISCORD_DEINIT:
if (!discord_inited)
return false;
discord_shutdown();
discord_inited = false;
break;
case CMD_EVENT_DISCORD_UPDATE:
if (!data || !discord_inited)
return false;
{
discord_userdata_t *userdata = (discord_userdata_t*)data;
discord_update(userdata->status);
}
break;
case CMD_EVENT_NONE: case CMD_EVENT_NONE:
return false; return false;
} }

View File

@ -231,6 +231,9 @@ enum event_command
CMD_EVENT_DISABLE_OVERRIDES, CMD_EVENT_DISABLE_OVERRIDES,
CMD_EVENT_RESTORE_REMAPS, CMD_EVENT_RESTORE_REMAPS,
CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET,
CMD_EVENT_DISCORD_INIT,
CMD_EVENT_DISCORD_DEINIT,
CMD_EVENT_DISCORD_UPDATE,
CMD_EVENT_LIBUI_TEST CMD_EVENT_LIBUI_TEST
}; };

View File

@ -39,6 +39,11 @@ enum discord_presence
DISCORD_PRESENCE_NETPLAY_CLIENT DISCORD_PRESENCE_NETPLAY_CLIENT
}; };
typedef struct discord_userdata
{
enum discord_presence status;
} discord_userdata_t;
void discord_init(void); void discord_init(void);
void discord_shutdown(void); void discord_shutdown(void);

View File

@ -1382,13 +1382,16 @@ bool retroarch_main_init(int argc, char *argv[])
rarch_is_inited = true; rarch_is_inited = true;
#ifdef HAVE_DISCORD #ifdef HAVE_DISCORD
{ if (command_event(CMD_EVENT_DISCORD_INIT, NULL))
discord_init(); discord_is_inited = true;
discord_is_inited = true;
}
if (discord_is_inited) if (discord_is_inited)
discord_update(DISCORD_PRESENCE_MENU); {
discord_userdata_t userdata;
userdata.status = DISCORD_PRESENCE_MENU;
command_event(CMD_EVENT_DISCORD_UPDATE, &userdata);
}
#endif #endif
if (rarch_first_start) if (rarch_first_start)
@ -2339,8 +2342,7 @@ bool retroarch_main_quit(void)
rarch_menu_running_finished(); rarch_menu_running_finished();
#ifdef HAVE_DISCORD #ifdef HAVE_DISCORD
if (discord_is_inited) command_event(CMD_EVENT_DISCORD_DEINIT, NULL);
discord_shutdown();
discord_is_inited = false; discord_is_inited = false;
#endif #endif
@ -3350,7 +3352,12 @@ int runloop_iterate(unsigned *sleep_ms)
#ifdef HAVE_DISCORD #ifdef HAVE_DISCORD
if (discord_is_inited) if (discord_is_inited)
discord_update(DISCORD_PRESENCE_GAME); {
discord_userdata_t userdata;
userdata.status = DISCORD_PRESENCE_GAME;
command_event(CMD_EVENT_DISCORD_UPDATE, &userdata);
}
#endif #endif
for (i = 0; i < max_users; i++) for (i = 0; i < max_users; i++)