From 3594406e45c5d4f7920a08a61c3bb76b1958dde8 Mon Sep 17 00:00:00 2001 From: eukos Date: Sun, 23 Aug 2015 02:45:48 +0200 Subject: [PATCH] Better looping for xmms-ctl implementation --- tracker/tracker_xmms-ctl.c | 81 +++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/tracker/tracker_xmms-ctl.c b/tracker/tracker_xmms-ctl.c index ed15fd0..aa7f70e 100644 --- a/tracker/tracker_xmms-ctl.c +++ b/tracker/tracker_xmms-ctl.c @@ -27,9 +27,36 @@ static qboolean xmms_playing = false; static qboolean xmms_wasplaying = false; static qboolean xmmsctl_initialized = false; +static int xmms_old_repeat; +static int xmms_old_shuffle; +static int xmms_old_advance; + +int XMMS_GetValue(char *parm) +{ + FILE *fp; + char buffer[32]; + int value; + + sprintf(buffer, "/usr/local/bin/xmms-ctl %s", parm); + fp = popen(buffer, "r"); + + if (fp == NULL) + { + Con_Printf("Can't get info from XMMS\n" ); + return; + } + while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { + value = atoi(buffer); + } + + pclose(fp); + return value; +} + void Tracker_Play(byte track, qboolean looping) { char buffer [32]; + int ctltemp; sprintf(buffer, "xmms-ctl -track-set %i", (int) track); system(buffer); system("xmms-ctl -play"); @@ -38,6 +65,19 @@ void Tracker_Play(byte track, qboolean looping) xmms_track = (int) track; xmms_playing = true; + if(xmms_loop) + { + if(XMMS_GetValue("-get-advance")) + system("xmms-ctl -set-advance"); + if(!XMMS_GetValue("-get-repeat")) + system("xmms-ctl -set-repeat"); + } + else + { + if(XMMS_GetValue("-get-repeat")) + system("xmms-ctl -set-repeat"); + } + Con_Printf("XMMS: Now playing song %i, looping %i\n", xmms_track, xmms_loop); } @@ -71,38 +111,8 @@ void Tracker_Resume(void) Con_Printf("XMMS: Resuming track %i\n", xmms_track); } -// DO NOTHING void Tracker_Update(void) { -#if 0 - if(!xmmsctl_initialized) - return; - - if(xmms_loop) - { - int current_track; - FILE *fp; - char buffer [32]; - - fp = popen("/usr/local/bin/xmms-ctl -track-get", "r"); - - if (fp == NULL) - { - Con_Printf("Can't get track listing from XMMS\n" ); - return; - } - while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { - current_track = atoi(buffer); - } - - if(current_track != xmms_track) - { - sprintf(buffer, "xmms-ctl -track-set %i", xmms_track); - system(buffer); - Con_Printf("XMMS: looping track %i\n", xmms_track); - } - } -#endif } static void XMMS_f (void) @@ -158,12 +168,21 @@ int Tracker_Init(void) } xmmsctl_initialized = true; - Cmd_AddCommand ("xmms", XMMS_f); // link DUMB + xmms_old_repeat = XMMS_GetValue("-get-repeat"); + xmms_old_advance = XMMS_GetValue("-get-advance"); + xmms_old_shuffle = XMMS_GetValue("-get-shuffle"); + + Cmd_AddCommand ("xmms", XMMS_f); return 1; } void Tracker_Shutdown(void) { + if(XMMS_GetValue("-get-advance") != xmms_old_advance) + system("xmms-ctl -set-advance"); + if(!XMMS_GetValue("-get-repeat") != xmms_old_repeat) + system("xmms-ctl -set-repeat"); + Tracker_Stop(); // Because requested }