/* Fix me: This considers empty fields as duplicates. */ void playlist_remove_duplicates_by_scheme (int playlist, int scheme) { int entries = playlist_entry_count (playlist); int count; if (entries < 1) return; playlist_select_all (playlist, FALSE); if (filename_comparisons[scheme] != NULL) { int (* compare) (const char * a, const char * b) = filename_comparisons[scheme]; playlist_sort_by_filename (playlist, compare); char * last = playlist_entry_get_filename (playlist, 0); for (count = 1; count < entries; count ++) { char * current = playlist_entry_get_filename (playlist, count); if (compare (last, current) == 0) playlist_entry_set_selected (playlist, count, TRUE); str_unref (last); last = current; } str_unref (last); } else if (tuple_comparisons[scheme] != NULL) { int (* compare) (const Tuple * a, const Tuple * b) = tuple_comparisons[scheme]; playlist_sort_by_tuple (playlist, compare); Tuple * last = playlist_entry_get_tuple (playlist, 0, FALSE); for (count = 1; count < entries; count ++) { Tuple * current = playlist_entry_get_tuple (playlist, count, FALSE); if (last != NULL && current != NULL && compare (last, current) == 0) playlist_entry_set_selected (playlist, count, TRUE); if (last) tuple_unref (last); last = current; } if (last) tuple_unref (last); } playlist_delete_selected (playlist); }
void drct_pl_delete_selected (int list) { int pos = playlist_get_position (list); if (get_bool (NULL, "advance_on_delete") && ! get_bool (NULL, "no_playlist_advance") && playback_get_playing () && list == playlist_get_playing () && pos >= 0 && playlist_entry_get_selected (list, pos)) { playlist_entry_set_selected (list, pos, FALSE); playlist_delete_selected (list); pos = playlist_get_position (list); /* it may have moved */ if (playlist_next_song (list, get_bool (NULL, "repeat")) && playlist_get_position (list) != pos) playback_play (0, FALSE); playlist_entry_delete (list, pos, 1); } else playlist_delete_selected (list); }
static gboolean playlist_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused) { switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) { case 0: switch (event->keyval) { case GDK_KEY_Escape: ui_playlist_notebook_position (GINT_TO_POINTER (aud_playlist_get_active ()), NULL); return TRUE; case GDK_KEY_Delete: playlist_delete_selected (); return TRUE; case GDK_KEY_Menu: popup_menu_rclick (0, event->time); return TRUE; } break; case GDK_CONTROL_MASK: switch (event->keyval) { case 'x': playlist_cut (); return TRUE; case 'c': playlist_copy (); return TRUE; case 'v': playlist_paste (); return TRUE; case 'a': aud_playlist_select_all (aud_playlist_get_active (), TRUE); return TRUE; } break; } return FALSE; }
void playlist_remove_failed (int playlist) { int entries = playlist_entry_count (playlist); int count; playlist_select_all (playlist, FALSE); for (count = 0; count < entries; count ++) { char * filename = playlist_entry_get_filename (playlist, count); /* vfs_file_test() only works for file:// URIs currently */ if (! strncmp (filename, "file://", 7) && ! vfs_file_test (filename, G_FILE_TEST_EXISTS)) playlist_entry_set_selected (playlist, count, TRUE); str_unref (filename); } playlist_delete_selected (playlist); }
void playlist_cut (void) { playlist_copy (); playlist_delete_selected (); }
void drct_pl_delete_selected (int list) { playlist_delete_selected (list); }