void yahoo_chat_add_user(PurpleConvChat *chat, const char *user, const char *reason) { if (purple_conv_chat_find_user(chat, user)) return; purple_conv_chat_add_user(chat, user, reason, PURPLE_CBFLAGS_NONE, TRUE); }
void yahoo_process_conference_logon(PurpleConnection *gc, struct yahoo_packet *pkt) { GSList *l; char *room = NULL; char *who = NULL; PurpleConversation *c; for (l = pkt->hash; l; l = l->next) { struct yahoo_pair *pair = l->data; switch (pair->key) { case 57: g_free(room); room = yahoo_string_decode(gc, pair->value, FALSE); break; case 53: who = pair->value; break; } } if (who && room) { c = yahoo_find_conference(gc, room); if (c) { /* Prevent duplicate users in the chat */ if( !purple_conv_chat_find_user(PURPLE_CONV_CHAT(c), who) ) yahoo_chat_add_user(PURPLE_CONV_CHAT(c), who, NULL); } g_free(room); } }
void irc_msg_nick(struct irc_conn *irc, const char *name, const char *from, char **args) { PurpleConnection *gc = purple_account_get_connection(irc->account); PurpleConversation *conv; GSList *chats; char *nick = irc_mask_nick(from); irc->nickused = FALSE; if (!gc) { g_free(nick); return; } chats = gc->buddy_chats; if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) { purple_connection_set_display_name(gc, args[0]); } while (chats) { PurpleConvChat *chat = PURPLE_CONV_CHAT(chats->data); /* This is ugly ... */ if (purple_conv_chat_find_user(chat, nick)) purple_conv_chat_rename_user(chat, nick, args[0]); chats = chats->next; } conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, nick, irc->account); if (conv != NULL) purple_conversation_set_name(conv, args[0]); g_free(nick); }
/* this is slow, and different from the purple_* version in that it (hopefully) won't add a user twice */ void yahoo_chat_add_users(PurpleConvChat *chat, GList *newusers) { GList *i; for (i = newusers; i; i = i->next) { if (purple_conv_chat_find_user(chat, i->data)) continue; purple_conv_chat_add_user(chat, i->data, NULL, PURPLE_CBFLAGS_NONE, TRUE); } }
static void irc_chat_remove_buddy(PurpleConversation *convo, char *data[2]) { char *message, *stripped; stripped = data[1] ? irc_mirc2txt(data[1]) : NULL; message = g_strdup_printf("quit: %s", stripped); g_free(stripped); if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(convo), data[0])) purple_conv_chat_remove_user(PURPLE_CONV_CHAT(convo), data[0], message); g_free(message); }
/* refresh online member in group conversation window */ void qq_group_conv_refresh_online_member(PurpleConnection *gc, qq_group *group) { GList *names, *list, *flags; qq_buddy *member; gchar *member_name, *member_uid; PurpleConversation *conv; gint flag; g_return_if_fail(group != NULL); names = NULL; flags = NULL; conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->group_name_utf8, purple_connection_get_account(gc)); if (conv != NULL && group->members != NULL) { list = group->members; while (list != NULL) { member = (qq_buddy *) list->data; /* we need unique identifiers for everyone in the chat or else we'll * run into problems with functions like get_cb_real_name from qq.c */ member_name = (member->nickname != NULL && *(member->nickname) != '\0') ? g_strdup_printf("%s (qq-%u)", member->nickname, member->uid) : g_strdup_printf("(qq-%u)", member->uid); member_uid = g_strdup_printf("(qq-%u)", member->uid); flag = 0; /* TYPING to put online above OP and FOUNDER */ if (is_online(member->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); if(1 == (member->role & 1)) flag |= PURPLE_CBFLAGS_OP; if(member->uid == group->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) { purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), member_name, flag); } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) { purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), member_uid, flag); purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); } else { /* always put it even offline */ names = g_list_append(names, member_name); flags = g_list_append(flags, GINT_TO_POINTER(flag)); } g_free(member_uid); list = list->next; } purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); } /* clean up names */ while (names != NULL) { member_name = (gchar *) names->data; names = g_list_remove(names, member_name); g_free(member_name); } g_list_free(flags); }
/* refresh online member in group conversation window */ void qq_room_conv_set_onlines(PurpleConnection *gc, qq_room_data *rmd) { GList *names, *list, *flags; qq_buddy_data *bd; gchar *member_name, *member_uid; PurpleConversation *conv; gint flag; gboolean is_find; g_return_if_fail(rmd != NULL); conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, rmd->title_utf8, purple_connection_get_account(gc)); if (conv == NULL) { purple_debug_warning("QQ", "Conversation \"%s\" is not opened\n", rmd->title_utf8); return; } g_return_if_fail(rmd->members != NULL); names = NULL; flags = NULL; list = rmd->members; while (list != NULL) { bd = (qq_buddy_data *) list->data; /* we need unique identifiers for everyone in the chat or else we'll * run into problems with functions like get_cb_real_name from qq.c */ member_name = (bd->nickname != NULL && *(bd->nickname) != '\0') ? g_strdup_printf("%s (%u)", bd->nickname, bd->uid) : g_strdup_printf("(%u)", bd->uid); member_uid = g_strdup_printf("(%u)", bd->uid); flag = 0; /* TYPING to put online above OP and FOUNDER */ if (is_online(bd->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); if(1 == (bd->role & 1)) flag |= PURPLE_CBFLAGS_OP; if(bd->uid == rmd->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; is_find = TRUE; if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) { purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), member_name, flag); } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) { purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), member_uid, flag); purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); } else { is_find = FALSE; } if (!is_find) { /* always put it even offline */ names = g_list_append(names, member_name); flags = g_list_append(flags, GINT_TO_POINTER(flag)); } else { g_free(member_name); } g_free(member_uid); list = list->next; } if (names != NULL && flags != NULL) { purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); } /* clean up names */ while (names != NULL) { member_name = (gchar *) names->data; names = g_list_remove(names, member_name); g_free(member_name); } g_list_free(flags); }
gboolean jabber_chat_find_buddy(PurpleConversation *conv, const char *name) { return purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), name); }