libpurple/protocols/qq/group_internal.c

branch
next.minor
changeset 25119
d78a152554c4
parent 24954
27e63ec24946
parent 25035
657e75fd5c39
child 25854
56a02cb817d9
equal deleted inserted replaced
25017:139df1ee9854 25119:d78a152554c4
32 32
33 static qq_room_data *room_data_new(guint32 id, guint32 ext_id, gchar *title) 33 static qq_room_data *room_data_new(guint32 id, guint32 ext_id, gchar *title)
34 { 34 {
35 qq_room_data *rmd; 35 qq_room_data *rmd;
36 36
37 purple_debug_info("QQ", "Created room data: %s, ext id %d, id %d\n", 37 purple_debug_info("QQ", "Created room data: %s, ext id %u, id %u\n",
38 title, ext_id, id); 38 title == NULL ? "(NULL)" : title,
39 ext_id, id);
39 rmd = g_new0(qq_room_data, 1); 40 rmd = g_new0(qq_room_data, 1);
40 rmd->my_role = QQ_ROOM_ROLE_NO; 41 rmd->my_role = QQ_ROOM_ROLE_NO;
41 rmd->id = id; 42 rmd->id = id;
42 rmd->ext_id = ext_id; 43 rmd->ext_id = ext_id;
43 rmd->type8 = 0x01; /* assume permanent Qun */ 44 rmd->type8 = 0x01; /* assume permanent Qun */
58 qq_room_data *rmd; 59 qq_room_data *rmd;
59 guint32 id, ext_id; 60 guint32 id, ext_id;
60 gchar *value; 61 gchar *value;
61 62
62 value = g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID); 63 value = g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID);
63 id = value ? strtol(value, NULL, 10) : 0; 64 id = value ? strtoul(value, NULL, 10) : 0;
64 value= g_hash_table_lookup(data, QQ_ROOM_KEY_EXTERNAL_ID); 65 value= g_hash_table_lookup(data, QQ_ROOM_KEY_EXTERNAL_ID);
65 ext_id = value ? strtol(value, NULL, 10) : 0; 66 ext_id = value ? strtoul(value, NULL, 10) : 0;
66 value = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_TITLE_UTF8)); 67 value = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_TITLE_UTF8));
67 68
68 rmd = room_data_new(id, ext_id, value); 69 rmd = room_data_new(id, ext_id, value);
69 rmd->my_role = QQ_ROOM_ROLE_YES; 70 rmd->my_role = QQ_ROOM_ROLE_YES;
70 return rmd; 71 return rmd;
110 111
111 components = purple_chat_get_components(chat); 112 components = purple_chat_get_components(chat);
112 113
113 g_hash_table_replace(components, 114 g_hash_table_replace(components,
114 g_strdup(QQ_ROOM_KEY_INTERNAL_ID), 115 g_strdup(QQ_ROOM_KEY_INTERNAL_ID),
115 g_strdup_printf("%d", rmd->id)); 116 g_strdup_printf("%u", rmd->id));
116 g_hash_table_replace(components, 117 g_hash_table_replace(components,
117 g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), 118 g_strdup(QQ_ROOM_KEY_EXTERNAL_ID),
118 g_strdup_printf("%d", rmd->ext_id)); 119 g_strdup_printf("%u", rmd->ext_id));
119 g_hash_table_replace(components, 120 g_hash_table_replace(components,
120 g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8)); 121 g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8));
121 } 122 }
122 123
123 static PurpleChat *chat_new(PurpleConnection *gc, qq_room_data *rmd) 124 static PurpleChat *chat_new(PurpleConnection *gc, qq_room_data *rmd)
124 { 125 {
125 GHashTable *components; 126 GHashTable *components;
126 PurpleGroup *g; 127 PurpleGroup *g;
127 PurpleChat *chat; 128 PurpleChat *chat;
128 129
129 purple_debug_info("QQ", "Add new chat: id %d, ext id %d, title %s\n", 130 purple_debug_info("QQ", "Add new chat: id %u, ext id %u, title %s\n",
130 rmd->id, rmd->ext_id, rmd->title_utf8); 131 rmd->id, rmd->ext_id,
132 rmd->title_utf8 == NULL ? "(NULL)" : rmd->title_utf8);
131 133
132 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); 134 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
133 g_hash_table_insert(components, 135 g_hash_table_insert(components,
134 g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%d", rmd->id)); 136 g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%u", rmd->id));
135 g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), 137 g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID),
136 g_strdup_printf("%d", rmd->ext_id)); 138 g_strdup_printf("%u", rmd->ext_id));
137 g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8)); 139 g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8));
138 140
139 chat = purple_chat_new(purple_connection_get_account(gc), rmd->title_utf8, components); 141 chat = purple_chat_new(purple_connection_get_account(gc), rmd->title_utf8, components);
140 g = qq_group_find_or_new(PURPLE_GROUP_QQ_QUN); 142 g = qq_group_find_or_new(PURPLE_GROUP_QQ_QUN);
141 purple_blist_add_chat(chat, g, NULL); 143 purple_blist_add_chat(chat, g, NULL);
153 g_return_val_if_fail (gc != NULL && gc->proto_data != NULL, NULL); 155 g_return_val_if_fail (gc != NULL && gc->proto_data != NULL, NULL);
154 qd = (qq_data *) gc->proto_data; 156 qd = (qq_data *) gc->proto_data;
155 157
156 g_return_val_if_fail(id != 0 && ext_id != 0, NULL); 158 g_return_val_if_fail(id != 0 && ext_id != 0, NULL);
157 159
158 purple_debug_info("QQ", "Find or add new room: id %d, ext id %d\n", id, ext_id); 160 purple_debug_info("QQ", "Find or add new room: id %u, ext id %u\n", id, ext_id);
159 161
160 rmd = qq_room_data_find(gc, id); 162 rmd = qq_room_data_find(gc, id);
161 if (rmd == NULL) { 163 if (rmd == NULL) {
162 rmd = room_data_new(id, ext_id, NULL); 164 rmd = room_data_new(id, ext_id, NULL);
163 g_return_val_if_fail(rmd != NULL, NULL); 165 g_return_val_if_fail(rmd != NULL, NULL);
164 rmd->my_role = QQ_ROOM_ROLE_YES; 166 rmd->my_role = QQ_ROOM_ROLE_YES;
165 qd->groups = g_list_append(qd->groups, rmd); 167 qd->groups = g_list_append(qd->groups, rmd);
166 } 168 }
167 169
168 num_str = g_strdup_printf("%d", ext_id); 170 num_str = g_strdup_printf("%u", ext_id);
169 chat = purple_blist_find_chat(purple_connection_get_account(gc), num_str); 171 chat = purple_blist_find_chat(purple_connection_get_account(gc), num_str);
170 g_free(num_str); 172 g_free(num_str);
171 if (chat) { 173 if (chat) {
172 return chat; 174 return chat;
173 } 175 }
184 guint32 ext_id; 186 guint32 ext_id;
185 187
186 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 188 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
187 qd = (qq_data *) gc->proto_data; 189 qd = (qq_data *) gc->proto_data;
188 190
189 purple_debug_info("QQ", "Find and remove room data, id %d", id); 191 purple_debug_info("QQ", "Find and remove room data, id %u", id);
190 rmd = qq_room_data_find(gc, id); 192 rmd = qq_room_data_find(gc, id);
191 g_return_if_fail (rmd != NULL); 193 g_return_if_fail (rmd != NULL);
192 194
193 ext_id = rmd->ext_id; 195 ext_id = rmd->ext_id;
194 qd->groups = g_list_remove(qd->groups, rmd); 196 qd->groups = g_list_remove(qd->groups, rmd);
195 room_data_free(rmd); 197 room_data_free(rmd);
196 198
197 purple_debug_info("QQ", "Find and remove chat, ext_id %d", ext_id); 199 purple_debug_info("QQ", "Find and remove chat, ext_id %u", ext_id);
198 num_str = g_strdup_printf("%d", ext_id); 200 num_str = g_strdup_printf("%u", ext_id);
199 chat = purple_blist_find_chat(purple_connection_get_account(gc), num_str); 201 chat = purple_blist_find_chat(purple_connection_get_account(gc), num_str);
200 g_free(num_str); 202 g_free(num_str);
201 203
202 g_return_if_fail (chat != NULL); 204 g_return_if_fail (chat != NULL);
203 205

mercurial