1
0
Fork 0
forked from len0rd/rockbox

wps.c cleanup

No functional changes code clean-up
consolidate pause_action, unpause_action_ do_wps_playpause

Change-Id: Id5de9616c0ecd6d2b48d611667ef0589a50dcae6
This commit is contained in:
William Wilgus 2024-12-10 01:00:43 -05:00
parent d6e57e6e8e
commit 05336c9efb
2 changed files with 68 additions and 64 deletions

View file

@ -116,31 +116,40 @@ static void update_non_static(void)
skin_update(WPS, i, SKIN_REFRESH_NON_STATIC);
}
void pause_action(bool updatewps)
void wps_do_action(enum wps_do_action_type action, bool updatewps)
{
/* Do audio first, then update, unless skin were to use its local
status in which case, reverse it */
audio_pause();
if (action == WPS_PLAYPAUSE) /* toggle the status */
{
struct wps_state *state = get_wps_state();
if (state->paused)
action = WPS_PLAY;
if (updatewps)
update_non_static();
if (global_settings.pause_rewind) {
long newpos;
audio_pre_ff_rewind();
newpos = audio_current_track()->elapsed
- global_settings.pause_rewind * 1000;
audio_ff_rewind(newpos > 0 ? newpos : 0);
state->paused = !state->paused;
}
}
void unpause_action(bool updatewps)
{
/* Do audio first, then update, unless skin were to use its local
status in which case, reverse it */
audio_resume();
if (action == WPS_PLAY) /* unpause_action */
{
audio_resume();
}
else /* WPS_PAUSE pause_action */
{
audio_pause();
if (global_settings.pause_rewind) {
unsigned long elapsed = audio_current_track()->elapsed;
long newpos = elapsed - (global_settings.pause_rewind * 1000);
audio_pre_ff_rewind();
audio_ff_rewind(newpos > 0 ? newpos : 0);
}
if (action == WPS_PLAYPAUSE)
{
settings_save();
#if !defined(HAVE_SW_POWEROFF)
call_storage_idle_notifys(true); /* make sure resume info is saved */
#endif
}
}
if (updatewps)
update_non_static();
}
@ -601,25 +610,6 @@ static void gwps_enter_wps(bool theme_enabled)
send_event(GUI_EVENT_ACTIONUPDATE, (void*)1);
}
void wps_do_playpause(bool updatewps)
{
struct wps_state *state = get_wps_state();
if ( state->paused )
{
state->paused = false;
unpause_action(updatewps);
}
else
{
state->paused = true;
pause_action(updatewps);
settings_save();
#if !defined(HAVE_SW_POWEROFF)
call_storage_idle_notifys(true); /* make sure resume info is saved */
#endif
}
}
static long do_wps_exit(long action, bool bookmark)
{
audio_pause();
@ -672,6 +662,32 @@ static long do_party_mode(long action)
return action;
}
static inline int action_wpsab_single(long button)
{
/* The iPods/X5/M5 use a single button for the A-B mode markers,
defined as ACTION_WPSAB_SINGLE in their config files. */
#ifdef ACTION_WPSAB_SINGLE
static int wps_ab_state = 0;
if (button == ACTION_WPSAB_SINGLE && ab_repeat_mode_enabled())
{
switch (wps_ab_state)
{
case 0: /* set the A spot */
button = ACTION_WPS_ABSETA_PREVDIR;
break;
case 1: /* set the B spot */
button = ACTION_WPS_ABSETB_NEXTDIR;
break;
case 2:
button = ACTION_WPS_ABRESET;
break;
}
wps_ab_state = (wps_ab_state+1) % 3;
}
#endif /* def ACTION_WPSAB_SINGLE */
return button;
}
/* The WPS can be left in two ways:
* a) call a function, which draws over the wps. In this case, the wps
* will be still active (i.e. the below function didn't return)
@ -770,27 +786,7 @@ long gui_wps_show(void)
#endif
button = do_party_mode(button); /* block select actions in party mode */
/* The iPods/X5/M5 use a single button for the A-B mode markers,
defined as ACTION_WPSAB_SINGLE in their config files. */
#ifdef ACTION_WPSAB_SINGLE
static int wps_ab_state = 0;
if (button == ACTION_WPSAB_SINGLE && ab_repeat_mode_enabled())
{
switch (wps_ab_state)
{
case 0: /* set the A spot */
button = ACTION_WPS_ABSETA_PREVDIR;
break;
case 1: /* set the B spot */
button = ACTION_WPS_ABSETB_NEXTDIR;
break;
case 2:
button = ACTION_WPS_ABRESET;
break;
}
wps_ab_state = (wps_ab_state+1) % 3;
}
#endif /* def ACTION_WPSAB_SINGLE */
button = action_wpsab_single(button); /* iPods/X5/M5 */
switch(button)
{
@ -848,7 +844,7 @@ long gui_wps_show(void)
/* play/pause */
case ACTION_WPS_PLAY:
wps_do_playpause(true);
wps_do_action(WPS_PLAYPAUSE, true);
break;
case ACTION_WPS_VOLUP: /* fall through */

View file

@ -36,10 +36,18 @@ struct wps_state
long gui_wps_show(void);
enum wps_do_action_type
{
WPS_PLAY = AUDIO_STATUS_PLAY,
WPS_PAUSE = AUDIO_STATUS_PAUSE,
WPS_PLAYPAUSE, /* toggle */
};
void wps_do_action(enum wps_do_action_type, bool updatewps);
/* fade (if enabled) and pause the audio, optionally rewind a little */
void pause_action(bool updatewps);
void unpause_action(bool updatewps);
void wps_do_playpause(bool updatewps);
#define pause_action(update) wps_do_action(WPS_PAUSE, update)
#define unpause_action(update) wps_do_action(WPS_PLAY, update)
#define wps_do_playpause(update) wps_do_action(WPS_PLAYPAUSE, update)
struct wps_state *get_wps_state(void);