[rygel] core: Fix Seek.length confusion



commit f36277525cbb5563b84cc6a640574677216ef663
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Mon Aug 2 18:03:56 2010 +0300

    core: Fix Seek.length confusion
    
    Since we didn't care to specify whether Seek.length is length of the seek or
    total length of the associated resource, we intpreted it in both ways at
    different places. Now there is a separate property for both length and
    total length.
    
    This also fixes the broken seeking.

 src/rygel/rygel-http-byte-seek.vala  |    4 ++--
 src/rygel/rygel-http-seek.vala       |    7 +++++--
 src/rygel/rygel-http-time-seek.vala  |    4 ++--
 tests/rygel-http-byte-seek-test.vala |    8 ++++----
 tests/rygel-http-time-seek-test.vala |    3 ++-
 5 files changed, 15 insertions(+), 11 deletions(-)
---
diff --git a/src/rygel/rygel-http-byte-seek.vala b/src/rygel/rygel-http-byte-seek.vala
index 0876eb7..3133b6e 100644
--- a/src/rygel/rygel-http-byte-seek.vala
+++ b/src/rygel/rygel-http-byte-seek.vala
@@ -96,9 +96,9 @@ internal class Rygel.HTTPByteSeek : Rygel.HTTPSeek {
 
         range += this.start.to_string () + "-" +
                  this.stop.to_string () + "/" +
-                 this.length.to_string ();
+                 this.total_length.to_string ();
         headers.append ("Content-Range", range);
 
-        headers.set_content_length (this.stop + 1 - this.start);
+        headers.set_content_length (this.length);
     }
 }
diff --git a/src/rygel/rygel-http-seek.vala b/src/rygel/rygel-http-seek.vala
index 6ed64c6..f93c3a1 100644
--- a/src/rygel/rygel-http-seek.vala
+++ b/src/rygel/rygel-http-seek.vala
@@ -33,19 +33,22 @@ internal abstract class Rygel.HTTPSeek : GLib.Object {
     public int64 start { get; private set; }
     public int64 stop { get; private set; }
     public int64 length { get; private set; }
+    public int64 total_length { get; private set; }
 
     public HTTPSeek (Soup.Message msg,
                      int64        start,
                      int64        stop,
-                     int64        length) {
+                     int64        total_length) {
         this.msg = msg;
         this.start = start;
         this.stop = stop;
-        this.length = length;
+        this.total_length = total_length;
 
         if (length > 0) {
             this.stop = stop.clamp (start + 1, length - 1);
         }
+
+        this.length = stop + 1 - start;
     }
 
     public abstract void add_response_headers ();
diff --git a/src/rygel/rygel-http-time-seek.vala b/src/rygel/rygel-http-time-seek.vala
index 4e4fce7..d190541 100644
--- a/src/rygel/rygel-http-time-seek.vala
+++ b/src/rygel/rygel-http-time-seek.vala
@@ -93,9 +93,9 @@ internal class Rygel.HTTPTimeSeek : Rygel.HTTPSeek {
         // TimeSeekRange.dlna.org: npt=START_TIME-END_TIME/DURATION
         double start = (double) this.start / SECOND;
         double stop = (double) this.stop / SECOND;
-        double length = (double) this.length / SECOND;
+        double total = (double) this.total_length / SECOND;
 
-        var range = "npt=%.2f-%.2f/%.2f".printf (start, stop, length);
+        var range = "npt=%.2f-%.2f/%.2f".printf (start, stop, total);
 
         this.msg.response_headers.append ("TimeSeekRange.dlna.org", range);
     }
diff --git a/tests/rygel-http-byte-seek-test.vala b/tests/rygel-http-byte-seek-test.vala
index 6ed4d2c..d388b0f 100644
--- a/tests/rygel-http-byte-seek-test.vala
+++ b/tests/rygel-http-byte-seek-test.vala
@@ -190,11 +190,11 @@ private class Rygel.HTTPByteSeekTest : GLib.Object {
         assert (seek.stop == stop);
 
         if (request.thumbnail != null) {
-            assert (seek.length == request.thumbnail.size);
+            assert (seek.total_length == request.thumbnail.size);
         } else if (request.subtitle != null) {
-            assert (seek.length == request.subtitle.size);
+            assert (seek.total_length == request.subtitle.size);
         } else {
-            assert (seek.length == request.item.size);
+            assert (seek.total_length == request.item.size);
         }
 
         var header = request.msg.response_headers.get ("Accept-Ranges");
@@ -204,6 +204,6 @@ private class Rygel.HTTPByteSeekTest : GLib.Object {
         assert (this.range_regex.match (header));
 
         assert (request.msg.response_headers.get_content_length () ==
-                seek.stop + 1 - seek.start);
+                seek.length);
     }
 }
diff --git a/tests/rygel-http-time-seek-test.vala b/tests/rygel-http-time-seek-test.vala
index ce18657..d82f016 100644
--- a/tests/rygel-http-time-seek-test.vala
+++ b/tests/rygel-http-time-seek-test.vala
@@ -176,7 +176,8 @@ private class Rygel.HTTPTimeSeekTest : GLib.Object {
         assert (seek != null);
         assert (seek.start == start * SECOND);
         assert (seek.stop == stop * SECOND);
-        assert (seek.length == request.item.duration * SECOND);
+        assert (seek.length == seek.stop + 1 - seek.start);
+        assert (seek.total_length == request.item.duration * SECOND);
 
         var header = request.msg.response_headers.get (
                                         "TimeSeekRange.dlna.org");



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