# HG changeset patch # User Yoshiki Yazawa # Date 1223089605 -32400 # Node ID 12d809123d6953b4754dc4068d4c707dccd8b30d # Parent dc3aa0bf24c0066edf21b834fa50e2b700b25939 - revised signed_on_cb() so that it calls purple_util_set_current_song(). - new debug macros. - removed watchdog_func(). - added connect_purple_signals(). - renamed is_app_running() as is_app_playing(). diff -r dc3aa0bf24c0 -r 12d809123d69 pidgin-audacious.c --- a/pidgin-audacious.c Sat Oct 04 04:19:46 2008 +0900 +++ b/pidgin-audacious.c Sat Oct 04 12:06:45 2008 +0900 @@ -33,12 +33,13 @@ #include "savedstatuses.h" #define PIDGINAUD_PLUGIN_ID "pidgin_audacious" - +#define PLUGIN_NAME "Pidgin-Audacious" #define OPT_PIDGINAUD "/plugins/pidgin_audacious" #define OPT_PROCESS_STATUS OPT_PIDGINAUD "/process_status" #define OPT_PROCESS_USERINFO OPT_PIDGINAUD "/process_userinfo" #define OPT_SONG_TEMPLATE OPT_PIDGINAUD "/song_template" #define OPT_PASTE_TEMPLATE OPT_PIDGINAUD "/paste_template" +#define OPT_LOG_OUTPUT OPT_PIDGINAUD "/log_output" #define DEFAULT_SONG_TEMPLATE "%artist - %title" #define SONG_TOKEN "%song" @@ -46,12 +47,10 @@ #define DBUS_TYPE_G_STRING_VALUE_HASHTABLE (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE)) -#define aud_debug(fmt, ...) purple_debug(PURPLE_DEBUG_INFO, \ - "Pidgin-Audacious", \ - fmt, ## __VA_ARGS__); -#define aud_error(fmt, ...) purple_debug(PURPLE_DEBUG_ERROR, \ - "Pidgin-Audacious", \ - fmt, ## __VA_ARGS__); +#define aud_debug(fmt, ...) do { if(purple_prefs_get_bool(OPT_LOG_OUTPUT)) purple_debug(PURPLE_DEBUG_INFO, PLUGIN_NAME, "%s():%4d: " fmt, __FUNCTION__, (int)__LINE__, ## __VA_ARGS__); } while(0); + +#define aud_error(fmt, ...) do { if(purple_prefs_get_bool(OPT_LOG_OUTPUT)) purple_debug(PURPLE_DEBUG_ERROR, PLUGIN_NAME, "%s():%4d: " fmt, __FUNCTION__, (int)__LINE__, ## __VA_ARGS__); } while(0); + /* xxx move up */ #define TITLE "%title" #define ARTIST "%artist" @@ -80,9 +79,11 @@ static void aud_process(gchar *aud_info); static void track_signal_cb(DBusGProxy *player_proxy, GHashTable *table, gpointer data); static void status_signal_cb(DBusGProxy *player_proxy, gint status, gpointer data); -static gboolean is_app_running(void); +static gboolean is_app_playing(void); static GHashTable *get_song_table(void); static song_tuple *get_song_tuple(GHashTable *table); +static void signed_on_cb(PurpleConnection *gc, void *data); +static void prefs_cb(const char *name, PurplePrefType type, gconstpointer value, gpointer data); /* implementation */ @@ -128,14 +129,33 @@ NULL, NULL); } +static void +connect_purple_signals(PurplePlugin *plugin) +{ + purple_signal_connect(purple_connections_get_handle(), + "signed-on", + plugin, + PURPLE_CALLBACK(signed_on_cb), + NULL); + + purple_signal_connect(purple_savedstatuses_get_handle(), + "savedstatus-changed", + plugin, + PURPLE_CALLBACK(signed_on_cb), + NULL); + + purple_prefs_connect_callback(purple_prefs_get_handle(), + OPT_PIDGINAUD, + prefs_cb, + NULL); +} + static GHashTable * get_song_table(void) { GHashTable *table = NULL; - status_signal_cb(NULL, -1, NULL); - - if(is_app_running()) { + if(is_app_playing()) { dbus_g_proxy_call(session, "GetMetadata", NULL, @@ -263,67 +283,6 @@ } -#if 0 -static gboolean -watchdog_func(void) -{ - gint playpos = 0; - gchar *song = NULL, *tmp = NULL; - - gboolean rv = TRUE; - size_t dummy; - - if(!session) { - session = get_dbus_session(); - } - - aud_debug("session = %p\n", session); - aud_debug("is_playing = %d\n", audacious_remote_is_playing(session)); - - if(!audacious_remote_is_playing(session)) { /* audacious isn't playing */ - aud_process(NULL); - purple_util_set_current_song(NULL, NULL, NULL); - return rv; - } - - playpos = audacious_remote_get_playlist_pos(session); - tmp = audacious_remote_get_playlist_title(session, playpos); - if(tmp) { - if(botch_utf) /* if function exists */ - song = (gchar *) botch_utf(tmp, strlen(tmp), &dummy); - else - song = g_strdup(tmp); - } - g_free(tmp); - tmp = NULL; - - aud_process(song); - g_free(song); - song = NULL; - - /* preliminary support for purple_util_set_current_song() */ - gchar *artist = NULL, *title = NULL, *album = NULL; - - artist = audacious_get_tuple_field_data(session, "artist", playpos); - title = audacious_get_tuple_field_data(session, "title", playpos); - album = audacious_get_tuple_field_data(session, "album", playpos); - - purple_util_set_current_song(title ? title : "", - artist ? artist : "", - album ? album : ""); - - g_free(artist); - g_free(title); - g_free(album); - - return rv; -} -#endif - - - - - static void aud_process_status(PurpleConnection *gc, gchar *aud_info) { @@ -527,10 +486,6 @@ g_free(data); } - - - - static PurpleCmdRet paste_current_song(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) @@ -541,7 +496,7 @@ const gchar *template = NULL; /* audacious isn't playing */ - if(!is_app_running()) { + if(!is_app_playing()) { return PURPLE_CMD_RET_OK; } @@ -588,12 +543,8 @@ return PURPLE_CMD_RET_OK; } - - - - static gboolean -is_app_running(void) +is_app_playing(void) { gchar *player_name = g_strconcat("org.mpris.", "audacious", NULL); @@ -627,21 +578,27 @@ GHashTable *table = NULL; song_tuple *tuple = NULL; + aud_debug("called\n"); + table = get_song_table(); tuple = get_song_tuple(table); + g_hash_table_destroy(table); + + /* set current song */ + purple_util_set_current_song(tuple->title ? tuple->title : "", + tuple->artist ? tuple->artist : "", + tuple->album ? tuple->album : ""); song_info = format_song_info(tuple); free_song_tuple(tuple); - g_hash_table_destroy(table); - if(song_info) - aud_process(song_info); - + aud_process(song_info); g_free(song_info); } -static void prefs_cb(const char *name, PurplePrefType type, +static void +prefs_cb(const char *name, PurplePrefType type, gconstpointer value, gpointer data) { aud_debug("settings change detected at %s\n", name); @@ -668,22 +625,7 @@ connect_dbus_signals(); /* connect to purple signals */ - purple_signal_connect(purple_connections_get_handle(), - "signed-on", - plugin, - PURPLE_CALLBACK(signed_on_cb), - NULL); - - purple_signal_connect(purple_savedstatuses_get_handle(), - "savedstatus-changed", - plugin, - PURPLE_CALLBACK(signed_on_cb), - NULL); - - purple_prefs_connect_callback(purple_prefs_get_handle(), - OPT_PIDGINAUD, - prefs_cb, - NULL); + connect_purple_signals(plugin); status_signal_cb(NULL, -1, NULL); @@ -777,7 +719,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ PIDGINAUD_PLUGIN_ID, /**< id */ "Pidgin-Audacious", /**< name */ - "3.0.0d2", /**< version */ + "3.0.0d1", /**< version */ "Automatically updates your Pidgin status info with the currently " "playing music in Audacious.", /** summary */ "Automatically updates your Pidgin status info with the currently " @@ -804,6 +746,7 @@ purple_prefs_add_bool(OPT_PROCESS_USERINFO, TRUE); purple_prefs_add_string(OPT_SONG_TEMPLATE, DEFAULT_SONG_TEMPLATE); purple_prefs_add_string(OPT_PASTE_TEMPLATE, SONG_TOKEN); + purple_prefs_add_bool(OPT_LOG_OUTPUT, TRUE); }