1 /** Code is released under GPLv2
3 * See debian/copyright for copyright info
6 /** Compile binary only with:
7 * gcc -Wall `pkg-config --cflags --libs hildon-notify glib-2.0 mafw mafw-shared` nowplaying.c -o nowplayingd
15 #include <hildon/hildon-notification.h>
16 #include <libmafw/mafw.h>
17 #include <libmafw-shared/mafw-shared.h>
19 #define WANTED_RENDERER "Mafw-Gst-Renderer"
21 static GMainLoop *loop = NULL;
22 static MafwRegistry *registry = NULL;
24 static void sig_handler( int sig G_GNUC_UNUSED )
26 if ( g_main_loop_is_running( loop ) ) {
27 g_main_loop_quit( loop );
31 static gboolean close_notification( gpointer n )
33 notify_notification_close( NOTIFY_NOTIFICATION( n ), NULL );
38 static void metadata_callback(
39 const MafwRenderer *self G_GNUC_UNUSED,
40 const gchar *object_id G_GNUC_UNUSED,
42 gconstpointer user_data G_GNUC_UNUSED,
43 const GError *error G_GNUC_UNUSED )
45 const gchar *artist = NULL;
46 const gchar *title = NULL;
47 HildonNotification *n = NULL;
49 artist = g_value_get_string( mafw_metadata_first( metadata, MAFW_METADATA_KEY_ARTIST ) );
50 title = g_value_get_string( mafw_metadata_first( metadata, MAFW_METADATA_KEY_TITLE ) );
52 if ( !artist || *artist == '\0' ) /* || !strcmp (artist, "")) */ {
53 artist = dgettext( "mediaplayer", "mp_li_unknown_artist" );
56 if ( !title || *title == '\0' ) /* || !strcmp (title, "")) */ {
57 title = dgettext( "mediaplayer", "mp_li_unknown_song" );
60 n = hildon_notification_new( artist, title, "tasklaunch_media_player", "media" );
61 hildon_notification_add_dbus_action( n, "default",
62 "tasklaunch_media_player",
63 "com.nokia.mediaplayer",
64 "/com/nokia/osso/mediaplayer",
65 "com.nokia.mediaplayer",
66 "open_mp_now_playing",
70 notify_notification_show( NOTIFY_NOTIFICATION( n ), NULL );
71 g_timeout_add_seconds( 5, close_notification, n );
74 static void state_changed_cb(
75 MafwRenderer *renderer,
76 const MafwPlayState state,
77 gconstpointer user_data G_GNUC_UNUSED)
81 mafw_renderer_get_current_metadata( renderer,
82 (MafwRendererMetadataResultCB) metadata_callback,
92 static void renderer_added_cb(
93 const MafwRegistry *registry2 G_GNUC_UNUSED,
95 gconstpointer user_data G_GNUC_UNUSED)
97 if ( MAFW_IS_RENDERER( renderer ) ) {
98 const gchar *name = mafw_extension_get_name( MAFW_EXTENSION( renderer ) );
100 if ( !strcmp( name, WANTED_RENDERER ) ) {
101 g_signal_connect( renderer, "state-changed", G_CALLBACK (state_changed_cb), NULL );
106 static void mafw_init( void )
108 GList *renderers = NULL;
110 g_signal_connect( registry, "renderer-added", G_CALLBACK( renderer_added_cb ), NULL );
111 renderers = mafw_registry_get_renderers( registry );
112 while ( renderers ) {
113 renderer_added_cb( registry, G_OBJECT( renderers->data ), NULL );
114 renderers = g_list_next( renderers );
120 setlocale( LC_ALL, "" );
123 notify_init("nowplayingd");
125 loop = g_main_loop_new( NULL, FALSE );
128 registry = MAFW_REGISTRY( mafw_registry_get_instance() );
129 g_assert( registry );
131 signal( SIGINT, sig_handler );
132 signal( SIGQUIT, sig_handler );
133 signal( SIGTERM, sig_handler );
135 mafw_shared_init( registry, NULL );
139 g_main_loop_run( loop );
141 g_main_loop_unref( loop );
143 mafw_shared_deinit();