std::string SpectrumBuddy::getIconHash() { char *avatarHash = NULL; PurpleBuddyIcon *icon = purple_buddy_icons_find(purple_buddy_get_account(m_buddy), purple_buddy_get_name(m_buddy)); if (icon) { avatarHash = purple_buddy_icon_get_full_path(icon); Log(getName(), "avatarHash"); } if (avatarHash) { Log(getName(), "Got avatar hash"); // Check if it's patched libpurple which saves icons to directories char *hash = strrchr(avatarHash,'/'); std::string h; if (hash) { char *dot; hash++; dot = strchr(hash, '.'); if (dot) *dot = '\0'; std::string ret(hash); g_free(avatarHash); return ret; } else { std::string ret(avatarHash); g_free(avatarHash); return ret; } } return ""; }
static void buddy_signed_off_cb(PurpleBuddy *buddy, void *data) { int len; char* buddy_nick, *buddy_name, *icon_path, *growl_msg; PurpleBuddyIcon* icon; DEBUG_MSG("buddy_signed_off_cb\n"); g_return_if_fail( buddy != NULL ); g_return_if_fail( is_allowed(purple_buddy_get_account(buddy)) ); buddy_nick = (char*)purple_buddy_get_alias(buddy); buddy_name = (char*)purple_buddy_get_name(buddy); icon = purple_buddy_get_icon(buddy); icon_path = (char*)purple_buddy_icon_get_full_path(icon); len = s_strlen(buddy_nick) + s_strlen(buddy_name) + 2; growl_msg = malloc( len ); g_snprintf(growl_msg, len, "%s\n%s", buddy_nick, buddy_name ); gntp_notify("buddy-sign-out", icon_path, "Signed Off", growl_msg, NULL); free(growl_msg); }
static void buddy_icon_changed_cb(PurpleBuddy *buddy) { PurpleBuddyIcon* icon; int len; char *icon_path, *buddy_nick, *buddy_name, *growl_msg; DEBUG_MSG("buddy_icon_changed_cb\n"); g_return_if_fail( buddy != NULL ); buddy_nick = (char*)purple_buddy_get_alias(buddy); buddy_name = (char*)purple_buddy_get_name(buddy); icon = purple_buddy_get_icon(buddy); icon_path = (char*)purple_buddy_icon_get_full_path(icon); if(buddy_nick == NULL) DEBUG_MSG("buddy_nick is NULL\n"); if(buddy_name == NULL) DEBUG_MSG("buddy_name is NULL\n"); if(icon == NULL) DEBUG_MSG("icon is NULL\n"); if(icon_path == NULL) DEBUG_MSG("icon_path is NULL\n"); if(icon_path != NULL) { if(g_list_find_custom(img_list, icon_path, (GCompareFunc)strcmp)) { DEBUG_MSG("icon_path found in list - leaving function\n"); return; } img_list = g_list_prepend(img_list, icon_path); if(g_list_find_custom(img_list, icon_path, (GCompareFunc)strcmp)) DEBUG_MSG("icon_path added to list of known icons\n"); } // is allowed? g_return_if_fail( is_allowed(purple_buddy_get_account(buddy)) ); //hack to hide spam when signing on to account g_return_if_fail( GetTickCount() - start_tick_image > 500 ); len = s_strlen(buddy_nick) + s_strlen(buddy_name) + 2; growl_msg = malloc( len ); g_snprintf(growl_msg, len, "%s\n%s", buddy_nick, buddy_name ); gntp_notify("buddy-change-image", icon_path, "Changed Image", growl_msg, NULL); free(growl_msg); }
static void received_im_msg_cb(PurpleAccount *account, char *sender, char *buffer, PurpleConversation *conv, PurpleMessageFlags flags, void *data) { gboolean on_focus; char *message, *notification, *buddy_nick, *iconpath; PurpleBuddy* buddy; PurpleBuddyIcon* icon; int len; DEBUG_MSG("received_im_msg_cb\n"); g_return_if_fail( is_allowed(account) ); on_focus = purple_prefs_get_bool("/plugins/core/pidgin-gntp/on_focus"); if(conv != NULL && !on_focus && conv->ui_ops->has_focus(conv)) return; // copy string to temporary variable) message = malloc(s_strlen(buffer)+1); strcpy(message, buffer); special_entries(message); strip_tags(message); // nickname buddy = purple_find_buddy(account, sender); if(buddy == NULL) buddy_nick = sender; else buddy_nick = (char*)purple_buddy_get_alias( buddy ); len = s_strlen(buddy_nick) + s_strlen(message) + 3; // message notification = malloc( len ); g_snprintf(notification, len, "%s: %s", buddy_nick, message); // icon icon = purple_buddy_get_icon( buddy ); iconpath = purple_buddy_icon_get_full_path( icon ); gntp_notify("im-msg-received", iconpath, "IM Message", notification, NULL); free(message); free(notification); }
static void buddy_signed_on_cb(PurpleBuddy *buddy, void *data) { int hack_ms; char* buddy_nick, *buddy_name, *icon_path, *growl_msg; PurpleBuddyIcon* icon; int len = 2; DEBUG_MSG("buddy_signed_on_cb\n"); g_return_if_fail( buddy != NULL ); g_return_if_fail( is_allowed(purple_buddy_get_account(buddy)) ); start_tick_image = GetTickCount(); //hack to hide spam when signing on to account hack_ms = purple_prefs_get_int("/plugins/core/pidgin-gntp/hack_ms"); if( GetTickCount() - start_tick_im < hack_ms) return; buddy_nick = (char*)purple_buddy_get_alias(buddy); buddy_name = (char*)purple_buddy_get_name(buddy); purple_blist_update_buddy_icon(buddy); icon = purple_buddy_get_icon(buddy); icon_path = (char*)purple_buddy_icon_get_full_path(icon); if(buddy_nick != NULL) len = strlen(buddy_nick) + 1; if(buddy_name != NULL ) len += strlen(buddy_name); growl_msg = malloc( len ); g_snprintf(growl_msg, len, "%s\n%s", buddy_nick, buddy_name ); gntp_notify("buddy-sign-in", icon_path, "Signed In", growl_msg, NULL); free(growl_msg); }
/************************************************************************** * Buddy List subsystem signal callbacks **************************************************************************/ static void buddy_status_changed_cb(PurpleBuddy *buddy, PurpleStatus *old_status, PurpleStatus *status) { char *status_name, *old_status_name, *status_msg; char* buddy_nick, *buddy_name, *icon_path, *growl_msg; PurpleBuddyIcon* icon; int len, hack_ms; PurpleAccount* account; DEBUG_MSG("buddy_status_changed_cb\n"); g_return_if_fail( buddy != NULL ); account = purple_buddy_get_account(buddy); g_return_if_fail( is_allowed(account) ); status_name = (char *)purple_status_get_name(status); old_status_name = (char *)purple_status_get_name(old_status); buddy_nick = (char*)purple_buddy_get_alias(buddy); buddy_name = (char*)purple_buddy_get_name(buddy); icon = purple_buddy_get_icon(buddy); icon_path = (char*)purple_buddy_icon_get_full_path(icon); status_msg = custom_get_buddy_status_text(buddy); if( status_msg == NULL ) status_msg = ""; special_entries(status_msg); strip_tags(status_msg); //hack to hide spam when signing on to account hack_ms = purple_prefs_get_int("/plugins/core/pidgin-gntp/hack_ms"); GList *node = buddy_status_is_new(buddy, status_msg); if( GetTickCount() - start_tick_im < hack_ms) return; if( node != NULL ) { DEBUG_MSG("status node received\n"); struct buddy_status* node_status = node->data; free(node_status->status); char* the_status = malloc( s_strlen(status_msg)+1 ); strcpy(the_status, status_msg); node_status->status = the_status; if(status_msg[0] == 0) { len = s_strlen(buddy_nick) + s_strlen(buddy_name) + 25; growl_msg = malloc( len ); g_snprintf(growl_msg, len, "status message removed\n%s\n%s",buddy_nick, buddy_name ); gntp_notify("buddy-change-msg", icon_path, "Status Message Changed", growl_msg, NULL); free(growl_msg); } else { len = s_strlen(buddy_nick) + s_strlen(buddy_name) + s_strlen(status_msg)+5; growl_msg = malloc( len ); g_snprintf(growl_msg, len, "\"%s\"\n%s\n%s", status_msg, buddy_nick, buddy_name ); gntp_notify("buddy-change-msg", icon_path, "Status Changed", growl_msg, NULL); free(growl_msg); } } if( strcmp(status_name, old_status_name) == 0) return; len = s_strlen(buddy_nick) + s_strlen(buddy_name) + s_strlen(status_name) + 3; growl_msg = malloc( len ); g_snprintf(growl_msg, len, "%s\n%s\n%s", status_name, buddy_nick, buddy_name ); gntp_notify("buddy-change-status", icon_path, "Status Changed", growl_msg, NULL); free(growl_msg); }