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