Decide priority based on requested transfer mode.
authorZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Wed, 28 Jan 2009 12:32:10 +0000 (12:32 +0000)
committerZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Wed, 28 Jan 2009 12:32:10 +0000 (12:32 +0000)
svn path=/trunk/; revision=481

src/rygel/rygel-seekable-response.vala

index 1ab0c5a..be8c9a8 100644 (file)
@@ -32,6 +32,8 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
     private char[] buffer;
     private size_t length;
 
+    int priority;
+
     public SeekableResponse (Soup.Server  server,
                              Soup.Message msg,
                              string       uri,
@@ -41,6 +43,7 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
 
         this.seek = seek;
         this.length = file_length;
+        this.priority = this.get_requested_priority ();
 
         if (seek != null) {
             this.length = (size_t) seek.length;
@@ -51,7 +54,7 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
         this.buffer = new char[this.length];
         this.file = File.new_for_uri (uri);
 
-        this.file.read_async (Priority.DEFAULT, null, this.on_file_read);
+        this.file.read_async (this.priority, null, this.on_file_read);
     }
 
     private void on_file_read (GLib.Object      source_object,
@@ -85,7 +88,7 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
 
         input_stream.read_async (this.buffer,
                                  this.length,
-                                 Priority.DEFAULT,
+                                 this.priority,
                                  null,
                                  on_contents_read);
     }
@@ -106,7 +109,7 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
 
         this.push_data (this.buffer, this.length);
 
-        input_stream.close_async (Priority.DEFAULT,
+        input_stream.close_async (this.priority,
                                   null,
                                   on_input_stream_closed);
     }
@@ -125,5 +128,19 @@ public class Rygel.SeekableResponse : Rygel.HTTPResponse {
 
         this.end (false, Soup.KnownStatusCode.NONE);
     }
+
+    private int get_requested_priority () {
+        var mode = this.msg.request_headers.get ("transferMode.dlna.org");
+
+        if (mode == null || mode == "Interactive") {
+            return Priority.DEFAULT;
+        } else if (mode == "Streaming") {
+            return Priority.HIGH;
+        } else if (mode == "Background") {
+            return Priority.LOW;
+        } else {
+            return Priority.DEFAULT;
+        }
+    }
 }