diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c index a81b8555f7..e40aa772cb 100644 --- a/apps/gui/gwps-common.c +++ b/apps/gui/gwps-common.c @@ -1394,6 +1394,16 @@ static const char *get_token_value(struct gui_wps *gwps, token->value.i)) return "v"; return NULL; + case WPS_TOKEN_VIEWMODE: + if (intval) + { + if (data->current_mode > limit) + data->current_mode = 1; + *intval = data->current_mode; + } + snprintf(buf, buf_size, "%d", data->current_mode); + return buf; + default: return NULL; } diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c index 9b6d6b5558..bac5032440 100644 --- a/apps/gui/gwps.c +++ b/apps/gui/gwps.c @@ -136,7 +136,7 @@ long gui_wps_show(void) bool update_track = false; int i; long last_left = 0, last_right = 0; - + bool isremote = false; wps_state_init(); #ifdef HAVE_LCD_CHARCELLS @@ -234,7 +234,10 @@ long gui_wps_show(void) #else button = get_action(CONTEXT_WPS|ALLOW_SOFTLOCK,HZ/5); #endif - +#if NB_SCREENS > 1 + isremote = get_action_statuscode(NULL)&ACTION_REMOTE; +#endif + /* Exit if audio has stopped playing. This can happen if using the sleep timer with the charger plugged or if starting a recording from F1 */ @@ -292,13 +295,23 @@ long gui_wps_show(void) break; case ACTION_WPS_BROWSE: + if (gui_wps[isremote?1:0].data->current_mode > -1) + { + /* will get set to 0 eventually again in wps_parser.c */ + gui_wps[isremote?1:0].data->current_mode = + gui_wps[isremote?1:0].data->current_mode+1; + restore = true; + } + else + { #ifdef HAVE_LCD_CHARCELLS - status_set_record(false); - status_set_audio(false); + status_set_record(false); + status_set_audio(false); #endif - FOR_NB_SCREENS(i) - gui_wps[i].display->stop_scroll(); - return GO_TO_PREVIOUS_BROWSER; + FOR_NB_SCREENS(i) + gui_wps[i].display->stop_scroll(); + return GO_TO_PREVIOUS_BROWSER; + } break; /* play/pause */ diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h index 6a4849c347..a414ca3986 100644 --- a/apps/gui/gwps.h +++ b/apps/gui/gwps.h @@ -295,7 +295,10 @@ enum wps_token_type { WPS_VIEWPORT_ENABLE, /* buttons */ - WPS_TOKEN_BUTTON_VOLUME + WPS_TOKEN_BUTTON_VOLUME, + + WPS_TOKEN_VIEWMODE + }; struct wps_token { @@ -429,6 +432,8 @@ struct wps_data /* tick the volume button was last pressed */ unsigned int button_time_volume; + /* the current mode (used with %mo tag), -1 means modes not being used */ + char current_mode; }; /* initial setup of wps_data */ diff --git a/apps/gui/wps_debug.c b/apps/gui/wps_debug.c index 5a18218a52..ad595e305a 100644 --- a/apps/gui/wps_debug.c +++ b/apps/gui/wps_debug.c @@ -435,6 +435,9 @@ static char *get_token_desc(struct wps_token *token, struct wps_data *data, snprintf(buf, bufsize, "Volume button timeout:%d", token->value.i); break; + case WPS_TOKEN_VIEWMODE: + snprintf(buf, bufsize, "viewmode"); + break; default: snprintf(buf, bufsize, "FIXME (code: %d)", token->type); diff --git a/apps/gui/wps_parser.c b/apps/gui/wps_parser.c index 1b845c9f8a..f421a0c8d4 100644 --- a/apps/gui/wps_parser.c +++ b/apps/gui/wps_parser.c @@ -162,6 +162,8 @@ static int parse_albumart_load(const char *wps_bufptr, static int parse_albumart_conditional(const char *wps_bufptr, struct wps_token *token, struct wps_data *wps_data); #endif /* HAVE_ALBUMART */ +static int parse_viewmode(const char *wps_bufptr, + struct wps_token *token, struct wps_data *wps_data); #ifdef CONFIG_RTC #define WPS_RTC_REFRESH WPS_REFRESH_DYNAMIC @@ -281,6 +283,8 @@ static const struct wps_tag all_tags[] = { { WPS_TOKEN_PLAYBACK_STATUS, "mp", WPS_REFRESH_DYNAMIC, NULL }, { WPS_TOKEN_BUTTON_VOLUME, "mv", WPS_REFRESH_DYNAMIC, parse_timeout }, + { WPS_TOKEN_VIEWMODE, "mo", WPS_REFRESH_STATIC, + parse_viewmode }, #ifdef HAVE_LCD_BITMAP { WPS_TOKEN_PEAKMETER, "pm", WPS_REFRESH_PEAK_METER, NULL }, @@ -1142,6 +1146,15 @@ static int parse_albumart_conditional(const char *wps_bufptr, }; #endif /* HAVE_ALBUMART */ +static int parse_viewmode(const char *wps_bufptr, + struct wps_token *token, + struct wps_data *wps_data) +{ + (void)wps_bufptr; (void)token; + wps_data->current_mode = 1; + /* are we going to add parameters? */ + return 0; +} /* Parse a generic token from the given string. Return the length read */ static int parse_token(const char *wps_bufptr, struct wps_data *wps_data) { @@ -1476,6 +1489,7 @@ void wps_data_init(struct wps_data *wps_data) wps_data->full_line_progressbar = false; #endif wps_data->button_time_volume = 0; + wps_data->current_mode = -1; wps_data->wps_loaded = false; }