[rhythmbox] generic-player: implement move-to-trash in playlists
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Subject: [rhythmbox] generic-player: implement move-to-trash in playlists
- Date: Wed, 24 Jun 2009 13:11:31 +0000 (UTC)
commit 8b1b586d6030e653ad2fd62aec5f3969151498ba
Author: Jonathan Matthew <jonathan d14n org>
Date: Wed Jun 24 19:27:33 2009 +1000
generic-player: implement move-to-trash in playlists
.../rb-generic-player-playlist-source.c | 38 +++++++++-
plugins/generic-player/rb-generic-player-source.c | 82 ++++++++++++++------
plugins/generic-player/rb-generic-player-source.h | 5 +
3 files changed, 100 insertions(+), 25 deletions(-)
---
diff --git a/plugins/generic-player/rb-generic-player-playlist-source.c b/plugins/generic-player/rb-generic-player-playlist-source.c
index e2f0eef..9d604c7 100644
--- a/plugins/generic-player/rb-generic-player-playlist-source.c
+++ b/plugins/generic-player/rb-generic-player-playlist-source.c
@@ -33,6 +33,7 @@
#include <totem-pl-parser.h>
#include "rb-generic-player-playlist-source.h"
+#include "rb-generic-player-source.h"
#include "rb-debug.h"
#include "rb-plugin.h"
#include "rb-file-helpers.h"
@@ -471,12 +472,47 @@ impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSp
}
static gboolean
-rb_generic_player_playlist_source_show_popup (RBSource *source)
+impl_show_popup (RBSource *source)
{
_rb_source_show_popup (source, "/GenericPlayerPlaylistSourcePopup");
return TRUE;
}
+static gboolean
+impl_can_move_to_trash (RBSource *source)
+{
+ RBGenericPlayerPlaylistSourcePrivate *priv = GET_PRIVATE (source);
+ RBEntryView *songs;
+ GList *sel;
+ gboolean ret;
+
+ songs = rb_source_get_entry_view (source);
+ sel = rb_entry_view_get_selected_entries (songs);
+
+ ret = rb_generic_player_source_can_trash_entries (priv->player_source, sel);
+
+ g_list_foreach (sel, (GFunc) rhythmdb_entry_unref, NULL);
+ g_list_free (sel);
+
+ return ret;
+}
+
+static void
+impl_move_to_trash (RBSource *source)
+{
+ RBGenericPlayerPlaylistSourcePrivate *priv = GET_PRIVATE (source);
+ RBEntryView *songs;
+ GList *sel;
+
+ songs = rb_source_get_entry_view (source);
+ sel = rb_entry_view_get_selected_entries (songs);
+
+ rb_generic_player_source_trash_or_delete_entries (priv->player_source, sel, FALSE);
+
+ g_list_foreach (sel, (GFunc) rhythmdb_entry_unref, NULL);
+ g_list_free (sel);
+}
+
static void
rb_generic_player_playlist_source_class_init (RBGenericPlayerPlaylistSourceClass *klass)
{
diff --git a/plugins/generic-player/rb-generic-player-source.c b/plugins/generic-player/rb-generic-player-source.c
index adcfd84..d0a973d 100644
--- a/plugins/generic-player/rb-generic-player-source.c
+++ b/plugins/generic-player/rb-generic-player-source.c
@@ -901,12 +901,12 @@ impl_show_popup (RBSource *source)
return TRUE;
}
-static gboolean
-impl_can_move_to_trash (RBSource *source)
+gboolean
+rb_generic_player_source_can_trash_entries (RBGenericPlayerSource *source,
+ GList *entries)
{
RBGenericPlayerSourcePrivate *priv = GENERIC_PLAYER_SOURCE_GET_PRIVATE (source);
- RBEntryView *view;
- GList *sel, *tem;
+ GList *tem;
gboolean ret;
if (priv->read_only != FALSE)
@@ -914,10 +914,7 @@ impl_can_move_to_trash (RBSource *source)
ret = FALSE;
- view = rb_source_get_entry_view (source);
- sel = rb_entry_view_get_selected_entries (view);
-
- for (tem = sel; tem != NULL; tem = tem->next) {
+ for (tem = entries; tem != NULL; tem = tem->next) {
RhythmDBEntry *entry;
const char *uri;
GFile *file;
@@ -926,7 +923,11 @@ impl_can_move_to_trash (RBSource *source)
entry = tem->data;
uri = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION);
file = g_file_new_for_uri (uri);
- info = g_file_query_info (file, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, G_FILE_QUERY_INFO_NONE, NULL, NULL);
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ NULL);
g_object_unref (file);
if (info == NULL) {
ret = FALSE;
@@ -938,6 +939,23 @@ impl_can_move_to_trash (RBSource *source)
break;
}
+ return ret;
+}
+
+static gboolean
+impl_can_move_to_trash (RBSource *source)
+{
+ RBEntryView *view;
+ GList *sel;
+ gboolean ret;
+
+
+ view = rb_source_get_entry_view (source);
+ sel = rb_entry_view_get_selected_entries (view);
+
+ ret = rb_generic_player_source_can_trash_entries (RB_GENERIC_PLAYER_SOURCE (source),
+ sel);
+
g_list_foreach (sel, (GFunc)rhythmdb_entry_unref, NULL);
g_list_free (sel);
@@ -1190,7 +1208,7 @@ impl_can_delete (RBSource *source)
}
static gboolean
-can_delete_directory (RBSource *source, GFile *dir)
+can_delete_directory (RBGenericPlayerSource *source, GFile *dir)
{
RBGenericPlayerSourcePrivate *priv = GENERIC_PLAYER_SOURCE_GET_PRIVATE (source);
gboolean result;
@@ -1229,20 +1247,18 @@ can_delete_directory (RBSource *source, GFile *dir)
return result;
}
-static void
-impl_move_to_trash_or_delete (RBSource *source, gboolean delete)
+void
+rb_generic_player_source_trash_or_delete_entries (RBGenericPlayerSource *source,
+ GList *entries,
+ gboolean _delete)
{
RBGenericPlayerSourcePrivate *priv = GENERIC_PLAYER_SOURCE_GET_PRIVATE (source);
- RBEntryView *view;
- GList *sel, *tem;
+ GList *tem;
if (priv->read_only != FALSE)
return;
- view = rb_source_get_entry_view (source);
- sel = rb_entry_view_get_selected_entries (view);
-
- for (tem = sel; tem != NULL; tem = tem->next) {
+ for (tem = entries; tem != NULL; tem = tem->next) {
RhythmDBEntry *entry;
const char *uri;
GFile *file;
@@ -1251,7 +1267,7 @@ impl_move_to_trash_or_delete (RBSource *source, gboolean delete)
entry = tem->data;
uri = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION);
file = g_file_new_for_uri (uri);
- if (delete)
+ if (_delete)
g_file_delete (file, NULL, NULL);
else
g_file_trash (file, NULL, NULL);
@@ -1284,23 +1300,41 @@ impl_move_to_trash_or_delete (RBSource *source, gboolean delete)
g_object_unref (file);
rhythmdb_entry_delete (priv->db, entry);
- rhythmdb_commit (priv->db);
}
- g_list_foreach (sel, (GFunc)rhythmdb_entry_unref, NULL);
- g_list_free (sel);
+ rhythmdb_commit (priv->db);
}
static void
impl_move_to_trash (RBSource *source)
{
- impl_move_to_trash_or_delete (source, FALSE);
+ RBEntryView *view;
+ GList *sel;
+
+ view = rb_source_get_entry_view (source);
+ sel = rb_entry_view_get_selected_entries (view);
+
+ rb_generic_player_source_trash_or_delete_entries (RB_GENERIC_PLAYER_SOURCE (source),
+ sel,
+ FALSE);
+ g_list_foreach (sel, (GFunc)rhythmdb_entry_unref, NULL);
+ g_list_free (sel);
}
static void
impl_delete (RBSource *source)
{
- impl_move_to_trash_or_delete (source, TRUE);
+ RBEntryView *view;
+ GList *sel;
+
+ view = rb_source_get_entry_view (source);
+ sel = rb_entry_view_get_selected_entries (view);
+
+ rb_generic_player_source_trash_or_delete_entries (RB_GENERIC_PLAYER_SOURCE (source),
+ sel,
+ TRUE);
+ g_list_foreach (sel, (GFunc)rhythmdb_entry_unref, NULL);
+ g_list_free (sel);
}
static char *
diff --git a/plugins/generic-player/rb-generic-player-source.h b/plugins/generic-player/rb-generic-player-source.h
index 0920a73..53e2a1f 100644
--- a/plugins/generic-player/rb-generic-player-source.h
+++ b/plugins/generic-player/rb-generic-player-source.h
@@ -81,6 +81,11 @@ char * rb_generic_player_source_get_playlist_path (RBGenericPlayerSource *sour
gboolean rb_generic_player_is_mount_player (GMount *mount);
+void rb_generic_player_source_trash_or_delete_entries (RBGenericPlayerSource *source,
+ GList *entries,
+ gboolean _delete);
+gboolean rb_generic_player_source_can_trash_entries (RBGenericPlayerSource *source,
+ GList *entries);
/* for subclasses */
void rb_generic_player_source_add_playlist (RBGenericPlayerSource *source,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]