# $Id: pidgin-log_away_messages.diff,v 1.3 2009/12/23 21:29:55 jcs Exp $ # # make pidgin log the away messages of contacts when they go away, in both the # log files and the state notification plugin # # by joshua stein # --- libpurple/status.c.orig Wed Dec 23 13:01:52 2009 +++ libpurple/status.c Wed Dec 23 13:04:32 2009 @@ -612,12 +612,22 @@ char *tmp, *logtmp; PurpleLog *log; + const char *away_msg = NULL; + char *away_str = NULL; + + away_msg = purple_status_get_attr_string(new_status, "message"); + if ((away_msg != NULL) && (*away_msg != '\0')) + away_str = g_strdup_printf(" (%s)", away_msg); + else + away_str = g_strdup_printf("%s", ""); + if (old_status != NULL) { - tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s"), buddy_alias, + tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s%s"), buddy_alias, purple_buddy_get_name(buddy), purple_status_get_name(old_status), - purple_status_get_name(new_status)); + purple_status_get_name(new_status), + away_str); logtmp = g_markup_escape_text(tmp, -1); } else @@ -626,9 +636,10 @@ if (purple_status_is_active(new_status)) { - tmp = g_strdup_printf(_("%s (%s) is now %s"), buddy_alias, + tmp = g_strdup_printf(_("%s (%s) is now %s%s"), buddy_alias, purple_buddy_get_name(buddy), - purple_status_get_name(new_status)); + purple_status_get_name(new_status), + away_str); logtmp = g_markup_escape_text(tmp, -1); } else @@ -649,6 +660,7 @@ g_free(tmp); g_free(logtmp); + g_free(away_str); } } --- libpurple/plugins/statenotify.c.bak.orig Sun Nov 29 20:13:49 2009 +++ libpurple/plugins/statenotify.c Wed Dec 23 14:29:06 2009 @@ -50,6 +50,10 @@ PurpleStatus *status, void *data) { gboolean available, old_available; + PurplePresence *presence = purple_buddy_get_presence(buddy); + const char *away_msg = NULL; + char *away_str = NULL; + char *buf = NULL; if (!purple_status_is_exclusive(status) || !purple_status_is_exclusive(old_status)) @@ -61,9 +65,24 @@ if (purple_prefs_get_bool("/plugins/core/statenotify/notify_away")) { if (available && !old_available) write_status(buddy, _("%s is no longer away.")); - else if (!available && old_available) - write_status(buddy, _("%s has gone away.")); + else if (!available && old_available) { + away_msg = purple_status_get_attr_string(status, + "message"); + + if ((away_msg != NULL) && (*away_msg != '\0')) + away_str = g_strdup_printf(" (%s)", away_msg); + else + away_str = g_strdup_printf("%s", ""); + + buf = g_strdup_printf("%%s has gone away%s.", + away_str); + + write_status(buddy, _(buf)); + } } + + g_free(away_str); + g_free(buf); } static void