diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/indicator-sound.c | 14 | ||||
-rw-r--r-- | src/indicator-sound.h | 4 | ||||
-rw-r--r-- | src/metadata-widget.c | 6 | ||||
-rw-r--r-- | src/mpris-bridge.vala | 70 | ||||
-rw-r--r-- | src/mpris-controller.vala | 3 | ||||
-rw-r--r-- | src/mpris2-controller.vala | 275 | ||||
-rw-r--r-- | src/player-controller.vala | 99 | ||||
-rw-r--r-- | src/scrub-menu-item.vala | 2 | ||||
-rw-r--r-- | src/sound-service.c | 1 | ||||
-rw-r--r-- | src/title-menu-item.vala | 3 | ||||
-rw-r--r-- | src/transport-menu-item.vala | 2 |
12 files changed, 274 insertions, 209 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 0e22fe4..74e0297 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -65,6 +65,7 @@ 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 \ @@ -82,7 +83,8 @@ music_bridge_VALAFLAGS = \ --pkg Dbusmenu-Glib-0.2 \ --pkg common-defs \ --pkg dbus-glib-1 \ - --pkg gio-unix-2.0 + --pkg gio-unix-2.0 + $(MAINTAINER_VALAFLAGS) music_bridge_APIFILES = \ diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 557ce85..3a7abe9 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -32,11 +32,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <dbus/dbus-glib.h> #include <dbus/dbus-glib-bindings.h> -#include <libindicator/indicator.h> -#include <libindicator/indicator-object.h> -#include <libindicator/indicator-service-manager.h> -#include <libindicator/indicator-image-helper.h> - #include "indicator-sound.h" #include "transport-widget.h" #include "metadata-widget.h" @@ -236,15 +231,6 @@ free_the_animation_list() } } -/*static void -slider_parent_changed (GtkWidget *widget, - gpointer user_data) -{ - gtk_widget_set_size_request (widget, 200, -1); - g_debug("slider parent changed"); -}*/ - - static gboolean new_transport_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { diff --git a/src/indicator-sound.h b/src/indicator-sound.h index 251295c..9f829bb 100644 --- a/src/indicator-sound.h +++ b/src/indicator-sound.h @@ -23,6 +23,10 @@ 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/>. */ +#include <libindicator/indicator.h> +#include <libindicator/indicator-object.h> +#include <libindicator/indicator-service-manager.h> +#include <libindicator/indicator-image-helper.h> #define INDICATOR_SOUND_TYPE (indicator_sound_get_type ()) #define INDICATOR_SOUND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_SOUND_TYPE, IndicatorSound)) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 670d983..aaf71e2 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -150,8 +150,8 @@ metadata_widget_init (MetadataWidget *self) g_signal_connect(G_OBJECT(twin_item), "property-changed", G_CALLBACK(metadata_widget_property_update), self); gtk_widget_show_all (priv->hbox); - gtk_container_add (GTK_CONTAINER (self), hbox); - + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 60); + gtk_container_add (GTK_CONTAINER (self), hbox); } static gboolean @@ -201,11 +201,9 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, if(g_value_get_int(value) == DBUSMENU_PROPERTY_EMPTY){ g_debug("Metadata widget: property update - reset"); - gchar* empty = ""; GValue new_value = {0}; g_value_init(&new_value, G_TYPE_STRING); g_value_set_string(&new_value, g_strdup("")); - //g_free(empty); value = &new_value; } diff --git a/src/mpris-bridge.vala b/src/mpris-bridge.vala new file mode 100644 index 0000000..bd9d472 --- /dev/null +++ b/src/mpris-bridge.vala @@ -0,0 +1,70 @@ +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 index c70c6d5..1e1e00a 100644 --- a/src/mpris-controller.vala +++ b/src/mpris-controller.vala @@ -63,7 +63,6 @@ public class MprisController : GLib.Object 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()); } @@ -127,7 +126,7 @@ public class MprisController : GLib.Object this.owner.custom_items[PlayerController.widget_order.METADATA].reset(MetadataMenuitem.attributes_format()); this.owner.custom_items[PlayerController.widget_order.SCRUB].reset(ScrubMenuitem.attributes_format()); - HashTable<string, Value?> status_hash = new HashTable<string, Value?>(str_hash, str_equal); + //HashTable<string, Value?> status_hash = new HashTable<string, Value?>(str_hash, str_equal); status st = this.mpris_player.GetStatus(); int play_state = st.playback; diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala index 20cfc9e..65d881a 100644 --- a/src/mpris2-controller.vala +++ b/src/mpris2-controller.vala @@ -17,32 +17,42 @@ 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; +using DBus; -[DBus (name = "org.mpris.MediaPlayer.Player")] -public interface MprisPlayer : Object { - - public struct Status { - public int32 Playback_State; - public double Playback_Rate; - public bool Repeat_State; - public bool Shuffle_State; - public bool Endless_State; - } - - public abstract HashTable<string, Value?> Metadata{owned get;} - public abstract double Volume{get;} - public abstract int32 Capabilities{get;} - public abstract int32 Position{get;} - - public abstract void SetPosition(string prop, int32 pos) throws DBus.Error; +[DBus (name = "org.mpris.MediaPlayer2")] +public interface MprisRoot : DBus.Object { + // properties + public abstract bool HasTracklist{owned get; set;} + public abstract bool CanQuit{owned get; set;} + public abstract bool CanRaise{owned get; set;} + public abstract string Identity{owned get; set;} + public abstract string DesktopEntry{owned get; set;} + // methods + public abstract void Quit() throws DBus.Error; + public abstract void Raise() throws DBus.Error; +} + +[DBus (name = "org.mpris.MediaPlayer2.Player")] +public interface MprisPlayer : DBus.Object { + + // properties + public abstract HashTable<string, Value?> Metadata{owned get; set;} + public abstract int32 Position{owned get; set;} + public abstract string PlaybackStatus{owned get; set;} + // methods + public abstract void SetPosition(DBus.ObjectPath path, int64 pos) throws DBus.Error; public abstract void PlayPause() throws DBus.Error; public abstract void Pause() throws DBus.Error; public abstract void Next() throws DBus.Error; public abstract void Previous() throws DBus.Error; + // signals + public signal void Seeked(int64 new_position); +} - public abstract signal void StatusChanged(Status update); - public abstract signal void TrackChanged(HashTable<string,Value?> Metadata); +[DBus (name = "org.freedesktop.DBus.Properties")] +public interface FreeDesktopProperties : DBus.Object{ + // signals + public signal void PropertiesChanged(string source, HashTable<string, Value?> changed_properties, string[] invalid); } /* @@ -51,51 +61,106 @@ public interface MprisPlayer : Object { */ public class Mpris2Controller : GLib.Object { - private DBus.Connection connection; - public dynamic DBus.Object mpris2_root {get; construct;} - public MprisPlayer mpris2_player {get; construct;} - public PlayerController owner {get; construct;} + public static const string root_interface = "org.mpris.MediaPlayer2" ; + public MprisRoot mpris2_root {get; construct;} + public MprisPlayer player {get; construct;} + public PlayerController owner {get; construct;} + public FreeDesktopProperties properties_interface {get; construct;} public Mpris2Controller(PlayerController ctrl) { - Object(owner: ctrl); + GLib.Object(owner: ctrl); } construct{ try { - debug("going to create this mpris 2 controller"); - this.connection = DBus.Bus.get (DBus.BusType.SESSION); - } catch (Error e) { + var connection = DBus.Bus.get (DBus.BusType.SESSION); + this.mpris2_root = (MprisRoot) connection.get_object (root_interface.concat(".").concat(this.owner.name.down()), + "/org/mpris/MediaPlayer2", + root_interface); + this.player = (MprisPlayer) connection.get_object (root_interface.concat(".").concat(this.owner.name.down()), + "/org/mpris/MediaPlayer2", + root_interface.concat(".Player")); + this.player.Seeked += onSeeked; + + this.properties_interface = (FreeDesktopProperties) connection.get_object(root_interface.concat(".").concat(this.owner.name.down()), + "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties"); + this.properties_interface.PropertiesChanged += property_changed_cb; + + } catch (DBus.Error e) { error("Problems connecting to the session bus - %s", e.message); } - this.mpris2_root = this.connection.get_object ("org.mpris.mediaplayers.".concat(this.owner.name.down()), - "/org/mpris/MediaPlayer", - "org.mpris.MediaPlayer"); - - this.mpris2_player = (MprisPlayer)this.connection.get_object ("org.mpris.mediaplayers.".concat(this.owner.name.down()) , - "/org/mpris/MediaPlayer/Player", - "org.mpris.MediaPlayer.Player"); - this.mpris2_player.TrackChanged += onTrackChanged; - this.mpris2_player.StatusChanged += onStatusChanged; - initial_update(); + } + + public void property_changed_cb(string interface_source, HashTable<string, Value?> changed_properties, string[] invalid ) + { + debug("properties-changed for interface %s", interface_source); + if(changed_properties == null || interface_source.has_prefix(this.root_interface) == false){ + warning("Property-changed hash is null or this is an interface that concerns us"); + return; + } + Value? play_v = changed_properties.lookup("PlaybackStatus"); + if(play_v != null){ + string state = play_v.get_string(); + debug("new playback state = %s", state); + int p = this.determine_play_state(state); + (this.owner.custom_items[PlayerController.widget_order.TRANSPORT] as TransportMenuitem).change_play_state(p); + (this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem).update_playstate(p); + } + + Value? pos_v = changed_properties.lookup("Position"); + if(pos_v != null){ + int64 pos = pos_v.get_int64(); + debug("new position = %i", (int)pos); + (this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem).update_position((int32)pos); + } + + Value? meta_v = changed_properties.lookup("Metadata"); + if(meta_v != null){ + debug("metadata is not empty"); + debug("artist : %s", this.player.Metadata.lookup("artist").get_string()); + this.owner.custom_items[PlayerController.widget_order.METADATA].reset(MetadataMenuitem.attributes_format()); + this.owner.custom_items[PlayerController.widget_order.METADATA].update(this.player.Metadata, + MetadataMenuitem.attributes_format()); + this.owner.custom_items[PlayerController.widget_order.SCRUB].reset(ScrubMenuitem.attributes_format()); + if((int)this.player.Metadata.lookup("artist").get_string().len() > 0 || + (int)this.player.Metadata.lookup("artist").get_string().len() > 0){ + this.owner.custom_items[PlayerController.widget_order.SCRUB].update(this.player.Metadata, + ScrubMenuitem.attributes_format()); + } + (this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem).update_playstate(this.determine_play_state(this.player.PlaybackStatus)); + + } + } + + private int determine_play_state(string status){ + if(status == null) + return 1; + + if(status != null && status == "Playing"){ + debug("determine play state - state = %s", status); + return 0; + } + return 1; } - private void initial_update() + public void initial_update() { - bool r = (bool)this.mpris2_player.Status.Shuffle_State; - int32 p = (int32)this.mpris2_player.Status.Playback_State; - - debug("initial update - play state %i", p); - debug("initial update - shuffle state %s", r.to_string()); + int32 status; + if(this.player.PlaybackStatus == null){ + status = 1; + } + else{ + status = determine_play_state(this.player.PlaybackStatus); + } + debug("initial update - play state %i", status); - (this.owner.custom_items[PlayerController.widget_order.TRANSPORT] as TransportMenuitem).change_play_state(p); - this.owner.custom_items[PlayerController.widget_order.METADATA].update(this.mpris2_player.Metadata, + (this.owner.custom_items[PlayerController.widget_order.TRANSPORT] as TransportMenuitem).change_play_state(status); + this.owner.custom_items[PlayerController.widget_order.METADATA].update(this.player.Metadata, MetadataMenuitem.attributes_format()); - this.owner.custom_items[PlayerController.widget_order.SCRUB].update(this.mpris2_player.Metadata, + this.owner.custom_items[PlayerController.widget_order.SCRUB].update(this.player.Metadata, ScrubMenuitem.attributes_format()); - ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem; - scrub.update_position(this.mpris2_player.Position); - } public void transport_event(TransportMenuitem.action command) @@ -103,80 +168,98 @@ public class Mpris2Controller : GLib.Object debug("transport_event input = %i", (int)command); if(command == TransportMenuitem.action.PLAY_PAUSE){ debug("transport_event PLAY_PAUSE"); - this.mpris2_player.PlayPause(); + try{ + this.player.PlayPause(); + } + catch(DBus.Error error){ + warning("DBus Error calling the player objects PlayPause method %s", + error.message); + } } else if(command == TransportMenuitem.action.PREVIOUS){ - this.mpris2_player.Previous(); + try{ + this.player.Previous(); + } + catch(DBus.Error error){ + warning("DBus Error calling the player objects Previous method %s", + error.message); + } } else if(command == TransportMenuitem.action.NEXT){ - this.mpris2_player.Next(); - } + try{ + this.player.Next(); + } + catch(DBus.Error error){ + warning("DBus Error calling the player objects Next method %s", + error.message); + } + } } - + /** + TODO: SetPosition on the player object is not working with rhythmbox, + runtime error - "dbus function not supported" + */ public void set_position(double position) - { + { debug("Set position with pos (0-100) %f", position); - HashTable<string, Value?> data = this.mpris2_player.Metadata; + HashTable<string, Value?> data = this.player.Metadata; 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(); + // work in microseconds (scale up by 10 TTP-of 3) + uint32 total_time = time_value.get_uint() * 1000; 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)); + debug("new position = %f", (new_time_position)); - Value? v = this.mpris2_player.Metadata.lookup("trackid"); + Value? v = this.player.Metadata.lookup("trackid"); if(v != null){ - if(v.holds (typeof (int))){ - debug("the trackid = %i", v.get_int()); - } - else if(v.holds (typeof (string))){ + if(v.holds (typeof (string))){ debug("the trackid = %s", v.get_string()); + DBus.ObjectPath path = new ObjectPath(v.get_string()); + try{ + //this.player.SetPosition(path, (int64)(new_time_position)); + } + catch(DBus.Error e){ + error("DBus Error calling the player objects SetPosition method %s", + e.message); + } } - } - - //this.mpris2_player.SetPosition((int32)(new_time_position)); + } + } + + 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(this.mpris2_player.Position); + scrub.update_position((int32)position/1000); } public bool connected() { - return (this.mpris2_player != null); + return (this.player != null && this.mpris2_root != null); } - - private void onStatusChanged(MprisPlayer.Status st) - { - debug("onStatusChange - play state %i", st.Playback_State); - HashTable<string, Value?> ht = new HashTable<string, Value?>(str_hash, str_equal); - Value v = Value(typeof(int)); - v.set_int(st.Playback_State); - ht.insert("state", v); - this.owner.custom_items[PlayerController.widget_order.TRANSPORT].update(ht, TransportMenuitem.attributes_format()); - this.owner.custom_items[PlayerController.widget_order.SCRUB].update(ht, ScrubMenuitem.attributes_format()); + + + public bool was_successfull(){ + if(this.mpris2_root == null ||this.player == null){ + return false; + } + return true; } - - private void onTrackChanged(HashTable<string,Value?> ht) + + public void expose() { - 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"); - Value? v = ht.lookup("time"); - if(v != null) - { - debug("with the duration of %i", (int)v.get_uint()); - debug("with Position of %i", this.mpris2_player.Position); + if(this.connected() == true){ + try{ + this.mpris2_root.Raise(); + } + catch(DBus.Error e){ + error("Exception thrown while calling root function Raise - %s", e.message); + } } - this.owner.custom_items[PlayerController.widget_order.SCRUB].update(ht, - ScrubMenuitem.attributes_format()); - ScrubMenuitem scrub = this.owner.custom_items[PlayerController.widget_order.SCRUB] as ScrubMenuitem; - scrub.update_position(this.mpris2_player.Position); } - } diff --git a/src/player-controller.vala b/src/player-controller.vala index 33a5b1a..2aa4382 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -23,7 +23,7 @@ using Gee; public class PlayerController : GLib.Object { - public const int WIDGET_QUANTITY = 6; + public const int WIDGET_QUANTITY = 5; public static enum widget_order{ SEPARATOR, @@ -31,7 +31,6 @@ public class PlayerController : GLib.Object METADATA, SCRUB, TRANSPORT, - PLAYLIST } public enum state{ @@ -43,20 +42,16 @@ public class PlayerController : GLib.Object } public int current_state = state.OFFLINE; - - + private Dbusmenu.Menuitem root_menu; public string name { get; set;} public ArrayList<PlayerItem> custom_items; - public Mpris2Controller mpris2_adaptor; - public MprisController mpris_adaptor; - public bool mpris2; + public MprisBridge 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) { - this.mpris2 = false; this.root_menu = root; this.name = format_client_name(client_name.strip()); this.custom_items = new ArrayList<PlayerItem>(); @@ -77,7 +72,6 @@ public class PlayerController : GLib.Object public void activate() { this.establish_mpris_connection(); - //this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE, true); } /* @@ -104,14 +98,7 @@ public class PlayerController : GLib.Object debug("establish_mpris_connection - Not ready to connect"); return; } - if(this.name == "Vlc"){ - debug("establishing a vlc mpris controller"); - this.mpris2_adaptor = new Mpris2Controller(this); - this.mpris2 = true; - } - else{ - this.mpris_adaptor = new MprisController(this); - } + this.mpris_bridge = new MprisBridge(this); this.determine_state(); } @@ -140,25 +127,14 @@ public class PlayerController : GLib.Object false); this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE, false); - this.custom_items[widget_order.PLAYLIST].property_set_bool(MENUITEM_PROP_VISIBLE, - false); return; } - debug("update layout - metadata %s", this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format()).to_string()); this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE, - this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format())); - //debug("metadata id %i", this.custom_items[widget_order.METADATA].id); - - debug("update layout - scrub %s", this.custom_items[widget_order.SCRUB].populated(ScrubMenuitem.attributes_format()).to_string()); + this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format())); this.custom_items[widget_order.SCRUB].property_set_bool(MENUITEM_PROP_VISIBLE, this.custom_items[widget_order.SCRUB].populated(ScrubMenuitem.attributes_format())); - - this.custom_items[widget_order.TRANSPORT].property_set_bool(MENUITEM_PROP_VISIBLE, true); - - this.custom_items[widget_order.PLAYLIST].property_set_bool(MENUITEM_PROP_VISIBLE, - true); } private void construct_widgets() @@ -181,34 +157,11 @@ public class PlayerController : GLib.Object // Transport item TransportMenuitem transport_item = new TransportMenuitem(this); this.custom_items.add(transport_item); - - this.custom_items.add(create_playlist()); - + foreach(PlayerItem item in this.custom_items){ root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item)); } } - - private PlayerItem create_playlist() - { - PlayerItem playlist_root = new PlayerItem(CLIENT_TYPES_DEFAULT); - playlist_root.property_set(MENUITEM_PROP_LABEL, "Choose Playlist"); - - PlayerItem subentry_1 = new PlayerItem(CLIENT_TYPES_DEFAULT); - subentry_1.property_set(MENUITEM_PROP_LABEL, "Raster-noton selection"); - - PlayerItem subentry_2 = new PlayerItem(CLIENT_TYPES_DEFAULT); - subentry_2.property_set(MENUITEM_PROP_LABEL, "Rune Grammofon selection"); - - PlayerItem subentry_3 = new PlayerItem(CLIENT_TYPES_DEFAULT); - subentry_3.property_set(MENUITEM_PROP_LABEL, "Kranky selection"); - - playlist_root.child_append(subentry_1); - playlist_root.child_append(subentry_2); - playlist_root.child_append(subentry_3); - - return playlist_root; - } private static string format_client_name(string client_name) { @@ -223,45 +176,13 @@ public class PlayerController : GLib.Object // Temporarily we will need to handle to different mpris implemenations // Do it for now - a couple of weeks should see this messy carry on out of // the codebase. - public void set_track_position(double pos) - { - if(this.mpris2 == true){ - this.mpris2_adaptor.set_position(pos); - } - else{ - this.mpris_adaptor.set_position(pos); - } - } - - public void transport_update(TransportMenuitem.action update) - { - if(this.mpris2 == true){ - this.mpris2_adaptor.transport_event(update); - } - else{ - this.mpris_adaptor.transport_event(update); - } - } - public void determine_state() { - if(this.mpris2 == true){ - if(this.mpris2_adaptor.connected() == true){ - debug("yup I'm connected"); - this.update_state(state.CONNECTED); - } - else{ - this.update_state(state.DISCONNECTED); - } + if(this.mpris_bridge.connected() == true){ + this.update_state(state.CONNECTED); } else{ - if(this.mpris_adaptor.connected() == true){ - debug("yup I'm connected"); - this.update_state(state.CONNECTED); - } - else{ - this.update_state(state.DISCONNECTED); - } - } + this.update_state(state.DISCONNECTED); + } } }
\ No newline at end of file diff --git a/src/scrub-menu-item.vala b/src/scrub-menu-item.vala index e220612..7368a0c 100644 --- a/src/scrub-menu-item.vala +++ b/src/scrub-menu-item.vala @@ -32,7 +32,7 @@ public class ScrubMenuitem : PlayerItem public override void handle_event(string name, GLib.Value input_value, uint timestamp) { debug("handle_event for owner %s with value: %f", this.owner.name, input_value.get_double()); - this.owner.set_track_position(input_value.get_double()); + this.owner.mpris_bridge.set_track_position(input_value.get_double()); } public void update_position(int32 new_position) diff --git a/src/sound-service.c b/src/sound-service.c index 8768cd3..12f067e 100644 --- a/src/sound-service.c +++ b/src/sound-service.c @@ -25,7 +25,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>. static GMainLoop *mainloop = NULL; - /**********************************************************************************************************************/ // Init and exit functions /**********************************************************************************************************************/ diff --git a/src/title-menu-item.vala b/src/title-menu-item.vala index d7e16df..ec1cc62 100644 --- a/src/title-menu-item.vala +++ b/src/title-menu-item.vala @@ -35,6 +35,9 @@ public class TitleMenuitem : PlayerItem { this.owner.instantiate(); } + else if(this.owner.current_state == PlayerController.state.CONNECTED){ + this.owner.mpris_bridge.expose(); + } } diff --git a/src/transport-menu-item.vala b/src/transport-menu-item.vala index 45c2692..8bdd2c8 100644 --- a/src/transport-menu-item.vala +++ b/src/transport-menu-item.vala @@ -45,7 +45,7 @@ public class TransportMenuitem : PlayerItem int input = input_value.get_int(); debug("handle_event with value %s", input.to_string()); debug("transport owner name = %s", this.owner.name); - this.owner.transport_update((action)input); + this.owner.mpris_bridge.transport_update((action)input); } public static HashSet<string> attributes_format() |