From: Tuomo Tanskanen Date: Mon, 1 Mar 2010 11:45:12 +0000 (+0200) Subject: compiles, packages, installs as daemon X-Git-Tag: v0.1-1 X-Git-Url: http://git.maemo.org/git/?p=nowplayingd;a=commitdiff_plain;h=b395f938ee4061397a2790b9110da8ea887ceb1f compiles, packages, installs as daemon --- diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..645f27f --- /dev/null +++ b/COPYING @@ -0,0 +1,2 @@ +Licensed under GPLv2, see debian/copyright for more information. + diff --git a/README b/README new file mode 100644 index 0000000..59bdd9a --- /dev/null +++ b/README @@ -0,0 +1,13 @@ +Now Playing Notifications: +-------------------------- + +See "brainstorm" talk thread here: +http://talk.maemo.org/showthread.php?p=550825 + +Thanks to mottis for idea! +Thanks to qwerty12 for his sample code! + +Beware: +------ +This is currently alpha quality hack! + diff --git a/debian/changelog b/debian/changelog index a62e9e6..1ee4de0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ nowplayingd (0.1-1) fremantle; urgency=low - * Initial release, barely compiles + * Initial release, compiles and installs as daemon, thats it - -- Tuomo Tanskanen Mon, 01 Mar 2010 12:31:48 +0200 + -- Tuomo Tanskanen Mon, 01 Mar 2010 13:43:51 +0200 diff --git a/debian/compat b/debian/compat index 7f8f011..7ed6ff8 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -7 +5 diff --git a/debian/control b/debian/control index 54192ed..fafbb25 100644 --- a/debian/control +++ b/debian/control @@ -2,9 +2,9 @@ Source: nowplayingd Section: user/multimedia Priority: extra Maintainer: Tuomo Tanskanen -Build-Depends: debhelper (>= 7), libhildonnotify-dev, libmafw0-dev, libmafw-shared0-dev, libglib2.0-dev +Build-Depends: debhelper (>= 5), libhildonnotify-dev, libmafw0-dev, libmafw-shared0-dev, libglib2.0-dev Standards-Version: 3.8.1 -Homepage: http://nowplayingd.garage.maemo.org/ +XB-Homepage: http://nowplayingd.garage.maemo.org/ Package: nowplayingd Architecture: any @@ -13,5 +13,6 @@ Description: Shows "email like" notifications when song changes Shows clickable notifications when currently playing song changes. When notification is clicked, it opens "Now Playing" view in Media Player. - App idea by mottis. Sample mafw code by qwerty12. Thanks guys! - + Note: Requires reboot to complete install or removal! + App idea by mottis. Sample code by qwerty12. Thanks guys! +XB-Maemo-Display-Name: Now Playing Notifications diff --git a/debian/nowplayingd.default.ex b/debian/nowplayingd.default.ex deleted file mode 100644 index 5d90b2f..0000000 --- a/debian/nowplayingd.default.ex +++ /dev/null @@ -1,10 +0,0 @@ -# Defaults for nowplayingd initscript -# sourced by /etc/init.d/nowplayingd -# installed at /etc/default/nowplayingd by the maintainer scripts - -# -# This is a POSIX shell fragment -# - -# Additional options that are passed to the Daemon. -DAEMON_OPTS="" diff --git a/debian/rules b/debian/rules index 7059586..f0f20f9 100755 --- a/debian/rules +++ b/debian/rules @@ -27,9 +27,10 @@ build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. - $(MAKE) + # $(MAKE) #docbook-to-man debian/nowplayingd.sgml > nowplayingd.1 - + gcc -Wall `pkg-config --cflags --libs hildon-notify glib-2.0 mafw mafw-shared` nowplaying.c -o nowplayingd + touch $@ clean: @@ -38,18 +39,22 @@ clean: rm -f build-stamp configure-stamp # Add here commands to clean up after the build process. - $(MAKE) clean + # $(MAKE) clean dh_clean install: build dh_testdir dh_testroot - dh_prep dh_installdirs # Add here commands to install the package into debian/nowplayingd. - $(MAKE) DESTDIR=$(CURDIR)/debian/nowplayingd install + # $(MAKE) DESTDIR=$(CURDIR)/debian/nowplayingd install + mkdir -p $(CURDIR)/debian/nowplayingd/usr/bin + cp nowplayingd $(CURDIR)/debian/nowplayingd/usr/bin/ + + mkdir -p $(CURDIR)/debian/nowplayingd/etc/X11/Xsession.d + cp scripts/99nowplayingd $(CURDIR)/debian/nowplayingd/etc/X11/Xsession.d/ # Build architecture-independent files here. diff --git a/nowplaying.c b/nowplaying.c new file mode 100644 index 0000000..8dfbe8d --- /dev/null +++ b/nowplaying.c @@ -0,0 +1,147 @@ +/** Code is released under GPLv2 + * + * See debian/copyright for copyright info + */ + +/** Compile binary only with: + * gcc -Wall `pkg-config --cflags --libs hildon-notify glib-2.0 mafw mafw-shared` nowplaying.c -o nowplayingd + */ + +#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 gboolean close_notification( gpointer n ) +{ + notify_notification_close( NOTIFY_NOTIFICATION( n ), NULL ); + + return FALSE; +} + +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 = NULL; + const gchar *title = NULL; + HildonNotification *n = NULL; + + 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 ); + g_timeout_add_seconds( 5, close_notification, n ); +} + +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 = NULL; + + 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("nowplayingd"); + + 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; +} + diff --git a/scripts/99nowplayingd b/scripts/99nowplayingd new file mode 100644 index 0000000..b833d8a --- /dev/null +++ b/scripts/99nowplayingd @@ -0,0 +1,7 @@ +#! /bin/sh + +DAEMON=/usr/bin/nowplayingd +DSMETOOL=/usr/sbin/dsmetool +DSMETOOL_PARAMETERS="-t" + +$DSMETOOL $DSMETOOL_PARAMETERS $DAEMON diff --git a/src/nowplaying.c b/src/nowplaying.c deleted file mode 100644 index a0c17f1..0000000 --- a/src/nowplaying.c +++ /dev/null @@ -1,110 +0,0 @@ -#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; -} -