Compare commits

...

3 Commits

Author SHA1 Message Date
5aa07fd8af
Clean up mpd_process_info() better 2021-12-07 20:38:02 +01:00
2060da4a8e
Do not jump to beginning after unqueueing
Instead, assume that the whole previously selected range
has been removed, and try to go after or before it accordingly.
2021-12-07 20:34:32 +01:00
f5b5cec340
Clean up unreadable code 2021-12-07 20:10:35 +01:00

View File

@ -154,6 +154,8 @@ xbasename (const char *path)
return last_slash ? last_slash + 1 : path; return last_slash ? last_slash + 1 : path;
} }
static char *xstrdup0 (const char *s) { return s ? xstrdup (s) : NULL; }
static char * static char *
latin1_to_utf8 (const char *latin1) latin1_to_utf8 (const char *latin1)
{ {
@ -4364,7 +4366,7 @@ mpd_find_pos_of_id (const char *desired_id)
return -1; return -1;
} }
static char * static const char *
mpd_id_of_pos (int pos) mpd_id_of_pos (int pos)
{ {
compact_map_t map = item_list_get (&g.playlist, pos); compact_map_t map = item_list_get (&g.playlist, pos);
@ -4374,29 +4376,39 @@ mpd_id_of_pos (int pos)
static void static void
mpd_process_info (const struct strv *data) mpd_process_info (const struct strv *data)
{ {
int *selected = &g_current_tab.item_selected; struct tab *tab = &g_current_tab;
int *marked = &g_current_tab.item_mark; char *prev_sel_id = xstrdup0 (mpd_id_of_pos (tab->item_selected));
char *prev_sel_id = mpd_id_of_pos (*selected); char *prev_mark_id = xstrdup0 (mpd_id_of_pos (tab->item_mark));
char *prev_mark_id = mpd_id_of_pos (*marked); char *fallback_id = NULL;
if (prev_sel_id) prev_sel_id = xstrdup (prev_sel_id);
if (prev_mark_id) prev_mark_id = xstrdup (prev_mark_id); struct tab_range r = tab_selection_range (g.active_tab);
if (r.upto >= 0)
{
if (!(fallback_id = xstrdup0 (mpd_id_of_pos (r.upto + 1))))
fallback_id = xstrdup0 (mpd_id_of_pos (r.from - 1));
}
mpd_process_info_data (data); mpd_process_info_data (data);
const char *sel_id = mpd_id_of_pos (*selected); const char *sel_id = mpd_id_of_pos (tab->item_selected);
const char *mark_id = mpd_id_of_pos (*marked); const char *mark_id = mpd_id_of_pos (tab->item_mark);
if (prev_mark_id && (!mark_id || strcmp (prev_mark_id, mark_id))) if (prev_mark_id && (!mark_id || strcmp (prev_mark_id, mark_id)))
*marked = mpd_find_pos_of_id (prev_mark_id); tab->item_mark = mpd_find_pos_of_id (prev_mark_id);
if (prev_sel_id && (!sel_id || strcmp (prev_sel_id, sel_id))) if (prev_sel_id && (!sel_id || strcmp (prev_sel_id, sel_id)))
{ {
if ((*selected = mpd_find_pos_of_id (prev_sel_id)) < 0) if ((tab->item_selected = mpd_find_pos_of_id (prev_sel_id)) < 0)
*marked = -1; {
tab->item_mark = -1;
if (fallback_id)
tab->item_selected = mpd_find_pos_of_id (fallback_id);
}
app_move_selection (0); app_move_selection (0);
} }
free (prev_sel_id); free (prev_sel_id);
free (prev_mark_id); free (prev_mark_id);
free (fallback_id);
} }
static void static void