diff options
author | Jens Georg <jensg@openismus.com> | 2012-12-01 22:52:38 +0100 |
---|---|---|
committer | Jens Georg <jensg@openismus.com> | 2012-12-06 08:08:53 +0100 |
commit | e6dd17a6581eb63d5fdcb1edd76b7011a36f9060 (patch) | |
tree | 3787d526da6f2a0110b55a5ca4920425a49ec336 /src | |
parent | a6ae6de0bb95b1feec289673b08bb3e43caa787d (diff) | |
download | rygel-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.vala | 7 | ||||
-rw-r--r-- | src/librygel-renderer/rygel-media-player.vala | 3 | ||||
-rw-r--r-- | src/librygel-renderer/rygel-player-controller.vala | 18 | ||||
-rw-r--r-- | src/plugins/mpris/rygel-mpris-player.vala | 2 |
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; |