Sun, 06 Feb 2011 05:23:22 +0000
2010.01.23 - flos <lonicerae(at)gmail.com>
* added an option to force incoming message in chat room to use a default font instead of the font in message itself
2010.01.18 - flos <lonicerae(at)gmail.com>
* added type 'UPDCLS' and 'UID' for implementing business logic layer
2010.01.13 - ccpaging <ccpaging(at)gmail.com>
* qq2009-1 patch from ccpaging
|
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 | gchar *topic_utf8; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
52 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
53 | g_return_val_if_fail(rmd != NULL, NULL); |
|
27789
5862eda3c24d
Commit the QQ null chat room name crash on the *right* branch.
Paul Aurich <darkrain42@pidgin.im>
parents:
25309
diff
changeset
|
54 | g_return_val_if_fail(rmd->title_utf8, NULL); |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
55 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
56 | 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
|
57 | 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
|
58 | if (conv != NULL) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
59 | /* 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
|
60 | return conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
61 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
62 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
63 | 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
|
64 | 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
|
65 | if (conv != NULL) { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
66 | if (rmd->notice_utf8 != NULL) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
67 | 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
|
68 | } else { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
69 | 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
|
70 | } |
| 25052 | 71 | 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
|
72 | 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
|
73 | g_free(topic_utf8); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
74 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
75 | if (rmd->is_got_buddies) |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
76 | 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
|
77 | else |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
78 | 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
|
79 | return conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
80 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
81 | return NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
82 | } |
|
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 | /* 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
|
85 | 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
|
86 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
87 | GList *names, *list, *flags; |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
88 | qq_buddy_data *bd; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
89 | gchar *member_name, *member_uid; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
90 | PurpleConversation *conv; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
91 | gint flag; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
92 | gboolean is_find; |
|
24360
f7e260e79429
2008.10.08 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24355
diff
changeset
|
93 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
94 | 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
|
95 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
96 | 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
|
97 | 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
|
98 | if (conv == NULL) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
99 | 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
|
100 | return; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
101 | } |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
102 | 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
|
103 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
104 | names = NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
105 | flags = NULL; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
106 | |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
107 | list = rmd->members; |
|
24354
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
108 | while (list != NULL) { |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
109 | 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
|
110 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
111 | /* 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
|
112 | * 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
|
113 | 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
|
114 | 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
|
115 | g_strdup_printf("(%u)", bd->uid); |
|
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
116 | 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
|
117 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
118 | flag = 0; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
119 | /* 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
|
120 | 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
|
121 | 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
|
122 | 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
|
123 | |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
124 | is_find = TRUE; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
125 | 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
|
126 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
127 | 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
|
128 | member_name, |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
129 | flag); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
130 | } 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
|
131 | { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
132 | 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
|
133 | member_uid, |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
134 | flag); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
135 | 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
|
136 | } else { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
137 | is_find = FALSE; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
138 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
139 | if (!is_find) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
140 | /* always put it even offline */ |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
141 | 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
|
142 | 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
|
143 | } else { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
144 | g_free(member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
145 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
146 | g_free(member_uid); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
147 | list = list->next; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
148 | } |
|
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 | if (names != NULL && flags != NULL) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
151 | 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
|
152 | } |
|
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 | /* clean up names */ |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
155 | while (names != NULL) { |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
156 | member_name = (gchar *) names->data; |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
157 | 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
|
158 | g_free(member_name); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
159 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
160 | g_list_free(flags); |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
161 | } |
|
dcb8e72dad63
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24352
diff
changeset
|
162 | |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
163 | void qq_room_got_chat_in(PurpleConnection *gc, |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
164 | guint32 room_id, UID 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
|
165 | { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
166 | PurpleConversation *conv; |
|
25309
d364c26b8c3a
2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
25152
diff
changeset
|
167 | qq_data *qd; |
|
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 | |
|
25309
d364c26b8c3a
2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
25152
diff
changeset
|
175 | qd = (qq_data *)gc->proto_data; |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
176 | 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
|
177 | 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
|
178 | g_return_if_fail(rmd != NULL); |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
179 | |
|
25309
d364c26b8c3a
2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
25152
diff
changeset
|
180 | purple_debug_info("QQ", "is_show_chat:%d\n", qd->is_show_chat); |
|
d364c26b8c3a
2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
25152
diff
changeset
|
181 | if (NULL == conv && qd->is_show_chat) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
182 | 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
|
183 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
184 | |
|
25309
d364c26b8c3a
2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
25152
diff
changeset
|
185 | if (NULL == conv) { |
|
28501
c5d4eeeb122c
Add newline at end of debug messages.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27789
diff
changeset
|
186 | purple_debug_info("QQ", "Conversion of %u is not open, missing from %d:/n%s/v\n", |
| 25022 | 187 | room_id, uid_from, msg); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
188 | return; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
189 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
190 | |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
191 | if (uid_from != 0) { |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
192 | |
|
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
193 | 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
|
194 | if (bd == NULL || bd->nickname == NULL) |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
195 | 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
|
196 | else |
|
24355
c9deccad8f3f
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24354
diff
changeset
|
197 | from = g_strdup(bd->nickname); |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
198 | } else { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
199 | from = g_strdup(""); |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
200 | } |
|
24363
383f01928954
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24361
diff
changeset
|
201 | 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
|
202 | g_free(from); |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
203 | } |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
204 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
205 | /* 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
|
206 | 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
|
207 | { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
208 | gchar *msg_smiley, *msg_fmt, *msg_utf8; |
| 25059 | 209 | gint bytes, tail_len; |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
210 | qq_data *qd; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
211 | struct { |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
212 | guint32 ext_id; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
213 | guint8 type8; |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
214 | UID member_uid; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
215 | guint16 unknown; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
216 | guint16 msg_seq; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
217 | time_t send_time; |
| 25059 | 218 | guint32 version; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
219 | guint16 msg_len; |
|
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
220 | gchar *msg; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
221 | } im_text; |
| 25059 | 222 | guint32 temp_id; |
| 223 | guint16 content_type; | |
| 224 | guint8 frag_count, frag_index; | |
| 225 | guint16 msg_id; | |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
226 | guint32 use_default_font; |
| 25059 | 227 | qq_im_format *fmt = NULL; |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
228 | qd = (qq_data *) gc->proto_data; |
|
24341
02abffea97fe
2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24340
diff
changeset
|
229 | |
| 25059 | 230 | /* at least include im_text.msg_len */ |
| 231 | g_return_if_fail(data != NULL && data_len > 23); | |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
232 | |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
233 | use_default_font = (qd->custom) & QQ_CUSTOM_USE_DEFAULT_FONT; |
|
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
234 | |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
235 | /* 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
|
236 | 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
|
237 | bytes = 0; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
238 | 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
|
239 | bytes += qq_get8(&(im_text.type8), data + bytes); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
240 | |
|
24352
871c27553af6
Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24351
diff
changeset
|
241 | if(QQ_MSG_TEMP_QUN_IM == msg_type) { |
| 25059 | 242 | bytes += qq_get32(&temp_id, data + bytes); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
243 | } |
|
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
244 | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
245 | 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
|
246 | 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
|
247 | 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
|
248 | bytes += qq_getime(&im_text.send_time, data + bytes); |
| 25059 | 249 | bytes += qq_get32(&im_text.version, data + bytes); |
| 250 | bytes += qq_get16(&(im_text.msg_len), data + bytes); | |
| 251 | purple_debug_info("QQ", "Room IM, ext id %u, seq %u, version 0x%04X, len %u\n", | |
| 252 | im_text.ext_id, im_text.msg_seq, im_text.version, im_text.msg_len); | |
| 253 | ||
| 254 | if (im_text.msg_len != data_len - bytes) { | |
| 255 | purple_debug_warning("QQ", "Room IM length %d should be %d\n", | |
| 256 | im_text.msg_len, data_len - bytes); | |
| 257 | im_text.msg_len = data_len - bytes; | |
| 258 | } | |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
259 | |
| 25059 | 260 | g_return_if_fail(im_text.msg_len > 0 && bytes + im_text.msg_len <= data_len); |
| 261 | if(msg_type != QQ_MSG_QUN_IM_UNKNOWN) { | |
| 262 | g_return_if_fail(im_text.msg_len >= 10); | |
| 263 | ||
| 264 | bytes += qq_get16(&content_type, data + bytes); | |
| 265 | bytes += qq_get8(&frag_count, data + bytes); | |
| 266 | bytes += qq_get8(&frag_index, data + bytes); | |
| 267 | bytes += qq_get16(&msg_id, data + bytes); | |
| 268 | bytes += 4; /* skip 0x(00 00 00 00) */ | |
| 269 | purple_debug_info("QQ", "Room IM, content %d, frag %d-%d, msg id %u\n", | |
| 270 | content_type, frag_count, frag_index, msg_id); | |
| 271 | im_text.msg_len -= 10; | |
| 272 | } | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
273 | g_return_if_fail(im_text.msg_len > 0); |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
274 | |
|
24364
00d49cd2b3dd
2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24363
diff
changeset
|
275 | /* qq_show_packet("Message", data + bytes, data_len - bytes); */ |
| 25059 | 276 | if (frag_count <= 1 || frag_count == frag_index + 1) { |
| 277 | fmt = qq_im_fmt_new(); | |
| 278 | tail_len = qq_get_im_tail(fmt, data + bytes, data_len - bytes); | |
| 279 | 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
|
280 | } else { |
| 25059 | 281 | 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
|
282 | } |
|
24365
af3e4261a311
2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24364
diff
changeset
|
283 | |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
284 | /* 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
|
285 | msg_smiley = qq_emoticon_to_purple(im_text.msg); |
| 25059 | 286 | if (fmt != NULL) { |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
287 | purple_debug_info("QQ", "going to use_default_font\n"); |
|
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
288 | if (QQ_CUSTOM_USE_DEFAULT_FONT == use_default_font) { |
|
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
289 | qq_im_fmt_reset_font(fmt); |
|
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
290 | purple_debug_info("QQ", "use_default_font set\n"); |
|
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
291 | } |
| 25059 | 292 | 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
|
293 | msg_utf8 = qq_to_utf8(msg_fmt, QQ_CHARSET_DEFAULT); |
|
31393
04447b1f6403
2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
30706
diff
changeset
|
294 | purple_debug_info("QQ", "passed!\n"); |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
295 | g_free(msg_fmt); |
| 25059 | 296 | qq_im_fmt_free(fmt); |
|
24346
98c009d1f4e0
2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
24341
diff
changeset
|
297 | } else { |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
298 | 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
|
299 | } |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
300 | g_free(msg_smiley); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
301 | |
| 25059 | 302 | purple_debug_info("QQ", "Room (%u) IM from %u: %s\n", |
| 303 | 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
|
304 | 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
|
305 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
306 | g_free(msg_utf8); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
307 | g_free(im_text.msg); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
308 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
309 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
310 | /* send IM to a group */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
311 | 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
|
312 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
313 | guint8 raw_data[MAX_PACKET_SIZE - 16]; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
314 | gint bytes; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
315 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
316 | 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
|
317 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
318 | bytes = 0; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
319 | bytes += qq_put16(raw_data + bytes, 0); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
320 | 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
|
321 | bytes += qq_put_im_tail(raw_data + bytes, fmt); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
322 | /* reset first two bytes */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
323 | qq_put16(raw_data, bytes - 2); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
324 | |
| 25059 | 325 | 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
|
326 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
327 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
328 | /* this is the ACK */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
329 | 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
|
330 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
331 | /* return should be the internal group id |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
332 | * but we have nothing to do with it */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
333 | return; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
334 | } |
|
13932
4d131bd2b40f
[gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff
changeset
|
335 | |
| 25059 | 336 | void qq_process_room_send_im_ex(PurpleConnection *gc, guint8 *data, gint len) |
| 337 | { | |
| 338 | /* return should be the internal group id | |
| 339 | * but we have nothing to do with it */ | |
| 340 | return; | |
| 341 | } | |
| 342 | ||
|
25077
f33d8d0be478
#if 0 out an unused function to suppress a compiler warning.
Richard Laager <rlaager@pidgin.im>
parents:
25070
diff
changeset
|
343 | #if 0 |
| 25059 | 344 | static void request_room_send_im_ex(PurpleConnection *gc, guint32 room_id, |
| 345 | qq_im_format *fmt, gchar *msg, guint16 msg_id, guint8 frag_count, guint8 frag_index) | |
| 346 | { | |
| 347 | guint8 raw_data[MAX_PACKET_SIZE - 16]; | |
| 348 | gint bytes; | |
| 349 | ||
| 350 | ||
| 351 | g_return_if_fail(room_id != 0 && msg != NULL); | |
| 352 | ||
| 353 | bytes = 0; | |
| 354 | bytes += qq_put16(raw_data + bytes, 0); /* packet len */ | |
| 355 | /* type 0x0001, text only; 0x0002, with custom emoticon */ | |
| 356 | bytes += qq_put16(raw_data + bytes, 0x0001); | |
| 357 | bytes += qq_put8(raw_data + bytes, frag_count); | |
| 358 | bytes += qq_put8(raw_data + bytes, frag_index); | |
| 359 | bytes += qq_put16(raw_data + bytes, msg_id); | |
| 360 | bytes += qq_put32(raw_data + bytes, 0); /* unknow 4 bytes */ | |
| 361 | bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg)); | |
| 362 | if (frag_count == frag_index + 1) { | |
| 363 | bytes += qq_put8(raw_data + bytes, 0x20); /* add extra SPACE */ | |
| 364 | bytes += qq_put_im_tail(raw_data + bytes, fmt); | |
| 365 | } | |
| 366 | ||
| 367 | /* reset first two bytes as length */ | |
| 368 | qq_put16(raw_data, bytes - 2); | |
| 25070 | 369 | |
| 25059 | 370 | /*qq_show_packet("QQ_ROOM_CMD_SEND_IM_EX", raw_data, bytes); */ |
| 371 | qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_IM_EX, room_id, raw_data, bytes); | |
| 372 | } | |
|
25077
f33d8d0be478
#if 0 out an unused function to suppress a compiler warning.
Richard Laager <rlaager@pidgin.im>
parents:
25070
diff
changeset
|
373 | #endif |
| 25059 | 374 | |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
375 | /* send a chat msg to a QQ Qun |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
376 | * called by purple */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
377 | 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
|
378 | { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
379 | qq_data *qd; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
380 | qq_im_format *fmt; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
381 | gchar *msg_stripped, *tmp; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
382 | GSList *segments, *it; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
383 | gint msg_len; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
384 | const gchar *start_invalid; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
385 | gboolean is_smiley_none; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
386 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
387 | 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
|
388 | 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
|
389 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
390 | qd = (qq_data *) gc->proto_data; |
|
25152
128b99dfb286
Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <darkrain42@pidgin.im>
parents:
25077
diff
changeset
|
391 | purple_debug_info("QQ", "Send chat IM to %u, len %" G_GSIZE_FORMAT ":\n%s\n", id, strlen(what), what); |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
392 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
393 | /* 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
|
394 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
395 | msg_stripped = purple_markup_strip_html(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
396 | 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
|
397 | /* 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
|
398 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
399 | /* Check and valid utf8 string */ |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
400 | msg_len = strlen(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
401 | 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
|
402 | if (start_invalid > msg_stripped) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
403 | 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
|
404 | g_free(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
405 | 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
|
406 | g_free(tmp); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
407 | } else { |
|
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 | msg_stripped = g_strdup(_("(Invalid UTF-8 string)")); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
410 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
411 | } |
|
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 | is_smiley_none = qq_im_smiley_none(what); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
414 | 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
|
415 | g_free(msg_stripped); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
416 | |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
417 | if (segments == NULL) { |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
418 | return -1; |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
419 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
420 | |
| 25059 | 421 | qd->send_im_id++; |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
422 | fmt = qq_im_fmt_new_by_purple(what); |
|
30706
612b36b49058
Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28501
diff
changeset
|
423 | for (it = segments; it; it = g_slist_delete_link(it, it)) { |
|
612b36b49058
Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28501
diff
changeset
|
424 | request_room_send_im(gc, id, fmt, (gchar *)it->data); |
|
612b36b49058
Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28501
diff
changeset
|
425 | g_free(it->data); |
|
25032
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
426 | } |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
427 | qq_im_fmt_free(fmt); |
|
9ebe0f6ec176
Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents:
25022
diff
changeset
|
428 | return 1; |
|
14083
2b68bb18a66c
[gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
13932
diff
changeset
|
429 | } |