[rygel] renderer-gst: Enable setting the user_agent



commit 1b0229df9d1ab07d617d116d064d3b0d41812a6b
Author: Aron Rosenberg <aronrosenberg gmail com>
Date:   Sat May 2 17:01:00 2015 +0000

    renderer-gst: Enable setting the user_agent
    
    Setting the user_agent on the underlying gst element
    
    Including modifications to use the user-agent in HEAD requests as well to be
    consistent.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=748769

 examples/renderer-plugins/C/example-player.c       |   42 +++++++++++++++++++-
 .../renderer-plugins/vala/example-player-vala.vala |    5 +-
 .../rygel-playbin-player.vala                      |    3 +
 src/librygel-renderer/rygel-av-transport.vala      |   10 ++++-
 src/librygel-renderer/rygel-media-player.vala      |    3 +
 src/plugins/mpris/rygel-mpris-player.vala          |    6 ++-
 6 files changed, 63 insertions(+), 6 deletions(-)
---
diff --git a/examples/renderer-plugins/C/example-player.c b/examples/renderer-plugins/C/example-player.c
index 75accc4..3ab9c7f 100644
--- a/examples/renderer-plugins/C/example-player.c
+++ b/examples/renderer-plugins/C/example-player.c
@@ -35,7 +35,8 @@ enum  {
   RYGEL_EXAMPLE_PLAYER_ALLOWED_PLAYBACK_SPEEDS,
   RYGEL_EXAMPLE_PLAYER_CAN_SEEK_BYTES,
   RYGEL_EXAMPLE_PLAYER_BYTE_POSITION,
-  RYGEL_EXAMPLE_PLAYER_SIZE
+  RYGEL_EXAMPLE_PLAYER_SIZE,
+  RYGEL_EXAMPLE_PLAYER_USER_AGENT
 };
 
 static void rygel_example_player_rygel_media_player_interface_init (RygelMediaPlayerIface  *iface);
@@ -112,6 +113,13 @@ rygel_example_player_real_get_size (RygelMediaPlayer* base);
 static gboolean
 rygel_example_player_real_get_can_seek_bytes (RygelMediaPlayer* base);
 
+static gchar *
+rygel_example_player_real_get_user_agent (RygelMediaPlayer* base);
+
+static void
+rygel_example_player_real_set_user_agent (RygelMediaPlayer* base,
+                                          const char*       user_agent);
+
 static void
 _rygel_example_player_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 
@@ -136,6 +144,7 @@ struct _RygelExamplePlayerPrivate {
   gint64 _duration;
   gint64 _position;
   gchar *playback_speed;
+  gchar *user_agent;
 };
 
 static const gchar* RYGEL_EXAMPLE_PLAYER_PROTOCOLS[] = {"http-get", NULL};
@@ -173,6 +182,8 @@ rygel_example_player_rygel_media_player_interface_init (RygelMediaPlayerIface *i
   iface->get_can_seek_bytes = rygel_example_player_real_get_can_seek_bytes;
   iface->get_size = rygel_example_player_real_get_size;
   iface->get_byte_position = rygel_example_player_real_get_byte_position;
+  iface->set_user_agent = rygel_example_player_real_set_user_agent;
+  iface->get_user_agent = rygel_example_player_real_get_user_agent;
 }
 
 static void
@@ -240,6 +251,10 @@ rygel_example_player_class_init (RygelExamplePlayerClass *klass) {
   g_object_class_override_property (gobject_class,
                                     RYGEL_EXAMPLE_PLAYER_SIZE,
                                     "size");
+
+  g_object_class_override_property (gobject_class,
+                                    RYGEL_EXAMPLE_PLAYER_USER_AGENT,
+                                    "user-agent");
 }
 
 static void
@@ -480,6 +495,25 @@ rygel_example_player_real_get_can_seek_bytes (RygelMediaPlayer* base)
 }
 
 static void
