annotate libgaim/protocols/qq/buddy_info.c @ 15140:63d554c2675d

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