comparison libpurple/protocols/qq/group.c @ 23695:5f454b975a99

2008.08.10 - csyfek <csyfek(at)gmail.com> * Commit to Pidgin 2008.08.06 - ccpaging <ecc_hy(at)hotmail.com> * Rename names of variables, Group, to Room * Functions of group_network merged into qq_network and qq_process * Canceled managing glist of group packet, add sub_cmdd and room_id to transaction * Fixed error of demo group: If 'room list' and 'room infor' are not setup, response received from server will emits 'room_id = 0' packet. 2008.08.04 - ccpaging <ecc_hy(at)hotmail.com> * Use new crypt/decrypt functions * Rename crypt.c/h to qq_crypt.c/h * Clean code of decrypt functions * Fixed decryption failure 2008.08.04 - csyfek <csyfek(at)gmail.com> * Update AUTHORS
author SHiNE CsyFeK <csyfek@gmail.com>
date Sun, 10 Aug 2008 04:32:14 +0000
parents dccfd999ffe7
children 967344bc404d
comparison
equal deleted inserted replaced
23690:107166bb2a64 23695:5f454b975a99
30 30
31 #include "group_internal.h" 31 #include "group_internal.h"
32 #include "group_info.h" 32 #include "group_info.h"
33 #include "group_search.h" 33 #include "group_search.h"
34 #include "utils.h" 34 #include "utils.h"
35 35 #include "qq_network.h"
36 #include "header_info.h"
36 #include "group.h" 37 #include "group.h"
37 38
38 static void _qq_group_search_callback(PurpleConnection *gc, const gchar *input) 39 static void _qq_group_search_callback(PurpleConnection *gc, const gchar *input)
39 { 40 {
40 guint32 external_group_id; 41 guint32 ext_id;
41 42
42 g_return_if_fail(input != NULL); 43 g_return_if_fail(input != NULL);
43 external_group_id = qq_string_to_dec_value(input); 44 ext_id = qq_string_to_dec_value(input);
44 /* 0x00000000 means search for demo group */ 45 /* 0x00000000 means search for demo group */
45 qq_send_cmd_group_search_group(gc, external_group_id); 46 qq_send_cmd_group_search_group(gc, ext_id);
46 } 47 }
47 48
48 static void _qq_group_search_cancel_callback(PurpleConnection *gc, const gchar *input) 49 static void _qq_group_search_cancel_callback(PurpleConnection *gc, const gchar *input)
49 { 50 {
50 qq_data *qd; 51 qq_data *qd;
102 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, 103 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
103 _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE); 104 _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE);
104 fields = g_list_append(fields, f); 105 fields = g_list_append(fields, f);
105 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE); 106 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE);
106 fields = g_list_append(fields, f); 107 fields = g_list_append(fields, f);
107 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_TYPE, TRUE); 108 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_TYPE, TRUE);
108 fields = g_list_append(fields, f); 109 fields = g_list_append(fields, f);
109 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE); 110 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE);
110 fields = g_list_append(fields, f); 111 fields = g_list_append(fields, f);
111 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE); 112 f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE);
112 fields = g_list_append(fields, f); 113 fields = g_list_append(fields, f);
143 } 144 }
144 145
145 /* this should be called upon signin, even when we did not open group chat window */ 146 /* this should be called upon signin, even when we did not open group chat window */
146 void qq_group_init(PurpleConnection *gc) 147 void qq_group_init(PurpleConnection *gc)
147 { 148 {
148 gint i;
149 PurpleAccount *account; 149 PurpleAccount *account;
150 PurpleChat *chat; 150 PurpleChat *chat;
151 PurpleGroup *purple_group; 151 PurpleGroup *purple_group;
152 PurpleBlistNode *node; 152 PurpleBlistNode *node;
153 qq_group *group; 153 qq_group *group;
154 gint count;
154 155
155 account = purple_connection_get_account(gc); 156 account = purple_connection_get_account(gc);
156 157
157 purple_group = purple_find_group(PURPLE_GROUP_QQ_QUN); 158 purple_group = purple_find_group(PURPLE_GROUP_QQ_QUN);
158 if (purple_group == NULL) { 159 if (purple_group == NULL) {
159 purple_debug(PURPLE_DEBUG_INFO, "QQ", "We have no QQ Qun\n"); 160 purple_debug(PURPLE_DEBUG_INFO, "QQ", "We have no QQ Qun\n");
160 return; 161 return;
161 } 162 }
162 163
163 i = 0; 164 count = 0;
164 for (node = ((PurpleBlistNode *) purple_group)->child; node != NULL; node = node->next) 165 for (node = ((PurpleBlistNode *) purple_group)->child; node != NULL; node = node->next) {
165 if (PURPLE_BLIST_NODE_IS_CHAT(node)) { /* got one */ 166 if ( !PURPLE_BLIST_NODE_IS_CHAT(node)) {
166 chat = (PurpleChat *) node; 167 continue;
167 if (account != chat->account)
168 continue; /* very important here ! */
169 group = qq_group_from_hashtable(gc, chat->components);
170 if (group != NULL) {
171 i++;
172 qq_send_cmd_group_get_group_info(gc, group); /* get group info and members */
173 }
174 } 168 }
169 /* got one */
170 chat = (PurpleChat *) node;
171 if (account != chat->account) /* not qq account*/
172 continue;
173 group = qq_group_from_hashtable(gc, chat->components);
174 if (group == NULL)
175 continue;
175 176
176 purple_debug(PURPLE_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", i); 177 if (group->id <= 0)
178 continue;
179
180 count++;
181 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
182 }
183
184 purple_debug(PURPLE_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", count);
177 } 185 }