X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fnowplaying.c;fp=src%2Fnowplaying.c;h=a0c17f1b9cf1d71c2184620027e4f5bf8600bdbc;hb=38115abe5ff915935f4aa4330b6b689a6cc5f5f0;hp=0000000000000000000000000000000000000000;hpb=8b82cad6f3b9cbf6a3c869fea18a2fa7a4679cef;p=nowplayingd diff --git a/src/nowplaying.c b/src/nowplaying.c new file mode 100644 index 0000000..a0c17f1 --- /dev/null +++ b/src/nowplaying.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define WANTED_RENDERER "Mafw-Gst-Renderer" + +static GMainLoop *loop = NULL; +static MafwRegistry *registry = NULL; + +static void sig_handler (int sig G_GNUC_UNUSED) +{ + if (g_main_loop_is_running (loop)) + g_main_loop_quit (loop); +} + +static void metadata_callback (const MafwRenderer *self G_GNUC_UNUSED, const gchar *object_id G_GNUC_UNUSED, GHashTable *metadata, gconstpointer user_data G_GNUC_UNUSED, const GError *error G_GNUC_UNUSED) +{ + const gchar *artist; + const gchar *title; + HildonNotification * n; + + artist = g_value_get_string (mafw_metadata_first (metadata, MAFW_METADATA_KEY_ARTIST)); + title = g_value_get_string (mafw_metadata_first (metadata, MAFW_METADATA_KEY_TITLE)); + + if (!artist || *artist == '\0') /* || !strcmp (artist, "")) */ + artist = dgettext ("mediaplayer", "mp_li_unknown_artist"); + + if (!title || *title == '\0') /* || !strcmp (title, "")) */ + title = dgettext ("mediaplayer", "mp_li_unknown_song"); + + n = hildon_notification_new (artist, title, "tasklaunch_media_player", "media"); + hildon_notification_add_dbus_action (n, "default", "tasklaunch_media_player", "com.nokia.mediaplayer", "/com/nokia/osso/mediaplayer", "com.nokia.mediaplayer", "open_mp_now_playing", G_TYPE_NONE, NULL, -1); + notify_notification_show (NOTIFY_NOTIFICATION (n), NULL); +} + +static void state_changed_cb (MafwRenderer *renderer, const MafwPlayState state, gconstpointer user_data G_GNUC_UNUSED) +{ + switch (state) + { + case Playing: + mafw_renderer_get_current_metadata (renderer, (MafwRendererMetadataResultCB) metadata_callback, NULL); + break; + + case Stopped: + default: + break; + } +} + +static void renderer_added_cb (const MafwRegistry *registry2 G_GNUC_UNUSED, GObject *renderer, gconstpointer user_data G_GNUC_UNUSED) +{ + if (MAFW_IS_RENDERER (renderer)) + { + const gchar *name = mafw_extension_get_name (MAFW_EXTENSION (renderer)); + + if (!strcmp (name, WANTED_RENDERER)) + { + g_signal_connect (renderer, "state-changed", G_CALLBACK (state_changed_cb), NULL); + } + } +} + +static void mafw_init (void) +{ + GList *renderers; + + g_signal_connect (registry, "renderer-added", G_CALLBACK (renderer_added_cb), NULL); + renderers = mafw_registry_get_renderers (registry); + while (renderers) + { + renderer_added_cb (registry, G_OBJECT (renderers->data), NULL); + renderers = g_list_next (renderers); + } +} + +int main (void) +{ + setlocale (LC_ALL, ""); + + g_type_init (); + notify_init ("mediaplayershit"); + + loop = g_main_loop_new (NULL, FALSE); + g_assert (loop); + + registry = MAFW_REGISTRY (mafw_registry_get_instance ()); + g_assert (registry); + + signal (SIGINT, sig_handler); + signal (SIGQUIT, sig_handler); + signal (SIGTERM, sig_handler); + + mafw_shared_init (registry, NULL); + + mafw_init (); + + g_main_loop_run (loop); + + g_main_loop_unref (loop); + + mafw_shared_deinit (); + + return EXIT_SUCCESS; +} +