Allow modifying playlist order
This commit is contained in:
		
							parent
							
								
									c5fcc1c8c1
								
							
						
					
					
						commit
						d0c0af0e38
					
				
							
								
								
									
										29
									
								
								nncmpp.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								nncmpp.c
									
									
									
									
									
								
							| @ -1516,6 +1516,8 @@ app_goto_tab (int tab_index) | |||||||
| 	\ | 	\ | ||||||
| 	XX( SCROLL_UP,          "Scroll up"               ) \ | 	XX( SCROLL_UP,          "Scroll up"               ) \ | ||||||
| 	XX( SCROLL_DOWN,        "Scroll down"             ) \ | 	XX( SCROLL_DOWN,        "Scroll down"             ) \ | ||||||
|  | 	XX( MOVE_UP,            "Move selection up"       ) \ | ||||||
|  | 	XX( MOVE_DOWN,          "Move selection down"     ) \ | ||||||
| 	\ | 	\ | ||||||
| 	XX( GOTO_TOP,           "Go to the top"           ) \ | 	XX( GOTO_TOP,           "Go to the top"           ) \ | ||||||
| 	XX( GOTO_BOTTOM,        "Go to the bottom"        ) \ | 	XX( GOTO_BOTTOM,        "Go to the bottom"        ) \ | ||||||
| @ -1817,6 +1819,8 @@ g_default_bindings[] = | |||||||
| 	{ "End",        ACTION_GOTO_BOTTOM,        {}}, | 	{ "End",        ACTION_GOTO_BOTTOM,        {}}, | ||||||
| 	{ "M-<",        ACTION_GOTO_TOP,           {}}, | 	{ "M-<",        ACTION_GOTO_TOP,           {}}, | ||||||
| 	{ "M->",        ACTION_GOTO_BOTTOM,        {}}, | 	{ "M->",        ACTION_GOTO_BOTTOM,        {}}, | ||||||
|  | 	{ "S-Up",       ACTION_MOVE_UP,            {}}, | ||||||
|  | 	{ "S-Down",     ACTION_MOVE_DOWN,          {}}, | ||||||
| 	{ "Up",         ACTION_GOTO_ITEM_PREVIOUS, {}}, | 	{ "Up",         ACTION_GOTO_ITEM_PREVIOUS, {}}, | ||||||
| 	{ "Down",       ACTION_GOTO_ITEM_NEXT,     {}}, | 	{ "Down",       ACTION_GOTO_ITEM_NEXT,     {}}, | ||||||
| 	{ "k",          ACTION_GOTO_ITEM_PREVIOUS, {}}, | 	{ "k",          ACTION_GOTO_ITEM_PREVIOUS, {}}, | ||||||
| @ -1929,6 +1933,27 @@ current_tab_on_item_draw (size_t item_index, struct row_buffer *buffer, | |||||||
| 	free (s); | 	free (s); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static bool | ||||||
|  | current_tab_move_song (const char *id, int diff) | ||||||
|  | { | ||||||
|  | 	struct mpd_client *c = &g.client; | ||||||
|  | 	int target = g_current_tab.item_selected + diff; | ||||||
|  | 	if (c->state != MPD_CONNECTED || target < 0) | ||||||
|  | 		return false; | ||||||
|  | 
 | ||||||
|  | 	char *target_str = xstrdup_printf ("%d", target); | ||||||
|  | 	mpd_client_send_command (c, "moveid", id, target_str, NULL); | ||||||
|  | 	free (target_str); | ||||||
|  | 	mpd_client_add_task (c, mpd_on_simple_response, NULL); | ||||||
|  | 	mpd_client_idle (c, 0); | ||||||
|  | 
 | ||||||
|  | 	// XXX: this behaves a bit erratically, as even if we waited for
 | ||||||
|  | 	//   a confirmation from the daemon, it would precede the playlist update
 | ||||||
|  | 	g_current_tab.item_selected = target; | ||||||
|  | 	app_move_selection (0); | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static bool | static bool | ||||||
| current_tab_on_action (enum action action) | current_tab_on_action (enum action action) | ||||||
| { | { | ||||||
| @ -1939,10 +1964,10 @@ current_tab_on_action (enum action action) | |||||||
| 	if (!map || !(id = compact_map_find (map, "id"))) | 	if (!map || !(id = compact_map_find (map, "id"))) | ||||||
| 		return false; | 		return false; | ||||||
| 
 | 
 | ||||||
| 	// TODO: add actions to move the current selection up or down with Shift,
 |  | ||||||
| 	//   with multiple items we need to use all number indexes, but "moveid"
 |  | ||||||
| 	switch (action) | 	switch (action) | ||||||
| 	{ | 	{ | ||||||
|  | 	case ACTION_MOVE_UP:   return current_tab_move_song (id, -1); | ||||||
|  | 	case ACTION_MOVE_DOWN: return current_tab_move_song (id,  1); | ||||||
| 	case ACTION_CHOOSE:    return MPD_SIMPLE ("playid",   id); | 	case ACTION_CHOOSE:    return MPD_SIMPLE ("playid",   id); | ||||||
| 	case ACTION_DELETE:    return MPD_SIMPLE ("deleteid", id); | 	case ACTION_DELETE:    return MPD_SIMPLE ("deleteid", id); | ||||||
| 	default: | 	default: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user