diff options
Diffstat (limited to 'src/mpris-controller.c')
-rw-r--r-- | src/mpris-controller.c | 406 |
1 files changed, 302 insertions, 104 deletions
diff --git a/src/mpris-controller.c b/src/mpris-controller.c index 041177c..0d84330 100644 --- a/src/mpris-controller.c +++ b/src/mpris-controller.c @@ -32,6 +32,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <libdbusmenu-glib/menuitem-proxy.h> #include <libdbusmenu-glib/menuitem.h> #include <libdbusmenu-glib/server.h> +#include <float.h> +#include <math.h> #define TYPE_MPRIS_CONTROLLER (mpris_controller_get_type ()) @@ -57,6 +59,9 @@ typedef struct _PlayerControllerClass PlayerControllerClass; #define _dbus_g_connection_unref0(var) ((var == NULL) ? NULL : (var = (dbus_g_connection_unref (var), NULL))) #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) #define _g_free0(var) (var = (g_free (var), NULL)) + +#define MPRIS_CONTROLLER_TYPE_STATUS (mpris_controller_status_get_type ()) +typedef struct _MprisControllerstatus MprisControllerstatus; typedef struct _PlayerControllerPrivate PlayerControllerPrivate; #define TYPE_PLAYER_ITEM (player_item_get_type ()) @@ -69,12 +74,7 @@ typedef struct _PlayerControllerPrivate PlayerControllerPrivate; typedef struct _PlayerItem PlayerItem; typedef struct _PlayerItemClass PlayerItemClass; -#define TRANSPORT_MENUITEM_TYPE_ACTION (transport_menuitem_action_get_type ()) - -#define MPRIS_CONTROLLER_TYPE_STATUS (mpris_controller_status_get_type ()) -typedef struct _MprisControllerstatus MprisControllerstatus; -#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL))) -#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL))) +#define PLAYER_CONTROLLER_TYPE_WIDGET_ORDER (player_controller_widget_order_get_type ()) #define TYPE_TRANSPORT_MENUITEM (transport_menuitem_get_type ()) #define TRANSPORT_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSPORT_MENUITEM, TransportMenuitem)) @@ -85,6 +85,20 @@ typedef struct _MprisControllerstatus MprisControllerstatus; typedef struct _TransportMenuitem TransportMenuitem; typedef struct _TransportMenuitemClass TransportMenuitemClass; +#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL))) + +#define TYPE_SCRUB_MENUITEM (scrub_menuitem_get_type ()) +#define SCRUB_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SCRUB_MENUITEM, ScrubMenuitem)) +#define SCRUB_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SCRUB_MENUITEM, ScrubMenuitemClass)) +#define IS_SCRUB_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SCRUB_MENUITEM)) +#define IS_SCRUB_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SCRUB_MENUITEM)) +#define SCRUB_MENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SCRUB_MENUITEM, ScrubMenuitemClass)) + +typedef struct _ScrubMenuitem ScrubMenuitem; +typedef struct _ScrubMenuitemClass ScrubMenuitemClass; + +#define TRANSPORT_MENUITEM_TYPE_ACTION (transport_menuitem_action_get_type ()) +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL))) struct _MprisController { GObject parent_instance; @@ -100,7 +114,10 @@ struct _MprisControllerPrivate { DBusGProxy* _mpris_player; PlayerController* _owner; char* _mpris_interface; - char* name; +}; + +struct _MprisControllerstatus { + gint32 playback; }; struct _PlayerController { @@ -116,15 +133,19 @@ struct _PlayerControllerClass { }; typedef enum { + PLAYER_CONTROLLER_WIDGET_ORDER_SEPARATOR, + PLAYER_CONTROLLER_WIDGET_ORDER_TITLE, + PLAYER_CONTROLLER_WIDGET_ORDER_METADATA, + PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB, + PLAYER_CONTROLLER_WIDGET_ORDER_TRANSPORT +} PlayerControllerwidget_order; + +typedef enum { TRANSPORT_MENUITEM_ACTION_PREVIOUS, TRANSPORT_MENUITEM_ACTION_PLAY_PAUSE, TRANSPORT_MENUITEM_ACTION_NEXT } TransportMenuitemaction; -struct _MprisControllerstatus { - gint32 playback; -}; - static gpointer mpris_controller_parent_class = NULL; @@ -139,27 +160,41 @@ enum { }; MprisController* mpris_controller_new (PlayerController* ctrl, const char* inter); MprisController* mpris_controller_construct (GType object_type, PlayerController* ctrl, const char* inter); -PlayerController* mpris_controller_get_owner (MprisController* self); -GType player_item_get_type (void); -#define PLAYER_CONTROLLER_METADATA 2 -void player_item_reset (PlayerItem* self, GeeHashSet* attrs); -GeeHashSet* metadata_menuitem_attributes_format (void); -void player_item_update (PlayerItem* self, GHashTable* data, GeeHashSet* attributes); -static void mpris_controller_onTrackChange (MprisController* self, DBusGProxy* mpris_client, GHashTable* ht); -GType transport_menuitem_action_get_type (void); DBusGProxy* mpris_controller_get_mpris_player (MprisController* self); static GType mpris_controller_status_get_type (void) G_GNUC_UNUSED; static MprisControllerstatus* mpris_controller_status_dup (const MprisControllerstatus* self); static void mpris_controller_status_free (MprisControllerstatus* self); static void _dynamic_GetStatus0 (DBusGProxy* self, MprisControllerstatus* result, GError** error); -static void _dynamic_Play1 (DBusGProxy* self, GError** error); -static void _dynamic_Pause2 (DBusGProxy* self, GError** error); -static void _dynamic_Prev3 (DBusGProxy* self, GError** error); -static void _dynamic_Next4 (DBusGProxy* self, GError** error); +PlayerController* mpris_controller_get_owner (MprisController* self); +GType player_item_get_type (void); +GType player_controller_widget_order_get_type (void); +GType transport_menuitem_get_type (void); +void transport_menuitem_change_play_state (TransportMenuitem* self, gint state); +static GHashTable* _dynamic_GetMetadata1 (DBusGProxy* self, GError** error); +void player_item_update (PlayerItem* self, GHashTable* data, GeeHashSet* attributes); +GeeHashSet* metadata_menuitem_attributes_format (void); +static GHashTable* _dynamic_GetMetadata2 (DBusGProxy* self, GError** error); +GeeHashSet* scrub_menuitem_attributes_format (void); +GType scrub_menuitem_get_type (void); +static gint32 _dynamic_PositionGet3 (DBusGProxy* self, GError** error); +void scrub_menuitem_update_position (ScrubMenuitem* self, gint32 new_position); +static void mpris_controller_initial_update (MprisController* self); +void player_item_reset (PlayerItem* self, GeeHashSet* attrs); +static GHashTable* _dynamic_GetMetadata4 (DBusGProxy* self, GError** error); +static gint32 _dynamic_PositionGet5 (DBusGProxy* self, GError** error); +static void mpris_controller_onTrackChange (MprisController* self, DBusGProxy* mpris_client, GHashTable* ht); +GType transport_menuitem_action_get_type (void); +static void _dynamic_GetStatus6 (DBusGProxy* self, MprisControllerstatus* result, GError** error); +static void _dynamic_Play7 (DBusGProxy* self, GError** error); +static void _dynamic_Pause8 (DBusGProxy* self, GError** error); +static void _dynamic_Prev9 (DBusGProxy* self, GError** error); +static void _dynamic_Next10 (DBusGProxy* self, GError** error); void mpris_controller_transport_event (MprisController* self, TransportMenuitemaction command); -gboolean mpris_controller_connected (MprisController* self); +static GHashTable* _dynamic_GetMetadata11 (DBusGProxy* self, GError** error); static GValue* _g_value_dup (GValue* self); -#define PLAYER_CONTROLLER_TRANSPORT 3 +static void _dynamic_PositionSet12 (DBusGProxy* self, gint32 param1, GError** error); +void mpris_controller_set_position (MprisController* self, double position); +gboolean mpris_controller_connected (MprisController* self); GeeHashSet* transport_menuitem_attributes_format (void); static void mpris_controller_onStatusChange (MprisController* self, DBusGProxy* mpris_client, MprisControllerstatus* st); static void mpris_controller_set_mpris_player (MprisController* self, DBusGProxy* value); @@ -171,10 +206,6 @@ static void _mpris_controller_onTrackChange_dynamic_TrackChange0_ (DBusGProxy* _ void _dynamic_TrackChange1_connect (gpointer obj, const char * signal_name, GCallback handler, gpointer data); static void _mpris_controller_onStatusChange_dynamic_StatusChange2_ (DBusGProxy* _sender, MprisControllerstatus* st, gpointer self); void _dynamic_StatusChange3_connect (gpointer obj, const char * signal_name, GCallback handler, gpointer data); -static void _dynamic_GetStatus5 (DBusGProxy* self, MprisControllerstatus* result, GError** error); -GType transport_menuitem_get_type (void); -void transport_menuitem_change_play_state (TransportMenuitem* self, gint state); -static GHashTable* _dynamic_GetMetadata6 (DBusGProxy* self, GError** error); static GObject * mpris_controller_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties); static void mpris_controller_finalize (GObject* obj); static void mpris_controller_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); @@ -197,25 +228,184 @@ MprisController* mpris_controller_new (PlayerController* ctrl, const char* inter } +static void _dynamic_GetStatus0 (DBusGProxy* self, MprisControllerstatus* result, GError** error) { + GValueArray* dbus_result; + dbus_g_proxy_call (self, "GetStatus", error, G_TYPE_INVALID, dbus_g_type_get_struct ("GValueArray", G_TYPE_INT, G_TYPE_INVALID), &dbus_result, G_TYPE_INVALID); + if (*error) { + return; + } + result->playback = g_value_get_int (&dbus_result->values[0]); +} + + +static GHashTable* _dynamic_GetMetadata1 (DBusGProxy* self, GError** error) { + GHashTable* result; + dbus_g_proxy_call (self, "GetMetadata", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &result, G_TYPE_INVALID); + if (*error) { + return NULL; + } + return result; +} + + +static GHashTable* _dynamic_GetMetadata2 (DBusGProxy* self, GError** error) { + GHashTable* result; + dbus_g_proxy_call (self, "GetMetadata", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &result, G_TYPE_INVALID); + if (*error) { + return NULL; + } + return result; +} + + +static gint32 _dynamic_PositionGet3 (DBusGProxy* self, GError** error) { + gint32 result; + dbus_g_proxy_call (self, "PositionGet", error, G_TYPE_INVALID, G_TYPE_INT, &result, G_TYPE_INVALID); + if (*error) { + return 0; + } + return result; +} + + +static void mpris_controller_initial_update (MprisController* self) { + GError * _inner_error_; + MprisControllerstatus _tmp0_ = {0}; + MprisControllerstatus st; + gint play_state; + TransportMenuitem* _tmp2_; + PlayerItem* _tmp1_; + GHashTable* _tmp3_; + GeeHashSet* _tmp6_; + GHashTable* _tmp5_; + PlayerItem* _tmp4_; + GHashTable* _tmp7_; + GeeHashSet* _tmp10_; + GHashTable* _tmp9_; + PlayerItem* _tmp8_; + PlayerItem* _tmp11_; + ScrubMenuitem* scrub; + gint32 _tmp12_; + g_return_if_fail (self != NULL); + _inner_error_ = NULL; + st = (_dynamic_GetStatus0 (self->priv->_mpris_player, &_tmp0_, &_inner_error_), _tmp0_); + if (_inner_error_ != NULL) { + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + play_state = (gint) st.playback; + g_debug ("mpris-controller.vala:60: GetStatusChange - play state %i", play_state); + transport_menuitem_change_play_state (_tmp2_ = (_tmp1_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_TRANSPORT), IS_TRANSPORT_MENUITEM (_tmp1_) ? ((TransportMenuitem*) _tmp1_) : NULL), play_state); + _g_object_unref0 (_tmp2_); + _tmp3_ = _dynamic_GetMetadata1 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + player_item_update (_tmp4_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_METADATA), _tmp5_ = _tmp3_, _tmp6_ = metadata_menuitem_attributes_format ()); + _g_object_unref0 (_tmp6_); + _g_hash_table_unref0 (_tmp5_); + _g_object_unref0 (_tmp4_); + _tmp7_ = _dynamic_GetMetadata2 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + player_item_update (_tmp8_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB), _tmp9_ = _tmp7_, _tmp10_ = scrub_menuitem_attributes_format ()); + _g_object_unref0 (_tmp10_); + _g_hash_table_unref0 (_tmp9_); + _g_object_unref0 (_tmp8_); + scrub = (_tmp11_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB), IS_SCRUB_MENUITEM (_tmp11_) ? ((ScrubMenuitem*) _tmp11_) : NULL); + _tmp12_ = _dynamic_PositionGet3 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + _g_object_unref0 (scrub); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + scrub_menuitem_update_position (scrub, _tmp12_); + _g_object_unref0 (scrub); +} + + +static GHashTable* _dynamic_GetMetadata4 (DBusGProxy* self, GError** error) { + GHashTable* result; + dbus_g_proxy_call (self, "GetMetadata", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &result, G_TYPE_INVALID); + if (*error) { + return NULL; + } + return result; +} + + +static gint32 _dynamic_PositionGet5 (DBusGProxy* self, GError** error) { + gint32 result; + dbus_g_proxy_call (self, "PositionGet", error, G_TYPE_INVALID, G_TYPE_INT, &result, G_TYPE_INVALID); + if (*error) { + return 0; + } + return result; +} + + static void mpris_controller_onTrackChange (MprisController* self, DBusGProxy* mpris_client, GHashTable* ht) { + GError * _inner_error_; GeeHashSet* _tmp1_; PlayerItem* _tmp0_; GeeHashSet* _tmp3_; PlayerItem* _tmp2_; + GeeHashSet* _tmp5_; + PlayerItem* _tmp4_; + GHashTable* _tmp6_; + GeeHashSet* _tmp9_; + GHashTable* _tmp8_; + PlayerItem* _tmp7_; + PlayerItem* _tmp10_; + ScrubMenuitem* scrub; + gint32 _tmp11_; g_return_if_fail (self != NULL); g_return_if_fail (mpris_client != NULL); g_return_if_fail (ht != NULL); - g_debug ("mpris-controller.vala:68: onTrackChange"); - player_item_reset (_tmp0_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, PLAYER_CONTROLLER_METADATA), _tmp1_ = metadata_menuitem_attributes_format ()); + _inner_error_ = NULL; + g_debug ("mpris-controller.vala:74: onTrackChange"); + player_item_reset (_tmp0_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_METADATA), _tmp1_ = metadata_menuitem_attributes_format ()); _g_object_unref0 (_tmp1_); _g_object_unref0 (_tmp0_); - player_item_update (_tmp2_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, PLAYER_CONTROLLER_METADATA), ht, _tmp3_ = metadata_menuitem_attributes_format ()); + player_item_reset (_tmp2_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB), _tmp3_ = scrub_menuitem_attributes_format ()); _g_object_unref0 (_tmp3_); _g_object_unref0 (_tmp2_); + player_item_update (_tmp4_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_METADATA), ht, _tmp5_ = metadata_menuitem_attributes_format ()); + _g_object_unref0 (_tmp5_); + _g_object_unref0 (_tmp4_); + g_debug ("mpris-controller.vala:79: about to update the duration on the scrub ba" \ +"r"); + _tmp6_ = _dynamic_GetMetadata4 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + player_item_update (_tmp7_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB), _tmp8_ = _tmp6_, _tmp9_ = scrub_menuitem_attributes_format ()); + _g_object_unref0 (_tmp9_); + _g_hash_table_unref0 (_tmp8_); + _g_object_unref0 (_tmp7_); + scrub = (_tmp10_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_SCRUB), IS_SCRUB_MENUITEM (_tmp10_) ? ((ScrubMenuitem*) _tmp10_) : NULL); + _tmp11_ = _dynamic_PositionGet5 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + _g_object_unref0 (scrub); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + scrub_menuitem_update_position (scrub, _tmp11_); + _g_object_unref0 (scrub); } -static void _dynamic_GetStatus0 (DBusGProxy* self, MprisControllerstatus* result, GError** error) { +static void _dynamic_GetStatus6 (DBusGProxy* self, MprisControllerstatus* result, GError** error) { GValueArray* dbus_result; dbus_g_proxy_call (self, "GetStatus", error, G_TYPE_INVALID, dbus_g_type_get_struct ("GValueArray", G_TYPE_INT, G_TYPE_INVALID), &dbus_result, G_TYPE_INVALID); if (*error) { @@ -225,7 +415,7 @@ static void _dynamic_GetStatus0 (DBusGProxy* self, MprisControllerstatus* result } -static void _dynamic_Play1 (DBusGProxy* self, GError** error) { +static void _dynamic_Play7 (DBusGProxy* self, GError** error) { dbus_g_proxy_call (self, "Play", error, G_TYPE_INVALID, G_TYPE_INVALID); if (*error) { return; @@ -233,7 +423,7 @@ static void _dynamic_Play1 (DBusGProxy* self, GError** error) { } -static void _dynamic_Pause2 (DBusGProxy* self, GError** error) { +static void _dynamic_Pause8 (DBusGProxy* self, GError** error) { dbus_g_proxy_call (self, "Pause", error, G_TYPE_INVALID, G_TYPE_INVALID); if (*error) { return; @@ -241,7 +431,7 @@ static void _dynamic_Pause2 (DBusGProxy* self, GError** error) { } -static void _dynamic_Prev3 (DBusGProxy* self, GError** error) { +static void _dynamic_Prev9 (DBusGProxy* self, GError** error) { dbus_g_proxy_call (self, "Prev", error, G_TYPE_INVALID, G_TYPE_INVALID); if (*error) { return; @@ -249,7 +439,7 @@ static void _dynamic_Prev3 (DBusGProxy* self, GError** error) { } -static void _dynamic_Next4 (DBusGProxy* self, GError** error) { +static void _dynamic_Next10 (DBusGProxy* self, GError** error) { dbus_g_proxy_call (self, "Next", error, G_TYPE_INVALID, G_TYPE_INVALID); if (*error) { return; @@ -261,33 +451,33 @@ void mpris_controller_transport_event (MprisController* self, TransportMenuitema GError * _inner_error_; g_return_if_fail (self != NULL); _inner_error_ = NULL; - g_debug ("mpris-controller.vala:80: transport_event input = %i", (gint) command); + g_debug ("mpris-controller.vala:89: transport_event input = %i", (gint) command); if (command == TRANSPORT_MENUITEM_ACTION_PLAY_PAUSE) { MprisControllerstatus _tmp0_ = {0}; MprisControllerstatus st; gboolean play_state; gboolean new_play_state; - st = (_dynamic_GetStatus0 (self->priv->_mpris_player, &_tmp0_, &_inner_error_), _tmp0_); + st = (_dynamic_GetStatus6 (self->priv->_mpris_player, &_tmp0_, &_inner_error_), _tmp0_); if (_inner_error_ != NULL) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } play_state = st.playback == 1; - g_debug ("mpris-controller.vala:84: toggle_playback - initial play state %i", (gint) play_state); + g_debug ("mpris-controller.vala:93: toggle_playback - initial play state %i", (gint) play_state); new_play_state = !play_state; - g_debug ("mpris-controller.vala:86: toggle_playback - new play state %i", (gint) new_play_state); + g_debug ("mpris-controller.vala:95: toggle_playback - new play state %i", (gint) new_play_state); if (new_play_state == TRUE) { - g_debug ("mpris-controller.vala:88: about to play"); - _dynamic_Play1 (self->priv->_mpris_player, &_inner_error_); + g_debug ("mpris-controller.vala:97: about to play"); + _dynamic_Play7 (self->priv->_mpris_player, &_inner_error_); if (_inner_error_ != NULL) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } else { - g_debug ("mpris-controller.vala:92: about to pause"); - _dynamic_Pause2 (self->priv->_mpris_player, &_inner_error_); + g_debug ("mpris-controller.vala:101: about to pause"); + _dynamic_Pause8 (self->priv->_mpris_player, &_inner_error_); if (_inner_error_ != NULL) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); @@ -296,7 +486,7 @@ void mpris_controller_transport_event (MprisController* self, TransportMenuitema } } else { if (command == TRANSPORT_MENUITEM_ACTION_PREVIOUS) { - _dynamic_Prev3 (self->priv->_mpris_player, &_inner_error_); + _dynamic_Prev9 (self->priv->_mpris_player, &_inner_error_); if (_inner_error_ != NULL) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); @@ -304,7 +494,7 @@ void mpris_controller_transport_event (MprisController* self, TransportMenuitema } } else { if (command == TRANSPORT_MENUITEM_ACTION_NEXT) { - _dynamic_Next4 (self->priv->_mpris_player, &_inner_error_); + _dynamic_Next10 (self->priv->_mpris_player, &_inner_error_); if (_inner_error_ != NULL) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); @@ -316,10 +506,12 @@ void mpris_controller_transport_event (MprisController* self, TransportMenuitema } -gboolean mpris_controller_connected (MprisController* self) { - gboolean result = FALSE; - g_return_val_if_fail (self != NULL, FALSE); - result = self->priv->_mpris_player != NULL; +static GHashTable* _dynamic_GetMetadata11 (DBusGProxy* self, GError** error) { + GHashTable* result; + dbus_g_proxy_call (self, "GetMetadata", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &result, G_TYPE_INVALID); + if (*error) { + return NULL; + } return result; } @@ -334,6 +526,59 @@ static gpointer __g_value_dup0 (gpointer self) { } +static void _dynamic_PositionSet12 (DBusGProxy* self, gint32 param1, GError** error) { + dbus_g_proxy_call (self, "PositionSet", error, G_TYPE_INT, param1, G_TYPE_INVALID, G_TYPE_INVALID); + if (*error) { + return; + } +} + + +void mpris_controller_set_position (MprisController* self, double position) { + GError * _inner_error_; + GHashTable* data; + GValue* time_value; + guint32 total_time; + double new_time_position; + g_return_if_fail (self != NULL); + _inner_error_ = NULL; + data = _dynamic_GetMetadata11 (self->priv->_mpris_player, &_inner_error_); + if (_inner_error_ != NULL) { + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + time_value = __g_value_dup0 ((GValue*) g_hash_table_lookup (data, "time")); + if (time_value == NULL) { + g_warning ("mpris-controller.vala:119: Can't fetch the duration of the track there" \ +"fore cant set the position"); + _g_hash_table_unref0 (data); + _g_free0 (time_value); + return; + } + total_time = (guint32) g_value_get_uint (time_value); + new_time_position = (total_time * position) / 100.0; + _dynamic_PositionSet12 (self->priv->_mpris_player, (gint32) (new_time_position * 1000), &_inner_error_); + if (_inner_error_ != NULL) { + _g_hash_table_unref0 (data); + _g_free0 (time_value); + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); + g_clear_error (&_inner_error_); + return; + } + _g_hash_table_unref0 (data); + _g_free0 (time_value); +} + + +gboolean mpris_controller_connected (MprisController* self) { + gboolean result = FALSE; + g_return_val_if_fail (self != NULL, FALSE); + result = self->priv->_mpris_player != NULL; + return result; +} + + static void mpris_controller_onStatusChange (MprisController* self, DBusGProxy* mpris_client, MprisControllerstatus* st) { MprisControllerstatus* status; GValueArray* ar; @@ -344,16 +589,16 @@ static void mpris_controller_onStatusChange (MprisController* self, DBusGProxy* PlayerItem* _tmp0_; g_return_if_fail (self != NULL); g_return_if_fail (mpris_client != NULL); - g_debug ("mpris-controller.vala:111: onStatusChange - signal received"); + g_debug ("mpris-controller.vala:136: onStatusChange - signal received"); status = st; ar = (GValueArray*) status; play_state = g_value_get_int (g_value_array_get_nth (ar, (guint) 0)); - g_debug ("mpris-controller.vala:115: onStatusChange - play state %i", play_state); + g_debug ("mpris-controller.vala:140: onStatusChange - play state %i", play_state); ht = g_hash_table_new (g_str_hash, g_str_equal); g_value_init (&v, G_TYPE_INT); g_value_set_int (&v, play_state); g_hash_table_insert (ht, g_strdup ("state"), __g_value_dup0 (&v)); - player_item_update (_tmp0_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, PLAYER_CONTROLLER_TRANSPORT), ht, _tmp1_ = transport_menuitem_attributes_format ()); + player_item_update (_tmp0_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, (gint) PLAYER_CONTROLLER_WIDGET_ORDER_TRANSPORT), ht, _tmp1_ = transport_menuitem_attributes_format ()); _g_object_unref0 (_tmp1_); _g_object_unref0 (_tmp0_); _g_hash_table_unref0 (ht); @@ -438,26 +683,6 @@ void _dynamic_StatusChange3_connect (gpointer obj, const char * signal_name, GCa } -static void _dynamic_GetStatus5 (DBusGProxy* self, MprisControllerstatus* result, GError** error) { - GValueArray* dbus_result; - dbus_g_proxy_call (self, "GetStatus", error, G_TYPE_INVALID, dbus_g_type_get_struct ("GValueArray", G_TYPE_INT, G_TYPE_INVALID), &dbus_result, G_TYPE_INVALID); - if (*error) { - return; - } - result->playback = g_value_get_int (&dbus_result->values[0]); -} - - -static GHashTable* _dynamic_GetMetadata6 (DBusGProxy* self, GError** error) { - GHashTable* result; - dbus_g_proxy_call (self, "GetMetadata", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &result, G_TYPE_INVALID); - if (*error) { - return NULL; - } - return result; -} - - static GObject * mpris_controller_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) { GObject * obj; GObjectClass * parent_class; @@ -473,15 +698,6 @@ static GObject * mpris_controller_constructor (GType type, guint n_construct_pro char* _tmp2_; char* _tmp6_; char* _tmp5_; - MprisControllerstatus _tmp7_ = {0}; - MprisControllerstatus st; - gint play_state; - TransportMenuitem* _tmp9_; - PlayerItem* _tmp8_; - GHashTable* _tmp10_; - GeeHashSet* _tmp13_; - GHashTable* _tmp12_; - PlayerItem* _tmp11_; { DBusGConnection* _tmp0_; DBusGConnection* _tmp1_; @@ -498,7 +714,7 @@ static GObject * mpris_controller_constructor (GType type, guint n_construct_pro e = _inner_error_; _inner_error_ = NULL; { - g_error ("mpris-controller.vala:47: Problems connecting to the session bus - %s", e->message); + g_error ("mpris-controller.vala:45: Problems connecting to the session bus - %s", e->message); _g_error_free0 (e); } } @@ -511,30 +727,13 @@ static GObject * mpris_controller_constructor (GType type, guint n_construct_pro _g_object_unref0 (_tmp4_); _g_free0 (_tmp3_); _g_free0 (_tmp2_); - g_debug ("mpris-controller.vala:51: just attempting to establish an mpris connec" \ + g_debug ("mpris-controller.vala:49: just attempting to establish an mpris connec" \ "tion to %s, %s, %s", _tmp6_ = g_strconcat ("org.mpris.", _tmp5_ = g_utf8_strdown (player_controller_get_name (self->priv->_owner), -1), NULL), "/Player", self->priv->_mpris_interface); _g_free0 (_tmp6_); _g_free0 (_tmp5_); _dynamic_TrackChange1_connect (self->priv->_mpris_player, "TrackChange", (GCallback) _mpris_controller_onTrackChange_dynamic_TrackChange0_, self); _dynamic_StatusChange3_connect (self->priv->_mpris_player, "StatusChange", (GCallback) _mpris_controller_onStatusChange_dynamic_StatusChange2_, self); - st = (_dynamic_GetStatus5 (self->priv->_mpris_player, &_tmp7_, &_inner_error_), _tmp7_); - if (_inner_error_ != NULL) { - g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); - g_clear_error (&_inner_error_); - } - play_state = (gint) st.playback; - g_debug ("mpris-controller.vala:58: GetStatusChange - play state %i", play_state); - transport_menuitem_change_play_state (_tmp9_ = (_tmp8_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, PLAYER_CONTROLLER_TRANSPORT), IS_TRANSPORT_MENUITEM (_tmp8_) ? ((TransportMenuitem*) _tmp8_) : NULL), play_state); - _g_object_unref0 (_tmp9_); - _tmp10_ = _dynamic_GetMetadata6 (self->priv->_mpris_player, &_inner_error_); - if (_inner_error_ != NULL) { - g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); - g_clear_error (&_inner_error_); - } - player_item_update (_tmp11_ = (PlayerItem*) gee_abstract_list_get ((GeeAbstractList*) self->priv->_owner->custom_items, PLAYER_CONTROLLER_METADATA), _tmp12_ = _tmp10_, _tmp13_ = metadata_menuitem_attributes_format ()); - _g_object_unref0 (_tmp13_); - _g_hash_table_unref0 (_tmp12_); - _g_object_unref0 (_tmp11_); + mpris_controller_initial_update (self); } return obj; } @@ -589,7 +788,6 @@ static void mpris_controller_finalize (GObject* obj) { _g_object_unref0 (self->priv->_mpris_player); _g_object_unref0 (self->priv->_owner); _g_free0 (self->priv->_mpris_interface); - _g_free0 (self->priv->name); G_OBJECT_CLASS (mpris_controller_parent_class)->finalize (obj); } |