Wed, 19 Nov 2008 08:31:45 +0000
Support long qun im
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
1 | /** |
|
15087
78879d4adf13
[gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
14718
diff
changeset
|
2 | * @file group_im.c |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
3 | * |
| 15884 | 4 | * purple |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
5 | * |
| 15884 | 6 | * Purple is the legal property of its developers, whose names are too numerous |
|
15087
78879d4adf13
[gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
14718
diff
changeset
|
7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
78879d4adf13
[gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
14718
diff
changeset
|
8 | * source distribution. |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
9 | * |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
10 | * This program is free software; you can redistribute it and/or modify |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
11 | * it under the terms of the GNU General Public License as published by |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
12 | * the Free Software Foundation; either version 2 of the License, or |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
13 | * (at your option) any later version. |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
14 | * |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
15 | * This program is distributed in the hope that it will be useful, |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
18 | * GNU General Public License for more details. |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
19 | * |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
20 | * You should have received a copy of the GNU General Public License |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
21 | * along with this program; if not, write to the Free Software |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19097
diff
changeset
|
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
23 | */ |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
24 | |
|
18273
e61c53184c52
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
18213
diff
changeset
|
25 | #include "internal.h" |
|
e61c53184c52
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
18213
diff
changeset
|
26 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
27 | #include "conversation.h" |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
28 | #include "debug.h" |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
29 | #include "notify.h" |
|
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
30 | #include "prefs.h" |
|
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
31 | #include "request.h" |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
32 | #include "util.h" |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
33 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
34 | #include "char_conv.h" |
|
14466
4fcd9fdc8060
[gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
14254
diff
changeset
|
35 | #include "group_internal.h" |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
36 | #include "group_info.h" |
|
24365
af3e4261a311
2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24364
diff
changeset
|
37 | #include "group_join.h" |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
38 | #include "group_im.h" |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
39 | #include "group_opt.h" |
|
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
40 | #include "im.h" |
|
24340
36ceebf026a0
patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24314
diff
changeset
|
41 | #include "qq_define.h" |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
42 | #include "packet_parse.h" |
|
24018
91f0294f2377
2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
23950
diff
changeset
|
43 | #include "qq_network.h" |
|
24314
587e97c2b707
merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents:
24313
diff
changeset
|
44 | #include "qq_process.h" |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
45 | #include "utils.h" |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
46 | |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
47 | /* show group conversation window */ |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
48 | PurpleConversation *qq_room_conv_open(PurpleConnection *gc, qq_room_data *rmd) |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
49 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
50 | PurpleConversation *conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
51 | qq_data *qd; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
52 | gchar *topic_utf8; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
53 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
54 | g_return_val_if_fail(rmd != NULL, NULL); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
55 | qd = (qq_data *) gc->proto_data; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
56 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
57 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
58 | rmd->title_utf8, purple_connection_get_account(gc)); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
59 | if (conv != NULL) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
60 | /* show only one conversation per room */ |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
61 | return conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
62 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
63 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
64 | serv_got_joined_chat(gc, rmd->id, rmd->title_utf8); |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
65 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, rmd->title_utf8, purple_connection_get_account(gc)); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
66 | if (conv != NULL) { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
67 | if (rmd->notice_utf8 != NULL) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
68 | topic_utf8 = g_strdup_printf("%u %s", rmd->ext_id, rmd->notice_utf8); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
69 | } else { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
70 | topic_utf8 = g_strdup_printf("%u", rmd->ext_id); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
71 | } |
| 25052 | 72 | purple_debug_info("QQ", "Chat topic = %s\n", topic_utf8); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
73 | purple_conv_chat_set_topic(PURPLE_CONV_CHAT(conv), NULL, topic_utf8); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
74 | g_free(topic_utf8); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
75 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
76 | if (rmd->is_got_buddies) |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
77 | qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, rmd->id); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
78 | else |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
79 | qq_update_room(gc, 0, rmd->id); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
80 | return conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
81 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
82 | return NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
83 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
84 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
85 | /* refresh online member in group conversation window */ |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
86 | void qq_room_conv_set_onlines(PurpleConnection *gc, qq_room_data *rmd) |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
87 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
88 | GList *names, *list, *flags; |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
89 | qq_buddy_data *bd; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
90 | gchar *member_name, *member_uid; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
91 | PurpleConversation *conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
92 | gint flag; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
93 | gboolean is_find; |
|
24360
f7e260e79429
2008.10.08 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24355
diff
changeset
|
94 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
95 | g_return_if_fail(rmd != NULL); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
96 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
97 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
98 | rmd->title_utf8, purple_connection_get_account(gc)); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
99 | if (conv == NULL) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
100 | purple_debug_warning("QQ", "Conversation \"%s\" is not opened\n", rmd->title_utf8); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
101 | return; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
102 | } |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
103 | g_return_if_fail(rmd->members != NULL); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
104 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
105 | names = NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
106 | flags = NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
107 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
108 | list = rmd->members; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
109 | while (list != NULL) { |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
110 | bd = (qq_buddy_data *) list->data; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
111 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
112 | /* we need unique identifiers for everyone in the chat or else we'll |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
113 | * run into problems with functions like get_cb_real_name from qq.c */ |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
114 | member_name = (bd->nickname != NULL && *(bd->nickname) != '\0') ? |
|
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
115 | g_strdup_printf("%s (%u)", bd->nickname, bd->uid) : |
|
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
116 | g_strdup_printf("(%u)", bd->uid); |
|
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
117 | member_uid = g_strdup_printf("(%u)", bd->uid); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
118 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
119 | flag = 0; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
120 | /* TYPING to put online above OP and FOUNDER */ |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
121 | if (is_online(bd->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); |
|
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
122 | if(1 == (bd->role & 1)) flag |= PURPLE_CBFLAGS_OP; |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
123 | if(bd->uid == rmd->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
124 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
125 | is_find = TRUE; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
126 | if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
127 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
128 | purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
129 | member_name, |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
130 | flag); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
131 | } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
132 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
133 | purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
134 | member_uid, |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
135 | flag); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
136 | purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
137 | } else { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
138 | is_find = FALSE; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
139 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
140 | if (!is_find) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
141 | /* always put it even offline */ |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
142 | names = g_list_append(names, member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
143 | flags = g_list_append(flags, GINT_TO_POINTER(flag)); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
144 | } else { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
145 | g_free(member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
146 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
147 | g_free(member_uid); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
148 | list = list->next; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
149 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
150 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
151 | if (names != NULL && flags != NULL) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
152 | purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
153 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
154 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
155 | /* clean up names */ |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
156 | while (names != NULL) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
157 | member_name = (gchar *) names->data; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
158 | names = g_list_remove(names, member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
159 | g_free(member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
160 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
161 | g_list_free(flags); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
162 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
163 | |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
164 | void qq_room_got_chat_in(PurpleConnection *gc, |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
165 | guint32 room_id, guint32 uid_from, const gchar *msg, time_t in_time) |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
166 | { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
167 | PurpleConversation *conv; |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
168 | qq_buddy_data *bd; |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
169 | qq_room_data *rmd; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
170 | gchar *from; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
171 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
172 | g_return_if_fail(gc != NULL && room_id != 0); |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
173 | g_return_if_fail(msg != NULL); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
174 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
175 | conv = purple_find_chat(gc, room_id); |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
176 | rmd = qq_room_data_find(gc, room_id); |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
177 | g_return_if_fail(rmd != NULL); |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
178 | |
|
24367
80bead6c1577
2008.10.14 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24365
diff
changeset
|
179 | if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/auto_popup_conversation")) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
180 | conv = qq_room_conv_open(gc, rmd); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
181 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
182 | |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
183 | if (conv == NULL) { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
184 | purple_debug_info("QQ", "Conversion of %u is not open, missing from %d:/n%s/v", |
| 25022 | 185 | room_id, uid_from, msg); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
186 | return; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
187 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
188 | |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
189 | if (uid_from != 0) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
190 | |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
191 | bd = qq_room_buddy_find(rmd, uid_from); |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
192 | if (bd == NULL || bd->nickname == NULL) |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
193 | from = g_strdup_printf("%u", uid_from); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
194 | else |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
195 | from = g_strdup(bd->nickname); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
196 | } else { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
197 | from = g_strdup(""); |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
198 | } |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
199 | serv_got_chat_in(gc, room_id, from, 0, msg, in_time); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
200 | g_free(from); |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
201 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
202 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
203 | /* recv an IM from a group chat */ |
|
24365
af3e4261a311
2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24364
diff
changeset
|
204 | void qq_process_room_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 msg_type) |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
205 | { |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
206 | qq_data *qd; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
207 | gchar *msg_smiley, *msg_fmt, *msg_utf8; |
| 25059 | 208 | gint bytes, tail_len; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
209 | struct { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
210 | guint32 ext_id; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
211 | guint8 type8; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
212 | guint32 member_uid; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
213 | guint16 unknown; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
214 | guint16 msg_seq; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
215 | time_t send_time; |
| 25059 | 216 | guint32 version; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
217 | guint16 msg_len; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
218 | gchar *msg; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
219 | } im_text; |
| 25059 | 220 | guint32 temp_id; |
| 221 | guint16 content_type; | |
| 222 | guint8 frag_count, frag_index; | |
| 223 | guint16 msg_id; | |
| 224 | qq_im_format *fmt = NULL; | |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
225 | |
| 25059 | 226 | /* at least include im_text.msg_len */ |
| 227 | g_return_if_fail(data != NULL && data_len > 23); | |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
228 | qd = (qq_data *) gc->proto_data; |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
229 | |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
230 | /* qq_show_packet("ROOM_IM", data, data_len); */ |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
231 | memset(&im_text, 0, sizeof(im_text)); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
232 | bytes = 0; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
233 | bytes += qq_get32(&(im_text.ext_id), data + bytes); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
234 | bytes += qq_get8(&(im_text.type8), data + bytes); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
235 | |
|
24352
871c27553af6
Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24351
diff
changeset
|
236 | if(QQ_MSG_TEMP_QUN_IM == msg_type) { |
| 25059 | 237 | bytes += qq_get32(&temp_id, data + bytes); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
238 | } |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
239 | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
240 | bytes += qq_get32(&(im_text.member_uid), bytes + data); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
241 | bytes += qq_get16(&im_text.unknown, data + bytes); /* 0x0001? */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
242 | bytes += qq_get16(&(im_text.msg_seq), data + bytes); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
243 | bytes += qq_getime(&im_text.send_time, data + bytes); |
| 25059 | 244 | bytes += qq_get32(&im_text.version, data + bytes); |
| 245 | bytes += qq_get16(&(im_text.msg_len), data + bytes); | |
| 246 | purple_debug_info("QQ", "Room IM, ext id %u, seq %u, version 0x%04X, len %u\n", | |
| 247 | im_text.ext_id, im_text.msg_seq, im_text.version, im_text.msg_len); | |
| 248 | ||
| 249 | if (im_text.msg_len != data_len - bytes) { | |
| 250 | purple_debug_warning("QQ", "Room IM length %d should be %d\n", | |
| 251 | im_text.msg_len, data_len - bytes); | |
| 252 | im_text.msg_len = data_len - bytes; | |
| 253 | } | |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
254 | |
| 25059 | 255 | g_return_if_fail(im_text.msg_len > 0 && bytes + im_text.msg_len <= data_len); |
| 256 | if(msg_type != QQ_MSG_QUN_IM_UNKNOWN) { | |
| 257 | g_return_if_fail(im_text.msg_len >= 10); | |
| 258 | ||
| 259 | bytes += qq_get16(&content_type, data + bytes); | |
| 260 | bytes += qq_get8(&frag_count, data + bytes); | |
| 261 | bytes += qq_get8(&frag_index, data + bytes); | |
| 262 | bytes += qq_get16(&msg_id, data + bytes); | |
| 263 | bytes += 4; /* skip 0x(00 00 00 00) */ | |
| 264 | purple_debug_info("QQ", "Room IM, content %d, frag %d-%d, msg id %u\n", | |
| 265 | content_type, frag_count, frag_index, msg_id); | |
| 266 | im_text.msg_len -= 10; | |
| 267 | } | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
268 | g_return_if_fail(im_text.msg_len > 0); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
269 | |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
270 | /* qq_show_packet("Message", data + bytes, data_len - bytes); */ |
| 25059 | 271 | if (frag_count <= 1 || frag_count == frag_index + 1) { |
| 272 | fmt = qq_im_fmt_new(); | |
| 273 | tail_len = qq_get_im_tail(fmt, data + bytes, data_len - bytes); | |
| 274 | im_text.msg = g_strndup((gchar *)(data + bytes), data_len - tail_len); | |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
275 | } else { |
| 25059 | 276 | im_text.msg = g_strndup((gchar *)(data + bytes), data_len - bytes); |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
277 | } |
|
24365
af3e4261a311
2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24364
diff
changeset
|
278 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
279 | /* group im_group has no flag to indicate whether it has font_attr or not */ |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
280 | msg_smiley = qq_emoticon_to_purple(im_text.msg); |
| 25059 | 281 | if (fmt != NULL) { |
| 282 | msg_fmt = qq_im_fmt_to_purple(fmt, msg_smiley); | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
283 | msg_utf8 = qq_to_utf8(msg_fmt, QQ_CHARSET_DEFAULT); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
284 | g_free(msg_fmt); |
| 25059 | 285 | qq_im_fmt_free(fmt); |
|
24346
98c009d1f4e0
2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24341
diff
changeset
|
286 | } else { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
287 | msg_utf8 = qq_to_utf8(msg_smiley, QQ_CHARSET_DEFAULT); |
|
24346
98c009d1f4e0
2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24341
diff
changeset
|
288 | } |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
289 | g_free(msg_smiley); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
290 | |
| 25059 | 291 | purple_debug_info("QQ", "Room (%u) IM from %u: %s\n", |
| 292 | im_text.ext_id, im_text.member_uid, msg_utf8); | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
293 | qq_room_got_chat_in(gc, id, im_text.member_uid, msg_utf8, im_text.send_time); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
294 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
295 | g_free(msg_utf8); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
296 | g_free(im_text.msg); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
297 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
298 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
299 | /* send IM to a group */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
300 | static void request_room_send_im(PurpleConnection *gc, guint32 room_id, qq_im_format *fmt, const gchar *msg) |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
301 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
302 | guint8 raw_data[MAX_PACKET_SIZE - 16]; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
303 | gint bytes; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
304 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
305 | g_return_if_fail(room_id != 0 && msg != NULL); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
306 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
307 | bytes = 0; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
308 | bytes += qq_put16(raw_data + bytes, 0); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
309 | bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg)); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
310 | bytes += qq_put_im_tail(raw_data + bytes, fmt); |
| 25059 | 311 | bytes += qq_put32(raw_data + bytes, 0); /* unknown 4 bytes */ |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
312 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
313 | /* reset first two bytes */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
314 | qq_put16(raw_data, bytes - 2); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
315 | |
| 25059 | 316 | qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_IM, room_id, raw_data, bytes); |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
317 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
318 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
319 | /* this is the ACK */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
320 | void qq_process_room_send_im(PurpleConnection *gc, guint8 *data, gint len) |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
321 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
322 | /* return should be the internal group id |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
323 | * but we have nothing to do with it */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
324 | return; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
325 | } |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
326 | |
| 25059 | 327 | void qq_process_room_send_im_ex(PurpleConnection *gc, guint8 *data, gint len) |
| 328 | { | |
| 329 | /* return should be the internal group id | |
| 330 | * but we have nothing to do with it */ | |
| 331 | return; | |
| 332 | } | |
| 333 | ||
| 334 | static void request_room_send_im_ex(PurpleConnection *gc, guint32 room_id, | |
| 335 | qq_im_format *fmt, gchar *msg, guint16 msg_id, guint8 frag_count, guint8 frag_index) | |
| 336 | { | |
| 337 | guint8 raw_data[MAX_PACKET_SIZE - 16]; | |
| 338 | gint bytes; | |
| 339 | ||
| 340 | ||
| 341 | g_return_if_fail(room_id != 0 && msg != NULL); | |
| 342 | ||
| 343 | bytes = 0; | |
| 344 | bytes += qq_put16(raw_data + bytes, 0); /* packet len */ | |
| 345 | /* type 0x0001, text only; 0x0002, with custom emoticon */ | |
| 346 | bytes += qq_put16(raw_data + bytes, 0x0001); | |
| 347 | bytes += qq_put8(raw_data + bytes, frag_count); | |
| 348 | bytes += qq_put8(raw_data + bytes, frag_index); | |
| 349 | bytes += qq_put16(raw_data + bytes, msg_id); | |
| 350 | bytes += qq_put32(raw_data + bytes, 0); /* unknow 4 bytes */ | |
| 351 | bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg)); | |
| 352 | if (frag_count == frag_index + 1) { | |
| 353 | bytes += qq_put8(raw_data + bytes, 0x20); /* add extra SPACE */ | |
| 354 | bytes += qq_put_im_tail(raw_data + bytes, fmt); | |
| 355 | } | |
| 356 | ||
| 357 | /* reset first two bytes as length */ | |
| 358 | qq_put16(raw_data, bytes - 2); | |
| 359 | ||
| 360 | /*qq_show_packet("QQ_ROOM_CMD_SEND_IM_EX", raw_data, bytes); */ | |
| 361 | qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_IM_EX, room_id, raw_data, bytes); | |
| 362 | } | |
| 363 | ||
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
364 | /* send a chat msg to a QQ Qun |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
365 | * called by purple */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
366 | int qq_chat_send(PurpleConnection *gc, int id, const char *what, PurpleMessageFlags flags) |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
367 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
368 | qq_data *qd; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
369 | qq_im_format *fmt; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
370 | gchar *msg_stripped, *tmp; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
371 | GSList *segments, *it; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
372 | gint msg_len; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
373 | const gchar *start_invalid; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
374 | gboolean is_smiley_none; |
| 25059 | 375 | guint8 frag_count, frag_index; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
376 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
377 | g_return_val_if_fail(NULL != gc && NULL != gc->proto_data, -1); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
378 | g_return_val_if_fail(id != 0 && what != NULL, -1); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
379 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
380 | qd = (qq_data *) gc->proto_data; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
381 | purple_debug_info("QQ", "Send chat IM to %u, len %d:\n%s\n", id, strlen(what), what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
382 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
383 | /* qq_show_packet("chat IM UTF8", (guint8 *)what, strlen(what)); */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
384 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
385 | fmt = qq_im_fmt_new_by_purple(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
386 | is_smiley_none = qq_im_smiley_none(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
387 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
388 | msg_stripped = purple_markup_strip_html(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
389 | g_return_val_if_fail(msg_stripped != NULL, -1); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
390 | /* qq_show_packet("IM Stripped", (guint8 *)what, strlen(what)); */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
391 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
392 | /* Check and valid utf8 string */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
393 | msg_len = strlen(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
394 | if (!g_utf8_validate(msg_stripped, msg_len, &start_invalid)) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
395 | if (start_invalid > msg_stripped) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
396 | tmp = g_strndup(msg_stripped, start_invalid - msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
397 | g_free(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
398 | msg_stripped = g_strconcat(tmp, _("(Invalid UTF-8 string)"), NULL); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
399 | g_free(tmp); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
400 | } else { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
401 | g_free(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
402 | msg_stripped = g_strdup(_("(Invalid UTF-8 string)")); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
403 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
404 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
405 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
406 | is_smiley_none = qq_im_smiley_none(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
407 | segments = qq_im_get_segments(msg_stripped, is_smiley_none); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
408 | g_free(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
409 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
410 | if (segments == NULL) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
411 | return -1; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
412 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
413 | |
| 25059 | 414 | qd->send_im_id++; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
415 | fmt = qq_im_fmt_new_by_purple(what); |
| 25059 | 416 | frag_count = g_slist_length(segments); |
| 417 | frag_index = 0; | |
| 418 | /* | |
| 419 | if (frag_count <= 1) { | |
| 420 | */ | |
| 421 | for (it = segments; it; it = it->next) { | |
| 422 | request_room_send_im(gc, id, fmt, (gchar *)it->data); | |
| 423 | g_free(it->data); | |
| 424 | } | |
| 425 | /* | |
| 426 | } else { | |
| 427 | for (it = segments; it; it = it->next) { | |
| 428 | request_room_send_im_ex(gc, id, fmt, (gchar *)it->data, | |
| 429 | qd->send_im_id, frag_count, frag_index); | |
| 430 | g_free(it->data); | |
| 431 | frag_index++; | |
| 432 | } | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
433 | } |
| 25059 | 434 | */ |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
435 | qq_im_fmt_free(fmt); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
436 | g_slist_free(segments); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
437 | return 1; |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
438 | } |