aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am2
-rw-r--r--src/mpris-bridge.vala70
-rw-r--r--src/mpris-controller.vala130
-rw-r--r--src/mpris2-controller.vala8
-rw-r--r--src/player-controller.vala9
5 files changed, 8 insertions, 211 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 74e0297..2a4e937 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -65,8 +65,6 @@ music_bridge_VALASOURCES = \
scrub-menu-item.vala \
title-menu-item.vala \
player-controller.vala \
- mpris-bridge.vala \
- mpris-controller.vala \
mpris2-controller.vala \
player-item.vala \
familiar-players-db.vala
diff --git a/src/mpris-bridge.vala b/src/mpris-bridge.vala
deleted file mode 100644
index bd9d472..0000000
--- a/src/mpris-bridge.vala
+++ /dev/null
@@ -1,70 +0,0 @@
-public class MprisBridge : GLib.Object
-{
- private MprisController mpris1_controller;
- private Mpris2Controller mpris2_controller;
- private enum mode{
- MPRIS_1,
- MPRIS_2
- }
- private mode mode_in_use;
-
- public MprisBridge(PlayerController ctrl)
- {
- this.mpris2_controller = new Mpris2Controller(ctrl);
- if(this.mpris2_controller.was_successfull() == true){
- this.mode_in_use = mode.MPRIS_2;
- this.mpris1_controller = null;
- this.mpris2_controller.initial_update();
- }
- else{
- this.mpris2_controller = null;
- this.mode_in_use = mode.MPRIS_1;
- this.mpris1_controller = new MprisController(ctrl);
- }
- }
-
- // The handling of both mpris controllers can be abstracted further
- // once the mpris2 is implemented. This will allow for one instance
- // variable to point at the active controller. For now handle both ...
- public bool connected()
- {
- if(this.mode_in_use == mode.MPRIS_1){
- return this.mpris1_controller.connected();
- }
- else if(this.mode_in_use == mode.MPRIS_2){
- return this.mpris2_controller.connected();
- }
- return false;
- }
-
- public void transport_update(TransportMenuitem.action update)
- {
- if(this.mode_in_use == mode.MPRIS_1){
- this.mpris1_controller.transport_event(update);
- }
- else if(this.mode_in_use == mode.MPRIS_2){
- this.mpris2_controller.transport_event(update);
- }
- }
-
- public void expose()
- {
- if(this.mode_in_use == mode.MPRIS_2){
- this.mpris2_controller.expose();
- }
- else{
- warning("MPRIS1 clients don't have the ability to raise/expose the client");
- }
- }
-
-
- public void set_track_position(double pos)
- {
- if(this.mode_in_use == mode.MPRIS_1){
- this.mpris1_controller.set_position(pos);
- }
- else if(this.mode_in_use == mode.MPRIS_2){
- this.mpris2_controller.set_position(pos);
- }
- }
-} \ No newline at end of file
diff --git a/src/mpris-controller.vala b/src/mpris-controller.vala
deleted file mode 100644
index fc9eee0..0000000
--- a/src/mpris-controller.vala
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-This service primarily controls PulseAudio and is driven by the sound indicator menu on the panel.
-Copyright 2010 Canonical Ltd.
-
-Authors:
- Conor Curran <conor.curran@canonical.com>
-
-This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 3, as published
-by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranties of
-MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-using Gee;
-
-public class MprisController : GLib.Object
-{
- private DBus.Connection connection;
- public dynamic DBus.Object mpris_player{get; construct;}
- public PlayerController owner {get; construct;}
- public string mpris_interface {get; construct;}
-
- struct status {
- public int32 playback;
- public int32 shuffle;
- public int32 repeat;
- public int32 endless;
- }
-
- public MprisController(PlayerController ctrl, string inter="org.freedesktop.MediaPlayer"){
- Object(owner: ctrl, mpris_interface: inter);
- }
-
- construct{
- try {
- this.connection = DBus.Bus.get (DBus.BusType.SESSION);
- } catch (Error e) {
- error("Problems connecting to the session bus - %s", e.message);
- }
- this.mpris_player = this.connection.get_object ("org.mpris.".concat(this.owner.name.down()) , "/Player", this.mpris_interface);
-
- debug("Attempting to establish an mpris connection to %s, %s, %s", "org.mpris.".concat(this.owner.name.down()) , "/Player", this.mpris_interface);
-
- 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[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());
- }
-
- public void transport_event(TransportMenuitem.action command)
- {
- debug("transport_event input = %i", (int)command);
- if(command == TransportMenuitem.action.PLAY_PAUSE){
- debug("transport_event PLAY_PAUSE");
- this.mpris_player.Pause();
- }
- else if(command == TransportMenuitem.action.PREVIOUS){
- this.mpris_player.Prev();
- }
- else if(command == TransportMenuitem.action.NEXT){
- this.mpris_player.Next();
- }
- }
-
- 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));
- }
-
- public bool connected()
- {
- return (this.mpris_player != null);
- }
-
- private void onStatusChange(dynamic DBus.Object mpris_client, status st)
- {
- debug("onStatusChange - signal received");
- status* status = &st;
- unowned ValueArray ar = (ValueArray)status;
- int play_state = ar.get_nth(0).get_int();
- debug("onStatusChange - play state %i", play_state);
- HashTable<string, Value?> ht = new HashTable<string, Value?>(str_hash, str_equal);
- Value v = Value(typeof(int));
- v.set_int(play_state);
- ht.insert("state", v);
- this.owner.custom_items[PlayerController.widget_order.TRANSPORT].update(ht, TransportMenuitem.attributes_format());
- }
-
- private void onTrackChange(dynamic DBus.Object mpris_client, HashTable<string,Value?> ht)
- {
- debug("onTrackChange");
-
- this.owner.custom_items[PlayerController.widget_order.METADATA].reset(MetadataMenuitem.attributes_format());
-
- status st = this.mpris_player.GetStatus();
- int play_state = st.playback;
- debug("GetStatusChange, about to update scrub with play state - %i", play_state);
-
- this.owner.custom_items[PlayerController.widget_order.METADATA].update(ht,
- MetadataMenuitem.attributes_format());
- debug("about to update the duration on the scrub bar");
- }
-}
diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala
index df2bbd3..dd6a312 100644
--- a/src/mpris2-controller.vala
+++ b/src/mpris2-controller.vala
@@ -171,7 +171,7 @@ public class Mpris2Controller : GLib.Object
MetadataMenuitem.attributes_format());
}
- public void transport_event(TransportMenuitem.action command)
+ public void transport_update(TransportMenuitem.action command)
{
debug("transport_event input = %i", (int)command);
if(command == TransportMenuitem.action.PLAY_PAUSE){
@@ -207,7 +207,7 @@ public class Mpris2Controller : GLib.Object
TODO: SetPosition on the player object is not working with rhythmbox,
runtime error - "dbus function not supported"
*/
- public void set_position(double position)
+ public void set_track_position(double position)
{
debug("Set position with pos (0-100) %f", position);
Value? time_value = this.player.Metadata.lookup("mpris:length");
@@ -227,8 +227,6 @@ public class Mpris2Controller : GLib.Object
DBus.ObjectPath path = new ObjectPath(v.get_string());
try{
this.player.SetPosition(path, (int64)(new_time_position));
- //ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem;
- //scrub.update_position(((int32)new_time_position) / 1000);
}
catch(DBus.Error e){
error("DBus Error calling the player objects SetPosition method %s",
@@ -240,8 +238,6 @@ public class Mpris2Controller : GLib.Object
public void onSeeked(int64 position){
debug("Seeked signal callback with pos = %i", (int)position/1000);
- //ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem;
- //scrub.update_position((int32)position/1000);
}
public bool connected()
diff --git a/src/player-controller.vala b/src/player-controller.vala
index 3e12dce..4d9f054 100644
--- a/src/player-controller.vala
+++ b/src/player-controller.vala
@@ -45,11 +45,14 @@ public class PlayerController : GLib.Object
private Dbusmenu.Menuitem root_menu;
public string name { get; set;}
public ArrayList<PlayerItem> custom_items;
- public MprisBridge mpris_bridge;
+ public Mpris2Controller mpris_bridge;
public AppInfo? app_info { get; set;}
public int menu_offset { get; set;}
- public PlayerController(Dbusmenu.Menuitem root, string client_name, int offset, state initial_state)
+ public PlayerController(Dbusmenu.Menuitem root,
+ string client_name,
+ int offset,
+ state initial_state)
{
this.root_menu = root;
this.name = format_client_name(client_name.strip());
@@ -97,7 +100,7 @@ public class PlayerController : GLib.Object
debug("establish_mpris_connection - Not ready to connect");
return;
}
- this.mpris_bridge = new MprisBridge(this);
+ this.mpris_bridge = new Mpris2Controller(this);
this.determine_state();
}