A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
2
fork

Configure Feed

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

at master 222 lines 7.7 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2007 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 <stdbool.h> 23#include <stddef.h> 24#include <limits.h> 25#include "config.h" 26#include "lang.h" 27#include "action.h" 28#include "splash.h" 29#include "settings.h" 30#include "menu.h" 31#include "sound_menu.h" 32#include "kernel.h" 33#include "playlist.h" 34#include "audio.h" 35#include "cuesheet.h" 36#include "misc.h" 37#include "playback.h" 38#include "pcm_sampr.h" 39#ifdef HAVE_PLAY_FREQ 40#include "talk.h" 41#endif 42 43#if defined(HAVE_CROSSFADE) 44static int setcrossfadeonexit_callback(int action, 45 const struct menu_item_ex *this_item, 46 struct gui_synclist *this_list) 47{ 48 (void)this_item; 49 (void)this_list; 50 switch (action) 51 { 52 case ACTION_EXIT_MENUITEM: /* on exit */ 53 audio_set_crossfade(global_settings.crossfade); 54 break; 55 } 56 return action; 57} 58 59#endif /* HAVE_CROSSFADE */ 60 61/***********************************/ 62/* PLAYBACK MENU */ 63MENUITEM_SETTING(shuffle_item, &global_settings.playlist_shuffle, NULL); 64MENUITEM_SETTING(repeat_mode, &global_settings.repeat_mode, NULL); 65MENUITEM_SETTING(play_selected, &global_settings.play_selected, NULL); 66 67MENUITEM_SETTING(ff_rewind_accel, &global_settings.ff_rewind_accel, NULL); 68MENUITEM_SETTING(ff_rewind_min_step, &global_settings.ff_rewind_min_step, NULL); 69MAKE_MENU(ff_rewind_settings_menu, ID2P(LANG_WIND_MENU), 0, Icon_NOICON, 70 &ff_rewind_min_step, &ff_rewind_accel); 71#ifdef HAVE_DISK_STORAGE 72static int buffermargin_callback(int action, 73 const struct menu_item_ex *this_item, 74 struct gui_synclist *this_list) 75{ 76 (void)this_item; 77 (void)this_list; 78 switch (action) 79 { 80 case ACTION_EXIT_MENUITEM: /* on exit */ 81 audio_set_buffer_margin(global_settings.buffer_margin); 82 break; 83 } 84 return action; 85} 86MENUITEM_SETTING(buffer_margin, &global_settings.buffer_margin, 87 buffermargin_callback); 88#endif /*HAVE_DISK_STORAGE */ 89MENUITEM_SETTING(fade_on_stop, &global_settings.fade_on_stop, NULL); 90MENUITEM_SETTING(single_mode, &global_settings.single_mode, NULL); 91MENUITEM_SETTING(party_mode, &global_settings.party_mode, NULL); 92 93#ifdef HAVE_CROSSFADE 94/* crossfade submenu */ 95MENUITEM_SETTING(crossfade, &global_settings.crossfade, setcrossfadeonexit_callback); 96MENUITEM_SETTING(crossfade_fade_in_delay, 97 &global_settings.crossfade_fade_in_delay, NULL); 98MENUITEM_SETTING(crossfade_fade_in_duration, 99 &global_settings.crossfade_fade_in_duration, NULL); 100MENUITEM_SETTING(crossfade_fade_out_delay, 101 &global_settings.crossfade_fade_out_delay, setcrossfadeonexit_callback); 102MENUITEM_SETTING(crossfade_fade_out_duration, 103 &global_settings.crossfade_fade_out_duration, setcrossfadeonexit_callback); 104MENUITEM_SETTING(crossfade_fade_out_mixmode, 105 &global_settings.crossfade_fade_out_mixmode,NULL); 106MAKE_MENU(crossfade_settings_menu,ID2P(LANG_CROSSFADE),0, Icon_NOICON, 107 &crossfade, &crossfade_fade_in_delay, &crossfade_fade_in_duration, 108 &crossfade_fade_out_delay, &crossfade_fade_out_duration, 109 &crossfade_fade_out_mixmode); 110#endif 111 112/* replay gain submenu */ 113 114static int replaygain_callback(int action, 115 const struct menu_item_ex *this_item, 116 struct gui_synclist *this_list) 117{ 118 (void)this_item; 119 (void)this_list; 120 switch (action) 121 { 122 case ACTION_EXIT_MENUITEM: /* on exit */ 123 replaygain_update(); 124 break; 125 } 126 return action; 127} 128MENUITEM_SETTING(replaygain_noclip, 129 &global_settings.replaygain_settings.noclip, 130 replaygain_callback); 131MENUITEM_SETTING(replaygain_type, 132 &global_settings.replaygain_settings.type, 133 replaygain_callback); 134MENUITEM_SETTING(replaygain_preamp, 135 &global_settings.replaygain_settings.preamp, 136 replaygain_callback); 137MAKE_MENU(replaygain_settings_menu,ID2P(LANG_REPLAYGAIN),0, Icon_NOICON, 138 &replaygain_type, &replaygain_noclip, &replaygain_preamp); 139 140MENUITEM_SETTING(beep, &global_settings.beep ,NULL); 141 142#ifdef HAVE_SPDIF_POWER 143MENUITEM_SETTING(spdif_enable, &global_settings.spdif_enable, NULL); 144#endif 145MENUITEM_SETTING(next_folder, &global_settings.next_folder, NULL); 146MENUITEM_SETTING(constrain_next_folder, 147 &global_settings.constrain_next_folder, NULL); 148 149static int cuesheet_callback(int action, 150 const struct menu_item_ex *this_item, 151 struct gui_synclist *this_list) 152{ 153 (void)this_item; 154 (void)this_list; 155 switch (action) 156 { 157 case ACTION_EXIT_MENUITEM: /* on exit */ 158 audio_set_cuesheet(global_settings.cuesheet); 159 } 160 return action; 161} 162MENUITEM_SETTING(cuesheet, &global_settings.cuesheet, cuesheet_callback); 163 164#ifdef HAVE_HEADPHONE_DETECTION 165MENUITEM_SETTING(unplug_mode, &global_settings.unplug_mode, NULL); 166MENUITEM_SETTING(unplug_autoresume, &global_settings.unplug_autoresume, NULL); 167MAKE_MENU(unplug_menu, ID2P(LANG_HEADPHONE_UNPLUG), 0, Icon_NOICON, 168 &unplug_mode, &unplug_autoresume); 169#endif 170 171MENUITEM_SETTING(skip_length, &global_settings.skip_length, NULL); 172MENUITEM_SETTING(prevent_skip, &global_settings.prevent_skip, NULL); 173MENUITEM_SETTING(rewind_across_tracks, &global_settings.rewind_across_tracks, NULL); 174MENUITEM_SETTING(resume_rewind, &global_settings.resume_rewind, NULL); 175MENUITEM_SETTING(pause_rewind, &global_settings.pause_rewind, NULL); 176#ifdef HAVE_PLAY_FREQ 177MENUITEM_SETTING(play_frequency, &global_settings.play_frequency, NULL); 178#endif 179#ifdef HAVE_ALBUMART 180MENUITEM_SETTING(album_art, &global_settings.album_art, NULL); 181#endif 182 183MENUITEM_SETTING(playback_log, &global_settings.playback_log, NULL); 184 185MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, 186 Icon_Playback_menu, 187 &shuffle_item, &repeat_mode, &play_selected, 188 &ff_rewind_settings_menu, 189#ifdef HAVE_DISK_STORAGE 190 &buffer_margin, 191#endif 192 &fade_on_stop, &single_mode, &party_mode, 193 194#if defined(HAVE_CROSSFADE) 195 &crossfade_settings_menu, 196#endif 197 198 &replaygain_settings_menu, &beep, 199 200#ifdef HAVE_SPDIF_POWER 201 &spdif_enable, 202#endif 203 &next_folder, &constrain_next_folder, &cuesheet 204#ifdef HAVE_HEADPHONE_DETECTION 205 ,&unplug_menu 206#endif 207 ,&skip_length, &prevent_skip 208 ,&rewind_across_tracks 209 210 ,&resume_rewind 211 ,&pause_rewind 212#ifdef HAVE_PLAY_FREQ 213 ,&play_frequency 214#endif 215#ifdef HAVE_ALBUMART 216 ,&album_art 217#endif 218 ,&playback_log 219 ); 220 221/* PLAYBACK MENU */ 222/***********************************/