fix debian stuff
[nowplayingd] / src / nowplaying.c
1 #include <stdlib.h>
2 #include <string.h>
3 #include <glib.h>
4 #include <libintl.h>
5 #include <locale.h>
6 #include <hildon/hildon-notification.h>
7 #include <libmafw/mafw.h>
8 #include <libmafw-shared/mafw-shared.h>
9
10 #define WANTED_RENDERER "Mafw-Gst-Renderer"
11
12 static GMainLoop *loop = NULL;
13 static MafwRegistry *registry = NULL;
14
15 static void sig_handler (int sig G_GNUC_UNUSED)
16 {
17         if (g_main_loop_is_running (loop))
18                 g_main_loop_quit (loop);
19 }
20
21 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)
22 {
23         const gchar *artist;
24         const gchar *title;
25         HildonNotification * n;
26
27         artist = g_value_get_string (mafw_metadata_first (metadata, MAFW_METADATA_KEY_ARTIST));
28         title = g_value_get_string (mafw_metadata_first (metadata, MAFW_METADATA_KEY_TITLE));
29
30         if (!artist || *artist == '\0') /* || !strcmp (artist, "")) */
31                 artist = dgettext ("mediaplayer", "mp_li_unknown_artist");
32
33         if (!title || *title == '\0') /* || !strcmp (title, "")) */
34                 title = dgettext ("mediaplayer", "mp_li_unknown_song");
35
36         n = hildon_notification_new (artist, title, "tasklaunch_media_player", "media");
37         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);
38         notify_notification_show (NOTIFY_NOTIFICATION (n), NULL);
39 }
40
41 static void state_changed_cb (MafwRenderer *renderer, const MafwPlayState state, gconstpointer user_data G_GNUC_UNUSED)
42 {
43         switch (state)
44         {
45                 case Playing:
46                         mafw_renderer_get_current_metadata (renderer, (MafwRendererMetadataResultCB) metadata_callback, NULL);
47                         break;
48
49                 case Stopped:
50                 default:
51                         break;
52   }
53 }
54
55 static void renderer_added_cb (const MafwRegistry *registry2 G_GNUC_UNUSED, GObject *renderer, gconstpointer user_data G_GNUC_UNUSED)
56 {
57         if (MAFW_IS_RENDERER (renderer))
58         {
59                 const gchar *name = mafw_extension_get_name (MAFW_EXTENSION (renderer));
60
61                 if (!strcmp (name, WANTED_RENDERER))
62                 {
63                         g_signal_connect (renderer, "state-changed", G_CALLBACK (state_changed_cb), NULL);
64                 }
65         }
66 }
67
68 static void mafw_init (void)
69 {
70     GList *renderers;
71
72         g_signal_connect (registry, "renderer-added", G_CALLBACK (renderer_added_cb), NULL);
73         renderers = mafw_registry_get_renderers (registry);
74         while (renderers)
75         {
76                 renderer_added_cb (registry, G_OBJECT (renderers->data), NULL);
77                 renderers = g_list_next (renderers);
78         }
79 }
80
81 int main (void)
82 {
83         setlocale (LC_ALL, "");
84
85         g_type_init ();
86         notify_init ("mediaplayershit");
87
88         loop = g_main_loop_new (NULL, FALSE);
89         g_assert (loop);
90
91         registry = MAFW_REGISTRY (mafw_registry_get_instance ());
92         g_assert (registry);
93
94         signal (SIGINT, sig_handler);
95         signal (SIGQUIT, sig_handler);
96         signal (SIGTERM, sig_handler);
97
98         mafw_shared_init (registry, NULL);
99
100         mafw_init ();
101
102         g_main_loop_run (loop);
103
104         g_main_loop_unref (loop);
105
106         mafw_shared_deinit ();
107
108         return EXIT_SUCCESS;
109 }
110