A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 120 lines 4.0 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2006 Jonathan Gordon 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22#include "plugin.h" 23#include "playback_control.h" 24 25struct viewport *parentvp = NULL; 26 27static bool prevtrack(void) 28{ 29 rb->audio_prev(); 30 return false; 31} 32 33static bool play(void) 34{ 35 int audio_status = rb->audio_status(); 36 if (!audio_status && rb->global_status->resume_index != -1) 37 { 38 if (rb->playlist_resume() != -1) 39 { 40 rb->playlist_resume_track(rb->global_status->resume_index, 41 rb->global_status->resume_crc32, 42 rb->global_status->resume_elapsed, 43 rb->global_status->resume_offset); 44 } 45 } 46 else if (audio_status & AUDIO_STATUS_PAUSE) 47 rb->audio_resume(); 48 else 49 rb->audio_pause(); 50 return false; 51} 52 53static bool stop(void) 54{ 55 rb->audio_stop(); 56 return false; 57} 58 59static bool nexttrack(void) 60{ 61 rb->audio_next(); 62 return false; 63} 64 65static bool volume(void) 66{ 67 const struct settings_list* vol = 68 rb->find_setting(&rb->global_status->volume); 69 return rb->option_screen((struct settings_list*)vol, parentvp, false, "Volume"); 70} 71 72static bool shuffle(void) 73{ 74 const struct settings_list* shuffle = 75 rb->find_setting(&rb->global_settings->playlist_shuffle); 76 return rb->option_screen((struct settings_list*)shuffle, parentvp, false, "Shuffle"); 77} 78 79static bool repeat_mode(void) 80{ 81 const struct settings_list* repeat = 82 rb->find_setting(&rb->global_settings->repeat_mode); 83 int old_repeat = rb->global_settings->repeat_mode; 84 85 rb->option_screen((struct settings_list*)repeat, parentvp, false, "Repeat"); 86 87 if (old_repeat != rb->global_settings->repeat_mode && 88 (rb->audio_status() & AUDIO_STATUS_PLAY)) 89 rb->audio_flush_and_reload_tracks(); 90 91 return false; 92} 93MENUITEM_FUNCTION(prevtrack_item, 0, ID2P(LANG_PREVTRACK), 94 prevtrack, NULL, Icon_NOICON); 95MENUITEM_FUNCTION(playpause_item, 0, ID2P(LANG_PLAYPAUSE), 96 play, NULL, Icon_NOICON); 97MENUITEM_FUNCTION(stop_item, 0, ID2P(LANG_STOP_PLAYBACK), 98 stop, NULL, Icon_NOICON); 99MENUITEM_FUNCTION(nexttrack_item, 0, ID2P(LANG_NEXTTRACK), 100 nexttrack, NULL, Icon_NOICON); 101MENUITEM_FUNCTION(volume_item, 0, ID2P(LANG_CHANGE_VOLUME), 102 volume, NULL, Icon_NOICON); 103MENUITEM_FUNCTION(shuffle_item, 0, ID2P(LANG_CHANGE_SHUFFLE_MODE), 104 shuffle, NULL, Icon_NOICON); 105MENUITEM_FUNCTION(repeat_mode_item, 0, ID2P(LANG_CHANGE_REPEAT_MODE), 106 repeat_mode, NULL, Icon_NOICON); 107MAKE_MENU(playback_control_menu, ID2P(LANG_PLAYBACK_CONTROL), NULL, Icon_NOICON, 108 &prevtrack_item, &playpause_item, &stop_item, &nexttrack_item, 109 &volume_item, &shuffle_item, &repeat_mode_item); 110 111void playback_control_init(struct viewport parent[NB_SCREENS]) 112{ 113 parentvp = parent; 114} 115 116bool playback_control(struct viewport parent[NB_SCREENS]) 117{ 118 parentvp = parent; 119 return rb->do_menu(&playback_control_menu, NULL, parent, false) == MENU_ATTACHED_USB; 120}