[rygel/wip/didl-s: 25/35] renderer: Fix triple-escaping



commit d559ec164d9f8116edab47384ad95e5cde92f58d
Author: Jens Georg <jensg openismus com>
Date:   Tue Nov 20 16:26:18 2012 +0100

    renderer: Fix triple-escaping

 src/librygel-renderer/rygel-av-transport.vala |   42 ++++++++++++++++--------
 1 files changed, 28 insertions(+), 14 deletions(-)
---
diff --git a/src/librygel-renderer/rygel-av-transport.vala b/src/librygel-renderer/rygel-av-transport.vala
index 06029b5..6b68f26 100644
--- a/src/librygel-renderer/rygel-av-transport.vala
+++ b/src/librygel-renderer/rygel-av-transport.vala
@@ -68,35 +68,36 @@ internal class Rygel.AVTransport : Service {
     public string metadata {
         owned get {
             if (this._metadata != null) {
-                if (this._metadata.has_prefix ("&lt;")) {
-                    return this._metadata;
-                }
-                return Markup.escape_text (this._metadata);
+                return this._metadata;
             } else {
                 return "";
             }
         }
 
         set {
-            this._metadata = value;
+            if (value.has_prefix ("&lt;")) {
+                this._metadata = this.unescape (value);
+            } else {
+                this._metadata = value;
+            }
         }
     }
 
     public string track_metadata {
         owned get {
             if (this.player.metadata != null) {
-                if (this.player.metadata.has_prefix ("&lt;")) {
-                    return this.player.metadata;
-                }
-
-                return Markup.escape_text (this.player.metadata);
+                return this.player.metadata;
             } else {
                 return "";
             }
         }
 
         set {
-            this.player.metadata = value;
+            if (value.has_prefix ("&lt;")) {
+                this.player.metadata = this.unescape (value);
+            } else {
+                this.player.metadata = value;
+            }
         }
     }
 
@@ -232,8 +233,10 @@ internal class Rygel.AVTransport : Service {
         log.log ("CurrentTrack",                 this.track.to_string ());
         log.log ("CurrentTrackDuration",         this.player.duration_as_str);
         log.log ("CurrentMediaDuration",         this.player.duration_as_str);
-        log.log ("CurrentTrackMetaData",         this.track_metadata);
-        log.log ("AVTransportURIMetaData",       this.metadata);
+        log.log ("CurrentTrackMetaData",
+                 Markup.escape_text (this.track_metadata));
+        log.log ("AVTransportURIMetaData",
+                 Markup.escape_text (this.metadata));
         log.log ("CurrentTrackURI",              this.track_uri);
         log.log ("AVTransportURI",               this.uri);
         log.log ("NextAVTransportURI",           "NOT_IMPLEMENTED");
@@ -686,7 +689,8 @@ internal class Rygel.AVTransport : Service {
 
     private void notify_meta_data_cb (Object player, ParamSpec p) {
         this._metadata = this.player.metadata;
-        this.changelog.log ("CurrentTrackMetadata", this.metadata);
+        this.changelog.log ("CurrentTrackMetadata",
+                            Markup.escape_text (this.metadata));
     }
 
     private async void handle_playlist (ServiceAction action) {
@@ -722,4 +726,14 @@ internal class Rygel.AVTransport : Service {
 
         action.return ();
     }
+
+    private string unescape (string input) {
+        var result = input.replace ("&quot;", "\"");
+        result = result.replace ("&lt;", "<");
+        result = result.replace ("&gt;", ">");
+        result = result.replace ("&apos;", "'");
+        result = result.replace ("&amp;", "&");
+
+        return result;
+    }
 }



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