core: Fix Seek.length confusion
authorZeeshan Ali (Khattak) <zeeshanak@gnome.org>
Mon, 2 Aug 2010 15:03:56 +0000 (18:03 +0300)
committerZeeshan Ali (Khattak) <zeeshanak@gnome.org>
Mon, 2 Aug 2010 15:03:56 +0000 (18:03 +0300)
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
src/rygel/rygel-http-seek.vala
src/rygel/rygel-http-time-seek.vala
tests/rygel-http-byte-seek-test.vala
tests/rygel-http-time-seek-test.vala

index 0876eb7..3133b6e 100644 (file)
@@ -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);
     }
 }
index 6ed64c6..f93c3a1 100644 (file)
@@ -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 ();
index 4e4fce7..d190541 100644 (file)
@@ -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);
     }
index 6ed4d2c..d388b0f 100644 (file)
@@ -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);
     }
 }
index ce18657..d82f016 100644 (file)
@@ -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");