+rygel_example_player_real_set_user_agent (RygelMediaPlayer* base,
+                                          const char*       user_agent)
+{
+    RygelExamplePlayer *self = RYGEL_EXAMPLE_PLAYER (base);
+
+    g_clear_pointer (&(self->priv->user_agent), g_free);
+
+    self->priv->user_agent = g_strdup (user_agent);
+}
+
+static gchar *
+rygel_example_player_real_get_user_agent (RygelMediaPlayer* base)
+{
+    RygelExamplePlayer *self = RYGEL_EXAMPLE_PLAYER (base);
+
+    return g_strdup (self->priv->user_agent);
+}
+
+static void
 _rygel_example_player_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) {
   RygelMediaPlayer *base = RYGEL_MEDIA_PLAYER (object);
 
@@ -530,6 +564,9 @@ _rygel_example_player_get_property (GObject *object, guint property_id, GValue *
     case RYGEL_EXAMPLE_PLAYER_SIZE:
       g_value_set_int64 (value, rygel_media_player_get_size (base));
       break;
+    case RYGEL_EXAMPLE_PLAYER_USER_AGENT:
+      g_value_take_string (value, rygel_media_player_get_user_agent (base));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -563,6 +600,9 @@ _rygel_example_player_set_property (GObject *object, guint property_id, const GV
     case RYGEL_EXAMPLE_PLAYER_PLAYBACK_SPEED:
       rygel_media_player_set_playback_speed (base, g_value_get_string (value));
       break;
+    case RYGEL_EXAMPLE_PLAYER_USER_AGENT:
+      rygel_media_player_set_user_agent (base, g_value_get_string (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
diff --git a/examples/renderer-plugins/vala/example-player-vala.vala 
b/examples/renderer-plugins/vala/example-player-vala.vala
index 660e956..07cd619 100644
--- a/examples/renderer-plugins/vala/example-player-vala.vala
+++ b/examples/renderer-plugins/vala/example-player-vala.vala
@@ -36,9 +36,6 @@ public class Rygel.Example.PlayerVala : GLib.Object, Rygel.MediaPlayer {
                                          "image/png" };
     private static PlayerVala player;
 
-    private PlayerVala () {
-    }
-
     public static PlayerVala get_default () {
         if (player == null) {
             player = new PlayerVala ();
@@ -47,6 +44,8 @@ public class Rygel.Example.PlayerVala : GLib.Object, Rygel.MediaPlayer {
         return player;
     }
 
+    public string? user_agent { owned get; set; }
+
     private string _playback_state = "NO_MEDIA_PRESENT";
     public string playback_state {
         owned get {
diff --git a/src/librygel-renderer-gst/rygel-playbin-player.vala 
b/src/librygel-renderer-gst/rygel-playbin-player.vala
index 1308606..b744695 100644
--- a/src/librygel-renderer-gst/rygel-playbin-player.vala
+++ b/src/librygel-renderer-gst/rygel-playbin-player.vala
@@ -266,6 +266,8 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
         }
     }
 
+    public string? user_agent { owned get; set; }
+
     private string _content_features = "";
     private ProtocolInfo protocol_info;
     public string? content_features {
@@ -596,6 +598,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
             structure.set_value ("transferMode.dlna.org", this.transfer_mode);
 
             source.extra_headers = structure;
+            source.user_agent = this.user_agent;
         }
     }
 
diff --git a/src/librygel-renderer/rygel-av-transport.vala b/src/librygel-renderer/rygel-av-transport.vala
index da95bb4..4d76155 100644
--- a/src/librygel-renderer/rygel-av-transport.vala
+++ b/src/librygel-renderer/rygel-av-transport.vala
@@ -134,7 +134,15 @@ internal class Rygel.AVTransport : Service {
 
         this.player.notify["duration"].connect (this.notify_duration_cb);
 
-        this.session = new Session ();
+        // Work-around for missing default values on properties in interfaces,
+        // see bgo#702774
+        if (this.player.user_agent == null) {
+            this.player.user_agent = "Rygel/%s DLNADOC/1.50 UPnP/1.0".printf
+                                        (BuildConfig.PACKAGE_VERSION);
+        }
+
+        this.session = new Session.with_options (Soup.SESSION_USER_AGENT,
+                                                 this.player.user_agent);
 
         this.protocol_info = plugin.get_protocol_info ();
     }
diff --git a/src/librygel-renderer/rygel-media-player.vala b/src/librygel-renderer/rygel-media-player.vala
index da9adb4..82cbce2 100644
--- a/src/librygel-renderer/rygel-media-player.vala
+++ b/src/librygel-renderer/rygel-media-player.vala
@@ -100,6 +100,9 @@ public interface Rygel.MediaPlayer : GLib.Object {
         }
     }
 
+    /// The User-Agent header to use in HTTP requests
+    public abstract string? user_agent { owned get; set; }
+
     /**
      * Seek to a point in the current media that is
      * this many microseconds after the start.
diff --git a/src/plugins/mpris/rygel-mpris-player.vala b/src/plugins/mpris/rygel-mpris-player.vala
index 9a561b0..a6cad11 100644
--- a/src/plugins/mpris/rygel-mpris-player.vala
+++ b/src/plugins/mpris/rygel-mpris-player.vala
@@ -1,12 +1,14 @@
 /*
  * Copyright (C) 2008 OpenedHand Ltd.
  * Copyright (C) 2009 Nokia Corporation.
- * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Copyright (C) 2013 Cable Television Laboratories, Inc.
+ * Copyright (C) 2015 Jens Georg
  *
  * Author: Jorn Baayen <jorn openedhand com>
  *         Zeeshan Ali (Khattak) <zeeshanak gnome org>
  *                               <zeeshan ali nokia com>
  *         Sivakumar Mani <siva orexel com>
+ *         Jens Georg <mail jensge org>
  *
  * Rygel is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -33,6 +35,8 @@ public class Rygel.MPRIS.Player : GLib.Object, Rygel.MediaPlayer {
 
     private PlayerProxy actual_player;
 
+    public string? user_agent { owned get; set; }
+
     public string playback_state {
         owned get {
             return this.mpris_to_upnp_state (actual_player.playback_status);


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