static void player_state_changed(XmrPlayer *player, gint old_state, gint new_state, XmrMprisPlugin *plugin) { add_player_property_change(plugin, "PlaybackStatus", get_playback_status(plugin)); }
gboolean mpris_player_get_status(MprisPlayer * obj, GValueArray * *status, GError * *error) { *status = g_value_array_new(4); append_int_value(*status, (gint) get_playback_status()); append_int_value (* status, get_bool (NULL, "shuffle")); append_int_value (* status, get_bool (NULL, "no_playlist_advance")); append_int_value (* status, get_bool (NULL, "repeat")); return TRUE; }
gboolean mpris_emit_status_change(MprisPlayer * obj, PlaybackStatus status) { GValueArray *ar = g_value_array_new(4); if (status == MPRIS_STATUS_INVALID) status = get_playback_status (); append_int_value(ar, (gint) status); append_int_value (ar, get_bool (NULL, "shuffle")); append_int_value (ar, get_bool (NULL, "no_playlist_advance")); append_int_value (ar, get_bool (NULL, "repeat")); g_signal_emit(obj, signals[STATUS_CHANGE_SIG], 0, ar); g_value_array_free(ar); return TRUE; }
static GVariant * get_player_property(GDBusConnection *connection, const char *sender, const char *object_path, const char *interface_name, const char *property_name, GError **error, XmrMprisPlugin *plugin) { if (g_strcmp0(object_path, MPRIS_OBJECT_NAME) != 0 || g_strcmp0(interface_name, MPRIS_PLAYER_INTERFACE) != 0) { g_set_error(error, G_DBUS_ERROR, G_DBUS_ERROR_NOT_SUPPORTED, "Property %s.%s not supported", interface_name, property_name); return NULL; } if (g_strcmp0 (property_name, "PlaybackStatus") == 0) { return get_playback_status(plugin); } else if (g_strcmp0 (property_name, "Metadata") == 0) { return build_metadata(plugin); } else if (g_strcmp0 (property_name, "Rate") == 0) { return g_variant_new_double(1.0); } else if (g_strcmp0(property_name, "Volume") == 0) { return g_variant_new_double(xmr_player_get_volume(plugin->player)); } else if (g_strcmp0(property_name, "Position") == 0) { return g_variant_new_int64(plugin->elapsed / 1000); } else if (g_strcmp0 (property_name, "MinimumRate") == 0) { return g_variant_new_double (1.0); } else if (g_strcmp0 (property_name, "MaximumRate") == 0) { return g_variant_new_double (1.0); } else if (g_strcmp0 (property_name, "CanGoNext") == 0) { return g_variant_new_boolean(TRUE); } else if (g_strcmp0 (property_name, "CanGoPrevious") == 0) { return g_variant_new_boolean(FALSE); } else if (g_strcmp0 (property_name, "CanPlay") == 0) { return g_variant_new_boolean (TRUE); } else if (g_strcmp0 (property_name, "CanPause") == 0) { return g_variant_new_boolean(TRUE); } else if (g_strcmp0 (property_name, "CanSeek") == 0) { g_variant_new_boolean(FALSE); } else if (g_strcmp0(property_name, "CanControl") == 0) { return g_variant_new_boolean(TRUE); } g_set_error(error, G_DBUS_ERROR, G_DBUS_ERROR_NOT_SUPPORTED, "Property %s.%s not supported", interface_name, property_name); return NULL; }