aboutsummaryrefslogtreecommitdiff
path: root/src/player-controller.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/player-controller.vala')
-rw-r--r--src/player-controller.vala43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/player-controller.vala b/src/player-controller.vala
index 97f5303..3922ecf 100644
--- a/src/player-controller.vala
+++ b/src/player-controller.vala
@@ -23,13 +23,14 @@ using Gee;
public class PlayerController : GLib.Object
{
- public const int WIDGET_QUANTITY = 4;
+ public const int WIDGET_QUANTITY = 5;
public static enum widget_order{
SEPARATOR,
TITLE,
METADATA,
- TRANSPORT
+ TRANSPORT,
+ PLAYLISTS
}
public enum state{
@@ -43,7 +44,6 @@ public class PlayerController : GLib.Object
public int current_state = state.OFFLINE;
private Dbusmenu.Menuitem root_menu;
- public string name { get; set;}
public string dbus_name { get; set;}
public ArrayList<PlayerItem> custom_items;
public Mpris2Controller mpris_bridge;
@@ -61,7 +61,6 @@ public class PlayerController : GLib.Object
this.root_menu = root;
this.app_info = app;
this.dbus_name = dbus_name;
- this.name = format_player_name(this.app_info.get_name());
this.icon_name = icon_name;
this.custom_items = new ArrayList<PlayerItem>();
this.current_state = initial_state;
@@ -73,7 +72,8 @@ public class PlayerController : GLib.Object
public void update_state(state new_state)
{
- debug("update_state - player controller %s : new state %i", this.name, new_state);
+ debug("update_state - player controller %s : new state %i", this.app_info.get_name(),
+ new_state);
this.current_state = new_state;
this.update_layout();
}
@@ -92,13 +92,14 @@ public class PlayerController : GLib.Object
*/
public void instantiate()
{
- debug("instantiate in player controller for %s", this.name);
+ debug("instantiate in player controller for %s", this.app_info.get_name() );
try{
this.app_info.launch(null, null);
this.update_state(state.INSTANTIATING);
}
catch(GLib.Error error){
- warning("Failed to launch app %s with error message: %s", this.name, error.message);
+ warning("Failed to launch app %s with error message: %s", this.app_info.get_name(),
+ error.message );
}
}
@@ -125,22 +126,29 @@ public class PlayerController : GLib.Object
this.custom_items[widget_order.TRANSPORT].reset(TransportMenuitem.attributes_format());
this.custom_items[widget_order.METADATA].reset(MetadataMenuitem.attributes_format());
TitleMenuitem title = this.custom_items[widget_order.TITLE] as TitleMenuitem;
- title.toggle_active_triangle(false);
+ title.toggle_active_triangle(false);
+ this.mpris_bridge = null;
}
public void update_layout()
{
+ PlaylistsMenuitem playlists_menuitem = this.custom_items[widget_order.PLAYLISTS] as PlaylistsMenuitem;
+
if(this.current_state != state.CONNECTED){
this.custom_items[widget_order.TRANSPORT].property_set_bool(MENUITEM_PROP_VISIBLE,
false);
this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE,
false);
+ playlists_menuitem.root_item.property_set_bool ( MENUITEM_PROP_VISIBLE,
+ false );
return;
}
this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE,
this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format()));
this.custom_items[widget_order.TRANSPORT].property_set_bool(MENUITEM_PROP_VISIBLE,
true);
+ playlists_menuitem.root_item.property_set_bool ( MENUITEM_PROP_VISIBLE,
+ this.mpris_bridge.playlists_support_exist() );
}
private void construct_widgets()
@@ -159,11 +167,22 @@ public class PlayerController : GLib.Object
// Transport item
TransportMenuitem transport_item = new TransportMenuitem(this);
this.custom_items.add(transport_item);
-
+
+ // Playlist item
+ PlaylistsMenuitem playlist_menuitem = new PlaylistsMenuitem(this);
+ this.custom_items.add(playlist_menuitem);
+
foreach(PlayerItem item in this.custom_items){
- root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item));
+ if (this.custom_items.index_of(item) != 4) {
+ root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item));
+ }
+ else{
+ PlaylistsMenuitem playlists_menuitem = item as PlaylistsMenuitem;
+ root_menu.child_add_position(playlists_menuitem.root_item, this.menu_offset + this.custom_items.index_of(item));
+ }
}
}
+
private static string format_player_name(owned string app_info_name)
{
@@ -184,11 +203,11 @@ public class PlayerController : GLib.Object
if(this.mpris_bridge.connected() == true){
this.update_state(state.CONNECTED);
TitleMenuitem title = this.custom_items[widget_order.TITLE] as TitleMenuitem;
- title.toggle_active_triangle(true);
+ title.toggle_active_triangle(true);
this.mpris_bridge.initial_update();
}
else{
this.update_state(state.DISCONNECTED);
}
- }
+ }
}