libpurple/protocols/oscar/util.c

Tue, 06 May 2014 18:27:58 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Tue, 06 May 2014 18:27:58 +0200
changeset 35989
2b5a26ddbb69
parent 35852
fe350399078a
permissions
-rw-r--r--

Merge release-2.x.y

13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * Purple's oscar protocol plugin
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
9 * version 2 of the License, or (at your option) any later version.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
10 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
17 * License along with this library; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19820
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
20
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 /*
4246
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
22 * A little bit of this
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
23 * A little bit of that
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
24 * It started with a kiss
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
25 * Now we're up to bat
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
28 #include "oscar.h"
27686
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
29
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
30 #include "core.h"
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
31
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 #include <ctype.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33
30296
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
34 static const char * const msgerrreason[] = {
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
35 N_("Invalid error"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
36 N_("Invalid SNAC"),
30483
b6192401ac9b *** Plucked rev 16e7d9f71db071e6d043c456869b8f860bcc8d45 (ivan.komarov@soc.pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 30296
diff changeset
37 N_("Server rate limit exceeded"),
30484
266e1c9d699a *** Plucked rev 6290e1fa3bfba05e59462968ebbff460342c48dd (ivan.komarov@soc.pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 30483
diff changeset
38 N_("Client rate limit exceeded"),
30296
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
39 N_("Not logged in"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
40 N_("Service unavailable"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
41 N_("Service not defined"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
42 N_("Obsolete SNAC"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
43 N_("Not supported by host"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
44 N_("Not supported by client"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
45 N_("Refused by client"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
46 N_("Reply too big"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
47 N_("Responses lost"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
48 N_("Request denied"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
49 N_("Busted SNAC payload"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
50 N_("Insufficient rights"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
51 N_("In local permit/deny"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
52 N_("Warning level too high (sender)"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
53 N_("Warning level too high (receiver)"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
54 N_("User temporarily unavailable"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
55 N_("No match"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
56 N_("List overflow"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
57 N_("Request ambiguous"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
58 N_("Queue full"),
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
59 N_("Not while on AOL")
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
60 };
34304
faf0414a8b51 Fix most of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32074
diff changeset
61 static const gsize msgerrreasonlen = G_N_ELEMENTS(msgerrreason);
30296
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
62
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
63 const char *oscar_get_msgerr_reason(size_t reason)
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
64 {
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
65 return (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("Unknown reason");
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
66 }
d97ee3720d8d Cleanup, basically. Move the icbm snac error handling from oscar.c to
Mark Doliner <markdoliner@pidgin.im>
parents: 27688
diff changeset
67
27687
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
68 int oscar_get_ui_info_int(const char *str, int default_value)
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
69 {
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
70 GHashTable *ui_info;
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
71
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
72 ui_info = purple_core_get_ui_info();
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
73 if (ui_info != NULL) {
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
74 gpointer value;
27688
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
75 if (g_hash_table_lookup_extended(ui_info, str, NULL, &value))
27687
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
76 return GPOINTER_TO_INT(value);
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
77 }
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
78
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
79 return default_value;
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
80 }
f46b6b5c25e1 Use the ui_info hash table instead of prefs when passing the clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27686
diff changeset
81
27686
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
82 const char *oscar_get_ui_info_string(const char *str, const char *default_value)
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
83 {
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
84 GHashTable *ui_info;
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
85 const char *value = NULL;
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
86
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
87 ui_info = purple_core_get_ui_info();
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
88 if (ui_info != NULL)
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
89 value = g_hash_table_lookup(ui_info, str);
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
90 if (value == NULL)
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
91 value = default_value;
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
92
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
93 return value;
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
94 }
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 25889
diff changeset
95
27688
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
96 gchar *oscar_get_clientstring(void)
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
97 {
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
98 const char *name, *version;
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
99
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
100 name = oscar_get_ui_info_string("name", "Purple");
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
101 version = oscar_get_ui_info_string("version", VERSION);
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
102
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
103 return g_strdup_printf("%s/%s", name, version);;
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
104 }
8c89470bfe9d Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <markdoliner@pidgin.im>
parents: 27687
diff changeset
105
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
106 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
107 * Calculate the checksum of a given icon.
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
108 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
109 guint16
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
110 aimutil_iconsum(const guint8 *buf, int buflen)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
111 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
112 guint32 sum;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
113 int i;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
114
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
115 for (i=0, sum=0; i+1<buflen; i+=2)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
116 sum += (buf[i+1] << 8) + buf[i];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
117 if (i < buflen)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
118 sum += buf[i];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
119 sum = ((sum & 0xffff0000) >> 16) + (sum & 0x0000ffff);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
120
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
121 return sum;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
122 }
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
123
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
124 /**
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
125 * Check if the given name is a valid AIM username.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
126 * Example: BobDole
9681
9df6d086ce97 [gaim-migrate @ 10533]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 8982
diff changeset
127 * Example: Henry_Ford@mac.com
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
128 * Example: 1KrazyKat@example.com
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
129 *
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
130 * @return TRUE if the name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
131 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
132 static gboolean
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
133 oscar_util_valid_name_aim(const char *name)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
134 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
135 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
136
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
137 if (purple_email_is_valid(name))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
138 return TRUE;
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
139
32074
20202971c90e *** Plucked rev 13d6e924c9257b20e21050646cab88043bdb2e15 (markdoliner@pidgin.im):
Mark Doliner <markdoliner@pidgin.im>
parents: 30682
diff changeset
140 /* Normal AIM usernames can't start with a number, period or underscore */
20202971c90e *** Plucked rev 13d6e924c9257b20e21050646cab88043bdb2e15 (markdoliner@pidgin.im):
Mark Doliner <markdoliner@pidgin.im>
parents: 30682
diff changeset
141 if (isalnum(name[0]) == 0)
18343
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
142 return FALSE;
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
143
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
144 for (i = 0; name[i] != '\0'; i++) {
32074
20202971c90e *** Plucked rev 13d6e924c9257b20e21050646cab88043bdb2e15 (markdoliner@pidgin.im):
Mark Doliner <markdoliner@pidgin.im>
parents: 30682
diff changeset
145 if (!isalnum(name[i]) && name[i] != ' ' && name[i] != '.' && name[i] != '_')
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
146 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
147 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
148
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
149 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
150 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
151
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
152 /**
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
153 * Check if the given name is a valid ICQ username.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
154 * Example: 1234567
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
155 *
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
156 * @return TRUE if the name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
157 */
19820
0f82885da3d8 A little function name shuffling.
Mark Doliner <markdoliner@pidgin.im>
parents: 18343
diff changeset
158 gboolean
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
159 oscar_util_valid_name_icq(const char *name)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
160 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
161 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
162
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
163 for (i = 0; name[i] != '\0'; i++) {
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
164 if (!isdigit(name[i]))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
165 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
166 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
167
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
168 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
169 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
170
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
171 /**
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
172 * Check if the given name is a valid SMS username.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
173 * Example: +19195551234
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
174 *
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
175 * @return TRUE if the name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
176 */
19820
0f82885da3d8 A little function name shuffling.
Mark Doliner <markdoliner@pidgin.im>
parents: 18343
diff changeset
177 gboolean
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
178 oscar_util_valid_name_sms(const char *name)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
179 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
180 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
181
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
182 if (name[0] != '+')
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
183 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
184
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
185 for (i = 1; name[i] != '\0'; i++) {
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
186 if (!isdigit(name[i]))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
187 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
188 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
189
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
190 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
191 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
192
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
193 /**
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
194 * Check if the given name is a valid oscar username.
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
195 *
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
196 * @return TRUE if the name is valid, FALSE if not.
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
197 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
198 gboolean
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
199 oscar_util_valid_name(const char *name)
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
200 {
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
201 if ((name == NULL) || (*name == '\0'))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
202 return FALSE;
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
203
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
204 return oscar_util_valid_name_icq(name)
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
205 || oscar_util_valid_name_sms(name)
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
206 || oscar_util_valid_name_aim(name);
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
207 }
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
208
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
209 /**
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
210 * This takes two names and compares them using the rules
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
211 * on usernames for AIM/AOL. Mainly, this means case and space
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
212 * insensitivity (all case differences and spacing differences are
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
213 * ignored, with the exception that usernames can not start with
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
214 * a space).
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
215 *
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
216 * @return 0 if equal, non-0 if different
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
217 */
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
218 /* TODO: Do something different for email addresses. */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
219 int
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
220 oscar_util_name_compare(const char *name1, const char *name2)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
223 if ((name1 == NULL) || (name2 == NULL))
10116
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9975
diff changeset
224 return -1;
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9975
diff changeset
225
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
226 do {
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
227 while (*name2 == ' ')
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
228 name2++;
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
229 while (*name1 == ' ')
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
230 name1++;
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
231 if (toupper(*name1) != toupper(*name2))
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
232 return 1;
25889
26d9ca30335c Change "screen name" to "username" or "buddy name" in a whole bunch of
Mark Doliner <markdoliner@pidgin.im>
parents: 22900
diff changeset
233 } while ((*name1 != '\0') && name1++ && name2++);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
235 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236 }
30638
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
237
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
238 /**
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
239 * Looks for %n, %d, or %t in a string, and replaces them with the
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
240 * specified name, date, and time, respectively.
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
241 *
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
242 * @param str The string that may contain the special variables.
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
243 * @param name The sender name.
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
244 *
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
245 * @return A newly allocated string where the special variables are
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
246 * expanded. This should be g_free'd by the caller.
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
247 */
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
248 gchar *
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
249 oscar_util_format_string(const char *str, const char *name)
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
250 {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
251 char *c;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
252 GString *cpy;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
253 time_t t;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
254 struct tm *tme;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
255
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
256 g_return_val_if_fail(str != NULL, NULL);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
257 g_return_val_if_fail(name != NULL, NULL);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
258
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
259 /* Create an empty GString that is hopefully big enough for most messages */
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
260 cpy = g_string_sized_new(1024);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
261
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
262 t = time(NULL);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
263 tme = localtime(&t);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
264
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
265 c = (char *)str;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
266 while (*c) {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
267 switch (*c) {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
268 case '%':
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
269 if (*(c + 1)) {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
270 switch (*(c + 1)) {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
271 case 'n':
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
272 /* append name */
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
273 g_string_append(cpy, name);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
274 c++;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
275 break;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
276 case 'd':
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
277 /* append date */
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
278 g_string_append(cpy, purple_date_format_short(tme));
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
279 c++;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
280 break;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
281 case 't':
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
282 /* append time */
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
283 g_string_append(cpy, purple_time_format(tme));
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
284 c++;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
285 break;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
286 default:
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
287 g_string_append_c(cpy, *c);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
288 }
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
289 } else {
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
290 g_string_append_c(cpy, *c);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
291 }
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
292 break;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
293 default:
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
294 g_string_append_c(cpy, *c);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
295 }
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
296 c++;
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
297 }
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
298
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
299 return g_string_free(cpy, FALSE);
2f1952f26351 Got rid of family_icq.c -> oscar.c callbacks. Now it will be possible
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30296
diff changeset
300 }
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
301
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
302 gchar *
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
303 oscar_format_buddies(GSList *buddies, const gchar *no_buddies_message)
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
304 {
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
305 GSList *cur;
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
306 GString *result;
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
307 if (!buddies) {
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
308 return g_strdup_printf("<i>%s</i>", no_buddies_message);
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
309 }
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
310 result = g_string_new("");
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
311 for (cur = buddies; cur != NULL; cur = cur->next) {
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
312 PurpleBuddy *buddy = cur->data;
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
313 const gchar *bname = purple_buddy_get_name(buddy);
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
314 const gchar *alias = purple_buddy_get_alias_only(buddy);
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
315 g_string_append(result, bname);
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
316 if (alias) {
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
317 g_string_append_printf(result, " (%s)", alias);
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
318 }
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
319 g_string_append(result, "<br>");
30650
1e60e49674dd Added a way to view the Visible/Invisible lists.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30642
diff changeset
320 }
30655
5e49e33a987d Two small fixes Mark suggested:
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30650
diff changeset
321 return g_string_free(result, FALSE);
30682
9b61802df6a2 propagate from branch 'im.pidgin.pidgin' (head d0e80088af1e2895ceb91aea6cdab29af4b58e39)
Mark Doliner <markdoliner@pidgin.im>
parents: 30663 30484
diff changeset
322 }

mercurial