[rygel] renderer: Fix seeking behavior when using REL_TIME
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] renderer: Fix seeking behavior when using REL_TIME
- Date: Mon, 30 Sep 2013 09:53:04 +0000 (UTC)
commit 8f83078d7220a352fe623bbebffede990f0dfb87
Author: Milan Plzik <milan plzik gmail com>
Date: Wed Sep 11 00:33:18 2013 +0200
renderer: Fix seeking behavior when using REL_TIME
Signed-off-by: Milan Plzik <milan plzik streamunlimited com>
https://bugzilla.gnome.org/show_bug.cgi?id=686628
src/librygel-renderer/rygel-av-transport.vala | 16 ++++++++++++++-
src/librygel-renderer/rygel-time-utils.vala | 26 ++++++++++++++++++++++--
2 files changed, 38 insertions(+), 4 deletions(-)
---
diff --git a/src/librygel-renderer/rygel-av-transport.vala b/src/librygel-renderer/rygel-av-transport.vala
index 085be2c..6744142 100644
--- a/src/librygel-renderer/rygel-av-transport.vala
+++ b/src/librygel-renderer/rygel-av-transport.vala
@@ -592,7 +592,6 @@ internal class Rygel.AVTransport : Service {
out target);
switch (unit) {
case "ABS_TIME":
- case "REL_TIME":
debug ("Seeking to %s.", target);
if (!this.player.seek (TimeUtils.time_from_string (target))) {
@@ -604,6 +603,21 @@ internal class Rygel.AVTransport : Service {
action.return ();
return;
+ case "REL_TIME":
+ debug ("Relative seek to %s.", target);
+
+ var seek_target = this.player.position +
+ TimeUtils.time_from_string (target);
+
+ if (!this.player.seek (seek_target)) {
+ action.return_error (710, _("Seek mode not supported"));
+
+ return;
+ }
+
+ action.return ();
+
+ return;
case "TRACK_NR":
debug ("Setting track to %s.", target);
var track = int.parse (target);
diff --git a/src/librygel-renderer/rygel-time-utils.vala b/src/librygel-renderer/rygel-time-utils.vala
index aeffc0f..b7865f3 100644
--- a/src/librygel-renderer/rygel-time-utils.vala
+++ b/src/librygel-renderer/rygel-time-utils.vala
@@ -26,20 +26,40 @@
internal abstract class Rygel.TimeUtils {
public static int64 time_from_string (string str) {
uint64 hours, minutes, seconds;
+ string time_str = str;
+ int sign = 1;
- str.scanf ("%llu:%2llu:%2llu%*s", out hours, out minutes, out seconds);
+ switch (str[0]) {
+ case '-':
+ sign = -1;
+ time_str = str.substring(1);
+ break;
+ case '+':
+ time_str = str.substring(1);
+ break;
+ default:
+ break;
+ }
- return (int64)(hours * 3600 + minutes * 60 + seconds) * TimeSpan.SECOND;
+ time_str.scanf ("%llu:%2llu:%2llu%*s", out hours, out minutes, out seconds);
+
+ return sign*(int64)(hours * 3600 + minutes * 60 + seconds) * TimeSpan.SECOND;
}
public static string time_to_string (int64 time) {
uint64 hours, minutes, seconds;
+ string sign = "";
+
+ if (time < 0) {
+ sign = "-";
+ time = - time;
+ };
hours = time / TimeSpan.SECOND / 3600;
seconds = time / TimeSpan.SECOND % 3600;
minutes = seconds / 60;
seconds = seconds % 60;
- return "%llu:%.2llu:%.2llu".printf (hours, minutes, seconds);
+ return "%s%llu:%.2llu:%.2llu".printf (sign, hours, minutes, seconds);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]