shout2send: Add 'public' property

Adds a property to set 'public' flag on libshout, making
the stream listed on the server's stream directory.

Fixes #605269
diff --git a/ext/shout2/gstshout2.c b/ext/shout2/gstshout2.c
index 3385db3..b20278d 100644
--- a/ext/shout2/gstshout2.c
+++ b/ext/shout2/gstshout2.c
@@ -68,6 +68,7 @@
 #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 @@
           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 @@
   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 @@
   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 @@
         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 @@
     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;
diff --git a/ext/shout2/gstshout2.h b/ext/shout2/gstshout2.h
index 6f97c77..1e3cd5b 100644
--- a/ext/shout2/gstshout2.h
+++ b/ext/shout2/gstshout2.h
@@ -56,6 +56,7 @@
   gchar *mount;
   gchar *url;
   gboolean connected;
+  gboolean ispublic;
   gchar *songmetadata;
   gchar *songartist;
   gchar *songtitle;