| 72 GList *names, *list, *flags; |
72 GList *names, *list, *flags; |
| 73 qq_buddy *member; |
73 qq_buddy *member; |
| 74 gchar *member_name, *member_uid; |
74 gchar *member_name, *member_uid; |
| 75 PurpleConversation *conv; |
75 PurpleConversation *conv; |
| 76 gint flag; |
76 gint flag; |
| 77 gboolean is_find; |
|
| 78 g_return_if_fail(group != NULL); |
77 g_return_if_fail(group != NULL); |
| 79 |
|
| 80 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, |
|
| 81 group->title_utf8, purple_connection_get_account(gc)); |
|
| 82 |
|
| 83 g_return_if_fail (conv != NULL && group->members != NULL); |
|
| 84 |
78 |
| 85 names = NULL; |
79 names = NULL; |
| 86 flags = NULL; |
80 flags = NULL; |
| |
81 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, |
| |
82 group->title_utf8, purple_connection_get_account(gc)); |
| |
83 if (conv != NULL && group->members != NULL) { |
| |
84 list = group->members; |
| |
85 while (list != NULL) { |
| |
86 member = (qq_buddy *) list->data; |
| 87 |
87 |
| 88 list = group->members; |
88 /* we need unique identifiers for everyone in the chat or else we'll |
| 89 while (list != NULL) { |
89 * run into problems with functions like get_cb_real_name from qq.c */ |
| 90 member = (qq_buddy *) list->data; |
90 member_name = (member->nickname != NULL && *(member->nickname) != '\0') ? |
| |
91 g_strdup_printf("%s (%u)", member->nickname, member->uid) : |
| |
92 g_strdup_printf("(%u)", member->uid); |
| |
93 member_uid = g_strdup_printf("(%u)", member->uid); |
| 91 |
94 |
| 92 /* we need unique identifiers for everyone in the chat or else we'll |
95 flag = 0; |
| 93 * run into problems with functions like get_cb_real_name from qq.c */ |
96 /* TYPING to put online above OP and FOUNDER */ |
| 94 member_name = (member->nickname != NULL && *(member->nickname) != '\0') ? |
97 if (is_online(member->status)) |
| 95 g_strdup_printf("%s (%u)", member->nickname, member->uid) : |
98 flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); |
| 96 g_strdup_printf("(%u)", member->uid); |
99 if(1 == (member->role & 1)) flag |= PURPLE_CBFLAGS_OP; |
| 97 member_uid = g_strdup_printf("(%u)", member->uid); |
100 if(member->uid == group->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; |
| 98 |
101 |
| 99 flag = 0; |
102 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) |
| 100 /* TYPING to put online above OP and FOUNDER */ |
103 { |
| 101 if (is_online(member->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); |
104 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
| 102 if(1 == (member->role & 1)) flag |= PURPLE_CBFLAGS_OP; |
105 member_name, |
| 103 if(member->uid == group->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; |
106 flag); |
| |
107 } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) |
| |
108 { |
| |
109 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
| |
110 member_uid, |
| |
111 flag); |
| |
112 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); |
| |
113 } else { |
| |
114 /* always put it even offline */ |
| |
115 names = g_list_append(names, member_name); |
| |
116 flags = g_list_append(flags, GINT_TO_POINTER(flag)); |
| |
117 } |
| |
118 g_free(member_uid); |
| |
119 list = list->next; |
| |
120 } |
| 104 |
121 |
| 105 is_find = TRUE; |
122 if (names != NULL && flags != NULL) { |
| 106 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) |
123 purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); |
| 107 { |
|
| 108 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
|
| 109 member_name, |
|
| 110 flag); |
|
| 111 } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) |
|
| 112 { |
|
| 113 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
|
| 114 member_uid, |
|
| 115 flag); |
|
| 116 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); |
|
| 117 } else { |
|
| 118 is_find = FALSE; |
|
| 119 } |
124 } |
| 120 if (!is_find) { |
|
| 121 /* always put it even offline */ |
|
| 122 names = g_list_append(names, member_name); |
|
| 123 flags = g_list_append(flags, GINT_TO_POINTER(flag)); |
|
| 124 } else { |
|
| 125 g_free(member_name); |
|
| 126 } |
|
| 127 g_free(member_uid); |
|
| 128 list = list->next; |
|
| 129 } |
125 } |
| 130 |
|
| 131 if (names != NULL && flags != NULL) { |
|
| 132 purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); |
|
| 133 } |
|
| 134 |
|
| 135 /* clean up names */ |
126 /* clean up names */ |
| 136 while (names != NULL) { |
127 while (names != NULL) { |
| 137 member_name = (gchar *) names->data; |
128 member_name = (gchar *) names->data; |
| 138 names = g_list_remove(names, member_name); |
129 names = g_list_remove(names, member_name); |
| 139 g_free(member_name); |
130 g_free(member_name); |