📄 playlist_viewer.c
字号:
onplay(tracks[index].name, TREE_ATTR_MPA); if (!viewer.playlist) ret = 1; else ret = 0; break; } } } menu_exit(m); return ret;}#endif/* Menu of viewer options. Invoked via F1(r) or Menu(p). */static bool viewer_menu(void){ int m; bool result; struct menu_items items[] = { { str(LANG_SHOW_ICONS), show_icons }, { str(LANG_SHOW_INDICES), show_indices }, { str(LANG_TRACK_DISPLAY), track_display }, { str(LANG_SAVE_DYNAMIC_PLAYLIST), save_playlist }, }; m=menu_init( items, sizeof(items) / sizeof(*items) ); result = menu_run(m); menu_exit(m); settings_save(); return result;}/* Show icons in viewer? */static bool show_icons(void){ return set_bool(str(LANG_SHOW_ICONS), &global_settings.playlist_viewer_icons);}/* Show indices of tracks? */static bool show_indices(void){ return set_bool(str(LANG_SHOW_INDICES), &global_settings.playlist_viewer_indices);}/* How to display a track */static bool track_display(void){ char* names[] = { str(LANG_DISPLAY_TRACK_NAME_ONLY), str(LANG_DISPLAY_FULL_PATH) }; return set_option(str(LANG_TRACK_DISPLAY), &global_settings.playlist_viewer_track_display, INT, names, 2, NULL);}/* Save playlist to disk */static bool save_playlist(void){ char filename[MAX_PATH+1]; strncpy(filename, DEFAULT_PLAYLIST_NAME, sizeof(filename)); if (!kbd_input(filename, sizeof(filename))) { playlist_save(viewer.playlist, filename); /* reload in case playlist was saved to cwd */ reload_directory(); } return false;}/* View current playlist */bool playlist_viewer(void){ return playlist_viewer_ex(NULL);}/* Main viewer function. Filename identifies playlist to be viewed. If NULL, view current playlist. */bool playlist_viewer_ex(char* filename){ bool ret = false; /* return value */ bool exit=false; /* exit viewer */ bool update=true; /* update display */ bool cursor_on=true; /* used for flashing cursor */ int old_cursor_pos; /* last cursor position */ int button; if (!initialize(filename, false)) goto exit; old_cursor_pos = viewer.cursor_pos; while (!exit) { int track; /* Timeout so we can determine if play status has changed */ button = button_get_w_tmo(HZ/2); if (!viewer.playlist && !(mpeg_status() & MPEG_STATUS_PLAY)) { /* Play has stopped */#ifdef HAVE_LCD_CHARCELLS splash(HZ, true, str(LANG_END_PLAYLIST_PLAYER));#else splash(HZ, true, str(LANG_END_PLAYLIST_RECORDER));#endif status_set_playmode(STATUS_STOP); goto exit; } if (viewer.move_track != -1 || !cursor_on) { /* Flash cursor to identify that we are moving a track */ cursor_on = !cursor_on;#ifdef HAVE_LCD_BITMAP if (global_settings.invert_cursor) { lcd_invertrect( MARGIN_X, MARGIN_Y+(viewer.cursor_pos*viewer.line_height), LCD_WIDTH, viewer.line_height); lcd_invertscroll(LINE_X, viewer.cursor_pos); } else put_cursorxy(CURSOR_X, CURSOR_Y + viewer.cursor_pos, cursor_on); lcd_update_rect( 0, MARGIN_Y + (viewer.cursor_pos * viewer.line_height), LCD_WIDTH, viewer.line_height);#else put_cursorxy(CURSOR_X, CURSOR_Y + viewer.cursor_pos, cursor_on); lcd_update();#endif } if (!viewer.playlist) playlist_get_resume_info(&track); else track = -1; if (track != viewer.current_playing_track || playlist_amount_ex(viewer.playlist) != viewer.num_tracks) { /* Playlist has changed (new track started?) */ update_first_index(); if (!update_playlist(false)) exit = true; else update = true; /* Abort move on playlist change */ viewer.move_track = -1; } switch (button) {#ifdef HAVE_RECORDER_KEYPAD case BUTTON_OFF: case BUTTON_LEFT:#else case BUTTON_STOP:#endif exit = true; break;#ifdef HAVE_RECORDER_KEYPAD case BUTTON_UP: case BUTTON_UP | BUTTON_REPEAT:#else case BUTTON_LEFT: case BUTTON_LEFT | BUTTON_REPEAT:#endif scroll_display(-1); update = true; break;#ifdef HAVE_RECORDER_KEYPAD case BUTTON_DOWN: case BUTTON_DOWN | BUTTON_REPEAT:#else case BUTTON_RIGHT: case BUTTON_RIGHT | BUTTON_REPEAT:#endif scroll_display(1); update = true; break;#ifdef BUTTON_ON#ifdef HAVE_RECORDER_KEYPAD case BUTTON_ON | BUTTON_UP: case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT:#else case BUTTON_ON | BUTTON_LEFT: case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT:#endif /* Pageup */ scroll_display(-viewer.num_display_lines); update = true; break;#ifdef HAVE_RECORDER_KEYPAD case BUTTON_ON | BUTTON_DOWN: case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:#else case BUTTON_ON | BUTTON_RIGHT: case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT:#endif /* Pagedown */ scroll_display(viewer.num_display_lines); update = true; break;#endif /* BUTTON_ON */#ifdef HAVE_RECORDER_KEYPAD case BUTTON_RIGHT:#endif case BUTTON_PLAY: if (viewer.move_track >= 0) { /* Move track */ int ret; ret = playlist_move(viewer.playlist, viewer.move_track, tracks[INDEX(viewer.cursor_pos)].index); if (ret < 0) splash(HZ, true, str(LANG_MOVE_FAILED)); update_playlist(true); viewer.move_track = -1; } else if (!viewer.playlist) { /* Stop current track and play new track */ mpeg_stop(); playlist_start(tracks[INDEX(viewer.cursor_pos)].index, 0); status_set_playmode(STATUS_PLAY); update_playlist(false); } else { /* Play track from playlist on disk */ mpeg_stop(); /* New playlist */ if (playlist_set_current(viewer.playlist) < 0) goto exit; playlist_start(tracks[INDEX(viewer.cursor_pos)].index, 0); status_set_playmode(STATUS_PLAY); /* Our playlist is now the current list */ if (!initialize(NULL, true)) goto exit; } display_playlist(); update = true; break;#ifdef BUTTON_ON case BUTTON_ON | BUTTON_PLAY: { /* ON+PLAY menu */ int ret; ret = onplay_menu(INDEX(viewer.cursor_pos)); if (ret < 0) { ret = true; goto exit; } else if (ret > 0) { /* Playlist changed */ update_first_index(); update_playlist(false); if (viewer.num_tracks <= 0) exit = true; } else display_playlist(); update = true; break; }#endif /* BUTTON_ON */#ifdef HAVE_RECORDER_KEYPAD case BUTTON_F1:#else case BUTTON_MENU:#endif if (viewer_menu()) { ret = true; goto exit; } display_playlist(); update = true; break; case SYS_USB_CONNECTED: usb_screen(); ret = true; goto exit; break; case BUTTON_NONE: status_draw(false); break; } if (update && !exit) { lcd_stop_scroll(); if (viewer.cursor_pos > (viewer.last_display_index - viewer.first_display_index)) { /* Cursor position is invalid */ put_cursorxy(CURSOR_X, CURSOR_Y + viewer.cursor_pos, false); viewer.cursor_pos = viewer.last_display_index - viewer.first_display_index; put_cursorxy(CURSOR_X, CURSOR_Y + viewer.cursor_pos, true); } if (viewer.cursor_pos != old_cursor_pos && old_cursor_pos <= (viewer.last_display_index - viewer.first_display_index)) /* Stop scrolling previous line */ update_display_line(old_cursor_pos, false); /* Scroll line at new cursor position */ update_display_line(viewer.cursor_pos, true); lcd_update(); old_cursor_pos = viewer.cursor_pos; cursor_on = true; update = false; } }exit: if (viewer.playlist) playlist_close(viewer.playlist); return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -