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);