src/blist.c

Sun, 13 Jul 2003 18:33:25 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sun, 13 Jul 2003 18:33:25 +0000
changeset 6109
44e5eb92b617
parent 6058
0d5c66a5da5d
child 6116
18a2bf1a4f13
permissions
-rw-r--r--

[gaim-migrate @ 6571]
Make attempting to sign on to an account twice not crash Gaim, and make
the prompt for password request window only open once at max. I might
change this in a few minutes, but this works, and I wanted to commit it
before I break something.

Move the gaim_request_input() call for "Please enter your password" to
connection.c instead of gtkconn.c. There is no need for this to be in
gtkconn.c, and doing it in core means less work for UIs.

Make closing a notify window call the cancel action.

Set the titles for request windows, when given.

Remove a bit of odd, un-needed code from main.c (hitting "enter" in the
password field was calling doenter which called dologin. Now it just
calls dologin).

5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * gaim
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 * Copyright (C) 2003, Sean Egan <sean.egan@binghamton.edu>
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * (at your option) any later version.
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * GNU General Public License for more details.
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
22 #include "internal.h"
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 #include "blist.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
24 #include "conversation.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
25 #include "debug.h"
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
26 #include "multi.h"
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
27 #include "notify.h"
5545
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
28 #include "prefs.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
29 #include "privacy.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
30 #include "prpl.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
31 #include "server.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
32 #include "util.h"
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #define PATHSIZE 1024
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 struct gaim_buddy_list *gaimbuddylist = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 static struct gaim_blist_ui_ops *blist_ui_ops = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 /*****************************************************************************
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 * Private Utility functions *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41 *****************************************************************************/
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 static GaimBlistNode *gaim_blist_get_last_sibling(GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 GaimBlistNode *n = node;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45 if (!n)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 while (n->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48 n = n->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 return n;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 static GaimBlistNode *gaim_blist_get_last_child(GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 if (!node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 return gaim_blist_get_last_sibling(node->child);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
58 struct _gaim_hbuddy {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
59 char *name;
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
60 GaimAccount *account;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
61 GaimBlistNode *group;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
62 };
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
63
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
64 static guint _gaim_blist_hbuddy_hash (struct _gaim_hbuddy *hb)
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
65 {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
66 return g_str_hash(hb->name);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
67 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
68
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
69 static guint _gaim_blist_hbuddy_equal (struct _gaim_hbuddy *hb1, struct _gaim_hbuddy *hb2)
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
70 {
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
71 return ((!strcmp(hb1->name, hb2->name)) && hb1->account == hb2->account && hb1->group == hb2->group);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
72 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
73
6006
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
74 static void blist_pref_cb(const char *name, GaimPrefType typ, gpointer value, gpointer data)
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
75 {
6012
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
76 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
77 GaimBlistNode *group, *buddy;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
78
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
79 if (!ops)
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
80 return;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
81
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
82 for(group = gaimbuddylist->root; group; group = group->next) {
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
83 if(!GAIM_BLIST_NODE_IS_GROUP(group))
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
84 continue;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
85 for(buddy = group->child; buddy; buddy = buddy->next) {
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
86 if(!GAIM_BLIST_NODE_IS_BUDDY(buddy))
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
87 continue;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
88 ops->update(gaimbuddylist, buddy);
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
89 }
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
90 }
6006
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
91 }
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
92
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 /*****************************************************************************
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 * Public API functions *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 *****************************************************************************/
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 struct gaim_buddy_list *gaim_blist_new()
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 struct gaim_buddy_list *gbl = g_new0(struct gaim_buddy_list, 1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 gbl->ui_ops = gaim_get_blist_ui_ops();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
103 gbl->buddies = g_hash_table_new ((GHashFunc)_gaim_blist_hbuddy_hash,
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
104 (GEqualFunc)_gaim_blist_hbuddy_equal);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
105
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
106 if (gbl->ui_ops != NULL && gbl->ui_ops->new_list != NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
107 gbl->ui_ops->new_list(gbl);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108
6006
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
109 gaim_prefs_connect_callback("/core/buddies/use_server_alias", blist_pref_cb, NULL);
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
110
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111 return gbl;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 void
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
115 gaim_set_blist(struct gaim_buddy_list *list)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117 gaimbuddylist = list;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
118 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
119
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
120 struct gaim_buddy_list *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121 gaim_get_blist(void)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 return gaimbuddylist;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
124 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
126 void gaim_blist_show ()
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
128 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
129 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
130 ops->show(gaimbuddylist);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
131 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
133 void gaim_blist_destroy()
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
134 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
135 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
137 ops->destroy(gaimbuddylist);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
138 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
139
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
140 void gaim_blist_set_visible (gboolean show)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
141 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
142 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
143 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
144 ops->set_visible(gaimbuddylist, show);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
145 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
146
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
147 void gaim_blist_update_buddy_status (struct buddy *buddy, int status)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
148 {
5266
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
149 struct gaim_blist_ui_ops *ops;
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
150
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
151 if (buddy->uc == status)
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
152 return;
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
153
cb6fe050ff33 [gaim-migrate @ 5638]
Christian Hammond <chipx86@chipx86.com>
parents: 5259
diff changeset
154 ops = gaimbuddylist->ui_ops;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
155
5305
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
156 if((status & UC_UNAVAILABLE) != (buddy->uc & UC_UNAVAILABLE)) {
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
157 if(status & UC_UNAVAILABLE)
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
158 gaim_event_broadcast(event_buddy_away, buddy->account->gc, buddy->name);
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
159 else
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
160 gaim_event_broadcast(event_buddy_back, buddy->account->gc, buddy->name);
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
161 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
162
5305
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
163 buddy->uc = status;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
164 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
165 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
166 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
167
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
168 static gboolean presence_update_timeout_cb(struct buddy *buddy) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
169 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
170
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
171 if(buddy->present == GAIM_BUDDY_SIGNING_ON) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
172 buddy->present = GAIM_BUDDY_ONLINE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
173 gaim_event_broadcast(event_buddy_signon, buddy->account->gc, buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
174 } else if(buddy->present == GAIM_BUDDY_SIGNING_OFF) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
175 buddy->present = GAIM_BUDDY_OFFLINE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
176 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
177
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
178 buddy->timer = 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
179
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
180 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
181 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
182
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
183 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
184 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
185
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
186 void gaim_blist_update_buddy_presence(struct buddy *buddy, int presence) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
187 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188 gboolean do_timer = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190 if (!GAIM_BUDDY_IS_ONLINE(buddy) && presence) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191 buddy->present = GAIM_BUDDY_SIGNING_ON;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
192 gaim_event_broadcast(event_buddy_signon, buddy->account->gc, buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
193 do_timer = TRUE;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
194 ((struct group *)((GaimBlistNode *)buddy)->parent)->online++;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
195 } else if(GAIM_BUDDY_IS_ONLINE(buddy) && !presence) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
196 buddy->present = GAIM_BUDDY_SIGNING_OFF;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 gaim_event_broadcast(event_buddy_signoff, buddy->account->gc, buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198 do_timer = TRUE;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
199 ((struct group *)((GaimBlistNode *)buddy)->parent)->online--;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
200 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
201
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202 if(do_timer) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 if(buddy->timer > 0)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204 g_source_remove(buddy->timer);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 buddy->timer = g_timeout_add(10000, (GSourceFunc)presence_update_timeout_cb, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
210 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
211
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
213 void gaim_blist_update_buddy_idle (struct buddy *buddy, int idle)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
214 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
215 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 buddy->idle = idle;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
218 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
220 void gaim_blist_update_buddy_evil (struct buddy *buddy, int warning)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
221 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
222 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
223 buddy->evil = warning;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
224 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
225 ops->update(gaimbuddylist,(GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
227 void gaim_blist_update_buddy_icon(struct buddy *buddy) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
228 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229 if(ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
230 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
231 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
232 void gaim_blist_rename_buddy (struct buddy *buddy, const char *name)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
233 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
234 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
235 g_free(buddy->name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
236 buddy->name = g_strdup(name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
239 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
240
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
241 void gaim_blist_alias_chat(struct chat *chat, const char *alias)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
242 {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
243 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
244
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
245 g_free(chat->alias);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
246
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
247 if(alias && strlen(alias))
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
248 chat->alias = g_strdup(alias);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
249 else
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
250 chat->alias = NULL;
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
251
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
252 if(ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
253 ops->update(gaimbuddylist, (GaimBlistNode*)chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
254 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
255
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
256 void gaim_blist_alias_buddy (struct buddy *buddy, const char *alias)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
257 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
5676
d3c2fdaf4821 [gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents: 5634
diff changeset
259 GaimConversation *conv;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
260
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
261 g_free(buddy->alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
262
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
263 if(alias && strlen(alias))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
264 buddy->alias = g_strdup(alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
265 else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
266 buddy->alias = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
267
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
268 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
269 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
270
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271 conv = gaim_find_conversation_with_account(buddy->name, buddy->account);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
272
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273 if (conv)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
274 gaim_conversation_autoset_title(conv);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
275 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
276
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
277 void gaim_blist_server_alias_buddy (struct buddy *buddy, const char *alias)
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
278 {
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
279 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
280 GaimConversation *conv;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
281
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
282 g_free(buddy->server_alias);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
283
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
284 if(alias && strlen(alias) && g_utf8_validate(alias, -1, NULL))
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
285 buddy->server_alias = g_strdup(alias);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
286 else
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
287 buddy->server_alias = NULL;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
288
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
289 if (ops)
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
290 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
291
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
292 conv = gaim_find_conversation_with_account(buddy->name, buddy->account);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
293
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
294 if (conv)
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
295 gaim_conversation_autoset_title(conv);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
296 }
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
297
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
298 void gaim_blist_rename_group(struct group *group, const char *name)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
299 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
300 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
301 struct group *dest_group;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
302 GaimBlistNode *prev, *child, *next;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
303 GSList *accts;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
304
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
305 if(!name || !strlen(name) || !strcmp(name, group->name)) {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
306 /* nothing to do here */
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
307 return;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
308 } else if((dest_group = gaim_find_group(name))) {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
309 /* here we're merging two groups */
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
310 prev = gaim_blist_get_last_child((GaimBlistNode*)dest_group);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
311 child = ((GaimBlistNode*)group)->child;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
312
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
313 while(child)
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
314 {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
315 next = child->next;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
316 if(GAIM_BLIST_NODE_IS_BUDDY(child)) {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
317 gaim_blist_add_buddy((struct buddy *)child, dest_group, prev);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
318 prev = child;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
319 } else if(GAIM_BLIST_NODE_IS_CHAT(child)) {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
320 gaim_blist_add_chat((struct chat *)child, dest_group, prev);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
321 prev = child;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
322 } else {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
323 gaim_debug(GAIM_DEBUG_ERROR, "blist",
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
324 "Unknown child type in group %s\n", group->name);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
325 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
326 child = next;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
327 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
328 for (accts = gaim_group_get_accounts(group); accts; accts = g_slist_remove(accts, accts->data)) {
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
329 GaimAccount *account = accts->data;
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
330 serv_rename_group(account->gc, group, name);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
331 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
332 gaim_blist_remove_group(group);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
333 } else {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
334 /* a simple rename */
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
335 for (accts = gaim_group_get_accounts(group); accts; accts = g_slist_remove(accts, accts->data)) {
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
336 GaimAccount *account = accts->data;
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
337 serv_rename_group(account->gc, group, name);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
338 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
339 g_free(group->name);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
340 group->name = g_strdup(name);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
341 if (ops)
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
342 ops->update(gaimbuddylist, (GaimBlistNode*)group);
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
343 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
344 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
345
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
346 struct chat *gaim_chat_new(GaimAccount *account, const char *alias, GHashTable *components)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
347 {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
348 struct chat *chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
349 struct gaim_blist_ui_ops *ops;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
350
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
351 if(!components)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
352 return NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
353
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
354 chat = g_new0(struct chat, 1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
355 chat->account = account;
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
356 if(alias && strlen(alias))
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
357 chat->alias = g_strdup(alias);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
358 chat->components = components;
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
359 chat->settings = g_hash_table_new_full(g_str_hash, g_str_equal,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
360 g_free, g_free);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
361
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
362 ((GaimBlistNode*)chat)->type = GAIM_BLIST_CHAT_NODE;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
363
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
364 ops = gaim_get_blist_ui_ops();
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
365
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
366 if (ops != NULL && ops->new_node != NULL)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
367 ops->new_node((GaimBlistNode *)chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
368
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
369 return chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
370 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
371
6036
285e48913c72 [gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents: 6034
diff changeset
372 char *gaim_chat_get_display_name(struct chat *chat)
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
373 {
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
374 char *name;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
375
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
376 if(chat->alias){
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
377 name = g_strdup(chat->alias);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
378 }
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
379 else{
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
380 GList *parts;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
381 GaimPlugin *prpl;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
382 GaimPluginProtocolInfo *prpl_info;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
383 struct proto_chat_entry *pce;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
384
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
385 prpl = gaim_find_prpl(gaim_account_get_protocol(chat->account));
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
386 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
387
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
388 parts = prpl_info->chat_info(chat->account->gc);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
389
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
390 pce = parts->data;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
391 name = g_markup_escape_text(g_hash_table_lookup(chat->components,
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
392 pce->identifier), -1);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
393 g_list_free(parts);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
394 }
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
395
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
396 return name;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
397 }
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
398
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
399 struct buddy *gaim_buddy_new(GaimAccount *account, const char *screenname, const char *alias)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
400 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
401 struct buddy *b;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
402 struct gaim_blist_ui_ops *ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
403
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
404 b = g_new0(struct buddy, 1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
405 b->account = account;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
406 b->name = g_strdup(screenname);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
407 b->alias = g_strdup(alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
408 b->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
409 ((GaimBlistNode*)b)->type = GAIM_BLIST_BUDDY_NODE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
410
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
411 ops = gaim_get_blist_ui_ops();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
412
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
413 if (ops != NULL && ops->new_node != NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
414 ops->new_node((GaimBlistNode *)b);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
415
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
416 return b;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 }
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
418
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
419 void gaim_blist_add_chat(struct chat *chat, struct group *group, GaimBlistNode *node)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
420 {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
421 GaimBlistNode *n = node, *cnode = (GaimBlistNode*)chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
422 struct group *g = group;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
423 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
424 gboolean save = FALSE;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
425
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
426 if (!n) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
427 if (!g) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
428 g = gaim_group_new(_("Chats"));
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
429 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
430 gaim_blist_get_last_sibling(gaimbuddylist->root));
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
431 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
432 } else {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
433 g = (struct group*)n->parent;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
434 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
435
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
436 /* if we're moving to overtop of ourselves, do nothing */
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
437 if(cnode == n)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
438 return;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
439
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
440 if (cnode->parent) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
441 /* This chat was already in the list and is
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
442 * being moved.
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
443 */
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
444 ((struct group *)cnode->parent)->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
445 if (gaim_account_is_connected(chat->account)) {
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
446 ((struct group *)cnode->parent)->online--;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
447 ((struct group *)cnode->parent)->currentsize--;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
448 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
449 if(cnode->next)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
450 cnode->next->prev = cnode->prev;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
451 if(cnode->prev)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
452 cnode->prev->next = cnode->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
453 if(cnode->parent->child == cnode)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
454 cnode->parent->child = cnode->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
455
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
456 ops->remove(gaimbuddylist, cnode);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
457
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
458 save = TRUE;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
459 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
460
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
461 if (n) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
462 if(n->next)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
463 n->next->prev = cnode;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
464 cnode->next = n->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
465 cnode->prev = n;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
466 cnode->parent = n->parent;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
467 n->next = cnode;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
468 ((struct group *)n->parent)->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
469 if (gaim_account_is_connected(chat->account)) {
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
470 ((struct group *)n->parent)->online++;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
471 ((struct group *)n->parent)->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
472 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
473 } else {
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
474 if(((GaimBlistNode*)g)->child)
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
475 ((GaimBlistNode*)g)->child->prev = cnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
476 cnode->next = ((GaimBlistNode*)g)->child;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
477 cnode->prev = NULL;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
478 ((GaimBlistNode*)g)->child = cnode;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
479 cnode->parent = (GaimBlistNode*)g;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
480 g->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
481 if (gaim_account_is_connected(chat->account)) {
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
482 g->online++;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
483 g->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
484 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
485 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
486
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
487 if (ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
488 ops->update(gaimbuddylist, (GaimBlistNode*)cnode);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
489 if (save)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
490 gaim_blist_save();
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
491 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
492
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
493 void gaim_blist_add_buddy (struct buddy *buddy, struct group *group, GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
494 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
495 GaimBlistNode *n = node, *bnode = (GaimBlistNode*)buddy;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
496 struct group *g = group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
497 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
498 struct _gaim_hbuddy *hb;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
499 gboolean save = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
500
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
501 if (!n) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
502 if (!g) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
503 g = gaim_group_new(_("Buddies"));
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
504 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
505 gaim_blist_get_last_sibling(gaimbuddylist->root));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
506 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
507 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
508 g = (struct group*)n->parent;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
509 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
510
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
511 /* if we're moving to overtop of ourselves, do nothing */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
512 if(bnode == n)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
513 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
514
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
515 if (bnode->parent) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
516 /* This buddy was already in the list and is
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
517 * being moved.
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
518 */
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
519 ((struct group *)bnode->parent)->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
520 if (gaim_account_is_connected(buddy->account))
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
521 ((struct group *)bnode->parent)->currentsize--;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
522 if (GAIM_BUDDY_IS_ONLINE(buddy))
5313
77dfd6912785 [gaim-migrate @ 5685]
Nathan Walp <nwalp@pidgin.im>
parents: 5305
diff changeset
523 ((struct group *)bnode->parent)->online--;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
524
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
525 if(bnode->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
526 bnode->next->prev = bnode->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
527 if(bnode->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
528 bnode->prev->next = bnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
529 if(bnode->parent->child == bnode)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
530 bnode->parent->child = bnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
531
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
532 ops->remove(gaimbuddylist, bnode);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
533
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
534 if (bnode->parent != ((GaimBlistNode*)g)) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
535 serv_move_buddy(buddy, (struct group*)bnode->parent, g);
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
536 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
537 save = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
538 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
539
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
540 if (n) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
541 if(n->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
542 n->next->prev = (GaimBlistNode*)buddy;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
543 ((GaimBlistNode*)buddy)->next = n->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
544 ((GaimBlistNode*)buddy)->prev = n;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
545 ((GaimBlistNode*)buddy)->parent = n->parent;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
546 n->next = (GaimBlistNode*)buddy;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
547 ((struct group *)n->parent)->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
548 if (gaim_account_is_connected(buddy->account))
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
549 ((struct group *)n->parent)->currentsize++;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
550 if (GAIM_BUDDY_IS_ONLINE(buddy))
5313
77dfd6912785 [gaim-migrate @ 5685]
Nathan Walp <nwalp@pidgin.im>
parents: 5305
diff changeset
551 ((struct group *)n->parent)->online++;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
552 } else {
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
553 if(((GaimBlistNode*)g)->child)
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
554 ((GaimBlistNode*)g)->child->prev = (GaimBlistNode*)buddy;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
555 ((GaimBlistNode*)buddy)->prev = NULL;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
556 ((GaimBlistNode*)buddy)->next = ((GaimBlistNode*)g)->child;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
557 ((GaimBlistNode*)g)->child = (GaimBlistNode*)buddy;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
558 ((GaimBlistNode*)buddy)->parent = (GaimBlistNode*)g;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
559 g->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
560 if (gaim_account_is_connected(buddy->account))
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
561 g->currentsize++;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
562 if (GAIM_BUDDY_IS_ONLINE(buddy))
5313
77dfd6912785 [gaim-migrate @ 5685]
Nathan Walp <nwalp@pidgin.im>
parents: 5305
diff changeset
563 g->online++;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
564 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
565
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
566 hb = g_malloc(sizeof(struct _gaim_hbuddy));
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
567 hb->name = g_strdup(normalize(buddy->name));
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
568 hb->account = buddy->account;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
569 hb->group = ((GaimBlistNode*)buddy)->parent;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
570
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
571 if (g_hash_table_lookup(gaimbuddylist->buddies, (gpointer)hb)) {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
572 /* This guy already exists */
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
573 g_free(hb->name);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
574 g_free(hb);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
575 } else {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
576 g_hash_table_insert(gaimbuddylist->buddies, (gpointer)hb, (gpointer)buddy);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
577 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
578
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
579 if (ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
580 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
581 if (save)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
582 gaim_blist_save();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
583 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
584
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
585 struct group *gaim_group_new(const char *name)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
586 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
587 struct group *g = gaim_find_group(name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
588
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
589 if (!g) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
590 struct gaim_blist_ui_ops *ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
591 g= g_new0(struct group, 1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
592 g->name = g_strdup(name);
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
593 g->totalsize = 0;
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
594 g->currentsize = 0;
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
595 g->online = 0;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
596 g->settings = g_hash_table_new_full(g_str_hash, g_str_equal,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
597 g_free, g_free);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
598 ((GaimBlistNode*)g)->type = GAIM_BLIST_GROUP_NODE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
599
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
600 ops = gaim_get_blist_ui_ops();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
601
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
602 if (ops != NULL && ops->new_node != NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
603 ops->new_node((GaimBlistNode *)g);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
604
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
605 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
606 return g;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
607 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
608
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
609 void gaim_blist_add_group (struct group *group, GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
610 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
611 struct gaim_blist_ui_ops *ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
612 GaimBlistNode *gnode = (GaimBlistNode*)group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
613 gboolean save = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
614
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
615 if (!gaimbuddylist)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
616 gaimbuddylist = gaim_blist_new();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
617 ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
618
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
619 if (!gaimbuddylist->root) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
620 gaimbuddylist->root = gnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
621 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
622 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
623
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
624 /* if we're moving to overtop of ourselves, do nothing */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
625 if(gnode == node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
626 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
627
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
628 if (gaim_find_group(group->name)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
629 /* This is just being moved */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
630
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
631 ops->remove(gaimbuddylist, (GaimBlistNode*)group);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
632
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
633 if(gnode == gaimbuddylist->root)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
634 gaimbuddylist->root = gnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
635 if(gnode->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
636 gnode->prev->next = gnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
637 if(gnode->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
638 gnode->next->prev = gnode->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
639
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
640 save = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
641 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
642
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
643 if (node) {
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
644 gnode->next = node->next;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
645 gnode->prev = node;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
646 if(node->next)
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
647 node->next->prev = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
648 node->next = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
649 } else {
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
650 gaimbuddylist->root->prev = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
651 gnode->next = gaimbuddylist->root;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
652 gnode->prev = NULL;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
653 gaimbuddylist->root = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
654 }
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
655
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
656
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
657 if (ops) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
658 ops->update(gaimbuddylist, gnode);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
659 for(node = gnode->child; node; node = node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
660 ops->update(gaimbuddylist, node);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
661 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
662 if (save)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
663 gaim_blist_save();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
664 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
665
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
666 void gaim_blist_remove_buddy (struct buddy *buddy)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
667 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
668 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
669
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
670 GaimBlistNode *gnode, *node = (GaimBlistNode*)buddy;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
671 struct group *group;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
672 struct _gaim_hbuddy hb, *key;
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
673 struct buddy *val;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
674
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
675 gnode = node->parent;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
676 group = (struct group *)gnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
677
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
678 if(gnode->child == node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
679 gnode->child = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
680 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
681 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
682 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
683 node->next->prev = node->prev;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
684 group->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
685 if (gaim_account_is_connected(buddy->account))
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
686 group->currentsize--;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
687 if (GAIM_BUDDY_IS_ONLINE(buddy))
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
688 group->online--;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
689
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
690 hb.name = normalize(buddy->name);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
691 hb.account = buddy->account;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
692 hb.group = ((GaimBlistNode*)buddy)->parent;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
693 if (g_hash_table_lookup_extended(gaimbuddylist->buddies, &hb, (gpointer *)&key, (gpointer *)&val)) {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
694 g_hash_table_remove(gaimbuddylist->buddies, &hb);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
695 g_free(key->name);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
696 g_free(key);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
697 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
698
5292
0a61986ed08f [gaim-migrate @ 5664]
Nathan Walp <nwalp@pidgin.im>
parents: 5287
diff changeset
699 if(buddy->timer > 0)
0a61986ed08f [gaim-migrate @ 5664]
Nathan Walp <nwalp@pidgin.im>
parents: 5287
diff changeset
700 g_source_remove(buddy->timer);
0a61986ed08f [gaim-migrate @ 5664]
Nathan Walp <nwalp@pidgin.im>
parents: 5287
diff changeset
701
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
702 ops->remove(gaimbuddylist, node);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
703 g_hash_table_destroy(buddy->settings);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
704 g_free(buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
705 g_free(buddy->alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
706 g_free(buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
707 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
708
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
709 void gaim_blist_remove_chat (struct chat *chat)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
710 {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
711 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
712
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
713 GaimBlistNode *gnode, *node = (GaimBlistNode*)chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
714 struct group *group;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
715
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
716 gnode = node->parent;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
717 group = (struct group *)gnode;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
718
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
719 if(gnode->child == node)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
720 gnode->child = node->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
721 if (node->prev)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
722 node->prev->next = node->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
723 if (node->next)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
724 node->next->prev = node->prev;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
725 group->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
726 if (gaim_account_is_connected(chat->account)) {
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
727 group->currentsize--;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
728 group->online--;
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
729 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
730
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
731 ops->remove(gaimbuddylist, node);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
732 g_hash_table_destroy(chat->components);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
733 g_free(chat->alias);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
734 g_free(chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
735 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
736
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
737 void gaim_blist_remove_group (struct group *group)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
738 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
739 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
740 GaimBlistNode *node = (GaimBlistNode*)group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
741
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
742 if(node->child) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
743 char *buf;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
744 int count = 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
745 GaimBlistNode *child = node->child;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
746
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
747 while(child) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
748 count++;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
749 child = child->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
750 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
751
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
752 buf = g_strdup_printf(_("%d buddies from group %s were not "
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
753 "removed because their accounts were not logged in. These "
5541
d4840f195f45 [gaim-migrate @ 5941]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
754 "buddies and the group were not removed.\n"),
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
755 count, group->name);
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
756
5541
d4840f195f45 [gaim-migrate @ 5941]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
757 gaim_notify_error(NULL, NULL, _("Group not removed"), buf);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
758 g_free(buf);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
759 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
760 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
761
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
762 if(gaimbuddylist->root == node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
763 gaimbuddylist->root = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
764 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
765 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
766 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
767 node->next->prev = node->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
768
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
769 ops->remove(gaimbuddylist, node);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
770 g_free(group->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
771 g_free(group);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
772 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
773
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
774 char *gaim_get_buddy_alias_only(struct buddy *b) {
5545
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
775 if(!b)
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
776 return NULL;
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
777
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
778 if(b->alias && b->alias[0]) {
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
779 return b->alias;
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
780 }
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
781 else if (b->server_alias != NULL &&
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
782 gaim_prefs_get_bool("/core/buddies/use_server_alias")) {
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
783
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
784 return b->server_alias;
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
785 }
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
786
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
787 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
788 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
789
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
790 char * gaim_get_buddy_alias (struct buddy *buddy)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
791 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
792 char *ret = gaim_get_buddy_alias_only(buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
793
6036
285e48913c72 [gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents: 6034
diff changeset
794 if(!ret)
285e48913c72 [gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents: 6034
diff changeset
795 return buddy ? buddy->name : _("Unknown");
285e48913c72 [gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents: 6034
diff changeset
796
285e48913c72 [gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents: 6034
diff changeset
797 return ret;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
798 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
799
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
800 struct buddy *gaim_find_buddy(GaimAccount *account, const char *name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
801 {
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
802 static struct buddy *buddy = NULL;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
803 struct _gaim_hbuddy hb;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
804 GaimBlistNode *group;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
805 const char *n = NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
806
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
807 if (!gaimbuddylist)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
808 return NULL;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
809
5985
69ab892a8fab [gaim-migrate @ 6433]
Christian Hammond <chipx86@chipx86.com>
parents: 5947
diff changeset
810 if (!name && !buddy)
69ab892a8fab [gaim-migrate @ 6433]
Christian Hammond <chipx86@chipx86.com>
parents: 5947
diff changeset
811 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
812
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
813 if (name) {
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
814 group = gaimbuddylist->root;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
815 n = name;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
816 } else {
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
817 group = ((GaimBlistNode*)buddy)->parent->next;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
818 n = buddy->name;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
819 }
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
820
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
821 while (group) {
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
822 hb.name = normalize(n);
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
823 hb.account = account;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
824 hb.group = group;
5776
7a738fde3ab1 [gaim-migrate @ 6201]
Nathan Walp <nwalp@pidgin.im>
parents: 5758
diff changeset
825 if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb)) != NULL)
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
826 return buddy;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
827 group = ((GaimBlistNode*)group)->next;
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
828 }
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
829 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
830 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
831
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
832 struct group *gaim_find_group(const char *name)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
833 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
834 GaimBlistNode *node;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
835 if (!gaimbuddylist)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
836 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
837 node = gaimbuddylist->root;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
838 while(node) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
839 if (!strcmp(((struct group*)node)->name, name))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
840 return (struct group*)node;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
841 node = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
842 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
843 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
844 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
845 struct group *gaim_find_buddys_group(struct buddy *buddy)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
846 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
847 if (!buddy)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
848 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
849 return (struct group*)(((GaimBlistNode*)buddy)->parent);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
850 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
851
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
852 GSList *gaim_group_get_accounts(struct group *g)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
853 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
854 GSList *l = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
855 GaimBlistNode *child = ((GaimBlistNode *)g)->child;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
856
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
857 while (child) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
858 if (!g_slist_find(l, ((struct buddy*)child)->account))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
859 l = g_slist_append(l, ((struct buddy*)child)->account);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
860 child = child->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
861 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
862 return l;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
863 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
864
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
865 void gaim_blist_add_account(GaimAccount *account)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
866 {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
867 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
868 GaimBlistNode *group, *buddy;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
869
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
870 if(!gaimbuddylist)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
871 return;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
872
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
873 for(group = gaimbuddylist->root; group; group = group->next) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
874 if(!GAIM_BLIST_NODE_IS_GROUP(group))
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
875 continue;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
876 for(buddy = group->child; buddy; buddy = buddy->next) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
877 if(GAIM_BLIST_NODE_IS_BUDDY(buddy)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
878 if (account == ((struct buddy*)buddy)->account) {
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
879 ((struct group *)group)->currentsize++;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
880 if(ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
881 ops->update(gaimbuddylist, buddy);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
882 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
883 } else if(GAIM_BLIST_NODE_IS_CHAT(buddy)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
884 if (account == ((struct chat*)buddy)->account) {
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
885 ((struct group *)group)->online++;
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
886 ((struct group *)group)->currentsize++;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
887 if(ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
888 ops->update(gaimbuddylist, buddy);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
889 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
890 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
891 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
892 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
893 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
894
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
895 void gaim_blist_remove_account(GaimAccount *account)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
896 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
897 struct gaim_blist_ui_ops *ops = gaimbuddylist->ui_ops;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
898 GaimBlistNode *group, *buddy;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
899
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
900 if (!gaimbuddylist)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
901 return;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
902
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
903 for(group = gaimbuddylist->root; group; group = group->next) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
904 if(!GAIM_BLIST_NODE_IS_GROUP(group))
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
905 continue;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
906 for(buddy = group->child; buddy; buddy = buddy->next) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
907 if(GAIM_BLIST_NODE_IS_BUDDY(buddy)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
908 if (account == ((struct buddy*)buddy)->account) {
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
909 if (GAIM_BUDDY_IS_ONLINE((struct buddy*)buddy))
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
910 ((struct group *)group)->online--;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
911 ((struct buddy*)buddy)->present = GAIM_BUDDY_OFFLINE;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
912 ((struct group *)group)->currentsize--;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
913 if(ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
914 ops->remove(gaimbuddylist, buddy);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
915 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
916 } else if(GAIM_BLIST_NODE_IS_CHAT(buddy)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
917 if (account == ((struct chat*)buddy)->account) {
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
918 ((struct group *)group)->online--;
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
919 ((struct group *)group)->currentsize--;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
920 if(ops)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
921 ops->remove(gaimbuddylist, buddy);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
922 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
923 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
924 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
925 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
926 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
927
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
928 void parse_toc_buddy_list(GaimAccount *account, char *config)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
929 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
930 char *c;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
931 char current[256];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
932 GList *bud = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
933
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
934
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
935 if (config != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
936
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
937 /* skip "CONFIG:" (if it exists) */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
938 c = strncmp(config + 6 /* sizeof(struct sflap_hdr) */ , "CONFIG:", strlen("CONFIG:")) ?
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
939 strtok(config, "\n") :
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
940 strtok(config + 6 /* sizeof(struct sflap_hdr) */ + strlen("CONFIG:"), "\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
941 do {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
942 if (c == NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
943 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
944 if (*c == 'g') {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
945 char *utf8 = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
946 utf8 = gaim_try_conv_to_utf8(c + 2);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
947 if (utf8 == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
948 g_strlcpy(current, _("Invalid Groupname"), sizeof(current));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
949 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
950 g_strlcpy(current, utf8, sizeof(current));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
951 g_free(utf8);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
952 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
953 if (!gaim_find_group(current)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
954 struct group *g = gaim_group_new(current);
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
955 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
956 gaim_blist_get_last_sibling(gaimbuddylist->root));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
957 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
958 } else if (*c == 'b') { /*&& !gaim_find_buddy(user, c + 2)) {*/
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
959 char nm[80], sw[388], *a, *utf8 = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
960
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
961 if ((a = strchr(c + 2, ':')) != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
962 *a++ = '\0'; /* nul the : */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
963 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
964
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
965 g_strlcpy(nm, c + 2, sizeof(nm));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
966 if (a) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
967 utf8 = gaim_try_conv_to_utf8(a);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
968 if (utf8 == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
969 gaim_debug(GAIM_DEBUG_ERROR, "toc blist",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
970 "Failed to convert alias for "
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
971 "'%s' to UTF-8\n", nm);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
972 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
973 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
974 if (utf8 == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
975 sw[0] = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
976 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
977 /* This can leave a partial sequence at the end,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
978 * but who cares? */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
979 g_strlcpy(sw, utf8, sizeof(sw));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
980 g_free(utf8);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
981 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
982
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
983 if (!gaim_find_buddy(account, nm)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
984 struct buddy *b = gaim_buddy_new(account, nm, sw);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
985 struct group *g = gaim_find_group(current);
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
986 gaim_blist_add_buddy(b, g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
987 gaim_blist_get_last_child((GaimBlistNode*)g));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
988 bud = g_list_append(bud, g_strdup(nm));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
989 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
990 } else if (*c == 'p') {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
991 gaim_privacy_permit_add(account, c + 2);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
992 } else if (*c == 'd') {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
993 gaim_privacy_deny_add(account, c + 2);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
994 } else if (!strncmp("toc", c, 3)) {
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
995 sscanf(c + strlen(c) - 1, "%d", &account->perm_deny);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
996 gaim_debug(GAIM_DEBUG_MISC, "toc blist",
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
997 "permdeny: %d\n", account->perm_deny);
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
998 if (account->perm_deny == 0)
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
999 account->perm_deny = 1;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1000 } else if (*c == 'm') {
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1001 sscanf(c + 2, "%d", &account->perm_deny);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1002 gaim_debug(GAIM_DEBUG_MISC, "toc blist",
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1003 "permdeny: %d\n", account->perm_deny);
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1004 if (account->perm_deny == 0)
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1005 account->perm_deny = 1;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1006 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1007 } while ((c = strtok(NULL, "\n")));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1008
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1009 if(account->gc) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1010 if(bud) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1011 GList *node = bud;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1012 serv_add_buddies(account->gc, bud);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1013 while(node) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1014 g_free(node->data);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1015 node = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1016 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1017 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1018 serv_set_permit_deny(account->gc);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1019 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1020 g_list_free(bud);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1021 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1022 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1023
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1024 #if 0
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1025 /* translate an AIM 3 buddylist (*.lst) to a Gaim buddylist */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1026 static GString *translate_lst(FILE *src_fp)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1027 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1028 char line[BUF_LEN], *line2;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1029 char *name;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1030 int i;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1031
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1032 GString *dest = g_string_new("m 1\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1033
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1034 while (fgets(line, BUF_LEN, src_fp)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1035 line2 = g_strchug(line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1036 if (strstr(line2, "group") == line2) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1037 name = strpbrk(line2, " \t\n\r\f") + 1;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1038 dest = g_string_append(dest, "g ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1039 for (i = 0; i < strcspn(name, "\n\r"); i++)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1040 if (name[i] != '\"')
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1041 dest = g_string_append_c(dest, name[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1042 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1043 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1044 if (strstr(line2, "buddy") == line2) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1045 name = strpbrk(line2, " \t\n\r\f") + 1;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1046 dest = g_string_append(dest, "b ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1047 for (i = 0; i < strcspn(name, "\n\r"); i++)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1048 if (name[i] != '\"')
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1049 dest = g_string_append_c(dest, name[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1050 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1051 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1052 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1053
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1054 return dest;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1055 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1056
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1057
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1058 /* translate an AIM 4 buddylist (*.blt) to Gaim format */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1059 static GString *translate_blt(FILE *src_fp)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1060 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1061 int i;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1062 char line[BUF_LEN];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1063 char *buddy;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1064
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1065 GString *dest = g_string_new("m 1\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1066
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1067 while (strstr(fgets(line, BUF_LEN, src_fp), "Buddy") == NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1068 while (strstr(fgets(line, BUF_LEN, src_fp), "list") == NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1069
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1070 while (1) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1071 fgets(line, BUF_LEN, src_fp); g_strchomp(line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1072 if (strchr(line, '}') != NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1073 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1074
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1075 if (strchr(line, '{') != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1076 /* Syntax starting with "<group> {" */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1077
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1078 dest = g_string_append(dest, "g ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1079 buddy = g_strchug(strtok(line, "{"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1080 for (i = 0; i < strlen(buddy); i++)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1081 if (buddy[i] != '\"')
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1082 dest = g_string_append_c(dest, buddy[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1083 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1084 while (strchr(fgets(line, BUF_LEN, src_fp), '}') == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1085 gboolean pounce = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1086 char *e;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1087 g_strchomp(line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1088 buddy = g_strchug(line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1089 gaim_debug(GAIM_DEBUG_MISC, "AIM 4 blt import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1090 "buddy: \"%s\"\n", buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1091 dest = g_string_append(dest, "b ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1092 if (strchr(buddy, '{') != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1093 /* buddy pounce, etc */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1094 char *pos = strchr(buddy, '{') - 1;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1095 *pos = 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1096 pounce = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1097 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1098 if ((e = strchr(buddy, '\"')) != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1099 *e = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1100 buddy++;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1101 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1102 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1103 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1104 if (pounce)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1105 do
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1106 fgets(line, BUF_LEN, src_fp);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1107 while (!strchr(line, '}'));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1108 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1109 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1110
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1111 /* Syntax "group buddy buddy ..." */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1112 buddy = g_strchug(strtok(line, " \n"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1113 dest = g_string_append(dest, "g ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1114 if (strchr(buddy, '\"') != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1115 dest = g_string_append(dest, &buddy[1]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1116 dest = g_string_append_c(dest, ' ');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1117 buddy = g_strchug(strtok(NULL, " \n"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1118 while (strchr(buddy, '\"') == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1119 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1120 dest = g_string_append_c(dest, ' ');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1121 buddy = g_strchug(strtok(NULL, " \n"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1122 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1123 buddy[strlen(buddy) - 1] = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1124 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1125 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1126 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1127 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1128 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1129 while ((buddy = g_strchug(strtok(NULL, " \n"))) != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1130 dest = g_string_append(dest, "b ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1131 if (strchr(buddy, '\"') != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1132 dest = g_string_append(dest, &buddy[1]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1133 dest = g_string_append_c(dest, ' ');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1134 buddy = g_strchug(strtok(NULL, " \n"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1135 while (strchr(buddy, '\"') == NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1136 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1137 dest = g_string_append_c(dest, ' ');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1138 buddy = g_strchug(strtok(NULL, " \n"));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1139 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1140 buddy[strlen(buddy) - 1] = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1141 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1142 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1143 dest = g_string_append(dest, buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1144 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1145 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1146 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1147 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1148 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1149
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1150 return dest;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1151 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1152
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1153 static GString *translate_gnomeicu(FILE *src_fp)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1154 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1155 char line[BUF_LEN];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1156 GString *dest = g_string_new("m 1\ng Buddies\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1157
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1158 while (strstr(fgets(line, BUF_LEN, src_fp), "NewContacts") == NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1159
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1160 while (fgets(line, BUF_LEN, src_fp)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1161 char *eq;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1162 g_strchomp(line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1163 if (line[0] == '\n' || line[0] == '[')
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1164 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1165 eq = strchr(line, '=');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1166 if (!eq)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1167 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1168 *eq = ':';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1169 eq = strchr(eq, ',');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1170 if (eq)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1171 *eq = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1172 dest = g_string_append(dest, "b ");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1173 dest = g_string_append(dest, line);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1174 dest = g_string_append_c(dest, '\n');
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1175 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1176
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1177 return dest;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1178 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1179 #endif
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1180
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1181 static gchar *get_screenname_filename(const char *name)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1182 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1183 gchar **split;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1184 gchar *good;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1185 gchar *ret;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1186
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1187 split = g_strsplit(name, G_DIR_SEPARATOR_S, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1188 good = g_strjoinv(NULL, split);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1189 g_strfreev(split);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1190
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1191 ret = g_utf8_strup(good, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1192
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1193 g_free(good);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1194
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1195 return ret;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1196 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1197
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1198 static gboolean gaim_blist_read(const char *filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1199
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1200
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1201 static void do_import(GaimAccount *account, const char *filename)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1202 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1203 GString *buf = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1204 char first[64];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1205 char path[PATHSIZE];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1206 int len;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1207 FILE *f;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1208 struct stat st;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1209
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1210 if (filename) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1211 g_snprintf(path, sizeof(path), "%s", filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1212 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1213 char *g_screenname = get_screenname_filename(account->username);
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1214 const char *username;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1215 char *file = gaim_user_dir();
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1216 GaimProtocol prpl_num;
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1217 int protocol;
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1218
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1219 prpl_num = gaim_account_get_protocol(account);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1220
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1221 protocol = prpl_num;
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1222
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1223 if (prpl_num == GAIM_PROTO_OSCAR) {
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1224 if ((username = gaim_account_get_username(account)) != NULL) {
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1225 protocol = (isalpha(*username)
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1226 ? GAIM_PROTO_TOC : GAIM_PROTO_ICQ);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1227 }
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1228 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1229
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1230 if (file != (char *)NULL) {
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5394
diff changeset
1231 snprintf(path, PATHSIZE, "%s" G_DIR_SEPARATOR_S "%s.%d.blist", file, g_screenname, protocol);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1232 g_free(g_screenname);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1233 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1234 g_free(g_screenname);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1235 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1236 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1237 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1238
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1239 if (stat(path, &st)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1240 gaim_debug(GAIM_DEBUG_ERROR, "blist import", "Unable to stat %s.\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1241 path);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1242 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1243 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1244
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1245 if (!(f = fopen(path, "r"))) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1246 gaim_debug(GAIM_DEBUG_ERROR, "blist import", "Unable to open %s.\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1247 path);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1248 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1249 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1250
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1251 fgets(first, 64, f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1252
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1253 if ((first[0] == '\n') || (first[0] == '\r' && first[1] == '\n'))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1254 fgets(first, 64, f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1255
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1256 #if 0
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1257 if (!g_strncasecmp(first, "<xml", strlen("<xml"))) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1258 /* new gaim XML buddy list */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1259 gaim_blist_read(path);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1260
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1261 /* We really don't need to bother doing stuf like translating AIM 3 buddy lists anymore */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1262
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1263 } else if (!g_strncasecmp(first, "Config {", strlen("Config {"))) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1264 /* AIM 4 buddy list */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1265 gaim_debug(GAIM_DEBUG_MISC, "blist import", "aim 4\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1266 rewind(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1267 buf = translate_blt(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1268 } else if (strstr(first, "group") != NULL) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1269 /* AIM 3 buddy list */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1270 gaim_debug(GAIM_DEBUG_MISC, "blist import", "aim 3\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1271 rewind(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1272 buf = translate_lst(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1273 } else if (!g_strncasecmp(first, "[User]", strlen("[User]"))) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1274 /* GnomeICU (hopefully) */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1275 gaim_debug(GAIM_DEBUG_MISC, "blist import", "gnomeicu\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1276 rewind(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1277 buf = translate_gnomeicu(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1278
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1279 } else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1280 #endif
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1281 if (first[0] == 'm') {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1282 /* Gaim buddy list - no translation */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1283 char buf2[BUF_LONG * 2];
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1284 buf = g_string_new("");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1285 rewind(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1286 while (1) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1287 len = fread(buf2, 1, BUF_LONG * 2 - 1, f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1288 if (len <= 0)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1289 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1290 buf2[len] = '\0';
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1291 buf = g_string_append(buf, buf2);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1292 if (len != BUF_LONG * 2 - 1)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1293 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1294 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1295 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1296
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1297 fclose(f);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1298
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1299 if (buf) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1300 buf = g_string_prepend(buf, "toc_set_config {");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1301 buf = g_string_append(buf, "}\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1302 parse_toc_buddy_list(account, buf->str);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1303 g_string_free(buf, TRUE);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1304 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1305 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1306
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1307 gboolean gaim_group_on_account(struct group *g, GaimAccount *account) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1308 GaimBlistNode *bnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1309 for(bnode = g->node.child; bnode; bnode = bnode->next) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1310 struct buddy *b = (struct buddy *)bnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1311 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1312 continue;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1313 if((!account && gaim_account_is_connected(b->account))
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1314 || b->account == account)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1315 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1316 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1317 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1318 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1319
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1320 static gboolean blist_safe_to_write = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1321
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1322 static char *blist_parser_group_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1323 static char *blist_parser_person_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1324 static char *blist_parser_account_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1325 static int blist_parser_account_protocol = 0;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1326 static char *blist_parser_chat_alias = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1327 static char *blist_parser_component_name = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1328 static char *blist_parser_component_value = NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1329 static char *blist_parser_buddy_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1330 static char *blist_parser_buddy_alias = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1331 static char *blist_parser_setting_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1332 static char *blist_parser_setting_value = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1333 static GHashTable *blist_parser_buddy_settings = NULL;
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1334 static GHashTable *blist_parser_chat_settings = NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1335 static GHashTable *blist_parser_group_settings = NULL;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1336 static GHashTable *blist_parser_chat_components = NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1337 static int blist_parser_privacy_mode = 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1338 static GList *tag_stack = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1339 enum {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1340 BLIST_TAG_GAIM,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1341 BLIST_TAG_BLIST,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1342 BLIST_TAG_GROUP,
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1343 BLIST_TAG_CHAT,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1344 BLIST_TAG_COMPONENT,
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1345 BLIST_TAG_PERSON,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1346 BLIST_TAG_BUDDY,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1347 BLIST_TAG_NAME,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1348 BLIST_TAG_ALIAS,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1349 BLIST_TAG_SETTING,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1350 BLIST_TAG_PRIVACY,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1351 BLIST_TAG_ACCOUNT,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1352 BLIST_TAG_PERMIT,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1353 BLIST_TAG_BLOCK,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1354 BLIST_TAG_IGNORE
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1355 };
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1356 static gboolean blist_parser_error_occurred = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1357
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1358 static void blist_start_element_handler (GMarkupParseContext *context,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1359 const gchar *element_name,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1360 const gchar **attribute_names,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1361 const gchar **attribute_values,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1362 gpointer user_data,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1363 GError **error) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1364 int i;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1365
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1366 if(!strcmp(element_name, "gaim")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1367 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_GAIM));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1368 } else if(!strcmp(element_name, "blist")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1369 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_BLIST));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1370 } else if(!strcmp(element_name, "group")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1371 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_GROUP));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1372 for(i=0; attribute_names[i]; i++) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1373 if(!strcmp(attribute_names[i], "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1374 g_free(blist_parser_group_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1375 blist_parser_group_name = g_strdup(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1376 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1377 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1378 if(blist_parser_group_name) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1379 struct group *g = gaim_group_new(blist_parser_group_name);
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1380 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1381 gaim_blist_get_last_sibling(gaimbuddylist->root));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1382 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1383 } else if(!strcmp(element_name, "chat")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1384 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_CHAT));
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1385 for(i=0; attribute_names[i]; i++) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1386 if(!strcmp(attribute_names[i], "account")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1387 g_free(blist_parser_account_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1388 blist_parser_account_name = g_strdup(attribute_values[i]);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1389 } else if(!strcmp(attribute_names[i], "protocol")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1390 blist_parser_account_protocol = atoi(attribute_values[i]);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1391 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1392 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1393 } else if(!strcmp(element_name, "person")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1394 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_PERSON));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1395 for(i=0; attribute_names[i]; i++) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1396 if(!strcmp(attribute_names[i], "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1397 g_free(blist_parser_person_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1398 blist_parser_person_name = g_strdup(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1399 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1400 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1401 } else if(!strcmp(element_name, "buddy")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1402 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_BUDDY));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1403 for(i=0; attribute_names[i]; i++) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1404 if(!strcmp(attribute_names[i], "account")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1405 g_free(blist_parser_account_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1406 blist_parser_account_name = g_strdup(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1407 } else if(!strcmp(attribute_names[i], "protocol")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1408 blist_parser_account_protocol = atoi(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1409 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1410 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1411 } else if(!strcmp(element_name, "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1412 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_NAME));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1413 } else if(!strcmp(element_name, "alias")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1414 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_ALIAS));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1415 } else if(!strcmp(element_name, "setting")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1416 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_SETTING));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1417 for(i=0; attribute_names[i]; i++) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1418 if(!strcmp(attribute_names[i], "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1419 g_free(blist_parser_setting_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1420 blist_parser_setting_name = g_strdup(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1421 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1422 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1423 } else if(!strcmp(element_name, "component")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1424 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_COMPONENT));
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1425 for(i=0; attribute_names[i]; i++) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1426 if(!strcmp(attribute_names[i], "name")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1427 g_free(blist_parser_component_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1428 blist_parser_component_name = g_strdup(attribute_values[i]);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1429 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1430 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1431
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1432 } else if(!strcmp(element_name, "privacy")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1433 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_PRIVACY));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1434 } else if(!strcmp(element_name, "account")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1435 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_ACCOUNT));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1436 for(i=0; attribute_names[i]; i++) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1437 if(!strcmp(attribute_names[i], "protocol"))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1438 blist_parser_account_protocol = atoi(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1439 else if(!strcmp(attribute_names[i], "mode"))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1440 blist_parser_privacy_mode = atoi(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1441 else if(!strcmp(attribute_names[i], "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1442 g_free(blist_parser_account_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1443 blist_parser_account_name = g_strdup(attribute_values[i]);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1444 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1445 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1446 } else if(!strcmp(element_name, "permit")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1447 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_PERMIT));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1448 } else if(!strcmp(element_name, "block")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1449 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_BLOCK));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1450 } else if(!strcmp(element_name, "ignore")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1451 tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_IGNORE));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1452 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1453 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1454
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1455 static void blist_end_element_handler(GMarkupParseContext *context,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1456 const gchar *element_name, gpointer user_data, GError **error) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1457 if(!strcmp(element_name, "gaim")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1458 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1459 } else if(!strcmp(element_name, "blist")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1460 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1461 } else if(!strcmp(element_name, "group")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1462 if(blist_parser_group_settings) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1463 struct group *g = gaim_find_group(blist_parser_group_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1464 g_hash_table_destroy(g->settings);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1465 g->settings = blist_parser_group_settings;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1466 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1467 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1468 blist_parser_group_settings = NULL;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1469 } else if(!strcmp(element_name, "chat")) {
5874
5e19273d3c6f [gaim-migrate @ 6306]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
1470 GaimAccount *account = gaim_accounts_find(blist_parser_account_name,
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1471 blist_parser_account_protocol);
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1472 if(account) {
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1473 struct chat *chat = gaim_chat_new(account, blist_parser_chat_alias, blist_parser_chat_components);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1474 struct group *g = gaim_find_group(blist_parser_group_name);
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1475 gaim_blist_add_chat(chat,g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1476 gaim_blist_get_last_child((GaimBlistNode*)g));
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1477 if(blist_parser_chat_settings) {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1478 g_hash_table_destroy(chat->settings);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1479 chat->settings = blist_parser_chat_settings;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1480 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1481 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1482 g_free(blist_parser_chat_alias);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1483 blist_parser_chat_alias = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1484 g_free(blist_parser_account_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1485 blist_parser_account_name = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1486 blist_parser_chat_components = NULL;
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1487 blist_parser_chat_settings = NULL;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1488 tag_stack = g_list_delete_link(tag_stack, tag_stack);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1489 } else if(!strcmp(element_name, "person")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1490 g_free(blist_parser_person_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1491 blist_parser_person_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1492 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1493 } else if(!strcmp(element_name, "buddy")) {
5874
5e19273d3c6f [gaim-migrate @ 6306]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
1494 GaimAccount *account = gaim_accounts_find(blist_parser_account_name,
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1495 blist_parser_account_protocol);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1496 if(account) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1497 struct buddy *b = gaim_buddy_new(account, blist_parser_buddy_name, blist_parser_buddy_alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1498 struct group *g = gaim_find_group(blist_parser_group_name);
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1499 gaim_blist_add_buddy(b,g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1500 gaim_blist_get_last_child((GaimBlistNode*)g));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1501 if(blist_parser_buddy_settings) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1502 g_hash_table_destroy(b->settings);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1503 b->settings = blist_parser_buddy_settings;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1504 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1505 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1506 g_free(blist_parser_buddy_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1507 blist_parser_buddy_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1508 g_free(blist_parser_buddy_alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1509 blist_parser_buddy_alias = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1510 g_free(blist_parser_account_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1511 blist_parser_account_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1512 blist_parser_buddy_settings = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1513 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1514 } else if(!strcmp(element_name, "name")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1515 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1516 } else if(!strcmp(element_name, "alias")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1517 tag_stack = g_list_delete_link(tag_stack, tag_stack);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1518 } else if(!strcmp(element_name, "component")) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1519 if(!blist_parser_chat_components)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1520 blist_parser_chat_components = g_hash_table_new_full(g_str_hash,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1521 g_str_equal, g_free, g_free);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1522 if(blist_parser_component_name && blist_parser_component_value) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1523 g_hash_table_replace(blist_parser_chat_components,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1524 g_strdup(blist_parser_component_name),
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1525 g_strdup(blist_parser_component_value));
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1526 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1527 g_free(blist_parser_component_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1528 g_free(blist_parser_component_value);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1529 blist_parser_component_name = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1530 blist_parser_component_value = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1531 tag_stack = g_list_delete_link(tag_stack, tag_stack);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1532 } else if(!strcmp(element_name, "setting")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1533 if(GPOINTER_TO_INT(tag_stack->next->data) == BLIST_TAG_BUDDY) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1534 if(!blist_parser_buddy_settings)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1535 blist_parser_buddy_settings = g_hash_table_new_full(g_str_hash,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1536 g_str_equal, g_free, g_free);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1537 if(blist_parser_setting_name && blist_parser_setting_value) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1538 g_hash_table_replace(blist_parser_buddy_settings,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1539 g_strdup(blist_parser_setting_name),
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1540 g_strdup(blist_parser_setting_value));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1541 }
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1542 } else if(GPOINTER_TO_INT(tag_stack->next->data) == BLIST_TAG_CHAT) {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1543 if(!blist_parser_chat_settings)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1544 blist_parser_chat_settings = g_hash_table_new_full(g_str_hash,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1545 g_str_equal, g_free, g_free);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1546 if(blist_parser_setting_name && blist_parser_setting_value) {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1547 g_hash_table_replace(blist_parser_buddy_settings,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1548 g_strdup(blist_parser_setting_name),
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1549 g_strdup(blist_parser_setting_value));
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1550 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1551 } else if(GPOINTER_TO_INT(tag_stack->next->data) == BLIST_TAG_GROUP) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1552 if(!blist_parser_group_settings)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1553 blist_parser_group_settings = g_hash_table_new_full(g_str_hash,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1554 g_str_equal, g_free, g_free);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1555 if(blist_parser_setting_name && blist_parser_setting_value) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1556 g_hash_table_replace(blist_parser_group_settings,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1557 g_strdup(blist_parser_setting_name),
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1558 g_strdup(blist_parser_setting_value));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1559 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1560 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1561 g_free(blist_parser_setting_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1562 g_free(blist_parser_setting_value);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1563 blist_parser_setting_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1564 blist_parser_setting_value = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1565 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1566 } else if(!strcmp(element_name, "privacy")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1567 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1568 } else if(!strcmp(element_name, "account")) {
5874
5e19273d3c6f [gaim-migrate @ 6306]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
1569 GaimAccount *account = gaim_accounts_find(blist_parser_account_name,
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1570 blist_parser_account_protocol);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1571 if(account) {
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1572 account->perm_deny = blist_parser_privacy_mode;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1573 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1574 g_free(blist_parser_account_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1575 blist_parser_account_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1576 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1577 } else if(!strcmp(element_name, "permit")) {
5874
5e19273d3c6f [gaim-migrate @ 6306]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
1578 GaimAccount *account = gaim_accounts_find(blist_parser_account_name,
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1579 blist_parser_account_protocol);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1580 if(account) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1581 gaim_privacy_permit_add(account, blist_parser_buddy_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1582 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1583 g_free(blist_parser_buddy_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1584 blist_parser_buddy_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1585 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1586 } else if(!strcmp(element_name, "block")) {
5874
5e19273d3c6f [gaim-migrate @ 6306]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
1587 GaimAccount *account = gaim_accounts_find(blist_parser_account_name,
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1588 blist_parser_account_protocol);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1589 if(account) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1590 gaim_privacy_deny_add(account, blist_parser_buddy_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1591 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1592 g_free(blist_parser_buddy_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1593 blist_parser_buddy_name = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1594 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1595 } else if(!strcmp(element_name, "ignore")) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1596 /* we'll apparently do something with this later */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1597 tag_stack = g_list_delete_link(tag_stack, tag_stack);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1598 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1599 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1600
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1601 static void blist_text_handler(GMarkupParseContext *context, const gchar *text,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1602 gsize text_len, gpointer user_data, GError **error) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1603 switch(GPOINTER_TO_INT(tag_stack->data)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1604 case BLIST_TAG_NAME:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1605 blist_parser_buddy_name = g_strndup(text, text_len);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1606 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1607 case BLIST_TAG_ALIAS:
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1608 if(tag_stack->next &&
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1609 GPOINTER_TO_INT(tag_stack->next->data) == BLIST_TAG_BUDDY)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1610 blist_parser_buddy_alias = g_strndup(text, text_len);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1611 else if(tag_stack->next &&
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1612 GPOINTER_TO_INT(tag_stack->next->data) == BLIST_TAG_CHAT)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1613 blist_parser_chat_alias = g_strndup(text, text_len);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1614 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1615 case BLIST_TAG_PERMIT:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1616 case BLIST_TAG_BLOCK:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1617 case BLIST_TAG_IGNORE:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1618 blist_parser_buddy_name = g_strndup(text, text_len);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1619 break;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1620 case BLIST_TAG_COMPONENT:
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1621 blist_parser_component_value = g_strndup(text, text_len);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1622 break;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1623 case BLIST_TAG_SETTING:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1624 blist_parser_setting_value = g_strndup(text, text_len);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1625 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1626 default:
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1627 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1628 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1629 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1630
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1631 static void blist_error_handler(GMarkupParseContext *context, GError *error,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1632 gpointer user_data) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1633 blist_parser_error_occurred = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1634 gaim_debug(GAIM_DEBUG_ERROR, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1635 "Error parsing blist.xml: %s\n", error->message);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1636 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1637
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1638 static GMarkupParser blist_parser = {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1639 blist_start_element_handler,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1640 blist_end_element_handler,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1641 blist_text_handler,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1642 NULL,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1643 blist_error_handler
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1644 };
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1645
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1646 static gboolean gaim_blist_read(const char *filename) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1647 gchar *contents = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1648 gsize length;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1649 GMarkupParseContext *context;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1650 GError *error = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1651
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1652 gaim_debug(GAIM_DEBUG_INFO, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1653 "Reading %s\n", filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1654 if(!g_file_get_contents(filename, &contents, &length, &error)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1655 gaim_debug(GAIM_DEBUG_ERROR, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1656 "Error reading blist: %s\n", error->message);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1657 g_error_free(error);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1658 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1659 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1660
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1661 context = g_markup_parse_context_new(&blist_parser, 0, NULL, NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1662
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1663 if(!g_markup_parse_context_parse(context, contents, length, NULL)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1664 g_markup_parse_context_free(context);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1665 g_free(contents);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1666 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1667 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1668
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1669 if(!g_markup_parse_context_end_parse(context, NULL)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1670 gaim_debug(GAIM_DEBUG_ERROR, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1671 "Error parsing %s\n", filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1672 g_markup_parse_context_free(context);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1673 g_free(contents);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1674 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1675 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1676
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1677 g_markup_parse_context_free(context);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1678 g_free(contents);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1679
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1680 if(blist_parser_error_occurred)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1681 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1682
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1683 gaim_debug(GAIM_DEBUG_INFO, "blist import", "Finished reading %s\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1684 filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1685
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1686 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1687 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1688
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1689 void gaim_blist_load() {
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1690 GList *accts;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1691 char *user_dir = gaim_user_dir();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1692 char *filename;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1693 char *msg;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1694
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1695 blist_safe_to_write = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1696
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1697 if(!user_dir)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1698 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1699
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1700 filename = g_build_filename(user_dir, "blist.xml", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1701
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1702 if(g_file_test(filename, G_FILE_TEST_EXISTS)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1703 if(!gaim_blist_read(filename)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1704 msg = g_strdup_printf(_("An error was encountered parsing your "
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1705 "buddy list. It has not been loaded."));
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1706 gaim_notify_error(NULL, NULL, _("Buddy List Error"), msg);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1707 g_free(msg);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1708 }
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1709 } else if(g_list_length(gaim_accounts_get_all())) {
5947
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1710 GMainContext *ctx;
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1711
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1712 /* rob wants to inform the user that their buddy lists are
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1713 * being converted */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1714 msg = g_strdup_printf(_("Gaim is converting your old buddy lists "
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1715 "to a new format, which will now be located at %s"),
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1716 filename);
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1717 gaim_notify_info(NULL, NULL, _("Converting Buddy List"), msg);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1718 g_free(msg);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1719
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1720 /* now, let gtk actually display the dialog before we start anything */
5947
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1721 ctx = g_main_context_default();
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1722
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1723 while(g_main_context_pending(ctx))
2f57285b03f3 [gaim-migrate @ 6388]
Christian Hammond <chipx86@chipx86.com>
parents: 5943
diff changeset
1724 g_main_context_iteration(ctx, FALSE);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1725
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1726 /* read in the old lists, then save to the new format */
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1727 for(accts = gaim_accounts_get_all(); accts; accts = accts->next) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1728 do_import(accts->data, NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1729 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1730 gaim_blist_save();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1731 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1732
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1733 g_free(filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1734 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1735
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1736 static void blist_print_group_settings(gpointer key, gpointer data,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1737 gpointer user_data) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1738 char *key_val;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1739 char *data_val;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1740 FILE *file = user_data;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1741
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1742 if(!key || !data)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1743 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1744
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1745 key_val = g_markup_escape_text(key, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1746 data_val = g_markup_escape_text(data, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1747
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1748 fprintf(file, "\t\t\t<setting name=\"%s\">%s</setting>\n", key_val,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1749 data_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1750 g_free(key_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1751 g_free(data_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1752 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1753
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1754 static void blist_print_buddy_settings(gpointer key, gpointer data,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1755 gpointer user_data) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1756 char *key_val;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1757 char *data_val;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1758 FILE *file = user_data;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1759
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1760 if(!key || !data)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1761 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1762
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1763 key_val = g_markup_escape_text(key, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1764 data_val = g_markup_escape_text(data, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1765
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1766 fprintf(file, "\t\t\t\t\t<setting name=\"%s\">%s</setting>\n", key_val,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1767 data_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1768 g_free(key_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1769 g_free(data_val);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1770 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1771
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1772 static void blist_print_chat_components(gpointer key, gpointer data,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1773 gpointer user_data) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1774 char *key_val;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1775 char *data_val;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1776 FILE *file = user_data;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1777
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1778 if(!key || !data)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1779 return;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1780
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1781 key_val = g_markup_escape_text(key, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1782 data_val = g_markup_escape_text(data, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1783
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1784 fprintf(file, "\t\t\t\t<component name=\"%s\">%s</component>\n", key_val,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1785 data_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1786 g_free(key_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1787 g_free(data_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1788 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1789
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1790 static void gaim_blist_write(FILE *file, GaimAccount *exp_acct) {
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1791 GList *accounts;
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1792 GSList *buds;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1793 GaimBlistNode *gnode,*bnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1794 struct group *group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1795 struct buddy *bud;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1796 fprintf(file, "<?xml version='1.0' encoding='UTF-8' ?>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1797 fprintf(file, "<gaim version=\"1\">\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1798 fprintf(file, "\t<blist>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1799
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1800 for(gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1801 if(!GAIM_BLIST_NODE_IS_GROUP(gnode))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1802 continue;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1803 group = (struct group *)gnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1804 if(!exp_acct || gaim_group_on_account(group, exp_acct)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1805 char *group_name = g_markup_escape_text(group->name, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1806 fprintf(file, "\t\t<group name=\"%s\">\n", group_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1807 g_hash_table_foreach(group->settings, blist_print_group_settings, file);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1808 for(bnode = gnode->child; bnode; bnode = bnode->next) {
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1809 if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1810 bud = (struct buddy *)bnode;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1811 if(!exp_acct || bud->account == exp_acct) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1812 char *bud_name = g_markup_escape_text(bud->name, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1813 char *bud_alias = NULL;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1814 char *acct_name = g_markup_escape_text(bud->account->username, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1815 if(bud->alias)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1816 bud_alias= g_markup_escape_text(bud->alias, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1817 fprintf(file, "\t\t\t<person name=\"%s\">\n",
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1818 bud_alias ? bud_alias : bud_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1819 fprintf(file, "\t\t\t\t<buddy protocol=\"%d\" "
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1820 "account=\"%s\">\n",
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1821 gaim_account_get_protocol(bud->account),
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1822 acct_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1823 fprintf(file, "\t\t\t\t\t<name>%s</name>\n", bud_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1824 if(bud_alias) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1825 fprintf(file, "\t\t\t\t\t<alias>%s</alias>\n",
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1826 bud_alias);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1827 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1828 g_hash_table_foreach(bud->settings,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1829 blist_print_buddy_settings, file);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1830 fprintf(file, "\t\t\t\t</buddy>\n");
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1831 fprintf(file, "\t\t\t</person>\n");
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1832 g_free(bud_name);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1833 g_free(bud_alias);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1834 g_free(acct_name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1835 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1836 } else if(GAIM_BLIST_NODE_IS_CHAT(bnode)) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1837 struct chat *chat = (struct chat *)bnode;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1838 if(!exp_acct || chat->account == exp_acct) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1839 char *acct_name = g_markup_escape_text(chat->account->username, -1);
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1840 fprintf(file, "\t\t\t<chat protocol=\"%d\" account=\"%s\">\n",
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1841 gaim_account_get_protocol(chat->account),
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1842 acct_name);
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1843 if(chat->alias) {
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1844 char *chat_alias = g_markup_escape_text(chat->alias, -1);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1845 fprintf(file, "\t\t\t\t<alias>%s</alias>\n", chat_alias);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1846 g_free(chat_alias);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1847 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1848 g_hash_table_foreach(chat->components,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1849 blist_print_chat_components, file);
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1850 /* works for chats too, I don't feel like renaming */
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1851 g_hash_table_foreach(chat->settings,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
1852 blist_print_buddy_settings, file);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1853 fprintf(file, "\t\t\t</chat>\n");
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1854 g_free(acct_name);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1855 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1856 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1857 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1858 fprintf(file, "\t\t</group>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1859 g_free(group_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1860 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1861 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1862
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1863 fprintf(file, "\t</blist>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1864 fprintf(file, "\t<privacy>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1865
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1866 for(accounts = gaim_accounts_get_all();
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1867 accounts != NULL;
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1868 accounts = accounts->next) {
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
1869
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1870 GaimAccount *account = accounts->data;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1871 char *acct_name = g_markup_escape_text(account->username, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1872 if(!exp_acct || account == exp_acct) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1873 fprintf(file, "\t\t<account protocol=\"%d\" name=\"%s\" "
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1874 "mode=\"%d\">\n", gaim_account_get_protocol(account),
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
1875 acct_name, account->perm_deny);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1876 for(buds = account->permit; buds; buds = buds->next) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1877 char *bud_name = g_markup_escape_text(buds->data, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1878 fprintf(file, "\t\t\t<permit>%s</permit>\n", bud_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1879 g_free(bud_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1880 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1881 for(buds = account->deny; buds; buds = buds->next) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1882 char *bud_name = g_markup_escape_text(buds->data, -1);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1883 fprintf(file, "\t\t\t<block>%s</block>\n", bud_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1884 g_free(bud_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1885 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1886 fprintf(file, "\t\t</account>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1887 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1888 g_free(acct_name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1889 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1890
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1891 fprintf(file, "\t</privacy>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1892 fprintf(file, "</gaim>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1893 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1894
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1895 void gaim_blist_save() {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1896 FILE *file;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1897 char *user_dir = gaim_user_dir();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1898 char *filename;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1899 char *filename_real;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1900
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1901 if(!user_dir)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1902 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1903 if(!blist_safe_to_write) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1904 gaim_debug(GAIM_DEBUG_WARNING, "blist save",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1905 "AHH!! Tried to write the blist before we read it!\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1906 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1907 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1908
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1909 file = fopen(user_dir, "r");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1910 if(!file)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1911 mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1912 else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1913 fclose(file);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1914
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1915 filename = g_build_filename(user_dir, "blist.xml.save", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1916
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1917 if((file = fopen(filename, "w"))) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1918 gaim_blist_write(file, NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1919 fclose(file);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1920 chmod(filename, S_IRUSR | S_IWUSR);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1921 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1922 gaim_debug(GAIM_DEBUG_ERROR, "blist save", "Unable to write %s\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1923 filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1924 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1925
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1926 filename_real = g_build_filename(user_dir, "blist.xml", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1927
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1928 if(rename(filename, filename_real) < 0)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1929 gaim_debug(GAIM_DEBUG_ERROR, "blist save",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1930 "Error renaming %s to %s\n", filename, filename_real);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1931
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1932
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1933 g_free(filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1934 g_free(filename_real);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1935 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1936
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1937 gboolean gaim_privacy_permit_add(GaimAccount *account, const char *who) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1938 GSList *d = account->permit;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1939 char *n = g_strdup(normalize(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1940 while(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1941 if(!gaim_utf8_strcasecmp(n, normalize(d->data)))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1942 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1943 d = d->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1944 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1945 g_free(n);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1946 if(!d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1947 account->permit = g_slist_append(account->permit, g_strdup(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1948 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1949 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1950
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1951 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1952 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1953
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1954 gboolean gaim_privacy_permit_remove(GaimAccount *account, const char *who) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1955 GSList *d = account->permit;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1956 char *n = g_strdup(normalize(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1957 while(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1958 if(!gaim_utf8_strcasecmp(n, normalize(d->data)))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1959 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1960 d = d->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1961 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1962 g_free(n);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1963 if(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1964 account->permit = g_slist_remove(account->permit, d->data);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1965 g_free(d->data);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1966 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1967 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1968 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1969 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1970
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1971 gboolean gaim_privacy_deny_add(GaimAccount *account, const char *who) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1972 GSList *d = account->deny;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1973 char *n = g_strdup(normalize(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1974 while(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1975 if(!gaim_utf8_strcasecmp(n, normalize(d->data)))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1976 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1977 d = d->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1978 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1979 g_free(n);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1980 if(!d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1981 account->deny = g_slist_append(account->deny, g_strdup(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1982 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1983 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1984
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1985 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1986 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1987
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1988 gboolean gaim_privacy_deny_remove(GaimAccount *account, const char *who) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1989 GSList *d = account->deny;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1990 char *n = g_strdup(normalize(who));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1991 while(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1992 if(!gaim_utf8_strcasecmp(n, normalize(d->data)))
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1993 break;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1994 d = d->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1995 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1996 g_free(n);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1997 if(d) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1998 account->deny = g_slist_remove(account->deny, d->data);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1999 g_free(d->data);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2000 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2001 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2002 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2003 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2004
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2005 void gaim_group_set_setting(struct group *g, const char *key,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2006 const char *value) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2007 if(!g)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2008 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2009 g_hash_table_replace(g->settings, g_strdup(key), g_strdup(value));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2010 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2011
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2012 char *gaim_group_get_setting(struct group *g, const char *key) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2013 if(!g)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2014 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2015 return g_strdup(g_hash_table_lookup(g->settings, key));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2016 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2017
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2018 void gaim_chat_set_setting(struct chat *c, const char *key,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2019 const char *value)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2020 {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2021 if(!c)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2022 return;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2023 g_hash_table_replace(c->settings, g_strdup(key), g_strdup(value));
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2024 }
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2025
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2026 char *gaim_chat_get_setting(struct chat *c, const char *key)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2027 {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2028 if(!c)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2029 return NULL;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2030 return g_strdup(g_hash_table_lookup(c->settings, key));
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2031 }
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2032
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2033 void gaim_buddy_set_setting(struct buddy *b, const char *key,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2034 const char *value) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2035 if(!b)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2036 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2037 g_hash_table_replace(b->settings, g_strdup(key), g_strdup(value));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2038 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2039
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2040 char *gaim_buddy_get_setting(struct buddy *b, const char *key) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2041 if(!b)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2042 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2043 return g_strdup(g_hash_table_lookup(b->settings, key));
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2044 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2045
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2046 void gaim_set_blist_ui_ops(struct gaim_blist_ui_ops *ops)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2047 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2048 blist_ui_ops = ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2049 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2050
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2051 struct gaim_blist_ui_ops *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2052 gaim_get_blist_ui_ops(void)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2053 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2054 return blist_ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2055 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2056
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2057 int gaim_blist_get_group_size(struct group *group, gboolean offline) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2058 if(!group)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2059 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2060
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2061 return offline ? group->totalsize : group->currentsize;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2062 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2063
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2064 int gaim_blist_get_group_online_count(struct group *group) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2065 if(!group)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2066 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2067
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2068 return group->online;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2069 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2070
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2071

mercurial