Mercurial > pidgin
comparison libpurple/protocols/qq/group_conv.c @ 24146:ce94189f15ad
Flos Lonicerae <lonicerae(at)gmail.com>
* Merge lonicerae and ccpaging into trunk
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:52:26 +0000 |
parents | ec3f7d3e0445 |
children |
comparison
equal
deleted
inserted
replaced
24145:ec3f7d3e0445 | 24146:ce94189f15ad |
---|---|
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); |