From: terencehill <piuntn@gmail.com>
Date: Thu, 17 May 2012 13:31:51 +0000 (+0200)
Subject: Fix and improve addToPlayList and removeFromPlayList
X-Git-Tag: xonotic-v0.8.1~157^2~23
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=7cf3ef4cf075908c5dd63d37a5f7b09a69fe1a8a;p=xonotic%2Fxonotic-data.pk3dir.git

Fix and improve addToPlayList and removeFromPlayList
---

diff --git a/qcsrc/menu/xonotic/playlist.c b/qcsrc/menu/xonotic/playlist.c
index b7edaa3896..3ae627eab0 100644
--- a/qcsrc/menu/xonotic/playlist.c
+++ b/qcsrc/menu/xonotic/playlist.c
@@ -66,21 +66,44 @@ void XonoticPlayList_resizeNotify(entity me, vector relOrigin, vector relSize, v
 
 void XonoticPlayList_addToPlayList(entity me, string track)
 {
-	// TODO: append instead of add
-	float old_nItems = me.nItems;
-	localcmd(strcat("\nmenu_cmd addtolist music_playlist_list0 ", track, "\n"));
-	me.nItems = tokenize_console(cvar_string("music_playlist_list0")); // FIXME: do this one frame later
-	if(me.nItems != old_nItems)
-		cvar_set("music_playlist_current0", ftos(cvar("music_playlist_current0") + 1));
+	me.nItems = tokenize_console(cvar_string("music_playlist_list0"));
+	if(me.nItems == 0)
+	{
+		cvar_set("music_playlist_list0", track);
+		return;
+	}
+	float i;
+	string s;
+	for(i = 0; i < me.nItems; ++i)
+	{
+		if(argv(i) == track)
+			return; // track is already in playlist
+	}
+	cvar_set("music_playlist_list0", strcat(cvar_string("music_playlist_list0"), " ", track));
 }
 
 void XonoticPlayList_removeFromPlayList(entity me, string track)
 {
-	float old_nItems = me.nItems;
-	localcmd(strcat("\nmenu_cmd removefromlist music_playlist_list0 ", track, "\n"));
-	me.nItems = tokenize_console(cvar_string("music_playlist_list0")); // FIXME: do this one frame later
-	if(me.nItems != old_nItems)
-		cvar_set("music_playlist_current0", ftos(cvar("music_playlist_current0") - 1));
+	float i;
+	string s;
+	me.nItems = tokenize_console(cvar_string("music_playlist_list0"));
+	if(me.nItems == 0)
+		return;
+	for(i = 0; i < me.nItems; ++i)
+	{
+		if(argv(i) == track)
+		if(cvar("music_playlist_current0") != i) // forbid removing the current playing track, otherwise pause button will resume from another track
+		{
+			if(cvar("music_playlist_current0") > i)
+				cvar_set("music_playlist_current0", ftos(cvar("music_playlist_current0") - 1));
+			continue;
+		}
+		s = strcat(s, " ", argv(i));
+	}
+	if(s == "")
+		cvar_set("music_playlist_list0", "");
+	else
+		cvar_set("music_playlist_list0", substring(s, 1, strlen(s))); //remove initial space
 }
 
 float XonoticPlayList_mouseDrag(entity me, vector pos)