Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix return to root after selecting items from playlist viewer

When selecting an item, Rockbox only checked that
playback was stopped before entering the viewer and
went to the WPS if music had started playing afterwards,
but returned to the root menu otherwise

The WPS will now be displayed whenever a new item has been
selected, even if audio was paused or playing before.

boomark_autoload required slight adjustments to its return values,
so that the WPS would not be opened after a user cancels out of
the bookmark selection screen for a playlist, since it previously
returned true in that case, too.

Change-Id: I231ea788e2f80fdda5fe4ad4d2420450931f686f

+70 -28
+12 -8
apps/bookmark.c
··· 441 441 /* ----------------------------------------------------------------------- */ 442 442 /* This function will determine if an autoload is necessary. This is an */ 443 443 /* interface function. */ 444 - /* Returns true on bookmark load or bookmark selection. */ 444 + /* Returns */ 445 + /* BOOKMARK_DO_RESUME on bookmark load or bookmark selection. */ 446 + /* BOOKMARK_DONT_RESUME if we're not going to resume */ 447 + /* BOOKMARK_CANCEL if user canceled */ 445 448 /* ------------------------------------------------------------------------*/ 446 - bool bookmark_autoload(const char* file) 449 + int bookmark_autoload(const char* file) 447 450 { 448 451 char* bookmark; 449 452 450 453 if(global_settings.autoloadbookmark == BOOKMARK_NO) 451 - return false; 454 + return BOOKMARK_DONT_RESUME; 452 455 453 456 /*Checking to see if a bookmark file exists.*/ 454 457 if(!generate_bookmark_file_name(file)) 455 458 { 456 - return false; 459 + return BOOKMARK_DONT_RESUME; 457 460 } 458 461 459 462 if(!file_exists(global_bookmark_file_name)) 460 - return false; 463 + return BOOKMARK_DONT_RESUME; 461 464 462 465 if(global_settings.autoloadbookmark == BOOKMARK_YES) 463 466 { 464 - return bookmark_load(global_bookmark_file_name, true); 467 + return bookmark_load(global_bookmark_file_name, true) ? BOOKMARK_DO_RESUME : 468 + BOOKMARK_DONT_RESUME; 465 469 } 466 470 else 467 471 { ··· 478 482 /* Act as if autoload was done even if it failed, since the 479 483 * user did make an active selection. 480 484 */ 481 - return true; 485 + return BOOKMARK_DO_RESUME; 482 486 } 483 487 484 - return ret != BOOKMARK_SUCCESS; 488 + return ret != BOOKMARK_SUCCESS ? BOOKMARK_CANCEL : BOOKMARK_DONT_RESUME; 485 489 } 486 490 } 487 491
+7 -1
apps/bookmark.h
··· 29 29 BOOKMARK_USB_CONNECTED = 1 30 30 }; 31 31 32 + enum { 33 + BOOKMARK_CANCEL, 34 + BOOKMARK_DONT_RESUME, 35 + BOOKMARK_DO_RESUME 36 + }; 37 + 32 38 int bookmark_load_menu(void); 33 39 bool bookmark_autobookmark(bool prompt_ok); 34 40 bool bookmark_create_menu(void); 35 41 bool bookmark_mrb_load(void); 36 - bool bookmark_autoload(const char* file); 42 + int bookmark_autoload(const char* file); 37 43 bool bookmark_load(const char* file, bool autoload); 38 44 bool bookmark_exists(void); 39 45 bool bookmark_is_bookmarkable_state(void);
+6 -3
apps/filetree.c
··· 100 100 101 101 if (!skip_warn_and_bookmarks) 102 102 { 103 - if (bookmark_autoload(pathname) || !warn_on_pl_erase()) 103 + int res = bookmark_autoload(pathname); 104 + if (res == BOOKMARK_CANCEL || res == BOOKMARK_DO_RESUME || !warn_on_pl_erase()) 104 105 return false; 105 106 } 106 107 ··· 481 482 break; 482 483 483 484 case FILE_ATTR_AUDIO: 484 - if (bookmark_autoload(c->currdir)) 485 + { 486 + int res = bookmark_autoload(c->currdir); 487 + if (res == BOOKMARK_CANCEL || res == BOOKMARK_DO_RESUME) 485 488 break; 486 489 487 490 splash(0, ID2P(LANG_WAIT)); ··· 515 518 play = true; 516 519 } 517 520 break; 518 - 521 + } 519 522 #if CONFIG_TUNER 520 523 /* fmr preset file */ 521 524 case FILE_ATTR_FMR:
+1 -2
apps/onplay.c
··· 588 588 589 589 static bool view_playlist(void) 590 590 { 591 - bool was_playing = audio_status() & AUDIO_STATUS_PLAY; 592 591 bool result; 593 592 594 593 result = playlist_viewer_ex(selected_file); 595 594 596 - if (!was_playing && (audio_status() & AUDIO_STATUS_PLAY) && 595 + if (result == PLAYLIST_VIEWER_OK && 597 596 onplay_result == ONPLAY_OK) 598 597 /* playlist was started from viewer */ 599 598 onplay_result = ONPLAY_START_PLAY;
+19 -6
apps/playlist_catalog.c
··· 46 46 #include "talk.h" 47 47 #include "playlist_viewer.h" 48 48 #include "bookmark.h" 49 + #include "root_menu.h" 49 50 50 51 /* Use for recursive directory search */ 51 52 struct add_track_context { ··· 160 161 161 162 restart: 162 163 browse.flags &= ~BROWSE_SELECTED; 163 - rockbox_browse(&browse); 164 + if (rockbox_browse(&browse) == GO_TO_WPS) 165 + result = 0; 164 166 165 167 if (browse.flags & BROWSE_SELECTED) 166 168 { ··· 169 171 170 172 if (view) 171 173 { 172 - 173 - if (!bookmark_autoload(selected_playlist)) 174 + 175 + int res = bookmark_autoload(selected_playlist); 176 + if (res == BOOKMARK_DO_RESUME) 177 + result = 0; 178 + else 174 179 { 175 - if (playlist_viewer_ex(selected_playlist) == PLAYLIST_VIEWER_CANCEL) 176 - goto restart; 180 + switch (playlist_viewer_ex(selected_playlist)) { 181 + case PLAYLIST_VIEWER_OK: 182 + result = 0; 183 + break; 184 + case PLAYLIST_VIEWER_CANCEL: 185 + goto restart; 186 + case PLAYLIST_VIEWER_USB: 187 + case PLAYLIST_VIEWER_MAINMENU: 188 + default: 189 + break; 190 + } 177 191 } 178 - result = 0; 179 192 } 180 193 else 181 194 {
+1 -1
apps/playlist_catalog.h
··· 29 29 30 30 /* 31 31 * View list of playlists in catalog. 32 - * ret : true if no error 32 + * ret : true if item was selected 33 33 */ 34 34 bool catalog_view_playlists(void); 35 35
+22 -3
apps/playlist_viewer.c
··· 820 820 struct gui_synclist playlist_lists; 821 821 822 822 if (!open_playlist_viewer(filename, &playlist_lists, false)) 823 + { 824 + ret = PLAYLIST_VIEWER_CANCEL; 823 825 goto exit; 826 + } 824 827 825 828 while (!exit) 826 829 { ··· 958 961 else if (pv_onplay_result == PV_ONPLAY_CLOSED) 959 962 { 960 963 if (!open_playlist_viewer(filename, &playlist_lists, true)) 964 + { 965 + ret = PLAYLIST_VIEWER_CANCEL; 961 966 goto exit; 967 + } 962 968 break; 963 969 } 964 - exit = update_viewer_with_changes(&playlist_lists, pv_onplay_result); 970 + if (update_viewer_with_changes(&playlist_lists, pv_onplay_result)) 971 + { 972 + exit = true; 973 + ret = PLAYLIST_VIEWER_CANCEL; 974 + } 965 975 break; 966 976 } 967 977 case ACTION_STD_MENU: ··· 996 1006 if (do_plugin(current_track) == PV_ONPLAY_USB_CLOSED) 997 1007 return PLAYLIST_VIEWER_USB; 998 1008 else if (!open_playlist_viewer(filename, &playlist_lists, true)) 1009 + { 1010 + ret = PLAYLIST_VIEWER_CANCEL; 999 1011 goto exit; 1012 + } 1000 1013 } 1001 1014 else if (global_settings.hotkey_tree == HOTKEY_PROPERTIES) 1002 1015 { ··· 1008 1021 update_lists(&playlist_lists); 1009 1022 } 1010 1023 else if (global_settings.hotkey_tree == HOTKEY_DELETE) 1011 - exit = update_viewer_with_changes(&playlist_lists, 1024 + { 1025 + if (update_viewer_with_changes(&playlist_lists, 1012 1026 delete_track(current_track->index, 1013 1027 viewer.selected_track, 1014 - (current_track->index == viewer.current_playing_track))); 1028 + (current_track->index == viewer.current_playing_track)))) 1029 + { 1030 + ret = PLAYLIST_VIEWER_CANCEL; 1031 + exit = true; 1032 + } 1033 + } 1015 1034 else 1016 1035 onplay(current_track->name, FILE_ATTR_AUDIO, CONTEXT_STD, true); 1017 1036 break;
+2 -4
apps/root_menu.c
··· 366 366 367 367 static int playlist_view_catalog(void * param) 368 368 { 369 - /* kludge untill catalog_view_playlists() returns something useful */ 370 - int old_playstatus = audio_status(); 371 369 (void)param; 372 370 push_current_activity(ACTIVITY_PLAYLISTBROWSER); 373 - catalog_view_playlists(); 371 + bool item_was_selected = catalog_view_playlists(); 374 372 pop_current_activity(); 375 - if (!old_playstatus && audio_status()) 373 + if (item_was_selected) 376 374 return GO_TO_WPS; 377 375 return GO_TO_PREVIOUS; 378 376 }