annotate libpurple/protocols/qq/group_im.c @ 24613:6607ebd41053

Change Qun number to unsigned long Use new smiley function Use new im_format Support long IM message
author Hu Yong <ccpaging@gmail.com>
date Tue, 11 Nov 2008 07:07:14 +0000
parents 4afc4a1c36d8
children 2df8b8f3c3f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file group_im.c
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
4 * purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * source distribution.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18807
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 18141
diff changeset
25 #include "internal.h"
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 18141
diff changeset
26
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "conversation.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "prefs.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "request.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "util.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "char_conv.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #include "group_internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "group_info.h"
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
37 #include "group_join.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 #include "group_im.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 #include "group_opt.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 #include "im.h"
24134
bdfcfd71449c patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24115
diff changeset
41 #include "qq_define.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42 #include "packet_parse.h"
23695
5f454b975a99 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23638
diff changeset
43 #include "qq_network.h"
24115
bcfc98c7a55f merge of '546bf87105ac5b97c3962c083dfab015d37d9b05'
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24114
diff changeset
44 #include "qq_process.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 #include "utils.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
47 /* show group conversation window */
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
48 PurpleConversation *qq_room_conv_open(PurpleConnection *gc, qq_room_data *rmd)
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
49 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
50 PurpleConversation *conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
51 qq_data *qd;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
52 gchar *topic_utf8;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
53
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
54 g_return_val_if_fail(rmd != NULL, NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
55 qd = (qq_data *) gc->proto_data;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
56
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
57 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
58 rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
59 if (conv != NULL) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
60 /* show only one conversation per room */
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
61 return conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
62 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
63
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
64 serv_got_joined_chat(gc, rmd->id, rmd->title_utf8);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
65 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
66 if (conv != NULL) {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
67 if (rmd->notice_utf8 != NULL) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
68 topic_utf8 = g_strdup_printf("%u %s", rmd->ext_id, rmd->notice_utf8);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
69 } else {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
70 topic_utf8 = g_strdup_printf("%u", rmd->ext_id);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
71 }
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
72 purple_debug_info("QQ", "Set chat topic to %s\n", topic_utf8);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
73 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(conv), NULL, topic_utf8);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
74 g_free(topic_utf8);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
75
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
76 if (rmd->is_got_buddies)
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
77 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, rmd->id);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
78 else
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
79 qq_update_room(gc, 0, rmd->id);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
80 return conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
81 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
82 return NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
83 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
84
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
85 /* refresh online member in group conversation window */
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
86 void qq_room_conv_set_onlines(PurpleConnection *gc, qq_room_data *rmd)
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
87 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
88 GList *names, *list, *flags;
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
89 qq_buddy_data *bd;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
90 gchar *member_name, *member_uid;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
91 PurpleConversation *conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
92 gint flag;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
93 gboolean is_find;
24154
237e5a94e11c 2008.10.08 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24149
diff changeset
94
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
95 g_return_if_fail(rmd != NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
96
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
97 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
98 rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
99 if (conv == NULL) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
100 purple_debug_warning("QQ", "Conversation \"%s\" is not opened\n", rmd->title_utf8);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
101 return;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
102 }
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
103 g_return_if_fail(rmd->members != NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
104
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
105 names = NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
106 flags = NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
107
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
108 list = rmd->members;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
109 while (list != NULL) {
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
110 bd = (qq_buddy_data *) list->data;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
111
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
112 /* we need unique identifiers for everyone in the chat or else we'll
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
113 * run into problems with functions like get_cb_real_name from qq.c */
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
114 member_name = (bd->nickname != NULL && *(bd->nickname) != '\0') ?
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
115 g_strdup_printf("%s (%u)", bd->nickname, bd->uid) :
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
116 g_strdup_printf("(%u)", bd->uid);
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
117 member_uid = g_strdup_printf("(%u)", bd->uid);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
118
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
119 flag = 0;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
120 /* TYPING to put online above OP and FOUNDER */
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
121 if (is_online(bd->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE);
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
122 if(1 == (bd->role & 1)) flag |= PURPLE_CBFLAGS_OP;
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
123 if(bd->uid == rmd->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
124
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
125 is_find = TRUE;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
126 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name))
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
127 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
128 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv),
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
129 member_name,
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
130 flag);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
131 } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid))
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
132 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
133 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv),
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
134 member_uid,
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
135 flag);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
136 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
137 } else {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
138 is_find = FALSE;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
139 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
140 if (!is_find) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
141 /* always put it even offline */
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
142 names = g_list_append(names, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
143 flags = g_list_append(flags, GINT_TO_POINTER(flag));
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
144 } else {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
145 g_free(member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
146 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
147 g_free(member_uid);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
148 list = list->next;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
149 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
150
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
151 if (names != NULL && flags != NULL) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
152 purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
153 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
154
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
155 /* clean up names */
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
156 while (names != NULL) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
157 member_name = (gchar *) names->data;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
158 names = g_list_remove(names, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
159 g_free(member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
160 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
161 g_list_free(flags);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
162 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
163
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
164 void qq_room_got_chat_in(PurpleConnection *gc,
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
165 guint32 room_id, guint32 uid_from, const gchar *msg, time_t in_time)
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
166 {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
167 PurpleConversation *conv;
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
168 qq_buddy_data *bd;
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
169 qq_room_data *rmd;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
170 gchar *from;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
171
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
172 g_return_if_fail(gc != NULL && room_id != 0);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
173 g_return_if_fail(msg != NULL);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
174
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
175 conv = purple_find_chat(gc, room_id);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
176 rmd = qq_room_data_find(gc, room_id);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
177 g_return_if_fail(rmd != NULL);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
178
24161
7c0a56c5fea0 2008.10.14 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24159
diff changeset
179 if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/auto_popup_conversation")) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
180 conv = qq_room_conv_open(gc, rmd);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
181 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
182
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
183 if (conv == NULL) {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
184 purple_debug_info("QQ", "Conversion of %u is not open, missing from %d:/n%s/v",
24603
4afc4a1c36d8 Fixed double free
Hu Yong <ccpaging@gmail.com>
parents: 24162
diff changeset
185 room_id, uid_from, msg);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
186 return;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
187 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
188
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
189 if (uid_from != 0) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
190
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
191 bd = qq_room_buddy_find(rmd, uid_from);
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
192 if (bd == NULL || bd->nickname == NULL)
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
193 from = g_strdup_printf("%u", uid_from);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
194 else
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
195 from = g_strdup(bd->nickname);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
196 } else {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
197 from = g_strdup("");
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
198 }
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
199 serv_got_chat_in(gc, room_id, from, 0, msg, in_time);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
200 g_free(from);
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
201 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
202
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
203 /* recv an IM from a group chat */
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
204 void qq_process_room_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 msg_type)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
205 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
206 qq_data *qd;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
207 gchar *msg_smiley, *msg_fmt, *msg_utf8;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
208 gint skip_len;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
209 gint bytes ;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
210 struct {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
211 guint32 ext_id;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
212 guint8 type8;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
213 guint32 member_uid;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
214 guint16 unknown;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
215 guint16 msg_seq;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
216 time_t send_time;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
217 guint32 unknown4;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
218 guint16 msg_len;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
219 gchar *msg;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
220 guint8 *font_attr;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
221 gint font_attr_len;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
222 } im_text;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
223
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 g_return_if_fail(data != NULL && data_len > 0);
23048
9a5d140400f1 patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22138
diff changeset
225
23051
55f986ccbb6a patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23049
diff changeset
226 /* FIXME: check length here */
23048
9a5d140400f1 patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22138
diff changeset
227
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228 qd = (qq_data *) gc->proto_data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
229
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
230 /* qq_show_packet("ROOM_IM", data, data_len); */
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
231
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
232 memset(&im_text, 0, sizeof(im_text));
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
233 bytes = 0;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
234 bytes += qq_get32(&(im_text.ext_id), data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
235 bytes += qq_get8(&(im_text.type8), data + bytes);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236
24146
ce94189f15ad Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24145
diff changeset
237 if(QQ_MSG_TEMP_QUN_IM == msg_type) {
23695
5f454b975a99 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23638
diff changeset
238 bytes += qq_get32(&(id), data + bytes);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
241 bytes += qq_get32(&(im_text.member_uid), bytes + data);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
242 bytes += qq_get16(&im_text.unknown, data + bytes); /* 0x0001? */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
243 bytes += qq_get16(&(im_text.msg_seq), data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
244 bytes += qq_getime(&im_text.send_time, data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
245 bytes += qq_get32(&im_text.unknown4, data + bytes); /* versionID */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
246 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247 * length includes font_attr
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
248 * this msg_len includes msg and font_attr
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
249 **** the format is ****
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250 * length of all
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
251 * 1. unknown 10 bytes
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252 * 2. 0-ended string
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
253 * 3. font_attr
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
254 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
255
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
256 bytes += qq_get16(&(im_text.msg_len), data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
257 g_return_if_fail(im_text.msg_len > 0);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
258 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259 * 10 bytes from lumaqq
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
260 * contentType = buf.getChar();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261 * totalFragments = buf.get() & 255;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262 * fragmentSequence = buf.get() & 255;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 * messageId = buf.getChar();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 * buf.getInt();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
266
24146
ce94189f15ad Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24145
diff changeset
267 if(msg_type != QQ_MSG_UNKNOWN_QUN_IM)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268 skip_len = 10;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
270 skip_len = 0;
23048
9a5d140400f1 patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22138
diff changeset
271 bytes += skip_len;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
272
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
273 /* qq_show_packet("Message", data + bytes, data_len - bytes); */
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
274
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
275 im_text.msg = g_strdup((gchar *) data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
276 bytes += strlen(im_text.msg) + 1;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
277 /* there might not be any font_attr, check it */
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
278 im_text.font_attr_len = data_len - bytes;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
279 if (im_text.font_attr_len > 0) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
280 im_text.font_attr = g_memdup(data + bytes, im_text.font_attr_len);
24162
f4f29fac96c6 2008.10.20 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24161
diff changeset
281 /* qq_show_packet("font_attr", packet.font_attr, packet.font_attr_len); */
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
282 } else {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
283 im_text.font_attr = NULL;
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
284 }
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
285
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
286 /* group im_group has no flag to indicate whether it has font_attr or not */
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
287 msg_smiley = qq_emoticon_to_purple(im_text.msg);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
288 if (im_text.font_attr != NULL) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
289 msg_fmt = qq_format_to_purple(im_text.font_attr, im_text.font_attr_len,
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
290 msg_smiley);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
291 msg_utf8 = qq_to_utf8(msg_fmt, QQ_CHARSET_DEFAULT);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
292 g_free(msg_fmt);
24140
619ac2303c46 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24135
diff changeset
293 } else {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
294 msg_utf8 = qq_to_utf8(msg_smiley, QQ_CHARSET_DEFAULT);
24140
619ac2303c46 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24135
diff changeset
295 }
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
296 g_free(msg_smiley);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
297
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
298
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
299 qq_room_got_chat_in(gc, id, im_text.member_uid, msg_utf8, im_text.send_time);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
300
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
301 g_free(msg_utf8);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
302 g_free(im_text.msg);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
303 if (im_text.font_attr) g_free(im_text.font_attr);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
304 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
305
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
306 /* send IM to a group */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
307 static void request_room_send_im(PurpleConnection *gc, guint32 room_id, qq_im_format *fmt, const gchar *msg)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
308 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
309 guint8 raw_data[MAX_PACKET_SIZE - 16];
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
310 gint bytes;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
311
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
312 g_return_if_fail(room_id != 0 && msg != NULL);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
313
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
314 bytes = 0;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
315 bytes += qq_put16(raw_data + bytes, 0);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
316 bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg));
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
317 bytes += qq_put8(raw_data + bytes, 0);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
318 bytes += qq_put_im_tail(raw_data + bytes, fmt);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
319
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
320 /* reset first two bytes */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
321 qq_put16(raw_data, bytes - 2);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
322
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
323 qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_MSG, room_id, raw_data, bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
324 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
325
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
326 /* this is the ACK */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
327 void qq_process_room_send_im(PurpleConnection *gc, guint8 *data, gint len)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
328 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
329 /* return should be the internal group id
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
330 * but we have nothing to do with it */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
331 return;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
332 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
334 /* send a chat msg to a QQ Qun
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
335 * called by purple */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
336 int qq_chat_send(PurpleConnection *gc, int id, const char *what, PurpleMessageFlags flags)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
337 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
338 qq_data *qd;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
339 qq_im_format *fmt;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
340 gchar *msg_stripped, *tmp;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
341 GSList *segments, *it;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
342 gint msg_len;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
343 const gchar *start_invalid;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
344 gboolean is_smiley_none;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
345
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
346 g_return_val_if_fail(NULL != gc && NULL != gc->proto_data, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
347 g_return_val_if_fail(id != 0 && what != NULL, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
348
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
349 qd = (qq_data *) gc->proto_data;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
350 purple_debug_info("QQ", "Send chat IM to %u, len %d:\n%s\n", id, strlen(what), what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
351
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
352 /* qq_show_packet("chat IM UTF8", (guint8 *)what, strlen(what)); */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
353
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
354 fmt = qq_im_fmt_new_by_purple(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
355 is_smiley_none = qq_im_smiley_none(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
356
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
357 msg_stripped = purple_markup_strip_html(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
358 g_return_val_if_fail(msg_stripped != NULL, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
359 /* qq_show_packet("IM Stripped", (guint8 *)what, strlen(what)); */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
360
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
361 /* Check and valid utf8 string */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
362 msg_len = strlen(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
363 if (!g_utf8_validate(msg_stripped, msg_len, &start_invalid)) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
364 if (start_invalid > msg_stripped) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
365 tmp = g_strndup(msg_stripped, start_invalid - msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
366 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
367 msg_stripped = g_strconcat(tmp, _("(Invalid UTF-8 string)"), NULL);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
368 g_free(tmp);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
369 } else {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
370 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
371 msg_stripped = g_strdup(_("(Invalid UTF-8 string)"));
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
372 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
373 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
374
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
375 is_smiley_none = qq_im_smiley_none(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
376 segments = qq_im_get_segments(msg_stripped, is_smiley_none);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
377 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
378
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
379 if (segments == NULL) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
380 return -1;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
381 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
382
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
383 fmt = qq_im_fmt_new_by_purple(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
384 for (it = segments; it; it = it->next) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
385 request_room_send_im(gc, id, fmt, (gchar *)it->data);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
386 g_free(it->data);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
387 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
388 qq_im_fmt_free(fmt);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
389 g_slist_free(segments);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
390 return 1;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
391 }