aboutsummaryrefslogtreecommitdiff
path: root/src/mpris-controller.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/mpris-controller.vala')
-rw-r--r--src/mpris-controller.vala49
1 files changed, 37 insertions, 12 deletions
diff --git a/src/mpris-controller.vala b/src/mpris-controller.vala
index 8dd0cc9..5e4dce2 100644
--- a/src/mpris-controller.vala
+++ b/src/mpris-controller.vala
@@ -26,8 +26,6 @@ public class MprisController : GLib.Object
public dynamic DBus.Object mpris_player{get; construct;}
public PlayerController owner {get; construct;}
public string mpris_interface {get; construct;}
- private string name;
-
struct status {
public int32 playback;
@@ -52,29 +50,40 @@ public class MprisController : GLib.Object
this.mpris_player.TrackChange += onTrackChange;
this.mpris_player.StatusChange += onStatusChange;
+ initial_update();
+ }
+ private void initial_update()
+ {
status st = this.mpris_player.GetStatus();
int play_state = st.playback;
debug("GetStatusChange - play state %i", play_state);
- (this.owner.custom_items[this.owner.TRANSPORT] as TransportMenuitem).change_play_state(play_state);
- this.owner.custom_items[this.owner.METADATA].update(this.mpris_player.GetMetadata(),
+ (this.owner.custom_items[PlayerController.widget_order.TRANSPORT] as TransportMenuitem).change_play_state(play_state);
+ this.owner.custom_items[PlayerController.widget_order.METADATA].update(this.mpris_player.GetMetadata(),
MetadataMenuitem.attributes_format());
+ this.owner.custom_items[PlayerController.widget_order.SCRUB].update(this.mpris_player.GetMetadata(),
+ ScrubMenuitem.attributes_format());
+ // temporary fix
+ ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem;
+ scrub.update_position(this.mpris_player.PositionGet());
}
-
private void onTrackChange(dynamic DBus.Object mpris_client, HashTable<string,Value?> ht)
{
debug("onTrackChange");
- this.owner.custom_items[this.owner.METADATA].reset(MetadataMenuitem.attributes_format());
- this.owner.custom_items[this.owner.METADATA].update(ht,
+ this.owner.custom_items[PlayerController.widget_order.METADATA].reset(MetadataMenuitem.attributes_format());
+ this.owner.custom_items[PlayerController.widget_order.SCRUB].reset(ScrubMenuitem.attributes_format());
+ this.owner.custom_items[PlayerController.widget_order.METADATA].update(ht,
MetadataMenuitem.attributes_format());
+ debug("about to update the duration on the scrub bar");
+ this.owner.custom_items[PlayerController.widget_order.SCRUB].update(this.mpris_player.GetMetadata(),
+ ScrubMenuitem.attributes_format());
+ // temporary fix
+ ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem;
+ scrub.update_position(this.mpris_player.PositionGet());
}
- /**
- * TRUE => Playing
- * FALSE => Paused
- **/
public void transport_event(TransportMenuitem.action command)
{
debug("transport_event input = %i", (int)command);
@@ -101,6 +110,22 @@ public class MprisController : GLib.Object
}
}
+ public void set_position(double position)
+ {
+ //debug("Set position with pos (0-100) %f", position);
+ HashTable<string, Value?> data = this.mpris_player.GetMetadata();
+ Value? time_value = data.lookup("time");
+ if(time_value == null){
+ warning("Can't fetch the duration of the track therefore cant set the position");
+ return;
+ }
+ uint32 total_time = time_value.get_uint();
+ //debug("total time of track = %i", (int)total_time);
+ double new_time_position = total_time * position/100.0;
+ //debug("new position = %f", (new_time_position * 1000));
+ this.mpris_player.PositionSet((int32)(new_time_position * 1000));
+ }
+
public bool connected()
{
return (this.mpris_player != null);
@@ -117,7 +142,7 @@ public class MprisController : GLib.Object
Value v = Value(typeof(int));
v.set_int(play_state);
ht.insert("state", v);
- this.owner.custom_items[this.owner.TRANSPORT].update(ht, TransportMenuitem.attributes_format());
+ this.owner.custom_items[PlayerController.widget_order.TRANSPORT].update(ht, TransportMenuitem.attributes_format());
}