[rhythmbox] media-player: use the batch to monitor the transfer of files to the device
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] media-player: use the batch to monitor the transfer of files to the device
- Date: Tue, 3 Aug 2010 05:41:17 +0000 (UTC)
commit 43775f8751b1b7a05833e8b13bce238bd66f173f
Author: Jonathan Matthew <jonathan d14n org>
Date: Tue Aug 3 15:37:14 2010 +1000
media-player: use the batch to monitor the transfer of files to the device
Rather than using the track_added and track_add_error methods to manage the
list of outstanding transfers, we can just wait for the batch to complete or be
cancelled.
plugins/ipod/rb-ipod-source.c | 3 -
plugins/mtpdevice/rb-mtp-source.c | 5 --
sources/rb-media-player-source.c | 77 ++++++++++---------------------------
3 files changed, 20 insertions(+), 65 deletions(-)
---
diff --git a/plugins/ipod/rb-ipod-source.c b/plugins/ipod/rb-ipod-source.c
index 735b6bb..2f8b018 100644
--- a/plugins/ipod/rb-ipod-source.c
+++ b/plugins/ipod/rb-ipod-source.c
@@ -1485,9 +1485,6 @@ impl_track_added (RBRemovableMediaSource *source,
g_object_unref (db);
- /* chain up to parent class for sync */
- RB_REMOVABLE_MEDIA_SOURCE_CLASS (rb_ipod_source_parent_class)->impl_track_added (source, entry, dest, filesize, mimetype);
-
return FALSE;
}
diff --git a/plugins/mtpdevice/rb-mtp-source.c b/plugins/mtpdevice/rb-mtp-source.c
index 3a44337..1f1b66f 100644
--- a/plugins/mtpdevice/rb-mtp-source.c
+++ b/plugins/mtpdevice/rb-mtp-source.c
@@ -1127,9 +1127,6 @@ impl_track_added (RBRemovableMediaSource *source,
g_idle_add ((GSourceFunc) request_album_art_idle, artdata);
}
queue_free_space_update (RB_MTP_SOURCE (source));
-
- /* chain up to parent class for sync */
- RB_REMOVABLE_MEDIA_SOURCE_CLASS (rb_mtp_source_parent_class)->impl_track_added (source, entry, dest, filesize, mimetype);
return FALSE;
}
@@ -1149,8 +1146,6 @@ impl_track_add_error (RBRemovableMediaSource *source,
rb_debug ("track-add-error called, but can't find a track for dest URI %s", dest);
}
- /* chain up to parent class for sync */
- RB_REMOVABLE_MEDIA_SOURCE_CLASS (rb_mtp_source_parent_class)->impl_track_add_error (source, entry, dest, error);
return TRUE;
}
diff --git a/sources/rb-media-player-source.c b/sources/rb-media-player-source.c
index 4c21b4e..b548fac 100644
--- a/sources/rb-media-player-source.c
+++ b/sources/rb-media-player-source.c
@@ -66,7 +66,6 @@ typedef struct {
/* sync state */
RBSyncState *sync_state;
- GList *sync_add_remaining;
} RBMediaPlayerSourcePrivate;
@@ -88,19 +87,6 @@ static void rb_media_player_source_get_property (GObject *object,
GParamSpec *pspec);
static void rb_media_player_source_constructed (GObject *object);
-static gboolean rb_media_player_source_track_added (RBRemovableMediaSource *source,
- RhythmDBEntry *entry,
- const char *uri,
- guint64 dest_size,
- const char *mimetype);
-static gboolean rb_media_player_source_track_add_error (RBRemovableMediaSource *source,
- RhythmDBEntry *entry,
- const char *uri,
- GError *error);
-
-static gboolean sync_idle_cb_update_sync (RBMediaPlayerSource *source);
-
-static void track_add_done (RBMediaPlayerSource *source, RhythmDBEntry *entry);
static void sync_cmd (GtkAction *action, RBSource *source);
static gboolean sync_idle_delete_entries (RBMediaPlayerSource *source);
@@ -144,7 +130,6 @@ static void
rb_media_player_source_class_init (RBMediaPlayerSourceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- RBRemovableMediaSourceClass *rms_class = RB_REMOVABLE_MEDIA_SOURCE_CLASS (klass);
object_class->dispose = rb_media_player_source_dispose;
@@ -152,9 +137,6 @@ rb_media_player_source_class_init (RBMediaPlayerSourceClass *klass)
object_class->get_property = rb_media_player_source_get_property;
object_class->constructed = rb_media_player_source_constructed;
- rms_class->impl_track_added = rb_media_player_source_track_added;
- rms_class->impl_track_add_error = rb_media_player_source_track_add_error;
-
klass->impl_get_entries = NULL;
klass->impl_get_capacity = NULL;
klass->impl_get_free_space = NULL;
@@ -242,27 +224,6 @@ rb_media_player_source_constructed (GObject *object)
priv->sync_action = gtk_action_group_get_action (action_group, "MediaPlayerSourceSync");
}
-static gboolean
-rb_media_player_source_track_added (RBRemovableMediaSource *source,
- RhythmDBEntry *entry,
- const char *uri,
- guint64 dest_size,
- const char *mimetype)
-{
- track_add_done (RB_MEDIA_PLAYER_SOURCE (source), entry);
- return TRUE;
-}
-
-static gboolean
-rb_media_player_source_track_add_error (RBRemovableMediaSource *source,
- RhythmDBEntry *entry,
- const char *uri,
- GError *error)
-{
- track_add_done (RB_MEDIA_PLAYER_SOURCE (source), entry);
- return TRUE;
-}
-
/* must be called once device information is available via source properties */
void
rb_media_player_source_load (RBMediaPlayerSource *source)
@@ -547,25 +508,21 @@ sync_idle_cb_playlists (RBMediaPlayerSource *source)
}
static void
-track_add_done (RBMediaPlayerSource *source, RhythmDBEntry *entry)
+transfer_batch_complete_cb (RBTrackTransferBatch *batch, RBMediaPlayerSource *source)
{
- RBMediaPlayerSourcePrivate *priv = MEDIA_PLAYER_SOURCE_GET_PRIVATE (source);
- GList *l;
- /* remove the entry from the set of transfers we're waiting for;
- * if the set is now empty, trigger the next sync stage.
- */
+ rb_debug ("finished transferring files to the device");
+ g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source);
+}
- l = g_list_find (priv->sync_add_remaining, entry);
- if (l != NULL) {
- priv->sync_add_remaining = g_list_remove_link (priv->sync_add_remaining, l);
- if (priv->sync_add_remaining == NULL) {
- rb_debug ("finished transferring files to the device");
- g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source);
- }
- rhythmdb_entry_unref (entry);
- }
+static void
+transfer_batch_cancelled_cb (RBTrackTransferBatch *batch, RBMediaPlayerSource *source)
+{
+ /* don't try to update playlists, just clean up */
+ rb_debug ("sync file transfer to the device was cancelled");
+ g_idle_add ((GSourceFunc) sync_idle_cb_cleanup, source);
}
+
static void
sync_delete_done_cb (RBMediaPlayerSource *source, gpointer dontcare)
{
@@ -574,11 +531,17 @@ sync_delete_done_cb (RBMediaPlayerSource *source, gpointer dontcare)
/* Transfer needed tracks and podcasts from itinerary to device */
if (priv->sync_state->sync_add_count != 0) {
+ RBTrackTransferBatch *batch;
rb_debug ("transferring %d files to media player", priv->sync_state->sync_add_count);
- priv->sync_add_remaining = g_list_copy (priv->sync_state->sync_to_add);
- g_list_foreach (priv->sync_add_remaining, (GFunc) rhythmdb_entry_ref, NULL);
- rb_source_paste (RB_SOURCE (source), priv->sync_add_remaining);
+ batch = rb_source_paste (RB_SOURCE (source), priv->sync_state->sync_to_add);
+ if (batch != NULL) {
+ g_signal_connect_object (batch, "complete", G_CALLBACK (transfer_batch_complete_cb), source, 0);
+ g_signal_connect_object (batch, "cancelled", G_CALLBACK (transfer_batch_cancelled_cb), source, 0);
+ } else {
+ rb_debug ("weird, transfer was apparently synchronous");
+ g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source);
+ }
} else {
rb_debug ("no files to transfer to the device");
g_idle_add ((GSourceFunc) sync_idle_cb_playlists, source);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]