shout2send: Add 'public' property
authorRobert Weidlich <gnomebugzilla@robert.weidlich.cc>
Mon, 4 Jan 2010 12:28:36 +0000 (09:28 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>
Mon, 4 Jan 2010 12:28:36 +0000 (09:28 -0300)
Adds a property to set 'public' flag on libshout, making
the stream listed on the server's stream directory.

Fixes #605269

ext/shout2/gstshout2.c
ext/shout2/gstshout2.h

index 3385db3..b20278d 100644 (file)
@@ -68,6 +68,7 @@ enum
 #define DEFAULT_PORT         8000
 #define DEFAULT_PASSWORD     "hackme"
 #define DEFAULT_USERNAME     "source"
+#define DEFAULT_PUBLIC     FALSE
 #define DEFAULT_STREAMNAME   ""
 #define DEFAULT_DESCRIPTION  ""
 #define DEFAULT_GENRE        ""
@@ -204,6 +205,11 @@ gst_shout2send_class_init (GstShout2sendClass * klass)
           G_PARAM_READWRITE));
 
   /* metadata */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PUBLIC,
+      g_param_spec_boolean ("public", "public",
+          "If the stream should be listed on the server's stream directory",
+          DEFAULT_PUBLIC, G_PARAM_READWRITE));
+
   g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_STREAMNAME,
       g_param_spec_string ("streamname", "streamname", "name of the stream",
           DEFAULT_STREAMNAME, G_PARAM_READWRITE));
@@ -266,6 +272,7 @@ gst_shout2send_init (GstShout2send * shout2send)
   shout2send->mount = g_strdup (DEFAULT_MOUNT);
   shout2send->url = g_strdup (DEFAULT_URL);
   shout2send->protocol = DEFAULT_PROTOCOL;
+  shout2send->ispublic = DEFAULT_PUBLIC;
 
   shout2send->tags = gst_tag_list_new ();
   shout2send->conn = NULL;
@@ -479,6 +486,12 @@ gst_shout2send_start (GstBaseSink * basesink)
   if (shout_set_password (sink->conn, sink->password) != SHOUTERR_SUCCESS)
     goto set_failed;
 
+  cur_prop = "public";
+  GST_DEBUG_OBJECT (sink, "setting %s: %u", cur_prop, sink->ispublic);
+  if (shout_set_public (sink->conn,
+          (sink->ispublic ? 1 : 0)) != SHOUTERR_SUCCESS)
+    goto set_failed;
+
   cur_prop = "streamname";
   GST_DEBUG_OBJECT (sink, "setting %s: %s", cur_prop, sink->streamname);
   if (shout_set_name (sink->conn, sink->streamname) != SHOUTERR_SUCCESS)
@@ -693,6 +706,9 @@ gst_shout2send_set_property (GObject * object, guint prop_id,
         g_free (shout2send->username);
       shout2send->username = g_strdup (g_value_get_string (value));
       break;
+    case ARG_PUBLIC:
+      shout2send->ispublic = g_value_get_boolean (value);
+      break;
     case ARG_STREAMNAME:       /* Name of the stream */
       if (shout2send->streamname)
         g_free (shout2send->streamname);
@@ -748,6 +764,9 @@ gst_shout2send_get_property (GObject * object, guint prop_id,
     case ARG_USERNAME:
       g_value_set_string (value, shout2send->username);
       break;
+    case ARG_PUBLIC:
+      g_value_set_boolean (value, shout2send->ispublic);
+      break;
     case ARG_STREAMNAME:       /* Name of the stream */
       g_value_set_string (value, shout2send->streamname);
       break;
index 6f97c77..1e3cd5b 100644 (file)
@@ -56,6 +56,7 @@ struct _GstShout2send {
   gchar *mount;
   gchar *url;
   gboolean connected;
+  gboolean ispublic;
   gchar *songmetadata;
   gchar *songartist;
   gchar *songtitle;