static void irc_receiving_text(PurpleConnection *gc, const char **incoming, gpointer null) { char **splits, *str; PurpleAccount *account = NULL; if (!incoming || !*incoming || !**incoming) /* oh the fun .. I can do this all day! */ return; splits = g_strsplit(*incoming, " ", -1); /* if there's not at least 5 elements in the string array, this isn't a kick; ignore */ if(g_strv_length(splits) < 5) return; account = purple_connection_get_account(gc); str = g_ascii_strdown(splits[1], -1); if (strcmp(str, "kick") == 0 && splits[2] && splits[3]) { char *name = splits[2]; GList *chats = purple_get_chats(); while (chats) { PurpleConversation *conv = chats->data; chats = chats->next; if (purple_conversation_get_account(conv) == account && strcmp(purple_conversation_get_name(conv), name) == 0) { purple_timeout_add(100, show_them, conv); break; } } } g_free(str); g_strfreev(splits); }
static PurpleRoomlist * purplemot_roomlist_get_list(PurpleConnection *gc) { const char *username = gc->account->username; PurpleRoomlist *roomlist = purple_roomlist_new(gc->account); GList *fields = NULL; PurpleRoomlistField *field; GList *chats; GList *seen_ids = NULL; purple_debug_info("purplemot", "%s asks for room list; returning:\n", username); /* set up the room list */ field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "room", "room", TRUE /* hidden */); fields = g_list_append(fields, field); field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_INT, "Id", "Id", FALSE); fields = g_list_append(fields, field); purple_roomlist_set_fields(roomlist, fields); /* add each chat room. the chat ids are cached in seen_ids so that each room * is only returned once, even if multiple users are in it. */ for (chats = purple_get_chats(); chats; chats = g_list_next(chats)) { PurpleConversation *conv = (PurpleConversation *)chats->data; PurpleRoomlistRoom *room; const char *name = conv->name; int id = purple_conversation_get_chat_data(conv)->id; /* have we already added this room? */ if (g_list_find_custom(seen_ids, name, (GCompareFunc)strcmp)) continue; /* yes! try the next one. */ /* This cast is OK because this list is only staying around for the life * of this function and none of the conversations are being deleted * in that timespan. */ seen_ids = g_list_prepend(seen_ids, (char *)name); /* no, it's new. */ purple_debug_info("purplemot", "%s (%d), ", name, id); room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, NULL); purple_roomlist_room_add_field(roomlist, room, name); purple_roomlist_room_add_field(roomlist, room, &id); purple_roomlist_room_add(roomlist, room); } g_list_free(seen_ids); purple_timeout_add(1 /* ms */, purplemot_finish_get_roomlist, roomlist); return roomlist; }
void twitter_conv_icon_account_unload(PurpleAccount * account) { PurpleConnection *gc = purple_account_get_connection(account); TwitterConnectionData *twitter; GList *l; /* Remove icons from all conversations */ for (l = purple_get_chats(); l; l = l->next) { if (purple_conversation_get_account(l->data) == account) twitter_conv_icon_remove_conversation_conv_icons(l->data); } if (gc && (twitter = gc->proto_data)) { if (twitter->icons) { purple_signals_disconnect_by_handle(twitter->icons); g_hash_table_destroy(twitter->icons); } twitter->icons = NULL; } }