libgaim/protocols/qq/buddy_info.c

Sun, 10 Dec 2006 02:53:09 +0000

author
Evan Schoenberg <evands@pidgin.im>
date
Sun, 10 Dec 2006 02:53:09 +0000
changeset 15205
f642029b2f97
parent 15201
26e8598c7282
child 15351
259c1b4db96e
permissions
-rw-r--r--

[gaim-migrate @ 17929]
User Info and Tooltips now use the GaimNotifyUserInfo object and methods defined in notify.h. GaimNotifyUserInfo objects encapsulate a list of GaimNotifyUserInfoEntry objects, each of which may have a label, a value, and be specified to be a section header.

This moves the burden of UI generation of user information from the various prpls to the UI. The UI can choose how to display the information rather than being fenced into a particular HTML formatting. Consistency across the prpls' information presentation is now enforced, as well. gaim_notify_user_info_get_text_with_newline() generates text in the:
<b>label</b>: value
<b>label</b>: value
format as was passed by convention from prpls in the past.

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: 14691
diff changeset
2 * @file buddy_info.c
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
3 *
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
diff changeset
4 * gaim
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
5 *
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
diff changeset
6 * Gaim is the legal property of its developers, whose names are too numerous
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
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: 14691
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
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
25 #include "internal.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
26 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
27 #include "notify.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
28 #include "request.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
29
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
30 #include "utils.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
31 #include "packet_parse.h"
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
32 #include "buddy_info.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
33 #include "char_conv.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
34 #include "crypt.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
35 #include "header_info.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
36 #include "keep_alive.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
37 #include "send_core.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
38
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
39 #define QQ_PRIMARY_INFORMATION _("Primary Information")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
40 #define QQ_ADDITIONAL_INFORMATION _("Additional Information")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
41 #define QQ_INTRO _("Personal Introduction")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
42 #define QQ_NUMBER _("QQ Number")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
43 #define QQ_NICKNAME _("Nickname")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
44 #define QQ_NAME _("Name")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
45 #define QQ_AGE _("Age")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
46 #define QQ_GENDER _("Gender")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
47 #define QQ_COUNTRY _("Country/Region")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
48 #define QQ_PROVINCE _("Province/State")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
49 #define QQ_CITY _("City")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
50 #define QQ_HOROSCOPE _("Horoscope Symbol")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
51 #define QQ_OCCUPATION _("Occupation")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
52 #define QQ_ZODIAC _("Zodiac Sign")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
53 #define QQ_BLOOD _("Blood Type")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
54 #define QQ_COLLEGE _("College")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
55 #define QQ_EMAIL _("Email")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
56 #define QQ_ADDRESS _("Address")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
57 #define QQ_ZIPCODE _("Zipcode")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
58 #define QQ_CELL _("Cellphone Number")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
59 #define QQ_TELEPHONE _("Phone Number")
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
60 #define QQ_HOMEPAGE _("Homepage")
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
61
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
62 #define QQ_HOROSCOPE_SIZE 13
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
63 static const gchar *horoscope_names[] = {
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
64 "-", N_("Aquarius"), N_("Pisces"), N_("Aries"), N_("Taurus"),
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
65 N_("Gemini"), N_("Cancer"), N_("Leo"), N_("Virgo"), N_("Libra"),
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
66 N_("Scorpio"), N_("Sagittarius"), N_("Capricorn")
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
67 };
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
68
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
69 #define QQ_ZODIAC_SIZE 13
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
70 static const gchar *zodiac_names[] = {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
71 "-", N_("Rat"), N_("Ox"), N_("Tiger"), N_("Rabbit"),
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
72 N_("Dragon"), N_("Snake"), N_("Horse"), N_("Goat"), N_("Monkey"),
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
73 N_("Rooster"), N_("Dog"), N_("Pig")
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
74 };
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
75
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
76 #define QQ_BLOOD_SIZE 6
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
77 static const gchar *blood_types[] = {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
78 "-", "A", "B", "O", "AB", N_("Other")
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
79 };
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
80
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
81 #define QQ_GENDER_SIZE 2
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
82 static const gchar *genders[] = {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
83 N_("Male"),
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
84 N_("Female")
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
85 };
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
86
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
87 #define QQ_CONTACT_FIELDS 37
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
88
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
89 /* There is no user id stored in the reply packet for information query
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
90 * we have to manually store the query, so that we know the query source */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
91 typedef struct _qq_info_query {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
92 guint32 uid;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
93 gboolean show_window;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
94 gboolean modify_info;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
95 } qq_info_query;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
96
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
97 /* We get an info packet on ourselves before we modify our information.
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
98 * Even though not all of the information is modifiable, it still
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
99 * all needs to be there when we send out the modify info packet */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
100 typedef struct _modify_info_data {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
101 GaimConnection *gc;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
102 contact_info *info;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
103 } modify_info_data;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
104
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
105 /* return -1 as a sentinel */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
106 static gint choice_index(const gchar *value, const gchar **choice, gint choice_size)
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
107 {
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
108 gint len, i;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
109
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
110 len = strlen(value);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
111 if (len > 3 || len == 0) return -1;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
112 for (i = 0; i < len; i++) {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
113 if (!g_ascii_isdigit(value[i]))
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
114 return -1;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
115 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
116 i = strtol(value, NULL, 10);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
117 if (i >= choice_size)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
118 return -1;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
119
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
120 return i;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
121 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
122
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
123 /* return should be freed */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
124 static gchar *field_value(const gchar *field, const gchar **choice, gint choice_size)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
125 {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
126 gint index, len;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
127
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
128 len = strlen(field);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
129 if (len == 0) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
130 return NULL;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
131 } else if (choice != NULL) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
132 /* some choice fields are also customizable */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
133 index = choice_index(field, choice, choice_size);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
134 if (index == -1) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
135 if (strcmp(field, "-") != 0) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
136 return qq_to_utf8(field, QQ_CHARSET_DEFAULT);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
137 } else {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
138 return NULL;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
139 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
140 /* else ASCIIized index */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
141 } else {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
142 if (strcmp(choice[index], "-") != 0)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
143 return g_strdup(choice[index]);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
144 else
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
145 return NULL;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
146 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
147 } else {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
148 if (strcmp(field, "-") != 0) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
149 return qq_to_utf8(field, QQ_CHARSET_DEFAULT);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
150 } else {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
151 return NULL;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
152 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
153 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
154 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
155
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
156 static gboolean append_field_value(GaimNotifyUserInfo *user_info, const gchar *field,
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
157 const gchar *title, const gchar **choice, gint choice_size)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
158 {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
159 gchar *value = field_value(field, choice, choice_size);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
160
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
161 if (value != NULL) {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
162 gaim_notify_user_info_add_pair(user_info, title, value);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
163 g_free(value);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
164
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
165 return TRUE;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
166 }
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
167
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
168 return FALSE;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
169 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
170
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
171 static GaimNotifyUserInfo *
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
172 info_to_notify_user_info(const contact_info *info)
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
173 {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
174 GaimNotifyUserInfo *user_info = gaim_notify_user_info_new();
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
175 const gchar *intro;
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
176 gboolean has_extra_info = FALSE;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
177
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
178 gaim_notify_user_info_add_pair(user_info, QQ_NUMBER, info->uid);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
179
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
180 append_field_value(user_info, info->nick, QQ_NICKNAME, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
181 append_field_value(user_info, info->name, QQ_NAME, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
182 append_field_value(user_info, info->age, QQ_AGE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
183 append_field_value(user_info, info->gender, QQ_GENDER, genders, QQ_GENDER_SIZE);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
184 append_field_value(user_info, info->country, QQ_COUNTRY, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
185 append_field_value(user_info, info->province, QQ_PROVINCE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
186 append_field_value(user_info, info->city, QQ_CITY, NULL, 0);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
187
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
188 gaim_notify_user_info_add_section_header(user_info, QQ_ADDITIONAL_INFORMATION);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
189
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
190 has_extra_info |= append_field_value(user_info, info->horoscope, QQ_HOROSCOPE, horoscope_names, QQ_HOROSCOPE_SIZE);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
191 has_extra_info |= append_field_value(user_info, info->occupation, QQ_OCCUPATION, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
192 has_extra_info |= append_field_value(user_info, info->zodiac, QQ_ZODIAC, zodiac_names, QQ_ZODIAC_SIZE);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
193 has_extra_info |= append_field_value(user_info, info->blood, QQ_BLOOD, blood_types, QQ_BLOOD_SIZE);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
194 has_extra_info |= append_field_value(user_info, info->college, QQ_COLLEGE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
195 has_extra_info |= append_field_value(user_info, info->email, QQ_EMAIL, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
196 has_extra_info |= append_field_value(user_info, info->address, QQ_ADDRESS, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
197 has_extra_info |= append_field_value(user_info, info->zipcode, QQ_ZIPCODE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
198 has_extra_info |= append_field_value(user_info, info->hp_num, QQ_CELL, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
199 has_extra_info |= append_field_value(user_info, info->tel, QQ_TELEPHONE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
200 has_extra_info |= append_field_value(user_info, info->homepage, QQ_HOMEPAGE, NULL, 0);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
201
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
202 if (!has_extra_info)
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
203 gaim_notify_user_info_remove_last_item(user_info);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
204
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
205 intro = field_value(info->intro, NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
206 if (intro) {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
207 gaim_notify_user_info_add_pair(user_info, QQ_INTRO, intro);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
208 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
209
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
210 /* for debugging */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
211 /*
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
212 g_string_append_printf(info_text, "<br /><br /><b>%s</b><br />", "Miscellaneous");
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
213 append_field_value(info_text, info->pager_sn, "pager_sn", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
214 append_field_value(info_text, info->pager_num, "pager_num", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
215 append_field_value(info_text, info->pager_sp, "pager_sp", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
216 append_field_value(info_text, info->pager_base_num, "pager_base_num", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
217 append_field_value(info_text, info->pager_type, "pager_type", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
218 append_field_value(info_text, info->auth_type, "auth_type", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
219 append_field_value(info_text, info->unknown1, "unknown1", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
220 append_field_value(info_text, info->unknown2, "unknown2", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
221 append_field_value(info_text, info->face, "face", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
222 append_field_value(info_text, info->hp_type, "hp_type", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
223 append_field_value(info_text, info->unknown3, "unknown3", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
224 append_field_value(info_text, info->unknown4, "unknown4", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
225 append_field_value(info_text, info->unknown5, "unknown5", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
226 append_field_value(info_text, info->is_open_hp, "is_open_hp", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
227 append_field_value(info_text, info->is_open_contact, "is_open_contact", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
228 append_field_value(info_text, info->qq_show, "qq_show", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
229 append_field_value(info_text, info->unknown6, "unknown6", NULL, 0);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
230 */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
231
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
232 return user_info;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
233 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
234
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
235 /* send a packet to get detailed information of uid */
14327
35a1e5dda285 [gaim-migrate @ 16947]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
236 void qq_send_packet_get_info(GaimConnection *gc, guint32 uid, gboolean show_window)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
237 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
238 qq_data *qd;
14581
5c4b594933f6 [gaim-migrate @ 17239]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
239 gchar uid_str[11];
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
240 qq_info_query *query;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
241
14691
efb5fd0a34b7 [gaim-migrate @ 17375]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14673
diff changeset
242 g_return_if_fail(uid != 0);
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 qd = (qq_data *) gc->proto_data;
14581
5c4b594933f6 [gaim-migrate @ 17239]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
245 g_snprintf(uid_str, sizeof(uid_str), "%d", uid);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
246 qq_send_cmd(gc, QQ_CMD_GET_USER_INFO, TRUE, 0, TRUE, (guint8 *) uid_str, strlen(uid_str));
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
247
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
248 query = g_new0(qq_info_query, 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
249 query->uid = uid;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
250 query->show_window = show_window;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
251 query->modify_info = FALSE;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
252 qd->info_query = g_list_append(qd->info_query, query);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
253 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
254
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
255 /* set up the fields requesting personal information and send a get_info packet
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
256 * for myself */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
257 void qq_prepare_modify_info(GaimConnection *gc)
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
258 {
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
259 qq_data *qd;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
260 GList *ql;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
261 qq_info_query *query;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
262
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
263 qd = (qq_data *) gc->proto_data;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
264 qq_send_packet_get_info(gc, qd->uid, FALSE);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
265 /* traverse backwards so we get the most recent info_query */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
266 for (ql = g_list_last(qd->info_query); ql != NULL; ql = g_list_previous(ql)) {
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
267 query = ql->data;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
268 if (query->uid == qd->uid)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
269 query->modify_info = TRUE;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
270 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
271 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
272
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
273 /* send packet to modify personal information */
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
274 static void qq_send_packet_modify_info(GaimConnection *gc, gchar **segments)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
275 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
276 gint i;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
277 guint8 *raw_data, *cursor, bar;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
278
14691
efb5fd0a34b7 [gaim-migrate @ 17375]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14673
diff changeset
279 g_return_if_fail(segments != NULL);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
280
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
281 bar = 0x1f;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
282 raw_data = g_newa(guint8, MAX_PACKET_SIZE - 128);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
283 cursor = raw_data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
284
14076
ac77316596dc [gaim-migrate @ 16606]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14061
diff changeset
285 create_packet_b(raw_data, &cursor, bar);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
286
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
287 /* important! skip the first uid entry */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
288 for (i = 1; i < QQ_CONTACT_FIELDS; i++) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
289 create_packet_b(raw_data, &cursor, bar);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
290 create_packet_data(raw_data, &cursor, (guint8 *) segments[i], strlen(segments[i]));
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
291 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
292 create_packet_b(raw_data, &cursor, bar);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
293
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
294 qq_send_cmd(gc, QQ_CMD_UPDATE_INFO, TRUE, 0, TRUE, raw_data, cursor - raw_data);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
295
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
296 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
297
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
298 static void modify_info_cancel_cb(modify_info_data *mid)
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
299 {
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
300 qq_data *qd;
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
301
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
302 qd = (qq_data *) mid->gc->proto_data;
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
303 qd->modifying_info = FALSE;
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
304
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
305 g_strfreev((gchar **) mid->info);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
306 g_free(mid);
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
307 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
308
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
309 static gchar *parse_field(GList **list, gboolean choice)
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
310 {
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
311 gchar *value;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
312 GaimRequestField *field;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
313
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
314 field = (GaimRequestField *) (*list)->data;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
315 if (choice) {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
316 value = g_strdup_printf("%d", gaim_request_field_choice_get_value(field));
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
317 } else {
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
318 value = (gchar *) gaim_request_field_string_get_value(field);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
319 if (value == NULL)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
320 value = g_strdup("-");
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
321 else
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
322 value = utf8_to_qq(value, QQ_CHARSET_DEFAULT);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
323 }
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
324 *list = g_list_remove_link(*list, *list);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
325
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
326 return value;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
327 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
328
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
329 /* parse fields and send info packet */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
330 static void modify_info_ok_cb(modify_info_data *mid, GaimRequestFields *fields)
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
331 {
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
332 GaimConnection *gc;
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
333 qq_data *qd;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
334 GList *list, *groups;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
335 contact_info *info;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
336
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
337 gc = mid->gc;
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
338 qd = (qq_data *) gc->proto_data;
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
339 qd->modifying_info = FALSE;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
340
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
341 info = mid->info;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
342
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
343 groups = gaim_request_fields_get_groups(fields);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
344 list = gaim_request_field_group_get_fields(groups->data);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
345 info->uid = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
346 info->nick = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
347 info->name = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
348 info->age = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
349 info->gender = parse_field(&list, TRUE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
350 info->country = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
351 info->province = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
352 info->city = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
353 groups = g_list_remove_link(groups, groups);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
354 list = gaim_request_field_group_get_fields(groups->data);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
355 info->horoscope = parse_field(&list, TRUE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
356 info->occupation = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
357 info->zodiac = parse_field(&list, TRUE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
358 info->blood = parse_field(&list, TRUE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
359 info->college = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
360 info->email = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
361 info->address = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
362 info->zipcode = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
363 info->hp_num = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
364 info->tel = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
365 info->homepage = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
366 groups = g_list_remove_link(groups, groups);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
367 list = gaim_request_field_group_get_fields(groups->data);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
368 info->intro = parse_field(&list, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
369 groups = g_list_remove_link(groups, groups);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
370
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
371 qq_send_packet_modify_info(gc, (gchar **) info);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
372
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
373 g_strfreev((gchar **) mid->info);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
374 g_free(mid);
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
375 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
376
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
377 static GaimRequestFieldGroup *setup_field_group(GaimRequestFields *fields, const gchar *title)
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
378 {
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
379 GaimRequestFieldGroup *group;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
380
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
381 group = gaim_request_field_group_new(title);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
382 gaim_request_fields_add_group(fields, group);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
383
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
384 return group;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
385 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
386
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
387 static void add_string_field_to_group(GaimRequestFieldGroup *group,
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
388 const gchar *id, const gchar *title, const gchar *value)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
389 {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
390 GaimRequestField *field;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
391 gchar *utf8_value;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
392
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
393 utf8_value = qq_to_utf8(value, QQ_CHARSET_DEFAULT);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
394 field = gaim_request_field_string_new(id, title, utf8_value, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
395 gaim_request_field_group_add_field(group, field);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
396 g_free(utf8_value);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
397 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
398
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
399 static void add_choice_field_to_group(GaimRequestFieldGroup *group,
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
400 const gchar *id, const gchar *title, const gchar *value,
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
401 const gchar **choice, gint choice_size)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
402 {
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
403 GaimRequestField *field;
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
404 gint i, index;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
405
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
406 index = choice_index(value, choice, choice_size);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
407 field = gaim_request_field_choice_new(id, title, index);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
408 for (i = 0; i < choice_size; i++)
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
409 gaim_request_field_choice_add(field, choice[i]);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
410 gaim_request_field_group_add_field(group, field);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
411 }
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
412
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
413 /* take the info returned by a get_info packet for myself and set up a request form */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
414 static void create_modify_info_dialogue(GaimConnection *gc, const contact_info *info)
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
415 {
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
416 qq_data *qd;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
417 GaimRequestFieldGroup *group;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
418 GaimRequestFields *fields;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
419 GaimRequestField *field;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
420 modify_info_data *mid;
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
421
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
422 /* so we only have one dialog open at a time */
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
423 qd = (qq_data *) gc->proto_data;
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
424 if (!qd->modifying_info) {
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
425 qd->modifying_info = TRUE;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
426
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
427 fields = gaim_request_fields_new();
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
428
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
429 group = setup_field_group(fields, QQ_PRIMARY_INFORMATION);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
430 field = gaim_request_field_string_new("uid", QQ_NUMBER, info->uid, FALSE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
431 gaim_request_field_group_add_field(group, field);
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
432 gaim_request_field_string_set_editable(field, FALSE);
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
433 add_string_field_to_group(group, "nick", QQ_NICKNAME, info->nick);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
434 add_string_field_to_group(group, "name", QQ_NAME, info->name);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
435 add_string_field_to_group(group, "age", QQ_AGE, info->age);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
436 add_choice_field_to_group(group, "gender", QQ_GENDER, info->gender, genders, QQ_GENDER_SIZE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
437 add_string_field_to_group(group, "country", QQ_COUNTRY, info->country);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
438 add_string_field_to_group(group, "province", QQ_PROVINCE, info->province);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
439 add_string_field_to_group(group, "city", QQ_CITY, info->city);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
440 group = setup_field_group(fields, QQ_ADDITIONAL_INFORMATION);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
441 add_choice_field_to_group(group, "horoscope", QQ_HOROSCOPE, info->horoscope, horoscope_names, QQ_HOROSCOPE_SIZE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
442 add_string_field_to_group(group, "occupation", QQ_OCCUPATION, info->occupation);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
443 add_choice_field_to_group(group, "zodiac", QQ_ZODIAC, info->zodiac, zodiac_names, QQ_ZODIAC_SIZE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
444 add_choice_field_to_group(group, "blood", QQ_BLOOD, info->blood, blood_types, QQ_BLOOD_SIZE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
445 add_string_field_to_group(group, "college", QQ_COLLEGE, info->college);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
446 add_string_field_to_group(group, "email", QQ_EMAIL, info->email);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
447 add_string_field_to_group(group, "address", QQ_ADDRESS, info->address);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
448 add_string_field_to_group(group, "zipcode", QQ_ZIPCODE, info->zipcode);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
449 add_string_field_to_group(group, "hp_num", QQ_CELL, info->hp_num);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
450 add_string_field_to_group(group, "tel", QQ_TELEPHONE, info->tel);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
451 add_string_field_to_group(group, "homepage", QQ_HOMEPAGE, info->homepage);
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
452
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
453 group = setup_field_group(fields, QQ_INTRO);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
454 field = gaim_request_field_string_new("intro", QQ_INTRO, info->intro, TRUE);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
455 gaim_request_field_group_add_field(group, field);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
456
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
457 /* prepare unmodifiable info */
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
458 mid = g_new0(modify_info_data, 1);
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
459 mid->gc = gc;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
460 /* QQ_CONTACT_FIELDS+1 so that the array is NULL-terminated and can be g_strfreev()'ed later */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
461 mid->info = (contact_info *) g_new0(gchar *, QQ_CONTACT_FIELDS+1);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
462 mid->info->pager_sn = g_strdup(info->pager_sn);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
463 mid->info->pager_num = g_strdup(info->pager_num);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
464 mid->info->pager_sp = g_strdup(info->pager_sp);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
465 mid->info->pager_base_num = g_strdup(info->pager_base_num);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
466 mid->info->pager_type = g_strdup(info->pager_type);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
467 mid->info->auth_type = g_strdup(info->auth_type);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
468 mid->info->unknown1 = g_strdup(info->unknown1);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
469 mid->info->unknown2 = g_strdup(info->unknown2);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
470 mid->info->face = g_strdup(info->face);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
471 mid->info->hp_type = g_strdup(info->hp_type);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
472 mid->info->unknown3 = g_strdup(info->unknown3);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
473 mid->info->unknown4 = g_strdup(info->unknown4);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
474 mid->info->unknown5 = g_strdup(info->unknown5);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
475 /* TODO stop hiding these 2 */
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
476 mid->info->is_open_hp = g_strdup(info->is_open_hp);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
477 mid->info->is_open_contact = g_strdup(info->is_open_contact);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
478 mid->info->qq_show = g_strdup(info->qq_show);
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
479 mid->info->unknown6 = g_strdup(info->unknown6);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
480
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
481 gaim_request_fields(gc, _("Modify my information"),
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
482 _("Modify my information"), NULL, fields,
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
483 _("Update my information"), G_CALLBACK(modify_info_ok_cb),
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
484 _("Cancel"), G_CALLBACK(modify_info_cancel_cb),
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
485 mid);
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
486 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
487 }
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
488
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
489 /* process the reply of modify_info packet */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
490 void qq_process_modify_info_reply(guint8 *buf, gint buf_len, GaimConnection *gc)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
491 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
492 qq_data *qd;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
493 gint len;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
494 guint8 *data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
495
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
496 g_return_if_fail(buf != NULL && buf_len != 0);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
497
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
498 qd = (qq_data *) gc->proto_data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
499 len = buf_len;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
500 data = g_newa(guint8, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
501
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
502 if (qq_crypt(DECRYPT, buf, buf_len, qd->session_key, data, &len)) {
14055
651f64b7fb6a [gaim-migrate @ 16570]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
503 data[len] = '\0';
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
504 if (qd->uid == atoi((gchar *) data)) { /* return should be my uid */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
505 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Update info ACK OK\n");
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
506 gaim_notify_info(gc, NULL, _("Your information has been updated"), NULL);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
507 }
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
508 } else {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
509 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Error decrypt modify info reply\n");
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
510 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
511 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
512
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
513 static void _qq_send_packet_modify_face(GaimConnection *gc, gint face_num)
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
514 {
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
515 GaimAccount *account = gaim_connection_get_account(gc);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
516 GaimPresence *presence = gaim_account_get_presence(account);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
517 qq_data *qd = (qq_data *) gc->proto_data;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
518 gint offset;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
519
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
520 if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE)) {
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
521 offset = 2;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
522 } else if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_AWAY)
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
523 || gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_EXTENDED_AWAY)) {
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
524 offset = 1;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
525 } else {
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
526 offset = 0;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
527 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
528
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
529 qd->my_icon = 3 * (face_num - 1) + offset;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
530 qd->modifying_face = TRUE;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
531 qq_send_packet_get_info(gc, qd->uid, FALSE);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
532 }
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
533
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
534 void qq_set_buddy_icon_for_user(GaimAccount *account, const gchar *who, const gchar *iconfile)
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
535 {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
536 FILE *file;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
537 struct stat st;
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
538
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
539 g_return_if_fail(g_stat(iconfile, &st) == 0);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
540 file = g_fopen(iconfile, "rb");
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
541 if (file) {
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
542 GaimBuddyIcon *icon;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
543 size_t data_len;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
544 gchar *data = g_new(gchar, st.st_size + 1);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
545 data_len = fread(data, 1, st.st_size, file);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
546 fclose(file);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
547 gaim_buddy_icons_set_for_user(account, who, data, data_len);
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
548 icon = gaim_buddy_icons_find(account, who);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
549 gaim_buddy_icon_set_path(icon, iconfile);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
550 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
551 }
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
552
15201
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
553 /* TODO: custom faces for QQ members and users with level >= 16 */
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
554 void qq_set_my_buddy_icon(GaimConnection *gc, const gchar *iconfile)
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
555 {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
556 gchar *icon;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
557 gint icon_num;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
558 GaimAccount *account = gaim_connection_get_account(gc);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
559 const gchar *icon_path = gaim_account_get_buddy_icon_path(account);
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
560 const gchar *buddy_icon_dir = qq_buddy_icon_dir();
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
561 gint prefix_len = strlen(QQ_ICON_PREFIX);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
562 gint suffix_len = strlen(QQ_ICON_SUFFIX);
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
563 gint dir_len = strlen(buddy_icon_dir);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
564 gint icon_len = strlen(icon_path) - dir_len - 1 - prefix_len - suffix_len;
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
565 gchar *errmsg = g_strconcat(_("You are attempting to set a custom face. Gaim currently only allows the standard faces. Please choose an image from "), buddy_icon_dir, ".", NULL);
15201
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
566 gboolean icon_global = gaim_account_get_bool(gc->account, "use-global-buddyicon", TRUE);
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
567
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
568 /* make sure we're using an appropriate icon */
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
569 if (!(g_ascii_strncasecmp(icon_path, buddy_icon_dir, dir_len) == 0
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
570 && icon_path[dir_len] == G_DIR_SEPARATOR
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
571 && g_ascii_strncasecmp(icon_path + dir_len + 1, QQ_ICON_PREFIX, prefix_len) == 0
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
572 && g_ascii_strncasecmp(icon_path + dir_len + 1 + prefix_len + icon_len, QQ_ICON_SUFFIX, suffix_len) == 0
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
573 && icon_len <= 3)) {
15201
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
574 if (icon_global)
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
575 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "%s\n", errmsg);
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
576 else
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
577 gaim_notify_error(gc, _("Invalid QQ Face"), errmsg, NULL);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
578 g_free(errmsg);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
579 return;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
580 }
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
581 /* strip everything but number */
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
582 icon = g_strndup(icon_path + dir_len + 1 + prefix_len, icon_len);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
583 icon_num = strtol(icon, NULL, 10);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
584 g_free(icon);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
585 /* ensure face number in proper range */
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
586 if (icon_num > QQ_FACES) {
15201
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
587 if (icon_global)
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
588 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "%s\n", errmsg);
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
589 else
26e8598c7282 [gaim-migrate @ 17925]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15200
diff changeset
590 gaim_notify_error(gc, _("Invalid QQ Face"), errmsg, NULL);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
591 g_free(errmsg);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
592 return;
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
593 }
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
594 g_free(errmsg);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
595 /* tell server my icon changed */
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
596 _qq_send_packet_modify_face(gc, icon_num);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
597 /* display in blist */
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
598 qq_set_buddy_icon_for_user(account, account->username, icon_path);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
599 }
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
600
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
601
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
602 static void _qq_update_buddy_icon(GaimAccount *account, const gchar *name, gint face)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
603 {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
604 gchar *icon_path;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
605 GaimBuddyIcon *icon = gaim_buddy_icons_find(account, name);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
606 gchar *icon_num_str = face_to_icon_str(face);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
607 const gchar *old_path = gaim_buddy_icon_get_path(icon);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
608 const gchar *buddy_icon_dir = qq_buddy_icon_dir();
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
609
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
610 icon_path = g_strconcat(buddy_icon_dir, G_DIR_SEPARATOR_S, QQ_ICON_PREFIX,
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
611 icon_num_str, QQ_ICON_SUFFIX, NULL);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
612 if (icon == NULL || old_path == NULL
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
613 || g_ascii_strcasecmp(icon_path, old_path) != 0)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
614 qq_set_buddy_icon_for_user(account, name, icon_path);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
615 g_free(icon_num_str);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
616 g_free(icon_path);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
617 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
618
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
619 /* after getting info or modify myself, refresh the buddy list accordingly */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
620 void qq_refresh_buddy_and_myself(contact_info *info, GaimConnection *gc)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
621 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
622 GaimBuddy *b;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
623 qq_data *qd;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
624 qq_buddy *q_bud;
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
625 gchar *alias_utf8, *gaim_name;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
626 GaimAccount *account = gaim_connection_get_account(gc);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
627
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
628 qd = (qq_data *) gc->proto_data;
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
629 gaim_name = uid_to_gaim_name(strtol(info->uid, NULL, 10));
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
630
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
631 alias_utf8 = qq_to_utf8(info->nick, QQ_CHARSET_DEFAULT);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
632 if (qd->uid == strtol(info->uid, NULL, 10)) { /* it is me */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
633 qd->my_icon = strtol(info->face, NULL, 10);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
634 if (alias_utf8 != NULL)
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
635 gaim_account_set_alias(account, alias_utf8);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
636 }
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
637 /* update buddy list (including myself, if myself is the buddy) */
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
638 b = gaim_find_buddy(gc->account, gaim_name);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
639 q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
640 if (q_bud != NULL) { /* I have this buddy */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
641 q_bud->age = strtol(info->age, NULL, 10);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
642 q_bud->gender = strtol(info->gender, NULL, 10);
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
643 q_bud->face = strtol(info->face, NULL, 10);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
644 if (alias_utf8 != NULL)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
645 q_bud->nickname = g_strdup(alias_utf8);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
646 qq_update_buddy_contact(gc, q_bud);
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
647 _qq_update_buddy_icon(gc->account, gaim_name, q_bud->face);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
648 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
649 g_free(gaim_name);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
650 g_free(alias_utf8);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
651 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
652
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
653 /* process reply to get_info packet */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
654 void qq_process_get_info_reply(guint8 *buf, gint buf_len, GaimConnection *gc)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
655 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
656 gint len;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
657 guint8 *data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
658 gchar **segments;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
659 qq_info_query *query;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
660 qq_data *qd;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
661 contact_info *info;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
662 GList *list, *query_list;
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
663 GaimNotifyUserInfo *user_info;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
664
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
665 g_return_if_fail(buf != NULL && buf_len != 0);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
666
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
667 qd = (qq_data *) gc->proto_data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
668 list = query_list = NULL;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
669 len = buf_len;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
670 data = g_newa(guint8, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
671 info = NULL;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
672
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
673 if (qq_crypt(DECRYPT, buf, buf_len, qd->session_key, data, &len)) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
674 if (NULL == (segments = split_data(data, len, "\x1e", QQ_CONTACT_FIELDS)))
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
675 return;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
676
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
677 info = (contact_info *) segments;
14327
35a1e5dda285 [gaim-migrate @ 16947]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
678 if (qd->modifying_face && strtol(info->face, NULL, 10) != qd->my_icon) {
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
679 gchar *icon = g_strdup_printf("%d", qd->my_icon);
14327
35a1e5dda285 [gaim-migrate @ 16947]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
680 qd->modifying_face = FALSE;
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
681 g_free(info->face);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
682 info->face = icon;
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
683 qq_send_packet_modify_info(gc, segments);
14327
35a1e5dda285 [gaim-migrate @ 16947]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
684 }
35a1e5dda285 [gaim-migrate @ 16947]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
685
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
686 qq_refresh_buddy_and_myself(info, gc);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
687
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
688 query_list = qd->info_query;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
689 /* ensure we're processing the right query */
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
690 while (query_list) {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
691 query = (qq_info_query *) query_list->data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
692 if (query->uid == atoi(info->uid)) {
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
693 if (query->show_window) {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
694 user_info = info_to_notify_user_info(info);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
695 gaim_notify_userinfo(gc, info->uid, user_info, NULL, NULL);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 15201
diff changeset
696 gaim_notify_user_info_destroy(user_info);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
697 } else if (query->modify_info) {
14673
3a9adee11b19 [gaim-migrate @ 17339]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14581
diff changeset
698 create_modify_info_dialogue(gc, info);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
699 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
700 qd->info_query = g_list_remove(qd->info_query, qd->info_query->data);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
701 g_free(query);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
702 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
703 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
704 query_list = query_list->next;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
705 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
706
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
707 g_strfreev(segments);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
708 } else {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
709 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Error decrypt get info reply\n");
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
710 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
711 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
712
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14076
diff changeset
713 void qq_info_query_free(qq_data *qd)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
714 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
715 gint i;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
716 qq_info_query *p;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
717
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
718 g_return_if_fail(qd != NULL);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
719
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
720 i = 0;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
721 while (qd->info_query != NULL) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
722 p = (qq_info_query *) (qd->info_query->data);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
723 qd->info_query = g_list_remove(qd->info_query, p);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
724 g_free(p);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
725 i++;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
726 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
727 gaim_debug(GAIM_DEBUG_INFO, "QQ", "%d info queries are freed!\n", i);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
728 }
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
729
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
730 void qq_send_packet_get_level(GaimConnection *gc, guint32 uid)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
731 {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
732 guint8 buf[5];
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
733 guint32 tmp = g_htonl(uid);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
734 buf[0] = 0;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
735 memcpy(buf+1, &tmp, 4);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
736 qq_send_cmd(gc, QQ_CMD_GET_LEVEL, TRUE, 0, TRUE, buf, 5);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
737 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
738
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
739 void qq_send_packet_get_buddies_levels(GaimConnection *gc)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
740 {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
741 guint8 *buf, *tmp, size;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
742 qq_buddy *q_bud;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
743 GList *node;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
744 qq_data *qd = (qq_data *) gc->proto_data;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
745
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
746 /* server only sends back levels for online buddies, no point
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
747 * in asking for anyone else */
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
748 size = 4*g_list_length(qd->buddies) + 1;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
749 buf = g_new0(guint8, size);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
750 tmp = buf + 1;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
751
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
752 for (node = qd->buddies; node != NULL; node = node->next) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
753 guint32 tmp4;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
754 q_bud = (qq_buddy *) node->data;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
755 if (q_bud != NULL) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
756 tmp4 = g_htonl(q_bud->uid);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
757 memcpy(tmp, &tmp4, 4);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
758 tmp += 4;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
759 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
760 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
761 qq_send_cmd(gc, QQ_CMD_GET_LEVEL, TRUE, 0, TRUE, buf, size);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
762 qd->last_get_levels = time(NULL);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
763 g_free(buf);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
764 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
765
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
766 void qq_process_get_level_reply(guint8 *buf, gint buf_len, GaimConnection *gc)
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
767 {
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
768 guint32 uid, onlineTime;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
769 guint16 level, timeRemainder;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
770 gchar *gaim_name;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
771 GaimBuddy *b;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
772 qq_buddy *q_bud;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
773 gint decr_len, i;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
774 guint8 *decr_buf, *tmp;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
775 GaimAccount *account = gaim_connection_get_account(gc);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
776 qq_data *qd = (qq_data *) gc->proto_data;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
777
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
778 decr_len = buf_len;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
779 decr_buf = g_new0(guint8, buf_len);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
780 if (!qq_crypt(DECRYPT, buf, buf_len, qd->session_key, decr_buf, &decr_len)) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
781 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Couldn't decrypt get level packet\n");
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
782 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
783
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
784 decr_len--;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
785 if (decr_len % 12 != 0) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
786 gaim_debug(GAIM_DEBUG_ERROR, "QQ",
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
787 "Get levels list of abnormal length. Truncating last %d bytes.\n", decr_len % 12);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
788 decr_len -= (decr_len % 12);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
789 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
790
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
791 tmp = decr_buf + 1;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
792 /* this byte seems random */
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
793 /*
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
794 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Byte one of get_level packet: %d\n", buf[0]);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
795 */
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
796 for (i = 0; i < decr_len; i += 12) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
797 uid = g_ntohl(*(guint32 *) tmp);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
798 tmp += 4;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
799 onlineTime = g_ntohl(*(guint32 *) tmp);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
800 tmp += 4;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
801 level = g_ntohs(*(guint16 *) tmp);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
802 tmp += 2;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
803 timeRemainder = g_ntohs(*(guint16 *) tmp);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
804 tmp += 2;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
805 /*
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
806 gaim_debug(GAIM_DEBUG_INFO, "QQ", "Level packet entry:\nuid: %d\nonlineTime: %d\nlevel: %d\ntimeRemainder: %d\n",
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
807 uid, onlineTime, level, timeRemainder);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
808 */
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
809 gaim_name = uid_to_gaim_name(uid);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
810 b = gaim_find_buddy(account, gaim_name);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
811 q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
812
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
813 if (q_bud != NULL) {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
814 q_bud->onlineTime = onlineTime;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
815 q_bud->level = level;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
816 q_bud->timeRemainder = timeRemainder;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
817 } else {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
818 gaim_debug(GAIM_DEBUG_ERROR, "QQ",
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
819 "Got an online buddy %d, but not in my buddy list\n", uid);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
820 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
821 g_free(gaim_name);
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
822 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
823 g_free(decr_buf);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
824 }

mercurial