[rhythmbox] audioscrobbler: implement get_status for radio source



commit 8d026e24774c07aca824359386837bab3dd5efd0
Author: Jamie Nicol <jamie thenicols net>
Date:   Tue Jul 6 15:57:21 2010 +0100

    audioscrobbler: implement get_status for radio source
    
    Inherit from RBStreamingSource to utilise its buffering status messages

 .../rb-audioscrobbler-radio-source.c               |   34 +++++++++++++++++++-
 .../rb-audioscrobbler-radio-source.h               |    6 ++--
 2 files changed, 36 insertions(+), 4 deletions(-)
---
diff --git a/plugins/audioscrobbler/rb-audioscrobbler-radio-source.c b/plugins/audioscrobbler/rb-audioscrobbler-radio-source.c
index caeb434..90e72d0 100644
--- a/plugins/audioscrobbler/rb-audioscrobbler-radio-source.c
+++ b/plugins/audioscrobbler/rb-audioscrobbler-radio-source.c
@@ -30,6 +30,7 @@
 #include <unistd.h>
 #include <libsoup/soup.h>
 #include <libsoup/soup-gnome.h>
+#include <glib/gi18n.h>
 #include <glib/gstdio.h>
 
 #include <totem-pl-parser.h>
@@ -128,6 +129,8 @@ static gboolean emit_coverart_uri_cb (RBAudioscrobblerRadioSource *source);
 /* RBSource implementations */
 static void impl_activate (RBSource *source);
 static RBEntryView *impl_get_entry_view (RBSource *asource);
+static void impl_get_status (RBSource *asource, char **text, char **progress_text, float *progress);
+static RBSourceEOFType impl_handle_eos (RBSource *asource);
 static void impl_delete_thyself (RBSource *asource);
 
 enum {
@@ -140,7 +143,7 @@ enum {
 	PROP_PLAY_ORDER
 };
 
-G_DEFINE_TYPE (RBAudioscrobblerRadioSource, rb_audioscrobbler_radio_source, RB_TYPE_SOURCE)
+G_DEFINE_TYPE (RBAudioscrobblerRadioSource, rb_audioscrobbler_radio_source, RB_TYPE_STREAMING_SOURCE)
 
 RBSource *
 rb_audioscrobbler_radio_source_new (RBAudioscrobblerProfileSource *parent,
@@ -202,8 +205,14 @@ rb_audioscrobbler_radio_source_class_init (RBAudioscrobblerRadioSourceClass *kla
 	object_class->set_property = rb_audioscrobbler_radio_source_set_property;
 
 	source_class = RB_SOURCE_CLASS (klass);
+	source_class->impl_can_copy = (RBSourceFeatureFunc) rb_false_function;
+	source_class->impl_can_delete = (RBSourceFeatureFunc) rb_false_function;
+	source_class->impl_can_pause = (RBSourceFeatureFunc) rb_false_function;
+	source_class->impl_try_playlist = (RBSourceFeatureFunc) rb_false_function;
 	source_class->impl_activate = impl_activate;
 	source_class->impl_get_entry_view = impl_get_entry_view;
+	source_class->impl_get_status = impl_get_status;
+	source_class->impl_handle_eos = impl_handle_eos;
 	source_class->impl_delete_thyself = impl_delete_thyself;
 
 	g_object_class_install_property (object_class,
@@ -876,6 +885,29 @@ impl_get_entry_view (RBSource *asource)
 }
 
 static void
+impl_get_status (RBSource *asource, char **text, char **progress_text, float *progress)
+{
+	RBAudioscrobblerRadioSource *source = RB_AUDIOSCROBBLER_RADIO_SOURCE (asource);
+
+	/* pulse progressbar if we're busy, otherwise see what the streaming source part of us has to say */
+	if (source->priv->is_fetching_playlist) {
+		/* Actually, we could be calling either radio.tune or radio.getPlaylist methods,
+		 * but "Tuning station" seems like a user friendly message to display.
+		 */
+		*progress_text = g_strdup (_("Tuning station"));
+		*progress = -1.0f;
+	} else {
+		rb_streaming_source_get_progress (RB_STREAMING_SOURCE (source), progress_text, progress);
+	}
+}
+
+static RBSourceEOFType
+impl_handle_eos (RBSource *asource)
+{
+	return RB_SOURCE_EOF_NEXT;
+}
+
+static void
 impl_delete_thyself (RBSource *asource)
 {
 	RBAudioscrobblerRadioSource *source;
diff --git a/plugins/audioscrobbler/rb-audioscrobbler-radio-source.h b/plugins/audioscrobbler/rb-audioscrobbler-radio-source.h
index 3c74c79..f85ecf6 100644
--- a/plugins/audioscrobbler/rb-audioscrobbler-radio-source.h
+++ b/plugins/audioscrobbler/rb-audioscrobbler-radio-source.h
@@ -29,7 +29,7 @@
 #ifndef __RB_AUDIOSCROBBLER_RADIO_SOURCE_H
 #define __RB_AUDIOSCROBBLER_RADIO_SOURCE_H
 
-#include "rb-source.h"
+#include "rb-streaming-source.h"
 #include "rb-audioscrobbler-profile-source.h"
 #include "rb-audioscrobbler-service.h"
 #include "rb-audioscrobbler-account.h"
@@ -47,14 +47,14 @@ typedef struct _RBAudioscrobblerRadioSourcePrivate RBAudioscrobblerRadioSourcePr
 
 typedef struct
 {
-	RBSource parent;
+	RBStreamingSource parent;
 
 	RBAudioscrobblerRadioSourcePrivate *priv;
 } RBAudioscrobblerRadioSource;
 
 typedef struct
 {
-	RBSourceClass parent_class;
+	RBStreamingSourceClass parent_class;
 } RBAudioscrobblerRadioSourceClass;
 
 GType rb_audioscrobbler_radio_source_get_type (void);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]