summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Georg <jensg@openismus.com>2012-12-01 22:52:38 +0100
committerJens Georg <jensg@openismus.com>2012-12-06 08:08:53 +0100
commite6dd17a6581eb63d5fdcb1edd76b7011a36f9060 (patch)
tree3787d526da6f2a0110b55a5ca4920425a49ec336 /src
parenta6ae6de0bb95b1feec289673b08bb3e43caa787d (diff)
downloadrygel-e6dd17a6581eb63d5fdcb1edd76b7011a36f9060.tar.gz
renderer: Check player if it can do time-seek
Diffstat (limited to 'src')
-rw-r--r--src/librygel-renderer-gst/rygel-playbin-player.vala7
-rw-r--r--src/librygel-renderer/rygel-media-player.vala3
-rw-r--r--src/librygel-renderer/rygel-player-controller.vala18
-rw-r--r--src/plugins/mpris/rygel-mpris-player.vala2
4 files changed, 27 insertions, 3 deletions
diff --git a/src/librygel-renderer-gst/rygel-playbin-player.vala b/src/librygel-renderer-gst/rygel-playbin-player.vala
index e7388fd5..26166997 100644
--- a/src/librygel-renderer-gst/rygel-playbin-player.vala
+++ b/src/librygel-renderer-gst/rygel-playbin-player.vala
@@ -206,6 +206,13 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
}
}
+ public bool can_seek {
+ get {
+ return this.transfer_mode != TRANSFER_MODE_INTERACTIVE &&
+ ! this.mime_type.has_prefix ("image/");
+ }
+ }
+
private string _content_features = "";
private ProtocolInfo protocol_info;
public string? content_features {
diff --git a/src/librygel-renderer/rygel-media-player.vala b/src/librygel-renderer/rygel-media-player.vala
index 81a0acd2..68ecd0a1 100644
--- a/src/librygel-renderer/rygel-media-player.vala
+++ b/src/librygel-renderer/rygel-media-player.vala
@@ -54,6 +54,9 @@ public interface Rygel.MediaPlayer : GLib.Object {
/// The mime-type of the currently-playing media
public abstract string? mime_type { owned get; set; }
+ /// The current media supports time-based seeking
+ public abstract bool can_seek { get; }
+
/**
* The contents of the contentFeatures.dlna.org HTTP header,
* containing the 4th field of the protocol info for the current
diff --git a/src/librygel-renderer/rygel-player-controller.vala b/src/librygel-renderer/rygel-player-controller.vala
index 2ac1c35e..4f4be7cd 100644
--- a/src/librygel-renderer/rygel-player-controller.vala
+++ b/src/librygel-renderer/rygel-player-controller.vala
@@ -77,16 +77,28 @@ internal class Rygel.PlayerController : Object {
public string current_transport_actions {
owned get {
+ string actions = null;
switch (this._playback_state) {
case "PLAYING":
case "TRANSITIONING":
- return "Stop,Seek,X_DLNA_SeekTime,Pause";
+ actions = "Stop,Seek,Pause";
+ break;
case "STOPPED":
case "PAUSED_PLAYBACK":
- return "Play,Seek,X_DLNA_SeekTime";
+ actions = "Play,Seek";
+ break;
default:
- return "";
+ break;
}
+ if (actions != null && this.player.can_seek) {
+ actions += ",X_DLNA_SeekTime";
+ }
+
+ if (actions == null) {
+ return "";
+ }
+
+ return actions;
}
}
diff --git a/src/plugins/mpris/rygel-mpris-player.vala b/src/plugins/mpris/rygel-mpris-player.vala
index 80e95693..df12c1e6 100644
--- a/src/plugins/mpris/rygel-mpris-player.vala
+++ b/src/plugins/mpris/rygel-mpris-player.vala
@@ -87,6 +87,8 @@ public class Rygel.MPRIS.Player : GLib.Object, Rygel.MediaPlayer {
public string? metadata { owned get; set; }
public string? content_features { owned get; set; }
+ public bool can_seek { get { return true; } }
+
public double volume {
get {
return this.actual_player.volume;