summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2023-11-06 04:06:50 +0100
committerChristian Soffke <christian.soffke@gmail.com>2023-11-11 00:36:14 +0100
commita82b30735d7254c222978cc1bb9f8f8dd24f5cb9 (patch)
tree7742bf3fbb22213aef7983265d83db1f8b34a756
parentba14aecd5eee99742bef94f782a5a10b0821f0ad (diff)
downloadrockbox-a82b30735d7254c222978cc1bb9f8f8dd24f5cb9.tar.gz
rockbox-a82b30735d7254c222978cc1bb9f8f8dd24f5cb9.zip
Fix queued track when resuming after PLAYLIST_COMMAND_CLEAR
PLAYLIST_COMMAND_CLEAR needs to save the index of the currently playing track, or a track with index 0 will be left queued after resuming from control commands Change-Id: If7449bff92acd556b03c46e82301e8fec5c997d7
-rw-r--r--apps/playlist.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/apps/playlist.c b/apps/playlist.c
index c0e943cf37..1822db844f 100644
--- a/apps/playlist.c
+++ b/apps/playlist.c
@@ -434,7 +434,7 @@ static int update_control_unlocked(struct playlist_info* playlist,
434 result = write(fd, "R\n", 2); 434 result = write(fd, "R\n", 2);
435 break; 435 break;
436 case PLAYLIST_COMMAND_CLEAR: 436 case PLAYLIST_COMMAND_CLEAR:
437 result = write(fd, "C\n", 2); 437 result = fdprintf(fd, "C:%d\n", i1);
438 break; 438 break;
439 case PLAYLIST_COMMAND_FLAGS: 439 case PLAYLIST_COMMAND_FLAGS:
440 result = fdprintf(fd, "F:%u:%u\n", i1, i2); 440 result = fdprintf(fd, "F:%u:%u\n", i1, i2);
@@ -1178,7 +1178,6 @@ static int remove_all_tracks_unlocked(struct playlist_info *playlist, bool write
1178#endif 1178#endif
1179 1179
1180 /* Update playlist state as if by remove_track_unlocked() */ 1180 /* Update playlist state as if by remove_track_unlocked() */
1181 playlist->index = 0;
1182 playlist->first_index = 0; 1181 playlist->first_index = 0;
1183 playlist->amount = 1; 1182 playlist->amount = 1;
1184 playlist->indices[0] |= PLAYLIST_QUEUED; 1183 playlist->indices[0] |= PLAYLIST_QUEUED;
@@ -1191,10 +1190,12 @@ static int remove_all_tracks_unlocked(struct playlist_info *playlist, bool write
1191 if (write && playlist->control_fd >= 0) 1190 if (write && playlist->control_fd >= 0)
1192 { 1191 {
1193 update_control_unlocked(playlist, PLAYLIST_COMMAND_CLEAR, 1192 update_control_unlocked(playlist, PLAYLIST_COMMAND_CLEAR,
1194 -1, -1, NULL, NULL, NULL); 1193 playlist->index, -1, NULL, NULL, NULL);
1195 sync_control_unlocked(playlist); 1194 sync_control_unlocked(playlist);
1196 } 1195 }
1197 1196
1197 playlist->index = 0;
1198
1198 return 0; 1199 return 0;
1199} 1200}
1200 1201
@@ -3353,6 +3354,8 @@ int playlist_resume(void)
3353 } 3354 }
3354 case PLAYLIST_COMMAND_CLEAR: 3355 case PLAYLIST_COMMAND_CLEAR:
3355 { 3356 {
3357 if (strp[0])
3358 playlist->index = atoi(strp[0]);
3356 if (remove_all_tracks_unlocked(playlist, false) < 0) 3359 if (remove_all_tracks_unlocked(playlist, false) < 0)
3357 { 3360 {
3358 result = -16; 3361 result = -16;