src/blist.c

Sat, 18 Sep 2004 23:17:38 +0000

author
Dave West <kat@users.sourceforge.net>
date
Sat, 18 Sep 2004 23:17:38 +0000
changeset 10040
b74aeb350fc5
parent 10037
5f5b72040fa2
child 10052
329dad7e2da3
permissions
-rw-r--r--

[gaim-migrate @ 10999]
" Post all three of these to the sf patch tracker as
three separate patches and assign the buddy list
changes and oscar changes to me, and the
gaim_status_is_online() changes to Luke. And in the
one assigned to Luke, ask him if he could pretty please
with sugar on top check through it quickly and
commit it if it looks sensible?

--KingAnt

This adds gaim_status_is_online so that we can check
statuses as well as presences for online status. It
also changes gaim_presence_is_online to use the new
function." --Dave West

committer: Luke Schierer <lschiere@pidgin.im>

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 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8020
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8020
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 8020
diff changeset
6 * source distribution.
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * 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
10 * the Free Software Foundation; either version 2 of the License, or
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 */
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
23 #include "internal.h"
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 #include "blist.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
25 #include "conversation.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
26 #include "debug.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"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
32 #include "signals.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5855
diff changeset
33 #include "util.h"
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
34 #include "xmlnode.h"
5228
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 #define PATHSIZE 1024
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
38 GaimBuddyList *gaimbuddylist = NULL;
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
39 static GaimBlistUiOps *blist_ui_ops = NULL;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
40 static guint blist_save_timer = 0;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
42 struct gaim_blist_node_setting {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
43 enum {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
44 GAIM_BLIST_NODE_SETTING_BOOL,
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
45 GAIM_BLIST_NODE_SETTING_INT,
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
46 GAIM_BLIST_NODE_SETTING_STRING
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
47 } type;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
48 union {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
49 gboolean boolean;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
50 int integer;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
51 char *string;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
52 } value;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
53 };
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
54
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
55
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
56
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 /*****************************************************************************
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58 * Private Utility functions *
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 *****************************************************************************/
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 static GaimBlistNode *gaim_blist_get_last_sibling(GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 GaimBlistNode *n = node;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63 if (!n)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 while (n->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 n = n->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 return n;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
69
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 static GaimBlistNode *gaim_blist_get_last_child(GaimBlistNode *node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 if (!node)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 return gaim_blist_get_last_sibling(node->child);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
77 struct _gaim_hbuddy {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
78 char *name;
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
79 GaimAccount *account;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
80 GaimBlistNode *group;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
81 };
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
82
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
83 static guint _gaim_blist_hbuddy_hash(struct _gaim_hbuddy *hb)
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
84 {
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
85 return g_str_hash(hb->name);
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
86 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
87
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
88 static guint _gaim_blist_hbuddy_equal(struct _gaim_hbuddy *hb1, struct _gaim_hbuddy *hb2)
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
89 {
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
90 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
91 }
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
92
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
93 static void _gaim_blist_hbuddy_free_key(struct _gaim_hbuddy *hb)
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
94 {
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
95 g_free(hb->name);
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
96 g_free(hb);
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
97 }
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
98
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
99 static void blist_pref_cb(const char *name, GaimPrefType type, gpointer value, gpointer data)
6006
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
100 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
101 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
102 GaimBlistNode *gnode, *cnode, *bnode;
6012
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
103
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
104 if (!ops || !ops->update)
6012
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
105 return;
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
106
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
107 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
108 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
6012
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
109 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
110 for (cnode = gnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
111 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
112 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
113 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
114 continue;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
115 ops->update(gaimbuddylist, bnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
116 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
117 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
118 ops->update(gaimbuddylist, cnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
119 }
6012
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
120 }
0c839ae0bdc9 [gaim-migrate @ 6460]
Nathan Walp <nwalp@pidgin.im>
parents: 6006
diff changeset
121 }
6006
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
122 }
d862aa2f47ca [gaim-migrate @ 6454]
Mark Doliner <markdoliner@pidgin.im>
parents: 5985
diff changeset
123
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
124 void gaim_contact_compute_priority_buddy(GaimContact *contact)
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
125 {
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
126 GaimBlistNode *bnode;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
127 GaimBuddy *new_priority = NULL;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
128
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
129 g_return_if_fail(contact != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
130
6870
ea91208bfe3c [gaim-migrate @ 7416]
Nathan Walp <nwalp@pidgin.im>
parents: 6860
diff changeset
131 contact->priority = NULL;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
132 for (bnode = ((GaimBlistNode*)contact)->child;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
133 bnode != NULL;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
134 bnode = bnode->next)
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
135 {
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
136 GaimBuddy *buddy;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
137 GaimPresence *presence;
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7312
diff changeset
138
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
139 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
140 continue;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
141
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
142 buddy = (GaimBuddy*)bnode;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
143
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
144 if (!gaim_account_is_connected(buddy->account))
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
145 continue;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
146 if (new_priority == NULL)
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
147 new_priority = buddy;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
148 else
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
149 {
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
150 int cmp;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
151
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
152 presence = gaim_buddy_get_presence(buddy);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
153
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
154 cmp = gaim_presence_compare(gaim_buddy_get_presence(new_priority),
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
155 gaim_buddy_get_presence(buddy));
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
156
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
157 if (cmp > 0 || (cmp == 0 &&
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
158 gaim_prefs_get_bool("/core/contact/last_match")))
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
159 {
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
160 new_priority = buddy;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
161 }
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
162 }
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
163 }
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
164
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
165 contact->priority = new_priority;
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
166 }
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
167
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
168 static gboolean blist_save_callback(gpointer data)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
169 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
170 gaim_blist_sync();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
171 blist_save_timer = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
172 return FALSE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
173 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
174
9741
38d8e87065a9 [gaim-migrate @ 10606]
Luke Schierer <lschiere@pidgin.im>
parents: 9740
diff changeset
175 static void schedule_blist_save()
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
176 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
177 if (blist_save_timer != 0)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
178 gaim_timeout_remove(blist_save_timer);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
179 blist_save_timer = gaim_timeout_add(1000, blist_save_callback, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
180 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
181
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
182
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
183 /*****************************************************************************
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
184 * Public API functions *
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
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
187 GaimBuddyList *gaim_blist_new()
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
189 GaimBuddyList *gbl = g_new0(GaimBuddyList, 1);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
191 gbl->ui_ops = gaim_blist_get_ui_ops();
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
192
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
193 gbl->buddies = g_hash_table_new_full((GHashFunc)_gaim_blist_hbuddy_hash,
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
194 (GEqualFunc)_gaim_blist_hbuddy_equal,
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
195 (GDestroyNotify)_gaim_blist_hbuddy_free_key, NULL);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
196
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 if (gbl->ui_ops != NULL && gbl->ui_ops->new_list != NULL)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198 gbl->ui_ops->new_list(gbl);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
200 gaim_prefs_connect_callback("/core/buddies/use_server_alias",
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
201 blist_pref_cb, NULL);
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
202
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 return gbl;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 void
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
207 gaim_set_blist(GaimBuddyList *list)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 gaimbuddylist = list;
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
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
212 GaimBuddyList *
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
213 gaim_get_blist()
5228
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 return gaimbuddylist;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
218 void gaim_blist_show()
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
220 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
221
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
222 if (ops && ops->show)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
223 ops->show(gaimbuddylist);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
224 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
225
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 void gaim_blist_destroy()
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
227 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
228 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
229
8259
7ed91862683d [gaim-migrate @ 8982]
Christian Hammond <chipx86@chipx86.com>
parents: 8200
diff changeset
230 gaim_debug(GAIM_DEBUG_INFO, "blist", "Destroying\n");
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
231
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
232 if (ops && ops->destroy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
233 ops->destroy(gaimbuddylist);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
234 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
235
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
236 void gaim_blist_set_visible(gboolean show)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
238 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
239
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
240 if (ops && ops->set_visible)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
241 ops->set_visible(gaimbuddylist, show);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
242 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
243
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
244 void gaim_blist_update_buddy_status(GaimBuddy *buddy, int status)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
245 {
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
246 #if 0
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
247 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
248 int old_status;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
249
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
250 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
251
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
252 old_status = buddy->uc;
8129
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
253 if (old_status != status) {
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
254 buddy->uc = status;
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
255 gaim_contact_compute_priority_buddy(gaim_buddy_get_contact(buddy));
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
256
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
257 if ((status & UC_UNAVAILABLE) != (old_status & UC_UNAVAILABLE)) {
7549
51b8404961e1 [gaim-migrate @ 8163]
Tim Ringenbach <marv@pidgin.im>
parents: 7430
diff changeset
258 if (status & UC_UNAVAILABLE)
51b8404961e1 [gaim-migrate @ 8163]
Tim Ringenbach <marv@pidgin.im>
parents: 7430
diff changeset
259 gaim_signal_emit(gaim_blist_get_handle(), "buddy-away", buddy);
51b8404961e1 [gaim-migrate @ 8163]
Tim Ringenbach <marv@pidgin.im>
parents: 7430
diff changeset
260 else
51b8404961e1 [gaim-migrate @ 8163]
Tim Ringenbach <marv@pidgin.im>
parents: 7430
diff changeset
261 gaim_signal_emit(gaim_blist_get_handle(), "buddy-back", buddy);
51b8404961e1 [gaim-migrate @ 8163]
Tim Ringenbach <marv@pidgin.im>
parents: 7430
diff changeset
262 }
5305
5a6fc3d321d9 [gaim-migrate @ 5677]
David J. Brigada <brigada@prism.net>
parents: 5292
diff changeset
263 }
8129
93475b6a1fed [gaim-migrate @ 8834]
Christian Hammond <chipx86@chipx86.com>
parents: 8071
diff changeset
264
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
265 if (ops && ops->update)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
266 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
267 #endif
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
268 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
269
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
270 static gboolean presence_update_timeout_cb(GaimBuddy *buddy)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
271 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
272 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6640
007eb21016b4 [gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents: 6564
diff changeset
273 GaimConversation *conv;
007eb21016b4 [gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents: 6564
diff changeset
274
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
275 g_return_val_if_fail(buddy != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
276
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
277 if (buddy->present == GAIM_BUDDY_SIGNING_ON) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
278 buddy->present = GAIM_BUDDY_ONLINE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
279 } else if (buddy->present == GAIM_BUDDY_SIGNING_OFF) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
280 buddy->present = GAIM_BUDDY_OFFLINE;
6860
edc99a5026a0 [gaim-migrate @ 7405]
Nathan Walp <nwalp@pidgin.im>
parents: 6846
diff changeset
281 ((GaimContact*)((GaimBlistNode*)buddy)->parent)->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
282 if (((GaimContact*)((GaimBlistNode*)buddy)->parent)->online == 0)
6860
edc99a5026a0 [gaim-migrate @ 7405]
Nathan Walp <nwalp@pidgin.im>
parents: 6846
diff changeset
283 ((GaimGroup *)((GaimBlistNode *)buddy)->parent->parent)->online--;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
284 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
285
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
286 buddy->timer = 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
287
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
288 if (ops && ops->update)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
289 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
290
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
291 conv = gaim_find_conversation_with_account(buddy->name, buddy->account);
6392
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
292 if (conv) {
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
293 if (buddy->present == GAIM_BUDDY_ONLINE)
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
294 gaim_conversation_update(conv, GAIM_CONV_ACCOUNT_ONLINE);
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
295 else if (buddy->present == GAIM_BUDDY_OFFLINE)
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
296 gaim_conversation_update(conv, GAIM_CONV_ACCOUNT_OFFLINE);
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
297 }
3db2b3c7b5aa [gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents: 6378
diff changeset
298
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
299 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
300 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
301
9927
7ae7d2accb3e [gaim-migrate @ 10819]
Daniel Atallah <datallah@pidgin.im>
parents: 9926
diff changeset
302 void gaim_blist_update_buddy_presence(GaimBuddy *buddy, gboolean online)
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
303 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
304 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
305 gboolean did_something = FALSE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
306
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
307 g_return_if_fail(buddy != NULL);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
308
9927
7ae7d2accb3e [gaim-migrate @ 10819]
Daniel Atallah <datallah@pidgin.im>
parents: 9926
diff changeset
309 if (!GAIM_BUDDY_IS_ONLINE(buddy) && online) {
6901
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
310 int old_present = buddy->present;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
311 buddy->present = GAIM_BUDDY_SIGNING_ON;
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
312 gaim_signal_emit(gaim_blist_get_handle(), "buddy-signed-on", buddy);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
313 did_something = TRUE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
314
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
315 if (old_present != GAIM_BUDDY_SIGNING_OFF) {
6901
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
316 ((GaimContact*)((GaimBlistNode*)buddy)->parent)->online++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
317 if (((GaimContact*)((GaimBlistNode*)buddy)->parent)->online == 1)
6901
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
318 ((GaimGroup *)((GaimBlistNode *)buddy)->parent->parent)->online++;
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
319 }
9927
7ae7d2accb3e [gaim-migrate @ 10819]
Daniel Atallah <datallah@pidgin.im>
parents: 9926
diff changeset
320 } else if (GAIM_BUDDY_IS_ONLINE(buddy) && !online) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
321 buddy->present = GAIM_BUDDY_SIGNING_OFF;
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
322 gaim_signal_emit(gaim_blist_get_handle(), "buddy-signed-off", buddy);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
323 did_something = TRUE;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
324 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
325
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
326 if (did_something) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
327 if (buddy->timer > 0)
8287
266eacc707ac [gaim-migrate @ 9011]
Scott Lamb
parents: 8273
diff changeset
328 gaim_timeout_remove(buddy->timer);
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8259
diff changeset
329 buddy->timer = gaim_timeout_add(10000, (GSourceFunc)presence_update_timeout_cb, buddy);
6961
a0d306495686 [gaim-migrate @ 7508]
Nathan Walp <nwalp@pidgin.im>
parents: 6959
diff changeset
330
a0d306495686 [gaim-migrate @ 7508]
Nathan Walp <nwalp@pidgin.im>
parents: 6959
diff changeset
331 gaim_contact_compute_priority_buddy(gaim_buddy_get_contact(buddy));
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
332 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
333 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
334 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
335 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
336
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
337 void gaim_blist_update_buddy_signon(GaimBuddy *buddy, time_t signon)
7950
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
338 {
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
339 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
340
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
341 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
342
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
343 if (buddy->signon == signon)
7950
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
344 return;
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
345
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
346 buddy->signon = signon;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
347
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
348 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
349 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
7950
1f1f2fe00cef [gaim-migrate @ 8624]
Evan Schoenberg <evands@pidgin.im>
parents: 7879
diff changeset
350 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
351
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
352 void gaim_blist_update_buddy_icon(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
353 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
354 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
355
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
356 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
357
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
358 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
359 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
360 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
361
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
362 /*
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
363 * XXX - Maybe remove the call to this from server.c and call it
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
364 * from oscar.c and toc.c instead?
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
365 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
366 void gaim_blist_rename_buddy(GaimBuddy *buddy, const char *name)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
367 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
368 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
369 struct _gaim_hbuddy *hb;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
370
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
371 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
372
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
373 hb = g_new(struct _gaim_hbuddy, 1);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
374 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
375 hb->account = buddy->account;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
376 hb->group = ((GaimBlistNode *)buddy)->parent->parent;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
377 g_hash_table_remove(gaimbuddylist->buddies, hb);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
378
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
379 g_free(hb->name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
380 hb->name = g_strdup(gaim_normalize(buddy->account, name));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
381 g_hash_table_replace(gaimbuddylist->buddies, hb, buddy);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
382
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
383 g_free(buddy->name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
384 buddy->name = g_strdup(name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
385
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
386 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
387
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
388 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
389 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
390 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
391
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
392 void gaim_blist_alias_chat(GaimChat *chat, const char *alias)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
393 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
394 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
395
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
396 g_return_if_fail(chat != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
397
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
398 g_free(chat->alias);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
399 if ((alias != NULL) && (*alias != '\0'))
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
400 chat->alias = g_strdup(alias);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
401 else
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
402 chat->alias = NULL;
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
403
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
404 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
405
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
406 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
407 ops->update(gaimbuddylist, (GaimBlistNode *)chat);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
408 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
409
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
410 void gaim_blist_alias_buddy(GaimBuddy *buddy, const char *alias)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
411 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
412 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
5676
d3c2fdaf4821 [gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents: 5634
diff changeset
413 GaimConversation *conv;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
414
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
415 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
416
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 g_free(buddy->alias);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
418 if ((alias != NULL) && (*alias != '\0'))
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
419 buddy->alias = g_strdup(alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
420 else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
421 buddy->alias = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
422
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
423 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
424
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
425 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
426 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
427
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
428 conv = gaim_find_conversation_with_account(buddy->name, buddy->account);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
429 if (conv)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
430 gaim_conversation_autoset_title(conv);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
431 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
432
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
433 void gaim_blist_server_alias_buddy(GaimBuddy *buddy, const char *alias)
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
434 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
435 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
436 GaimConversation *conv;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
437
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
438 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
439
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
440 g_free(buddy->server_alias);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
441 if ((alias != NULL) && (*alias != '\0') && g_utf8_validate(alias, -1, NULL))
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
442 buddy->server_alias = g_strdup(alias);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
443 else
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
444 buddy->server_alias = NULL;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
445
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
446 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
447
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
448 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
449 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
450
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
451 conv = gaim_find_conversation_with_account(buddy->name, buddy->account);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
452 if (conv)
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
453 gaim_conversation_autoset_title(conv);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
454 }
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
455
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
456 /*
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
457 * XXX - If merging, prompt the user if they want to merge.
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
458 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
459 void gaim_blist_rename_group(GaimGroup *source, const char *new_name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
460 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
461 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
462 GaimGroup *dest;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
463 gchar *old_name;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
464 GList *moved_buddies = NULL;
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
465 GSList *accts;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
466
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
467 g_return_if_fail(source != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
468 g_return_if_fail(new_name != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
469
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
470 if (*new_name == '\0' || !strcmp(new_name, source->name))
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
471 return;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
472
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
473 dest = gaim_find_group(new_name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
474 if (dest != NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
475 /* We're merging two groups */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
476 GaimBlistNode *prev, *child, *next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
477
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
478 prev = gaim_blist_get_last_child((GaimBlistNode*)dest);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
479 child = ((GaimBlistNode*)source)->child;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
480
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
481 /*
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
482 * XXX - This seems like a dumb way to do this... why not just
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
483 * append all children from the old group to the end of the new
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
484 * one? PRPLs might be expecting to receive an add_buddy() for
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
485 * each moved buddy...
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
486 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
487 while (child)
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
488 {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
489 next = child->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
490 if (GAIM_BLIST_NODE_IS_CONTACT(child)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
491 GaimBlistNode *bnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
492 gaim_blist_add_contact((GaimContact *)child, dest, prev);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
493 for (bnode = child->child; bnode != NULL; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
494 gaim_blist_add_buddy((GaimBuddy *)bnode, (GaimContact *)child,
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
495 NULL, bnode->prev);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
496 moved_buddies = g_list_append(moved_buddies, bnode);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
497 }
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
498 prev = child;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
499 } else if (GAIM_BLIST_NODE_IS_CHAT(child)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
500 gaim_blist_add_chat((GaimChat *)child, dest, prev);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
501 prev = child;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
502 } else {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
503 gaim_debug(GAIM_DEBUG_ERROR, "blist",
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
504 "Unknown child type in group %s\n", source->name);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
505 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
506 child = next;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
507 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
508
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
509 /* Make a copy of the old group name and then delete the old group */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
510 old_name = g_strdup(source->name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
511 gaim_blist_remove_group(source);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
512 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
513 /* A simple rename */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
514 GaimBlistNode *cnode, *bnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
515
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
516 /* Build a GList of all buddies in this group */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
517 for (cnode = ((GaimBlistNode *)source)->child; cnode != NULL; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
518 if (GAIM_BLIST_NODE_IS_CONTACT(cnode))
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
519 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
520 moved_buddies = g_list_append(moved_buddies, bnode);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
521 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
522
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
523 old_name = source->name;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
524 source->name = g_strdup(new_name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
525
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
526 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
527
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
528 /* Save our changes */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
529 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
530
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
531 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
532 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
533 ops->update(gaimbuddylist, (GaimBlistNode*)source);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
534
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
535 /* Notify all PRPLs */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
536 for (accts = gaim_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
537 GaimAccount *account = accts->data;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
538 serv_rename_group(account->gc, old_name, source, moved_buddies);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
539 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
540 g_list_free(moved_buddies);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
541 g_free(old_name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
542 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
543
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
544 static void gaim_blist_node_initialize_settings(GaimBlistNode *node);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
545
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
546 GaimChat *gaim_chat_new(GaimAccount *account, const char *alias, GHashTable *components)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
547 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
548 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
549 GaimChat *chat;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
550
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
551 g_return_val_if_fail(account != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
552 g_return_val_if_fail(components != NULL, FALSE);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
553
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
554 chat = g_new0(GaimChat, 1);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
555 chat->account = account;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
556 if ((alias != NULL) && (*alias != '\0'))
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
557 chat->alias = g_strdup(alias);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
558 chat->components = components;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
559 gaim_blist_node_initialize_settings((GaimBlistNode *)chat);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
560 ((GaimBlistNode *)chat)->type = GAIM_BLIST_CHAT_NODE;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
561
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
562 if (ops != NULL && ops->new_node != NULL)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
563 ops->new_node((GaimBlistNode *)chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
564
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
565 return chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
566 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
567
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
568 char *gaim_chat_get_display_name(GaimChat *chat)
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
569 {
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
570 char *name;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
571
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
572 g_return_val_if_fail(chat != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
573
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
574 if (chat->alias != NULL) {
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
575 name = g_strdup(chat->alias);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
576 } else {
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
577 GList *parts;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
578 GaimPlugin *prpl;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
579 GaimPluginProtocolInfo *prpl_info;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
580 struct proto_chat_entry *pce;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
581
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7950
diff changeset
582 prpl = gaim_find_prpl(gaim_account_get_protocol_id(chat->account));
6034
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
583 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
584
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
585 parts = prpl_info->chat_info(chat->account->gc);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
586
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
587 pce = parts->data;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
588 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
589 pce->identifier), -1);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
590 g_list_free(parts);
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
591 }
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
592
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
593 return name;
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
594 }
148d8b0fe741 [gaim-migrate @ 6484]
Ka-Hing Cheung <khc@pidgin.im>
parents: 6012
diff changeset
595
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
596 GaimBuddy *gaim_buddy_new(GaimAccount *account, const char *screenname, const char *alias)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
597 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
598 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
599 GaimBuddy *buddy;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
600
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
601 g_return_val_if_fail(account != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
602 g_return_val_if_fail(screenname != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
603
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
604 buddy = g_new0(GaimBuddy, 1);
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
605 buddy->account = account;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
606 buddy->name = g_strdup(screenname);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
607 buddy->alias = g_strdup(alias);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
608 buddy->presence = gaim_presence_new_for_buddy(buddy);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
609
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
610 gaim_blist_node_initialize_settings((GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
611 ((GaimBlistNode *)buddy)->type = GAIM_BLIST_BUDDY_NODE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
612
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
613 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
614 ops->new_node((GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
615
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
616 return buddy;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
617 }
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
618
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
619 void
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
620 gaim_buddy_set_icon(GaimBuddy *buddy, GaimBuddyIcon *icon)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
621 {
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
622 g_return_if_fail(buddy != NULL);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
623
9261
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
624 if (buddy->icon != icon)
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
625 {
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
626 if (buddy->icon != NULL)
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
627 gaim_buddy_icon_unref(buddy->icon);
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
628
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
629 buddy->icon = (icon == NULL ? NULL : gaim_buddy_icon_ref(icon));
a0ed867a459e [gaim-migrate @ 10060]
Christian Hammond <chipx86@chipx86.com>
parents: 9153
diff changeset
630 }
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
631
9324
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
632 if (buddy->icon)
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
633 gaim_buddy_icon_cache(icon, buddy);
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
634 else
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
635 gaim_blist_node_remove_setting((GaimBlistNode *)buddy, "buddy_icon");
9299
6ea4c4da101a [gaim-migrate @ 10102]
Tim Ringenbach <marv@pidgin.im>
parents: 9285
diff changeset
636
6ea4c4da101a [gaim-migrate @ 10102]
Tim Ringenbach <marv@pidgin.im>
parents: 9285
diff changeset
637 schedule_blist_save();
9926
9957e01fd88a [gaim-migrate @ 10818]
Nathan Walp <nwalp@pidgin.im>
parents: 9787
diff changeset
638
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
639 gaim_blist_update_buddy_icon(buddy);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
640 }
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
641
10037
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
642 GaimAccount *
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
643 gaim_buddy_get_account(const GaimBuddy *buddy)
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
644 {
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
645 g_return_val_if_fail(buddy != NULL, NULL);
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
646
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
647 return buddy->account;
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
648 }
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
649
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
650 const char *
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
651 gaim_buddy_get_name(const GaimBuddy *buddy)
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
652 {
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
653 g_return_val_if_fail(buddy != NULL, NULL);
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
654
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
655 return buddy->name;
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
656 }
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
657
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
658 GaimBuddyIcon *
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
659 gaim_buddy_get_icon(const GaimBuddy *buddy)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
660 {
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
661 g_return_val_if_fail(buddy != NULL, NULL);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
662
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
663 return buddy->icon;
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
664 }
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
665
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
666 void gaim_blist_add_chat(GaimChat *chat, GaimGroup *group, GaimBlistNode *node)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
667 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
668 GaimBlistNode *cnode = (GaimBlistNode*)chat;
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
669 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
670
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
671 g_return_if_fail(chat != NULL);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
672 g_return_if_fail(GAIM_BLIST_NODE_IS_CHAT((GaimBlistNode *)chat));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
673
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
674 if (node == NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
675 if (group == NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
676 group = gaim_group_new(_("Chats"));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
677 gaim_blist_add_group(group,
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
678 gaim_blist_get_last_sibling(gaimbuddylist->root));
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
679 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
680 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
681 group = (GaimGroup*)node->parent;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
682 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
683
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
684 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
685 if (cnode == node)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
686 return;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
687
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
688 if (cnode->parent) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
689 /* This chat was already in the list and is
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
690 * being moved.
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
691 */
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
692 ((GaimGroup *)cnode->parent)->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
693 if (gaim_account_is_connected(chat->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
694 ((GaimGroup *)cnode->parent)->online--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
695 ((GaimGroup *)cnode->parent)->currentsize--;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
696 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
697 if (cnode->next)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
698 cnode->next->prev = cnode->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
699 if (cnode->prev)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
700 cnode->prev->next = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
701 if (cnode->parent->child == cnode)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
702 cnode->parent->child = cnode->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
703
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
704 ops->remove(gaimbuddylist, cnode);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
705
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
706 schedule_blist_save();
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
707 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
708
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
709 if (node != NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
710 if (node->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
711 node->next->prev = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
712 cnode->next = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
713 cnode->prev = node;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
714 cnode->parent = node->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
715 node->next = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
716 ((GaimGroup *)node->parent)->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
717 if (gaim_account_is_connected(chat->account)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
718 ((GaimGroup *)node->parent)->online++;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
719 ((GaimGroup *)node->parent)->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
720 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
721 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
722 if (((GaimBlistNode *)group)->child)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
723 ((GaimBlistNode *)group)->child->prev = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
724 cnode->next = ((GaimBlistNode *)group)->child;
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
725 cnode->prev = NULL;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
726 ((GaimBlistNode *)group)->child = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
727 cnode->parent = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
728 group->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
729 if (gaim_account_is_connected(chat->account)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
730 group->online++;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
731 group->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
732 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
733 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
734
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
735 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
736
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
737 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
738 ops->update(gaimbuddylist, (GaimBlistNode *)cnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
739 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
740
7879
8e5689b82138 [gaim-migrate @ 8533]
Mark Doliner <markdoliner@pidgin.im>
parents: 7859
diff changeset
741 void gaim_blist_add_buddy(GaimBuddy *buddy, GaimContact *contact, GaimGroup *group, GaimBlistNode *node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
742 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
743 GaimBlistNode *cnode, *bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
744 GaimGroup *g;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
745 GaimContact *c;
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
746 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
747 struct _gaim_hbuddy *hb;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
748
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
749 g_return_if_fail(buddy != NULL);
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
750 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY((GaimBlistNode*)buddy));
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
751
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
752 bnode = (GaimBlistNode *)buddy;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
753
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
754 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
755 if (bnode == node || (!node && bnode->parent &&
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
756 contact && bnode->parent == (GaimBlistNode*)contact
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
757 && bnode == bnode->parent->child))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
758 return;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
759
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
760 if (node && GAIM_BLIST_NODE_IS_BUDDY(node)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
761 c = (GaimContact*)node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
762 g = (GaimGroup*)node->parent->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
763 } else if (contact) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
764 c = contact;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
765 g = (GaimGroup *)((GaimBlistNode *)c)->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
766 } else {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
767 if (group) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
768 g = group;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
769 } else {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
770 g = gaim_group_new(_("Buddies"));
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
771 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
772 gaim_blist_get_last_sibling(gaimbuddylist->root));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
773 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
774 c = gaim_contact_new();
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
775 gaim_blist_add_contact(c, g,
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
776 gaim_blist_get_last_child((GaimBlistNode*)g));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
777 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
778
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
779 cnode = (GaimBlistNode *)c;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
780
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
781 if (bnode->parent) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
782 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
783 ((GaimContact*)bnode->parent)->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
784 if (((GaimContact*)bnode->parent)->online == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
785 ((GaimGroup*)bnode->parent->parent)->online--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
786 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
787 if (gaim_account_is_connected(buddy->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
788 ((GaimContact*)bnode->parent)->currentsize--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
789 if (((GaimContact*)bnode->parent)->currentsize == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
790 ((GaimGroup*)bnode->parent->parent)->currentsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
791 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
792 ((GaimContact*)bnode->parent)->totalsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
793 /* the group totalsize will be taken care of by remove_contact below */
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
794
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
795 if (bnode->parent->parent != (GaimBlistNode*)g)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
796 serv_move_buddy(buddy, (GaimGroup *)bnode->parent->parent, g);
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
797
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
798 if (bnode->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
799 bnode->next->prev = bnode->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
800 if (bnode->prev)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
801 bnode->prev->next = bnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
802 if (bnode->parent->child == bnode)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
803 bnode->parent->child = bnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
804
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
805 ops->remove(gaimbuddylist, bnode);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
806
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
807 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
808
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
809 if (bnode->parent->parent != (GaimBlistNode*)g) {
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
810 hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
811 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
812 hb->account = buddy->account;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
813 hb->group = bnode->parent->parent;
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
814 g_hash_table_remove(gaimbuddylist->buddies, hb);
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
815 g_free(hb->name);
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
816 g_free(hb);
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
817 }
6794
2c9fedb2c8a6 [gaim-migrate @ 7333]
Nathan Walp <nwalp@pidgin.im>
parents: 6778
diff changeset
818
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
819 if (!bnode->parent->child) {
6794
2c9fedb2c8a6 [gaim-migrate @ 7333]
Nathan Walp <nwalp@pidgin.im>
parents: 6778
diff changeset
820 gaim_blist_remove_contact((GaimContact*)bnode->parent);
7003
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
821 } else {
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
822 gaim_contact_compute_priority_buddy((GaimContact*)bnode->parent);
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
823 ops->update(gaimbuddylist, bnode->parent);
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
824 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
825 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
826
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
827 if (node && GAIM_BLIST_NODE_IS_BUDDY(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
828 if (node->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
829 node->next->prev = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
830 bnode->next = node->next;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
831 bnode->prev = node;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
832 bnode->parent = node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
833 node->next = bnode;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
834 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
835 if (cnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
836 cnode->child->prev = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
837 bnode->prev = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
838 bnode->next = cnode->child;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
839 cnode->child = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
840 bnode->parent = cnode;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
841 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
842
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
843 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
844 ((GaimContact*)bnode->parent)->online++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
845 if (((GaimContact*)bnode->parent)->online == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
846 ((GaimGroup*)bnode->parent->parent)->online++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
847 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
848 if (gaim_account_is_connected(buddy->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
849 ((GaimContact*)bnode->parent)->currentsize++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
850 if (((GaimContact*)bnode->parent)->currentsize == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
851 ((GaimGroup*)bnode->parent->parent)->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
852 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
853 ((GaimContact*)bnode->parent)->totalsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
854
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
855 hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
856 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
857 hb->account = buddy->account;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
858 hb->group = ((GaimBlistNode*)buddy)->parent->parent;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
859
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
860 g_hash_table_replace(gaimbuddylist->buddies, hb, buddy);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
861
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
862 gaim_contact_compute_priority_buddy(gaim_buddy_get_contact(buddy));
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
863
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
864 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
865
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
866 if (ops && ops->update)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
867 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
868 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
869
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
870 GaimContact *gaim_contact_new()
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
871 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
872 GaimBlistUiOps *ops = gaim_blist_get_ui_ops();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
873
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
874 GaimContact *contact = g_new0(GaimContact, 1);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
875 contact->totalsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
876 contact->currentsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
877 contact->online = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
878 gaim_blist_node_initialize_settings((GaimBlistNode *)contact);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
879 ((GaimBlistNode *)contact)->type = GAIM_BLIST_CONTACT_NODE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
880
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
881 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
882 ops->new_node((GaimBlistNode *)contact);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
883
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
884 return contact;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
885 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
886
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
887 void gaim_contact_set_alias(GaimContact *contact, const char *alias)
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
888 {
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
889 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
890
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
891 g_return_if_fail(contact != NULL);
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
892
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
893 if (contact->alias != NULL)
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
894 g_free(contact->alias);
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
895
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
896 if ((alias != NULL) && (*alias != '\0'))
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
897 contact->alias = g_strdup(alias);
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
898 else
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
899 contact->alias = NULL;
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
900
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
901 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
902
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
903 if (ops && ops->update)
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
904 ops->update(gaimbuddylist, (GaimBlistNode*)contact);
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
905 }
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
906
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
907 const char *gaim_contact_get_alias(GaimContact* contact)
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
908 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
909 g_return_val_if_fail(contact != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
910
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
911 if (contact->alias)
7312
69a442443d9c [gaim-migrate @ 7896]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
912 return contact->alias;
69a442443d9c [gaim-migrate @ 7896]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
913
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
914 return gaim_buddy_get_alias(contact->priority);
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
915 }
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
916
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
917 gboolean gaim_contact_on_account(GaimContact *c, GaimAccount *account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
918 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
919 GaimBlistNode *bnode, *cnode = (GaimBlistNode *) c;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
920
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
921 g_return_val_if_fail(c != NULL, FALSE);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
922 g_return_val_if_fail(account != NULL, FALSE);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
923
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
924 for (bnode = cnode->child; bnode; bnode = bnode->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
925 GaimBuddy *buddy;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
926
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
927 if (! GAIM_BLIST_NODE_IS_BUDDY(bnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
928 continue;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
929
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
930 buddy = (GaimBuddy *)bnode;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
931 if (buddy->account == account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
932 return TRUE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
933 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
934 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
935 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
936
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
937 GaimGroup *gaim_group_new(const char *name)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
938 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
939 GaimBlistUiOps *ops = gaim_blist_get_ui_ops();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
940 GaimGroup *group = gaim_find_group(name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
941
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
942 if (group != NULL)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
943 return group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
944
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
945 group = g_new0(GaimGroup, 1);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
946 group->name = g_strdup(name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
947 group->totalsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
948 group->currentsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
949 group->online = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
950 gaim_blist_node_initialize_settings((GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
951 ((GaimBlistNode *)group)->type = GAIM_BLIST_GROUP_NODE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
952
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
953 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
954 ops->new_node((GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
955
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
956 return group;
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
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
959 void gaim_blist_add_contact(GaimContact *contact, GaimGroup *group, GaimBlistNode *node)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
960 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
961 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
962 GaimGroup *g;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
963 GaimBlistNode *gnode, *cnode, *bnode;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
964
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
965 g_return_if_fail(contact != NULL);
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
966 g_return_if_fail(GAIM_BLIST_NODE_IS_CONTACT((GaimBlistNode*)contact));
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
967
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
968 if ((GaimBlistNode*)contact == node)
6975
76bab8ef24d2 [gaim-migrate @ 7528]
Nathan Walp <nwalp@pidgin.im>
parents: 6965
diff changeset
969 return;
76bab8ef24d2 [gaim-migrate @ 7528]
Nathan Walp <nwalp@pidgin.im>
parents: 6965
diff changeset
970
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
971 if (node && (GAIM_BLIST_NODE_IS_CONTACT(node) ||
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
972 GAIM_BLIST_NODE_IS_CHAT(node)))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
973 g = (GaimGroup*)node->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
974 else if (group)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
975 g = group;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
976 else {
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
977 g = gaim_group_new(_("Buddies"));
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
978 gaim_blist_add_group(g,
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
979 gaim_blist_get_last_sibling(gaimbuddylist->root));
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
980 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
981
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
982 gnode = (GaimBlistNode*)g;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
983 cnode = (GaimBlistNode*)contact;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
984
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
985 if (cnode->parent) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
986 if (cnode->parent->child == cnode)
6731
62951f77e983 [gaim-migrate @ 7258]
Nathan Walp <nwalp@pidgin.im>
parents: 6706
diff changeset
987 cnode->parent->child = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
988 if (cnode->prev)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
989 cnode->prev->next = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
990 if (cnode->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
991 cnode->next->prev = cnode->prev;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
992
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
993 if (cnode->parent != gnode) {
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
994 bnode = cnode->child;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
995 while (bnode) {
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
996 GaimBlistNode *next_bnode = bnode->next;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
997 GaimBuddy *b = (GaimBuddy*)bnode;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
998
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
999 struct _gaim_hbuddy *hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1000 hb->name = g_strdup(gaim_normalize(b->account, b->name));
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1001 hb->account = b->account;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1002 hb->group = cnode->parent;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1003
6776
ff84b0971678 [gaim-migrate @ 7314]
Nathan Walp <nwalp@pidgin.im>
parents: 6775
diff changeset
1004 g_hash_table_remove(gaimbuddylist->buddies, hb);
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1005
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1006 if (!gaim_find_buddy_in_group(b->account, b->name, g)) {
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1007 hb->group = gnode;
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1008 g_hash_table_replace(gaimbuddylist->buddies, hb, b);
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1009
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1010 if (b->account->gc)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1011 serv_move_buddy(b, (GaimGroup *)cnode->parent, g);
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1012 } else {
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1013 gboolean empty_contact = FALSE;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1014
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1015 /* this buddy already exists in the group, so we're
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1016 * gonna delete it instead */
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1017 g_free(hb->name);
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1018 g_free(hb);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1019 if (b->account->gc)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1020 serv_remove_buddy(b->account->gc, b, (GaimGroup *)cnode->parent);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1021
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1022 if (!cnode->child->next)
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1023 empty_contact = TRUE;
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1024 gaim_blist_remove_buddy(b);
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1025
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1026 /** in gaim_blist_remove_buddy(), if the last buddy in a
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1027 * contact is removed, the contact is cleaned up and
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1028 * g_free'd, so we mustn't try to reference bnode->next */
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1029 if (empty_contact)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1030 return;
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1031 }
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1032 bnode = next_bnode;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1033 }
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1034 }
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1035
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1036 if (contact->online > 0)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1037 ((GaimGroup*)cnode->parent)->online--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1038 if (contact->currentsize > 0)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1039 ((GaimGroup*)cnode->parent)->currentsize--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1040 ((GaimGroup*)cnode->parent)->totalsize--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1041
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1042 ops->remove(gaimbuddylist, cnode);
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1043
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1044 schedule_blist_save();
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1045 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1046
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1047 if (node && (GAIM_BLIST_NODE_IS_CONTACT(node) ||
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1048 GAIM_BLIST_NODE_IS_CHAT(node))) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1049 if (node->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1050 node->next->prev = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1051 cnode->next = node->next;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1052 cnode->prev = node;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1053 cnode->parent = node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1054 node->next = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1055 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1056 if (gnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1057 gnode->child->prev = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1058 cnode->prev = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1059 cnode->next = gnode->child;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1060 gnode->child = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1061 cnode->parent = gnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1062 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1063
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1064 if (contact->online > 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1065 g->online++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1066 if (contact->currentsize > 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1067 g->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1068 g->totalsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1069
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1070 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1071
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1072 if (ops && cnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1073 ops->update(gaimbuddylist, cnode);
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
1074
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1075 for (bnode = cnode->child; bnode; bnode = bnode->next)
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
1076 ops->update(gaimbuddylist, bnode);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1077 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1078
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1079 void gaim_blist_merge_contact(GaimContact *source, GaimBlistNode *node)
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1080 {
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1081 GaimBlistNode *sourcenode = (GaimBlistNode*)source;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1082 GaimBlistNode *targetnode;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1083 GaimBlistNode *prev, *cur, *next;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1084 GaimContact *target;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1085
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1086 g_return_if_fail(source != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1087 g_return_if_fail(node != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1088
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1089 if (GAIM_BLIST_NODE_IS_CONTACT(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1090 target = (GaimContact *)node;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1091 prev = gaim_blist_get_last_child(node);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1092 } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1093 target = (GaimContact *)node->parent;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1094 prev = node;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1095 } else {
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1096 return;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1097 }
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1098
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1099 if (source == target || !target)
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1100 return;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1101
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1102 targetnode = (GaimBlistNode *)target;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1103 next = sourcenode->child;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1104
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1105 while (next) {
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1106 cur = next;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1107 next = cur->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1108 if (GAIM_BLIST_NODE_IS_BUDDY(cur)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1109 gaim_blist_add_buddy((GaimBuddy *)cur, target, NULL, prev);
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1110 prev = cur;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1111 }
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1112 }
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1113 }
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1114
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1115 void gaim_blist_add_group(GaimGroup *group, GaimBlistNode *node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1116 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1117 GaimBlistUiOps *ops;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1118 GaimBlistNode *gnode = (GaimBlistNode*)group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1119
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1120 g_return_if_fail(group != NULL);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1121 g_return_if_fail(GAIM_BLIST_NODE_IS_GROUP((GaimBlistNode *)group));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1122
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1123 ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1124
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1125 if (!gaimbuddylist->root) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1126 gaimbuddylist->root = gnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1127 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1128 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1129
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1130 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1131 if (gnode == node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1132 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1133
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1134 if (gaim_find_group(group->name)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1135 /* This is just being moved */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1136
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1137 ops->remove(gaimbuddylist, (GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1138
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1139 if (gnode == gaimbuddylist->root)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1140 gaimbuddylist->root = gnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1141 if (gnode->prev)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1142 gnode->prev->next = gnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1143 if (gnode->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1144 gnode->next->prev = gnode->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1145 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1146
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1147 if (node && GAIM_BLIST_NODE_IS_GROUP(node)) {
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1148 gnode->next = node->next;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1149 gnode->prev = node;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1150 if (node->next)
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1151 node->next->prev = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1152 node->next = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1153 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1154 if (gaimbuddylist->root)
6807
9b26492e1043 [gaim-migrate @ 7347]
Nathan Walp <nwalp@pidgin.im>
parents: 6803
diff changeset
1155 gaimbuddylist->root->prev = gnode;
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1156 gnode->next = gaimbuddylist->root;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1157 gnode->prev = NULL;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1158 gaimbuddylist->root = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1159 }
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1160
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1161 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1162
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1163 if (ops && ops->update) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1164 ops->update(gaimbuddylist, gnode);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1165 for (node = gnode->child; node; node = node->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1166 ops->update(gaimbuddylist, node);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1167 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1168 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1169
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1170 void gaim_blist_remove_contact(GaimContact *contact)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1171 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1172 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1173 GaimBlistNode *node, *gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1174
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1175 g_return_if_fail(contact != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1176
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1177 node = (GaimBlistNode *)contact;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1178 gnode = node->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1179
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1180 if (node->child) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1181 /*
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1182 * If this contact has children then remove them. When the last
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1183 * buddy is removed from the contact, the contact is deleted.
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1184 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1185 while (node->child) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1186 gaim_blist_remove_buddy((GaimBuddy*)node->child);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1187 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1188 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1189 /* Remove the node from its parent */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1190 if (gnode->child == node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1191 gnode->child = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1192 if (node->prev)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1193 node->prev->next = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1194 if (node->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1195 node->next->prev = node->prev;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1196
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1197 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1198
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1199 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1200 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1201 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1202
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1203 /* Delete the node */
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1204 g_free(contact);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1205 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1206 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1207
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1208 void gaim_blist_remove_buddy(GaimBuddy *buddy)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1209 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1210 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1211 GaimBlistNode *node, *cnode, *gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1212 GaimContact *contact;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1213 GaimGroup *group;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1214 struct _gaim_hbuddy hb;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1215
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1216 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1217
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1218 node = (GaimBlistNode *)buddy;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1219 cnode = node->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1220 gnode = cnode->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1221 contact = (GaimContact *)cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1222 group = (GaimGroup *)gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1223
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1224 /* Remove the node from its parent */
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1225 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1226 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1227 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1228 node->next->prev = node->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1229 if (cnode->child == node)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1230 cnode->child = node->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1231
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1232 /* Adjust size counts */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1233 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1234 contact->online--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1235 if (contact->online == 0)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1236 group->online--;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1237 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1238 if (gaim_account_is_connected(buddy->account)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1239 contact->currentsize--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1240 if (contact->currentsize == 0)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1241 group->currentsize--;
8194
bf412cad6608 [gaim-migrate @ 8916]
Nathan Walp <nwalp@pidgin.im>
parents: 8175
diff changeset
1242 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1243 contact->totalsize--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1244
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1245 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1246
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1247 /* Re-sort the contact */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1248 if (contact->priority == buddy) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1249 gaim_contact_compute_priority_buddy(contact);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1250 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1251 ops->update(gaimbuddylist, cnode);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1252 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1253
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1254 /* Remove this buddy from the buddies hash table */
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1255 hb.name = g_strdup(gaim_normalize(buddy->account, buddy->name));
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1256 hb.account = buddy->account;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1257 hb.group = ((GaimBlistNode*)buddy)->parent->parent;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1258 g_hash_table_remove(gaimbuddylist->buddies, &hb);
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1259 g_free(hb.name);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1260
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1261 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1262 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1263 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1264
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1265 /* Delete the node */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1266 if (buddy->timer > 0)
8287
266eacc707ac [gaim-migrate @ 9011]
Scott Lamb
parents: 8273
diff changeset
1267 gaim_timeout_remove(buddy->timer);
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1268 if (buddy->icon != NULL)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1269 gaim_buddy_icon_unref(buddy->icon);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1270 g_hash_table_destroy(buddy->node.settings);
9944
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9928
diff changeset
1271 gaim_presence_remove_buddy(buddy->presence, buddy);
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9928
diff changeset
1272 gaim_presence_destroy(buddy->presence);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1273 g_free(buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1274 g_free(buddy->alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1275 g_free(buddy);
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1276
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1277 /* If the contact is empty then remove it */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1278 if (!cnode->child)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1279 gaim_blist_remove_contact(contact);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1280 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1281
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1282 void gaim_blist_remove_chat(GaimChat *chat)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1283 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1284 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1285 GaimBlistNode *node, *gnode;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1286 GaimGroup *group;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1287
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1288 g_return_if_fail(chat != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1289
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1290 node = (GaimBlistNode *)chat;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1291 gnode = node->parent;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1292 group = (GaimGroup *)gnode;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1293
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1294 /* Remove the node from its parent */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1295 if (gnode->child == node)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1296 gnode->child = node->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1297 if (node->prev)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1298 node->prev->next = node->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1299 if (node->next)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1300 node->next->prev = node->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1301
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1302 /* Adjust size counts */
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1303 if (gaim_account_is_connected(chat->account)) {
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
1304 group->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1305 group->currentsize--;
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
1306 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1307 group->totalsize--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1308
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1309 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1310
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1311 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1312 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1313 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1314
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1315 /* Delete the node */
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1316 g_hash_table_destroy(chat->components);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1317 g_free(chat->alias);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1318 g_free(chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1319 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1320
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1321 void gaim_blist_remove_group(GaimGroup *group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1322 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1323 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1324 GaimBlistNode *node;
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1325 GList *l;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1326
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1327 g_return_if_fail(group != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1328
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1329 node = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1330
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1331 /* Make sure the group is empty */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1332 if (node->child) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1333 char *buf;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1334 int count = 0;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1335 GaimBlistNode *child;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1336
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1337 for (child = node->child; child != NULL; child = child->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1338 count++;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1339
6308
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1340 buf = g_strdup_printf(ngettext("%d buddy from group %s was not removed "
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1341 "because its account was not logged in."
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1342 " This buddy and the group were not "
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1343 "removed.\n",
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1344 "%d buddies from group %s were not "
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1345 "removed because their accounts were "
6336
7c62a14b3486 [gaim-migrate @ 6835]
Mark Doliner <markdoliner@pidgin.im>
parents: 6322
diff changeset
1346 "not logged in. These buddies and "
7c62a14b3486 [gaim-migrate @ 6835]
Mark Doliner <markdoliner@pidgin.im>
parents: 6322
diff changeset
1347 "the group were not removed.\n", count),
6308
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1348 count, group->name);
5541
d4840f195f45 [gaim-migrate @ 5941]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1349 gaim_notify_error(NULL, NULL, _("Group not removed"), buf);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1350 g_free(buf);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1351 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1352 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1353
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1354 /* Remove the node from its parent */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1355 if (gaimbuddylist->root == node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1356 gaimbuddylist->root = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1357 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1358 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1359 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1360 node->next->prev = node->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1361
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1362 schedule_blist_save();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1363
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1364 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1365 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1366 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1367
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1368 /* Remove the group from all accounts that are online */
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1369 for (l = gaim_connections_get_all(); l != NULL; l = l->next)
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1370 {
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1371 GaimConnection *gc = (GaimConnection *)l->data;
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1372
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1373 if (gaim_connection_get_state(gc) == GAIM_CONNECTED)
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1374 serv_remove_group(gc, group);
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1375 }
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1376
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1377 /* Delete the node */
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1378 g_free(group->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1379 g_free(group);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1380 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1381
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1382 GaimBuddy *gaim_contact_get_priority_buddy(GaimContact *contact)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1383 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1384 g_return_val_if_fail(contact != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1385
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
1386 return contact->priority;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1387 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1388
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1389 const char *gaim_buddy_get_alias_only(GaimBuddy *buddy)
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1390 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1391 g_return_val_if_fail(buddy != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1392
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1393 if ((buddy->alias != NULL) && (*buddy->alias != '\0')) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1394 return buddy->alias;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1395 } else if ((buddy->server_alias != NULL) &&
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1396 (*buddy->server_alias != '\0') &&
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1397 (gaim_prefs_get_bool("/core/buddies/use_server_alias"))) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1398
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1399 return buddy->server_alias;
5545
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1400 }
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1401
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1402 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1403 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1404
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1405
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1406 const char *gaim_buddy_get_contact_alias(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1407 {
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1408 GaimContact *c;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1409
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1410 g_return_val_if_fail(buddy != NULL, NULL);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1411
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1412 /* Search for an alias for the buddy. In order of precedence: */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1413 /* The buddy alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1414 if (buddy->alias != NULL)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1415 return buddy->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1416
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1417 /* The contact alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1418 c = gaim_buddy_get_contact(buddy);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1419 if ((c != NULL) && (c->alias != NULL))
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1420 return c->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1421
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1422 /* The server alias, if preferences say so */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1423 if ((buddy->server_alias) && (*buddy->server_alias) &&
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1424 (gaim_prefs_get_bool("/core/buddies/use_server_alias")))
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1425 return buddy->server_alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1426
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1427 /* The buddy's user name (i.e. no alias) */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1428 return buddy->name;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1429 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1430
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1431
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1432 const char *gaim_buddy_get_alias(GaimBuddy *buddy)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1433 {
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1434 g_return_val_if_fail(buddy != NULL, NULL);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1435
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1436 /* Search for an alias for the buddy. In order of precedence: */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1437 /* The buddy alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1438 if (buddy->alias != NULL)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1439 return buddy->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1440
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1441 /* The server alias, if preferences say so */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1442 if ((buddy->server_alias) && (*buddy->server_alias) &&
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1443 (gaim_prefs_get_bool("/core/buddies/use_server_alias")))
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1444 return buddy->server_alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1445
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1446 /* The buddy's user name (i.e. no alias) */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1447 return buddy->name;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1448 }
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1449
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1450
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
1451 const char *gaim_chat_get_name(GaimChat *chat)
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
1452 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1453 struct proto_chat_entry *pce;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1454 GList *parts, *tmp;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1455 char *ret;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1456
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1457 g_return_val_if_fail(chat != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1458
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1459 if ((chat->alias != NULL) && (*chat->alias != '\0'))
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
1460 return chat->alias;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1461
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1462 parts = GAIM_PLUGIN_PROTOCOL_INFO(chat->account->gc->prpl)->chat_info(chat->account->gc);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1463 pce = parts->data;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1464 ret = g_hash_table_lookup(chat->components, pce->identifier);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1465 for (tmp = parts; tmp; tmp = tmp->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1466 g_free(tmp->data);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1467 g_list_free(parts);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1468
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1469 return ret;
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
1470 }
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
1471
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1472 GaimBuddy *gaim_find_buddy(GaimAccount *account, const char *name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1473 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1474 GaimBuddy *buddy;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1475 struct _gaim_hbuddy hb;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
1476 GaimBlistNode *group;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1477
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1478 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1479 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1480 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1481
7429
bc354dd928bf [gaim-migrate @ 8033]
Nathan Walp <nwalp@pidgin.im>
parents: 7420
diff changeset
1482 hb.account = account;
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1483 hb.name = g_strdup(gaim_normalize(account, name));
7429
bc354dd928bf [gaim-migrate @ 8033]
Nathan Walp <nwalp@pidgin.im>
parents: 7420
diff changeset
1484
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1485 for (group = gaimbuddylist->root; group; group = group->next) {
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
1486 hb.group = group;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1487 if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb))) {
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1488 g_free(hb.name);
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
1489 return buddy;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1490 }
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
1491 }
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1492 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1493
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
1494 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1495 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1496
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1497 GaimBuddy *gaim_find_buddy_in_group(GaimAccount *account, const char *name,
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1498 GaimGroup *group)
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1499 {
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1500 struct _gaim_hbuddy hb;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1501 GaimBuddy *ret;
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1502
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1503 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1504 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1505 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1506
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1507 hb.name = g_strdup(gaim_normalize(account, name));
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1508 hb.account = account;
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1509 hb.group = (GaimBlistNode*)group;
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1510
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1511 ret = g_hash_table_lookup(gaimbuddylist->buddies, &hb);
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1512 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1513
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1514 return ret;
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1515 }
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
1516
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1517 GSList *gaim_find_buddies(GaimAccount *account, const char *name)
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1518 {
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1519 struct buddy *buddy;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1520 struct _gaim_hbuddy hb;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1521 GaimBlistNode *node;
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1522 GSList *ret = NULL;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1523
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1524 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1525 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1526 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1527
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1528 hb.name = g_strdup(gaim_normalize(account, name));
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1529 hb.account = account;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1530
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1531 for (node = gaimbuddylist->root; node != NULL; node = node->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1532 hb.group = node;
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1533 if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb)) != NULL)
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1534 ret = g_slist_append(ret, buddy);
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1535 }
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1536 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1537
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1538 return ret;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1539 }
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
1540
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1541 GaimGroup *gaim_find_group(const char *name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1542 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1543 GaimBlistNode *node;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1544
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1545 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1546 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1547
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1548 for (node = gaimbuddylist->root; node != NULL; node = node->next) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1549 if (!strcmp(((GaimGroup *)node)->name, name))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1550 return (GaimGroup *)node;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1551 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1552
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1553 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1554 }
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1555
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1556 GaimChat *
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1557 gaim_blist_find_chat(GaimAccount *account, const char *name)
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1558 {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1559 char *chat_name;
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1560 GaimChat *chat;
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1561 GaimPlugin *prpl;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1562 GaimPluginProtocolInfo *prpl_info = NULL;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1563 struct proto_chat_entry *pce;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1564 GaimBlistNode *node, *group;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1565 GList *parts;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1566
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1567 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1568 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1569
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1570 if (!gaim_account_is_connected(account))
7970
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
1571 return NULL;
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
1572
7999
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
1573 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account));
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
1574 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl);
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
1575
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1576 if (prpl_info->find_blist_chat != NULL)
7999
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
1577 return prpl_info->find_blist_chat(account, name);
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
1578
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1579 for (group = gaimbuddylist->root; group != NULL; group = group->next) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1580 for (node = group->child; node != NULL; node = node->next) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1581 if (GAIM_BLIST_NODE_IS_CHAT(node)) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1582
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1583 chat = (GaimChat*)node;
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1584
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1585 if (account != chat->account)
7970
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
1586 continue;
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
1587
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1588 parts = prpl_info->chat_info(
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1589 gaim_account_get_connection(chat->account));
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1590
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1591 pce = parts->data;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1592 chat_name = g_hash_table_lookup(chat->components,
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1593 pce->identifier);
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1594
9153
d5e23e391a05 [gaim-migrate @ 9937]
Nathan Walp <nwalp@pidgin.im>
parents: 9109
diff changeset
1595 if (chat->account == account && chat_name != NULL &&
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1596 name != NULL && !strcmp(chat_name, name)) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1597
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1598 return chat;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1599 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1600 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1601 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1602 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1603
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1604 return NULL;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1605 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1606
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1607 GaimGroup *
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
1608 gaim_chat_get_group(GaimChat *chat)
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1609 {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1610 g_return_val_if_fail(chat != NULL, NULL);
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1611
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1612 return (GaimGroup *)(((GaimBlistNode *)chat)->parent);
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1613 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
1614
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1615 GaimContact *gaim_buddy_get_contact(GaimBuddy *buddy)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1616 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1617 g_return_val_if_fail(buddy != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1618
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1619 return (GaimContact*)((GaimBlistNode*)buddy)->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1620 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1621
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1622 GaimPresence *gaim_buddy_get_presence(const GaimBuddy *buddy)
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1623 {
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1624 g_return_val_if_fail(buddy != NULL, NULL);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1625 return buddy->presence;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1626 }
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1627
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1628
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1629 GaimGroup *gaim_find_buddys_group(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1630 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1631 g_return_val_if_fail(buddy != NULL, NULL);
6706
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
1632
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
1633 if (((GaimBlistNode *)buddy)->parent == NULL)
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
1634 return NULL;
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
1635
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1636 return (GaimGroup *)(((GaimBlistNode*)buddy)->parent->parent);
5228
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
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1639 GSList *gaim_group_get_accounts(GaimGroup *group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1640 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1641 GSList *l = NULL;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1642 GaimBlistNode *gnode, *cnode, *bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1643
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1644 gnode = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1645
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1646 for (cnode = gnode->child; cnode; cnode = cnode->next) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1647 if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1648 if (!g_slist_find(l, ((GaimChat *)cnode)->account))
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1649 l = g_slist_append(l, ((GaimChat *)cnode)->account);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1650 } else if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1651 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1652 if (GAIM_BLIST_NODE_IS_BUDDY(bnode)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1653 if (!g_slist_find(l, ((GaimBuddy *)bnode)->account))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1654 l = g_slist_append(l, ((GaimBuddy *)bnode)->account);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1655 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1656 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1657 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1658 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1659
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1660 return l;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1661 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1662
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1663 void gaim_blist_add_account(GaimAccount *account)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1664 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1665 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1666 GaimBlistNode *gnode, *cnode, *bnode;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1667
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1668 g_return_if_fail(gaimbuddylist != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1669
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1670 if (!ops || !ops->update)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1671 return;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1672
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1673 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1674 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1675 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1676 for (cnode = gnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1677 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
1678 gboolean recompute = FALSE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1679 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1680 if (GAIM_BLIST_NODE_IS_BUDDY(bnode) &&
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1681 ((GaimBuddy*)bnode)->account == account) {
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
1682 recompute = TRUE;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1683 ((GaimContact*)cnode)->currentsize++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1684 if (((GaimContact*)cnode)->currentsize == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1685 ((GaimGroup*)gnode)->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1686 ops->update(gaimbuddylist, bnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1687 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1688 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1689 if (recompute ||
8960
bfb231bd9ca0 [gaim-migrate @ 9734]
Nathan Walp <nwalp@pidgin.im>
parents: 8959
diff changeset
1690 gaim_blist_node_get_bool(cnode, "show_offline")) {
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
1691 gaim_contact_compute_priority_buddy((GaimContact*)cnode);
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
1692 ops->update(gaimbuddylist, cnode);
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
1693 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1694 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode) &&
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1695 ((GaimChat*)cnode)->account == account) {
6901
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
1696 ((GaimGroup *)gnode)->online++;
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
1697 ((GaimGroup *)gnode)->currentsize++;
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
1698 ops->update(gaimbuddylist, cnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1699 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1700 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1701 ops->update(gaimbuddylist, gnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1702 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1703 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1704
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
1705 void gaim_blist_remove_account(GaimAccount *account)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1706 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1707 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1708 GaimBlistNode *gnode, *cnode, *bnode;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1709
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1710 g_return_if_fail(gaimbuddylist != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1711
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1712 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1713 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1714 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1715 for (cnode = gnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1716 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
6957
4c45f4202c6f [gaim-migrate @ 7504]
Nathan Walp <nwalp@pidgin.im>
parents: 6956
diff changeset
1717 gboolean recompute = FALSE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1718 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1719 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1720 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1721 if (account == ((GaimBuddy *)bnode)->account) {
6957
4c45f4202c6f [gaim-migrate @ 7504]
Nathan Walp <nwalp@pidgin.im>
parents: 6956
diff changeset
1722 recompute = TRUE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1723 if (((GaimBuddy*)bnode)->present == GAIM_BUDDY_ONLINE ||
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1724 ((GaimBuddy*)bnode)->present == GAIM_BUDDY_SIGNING_ON) {
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1725 ((GaimContact*)cnode)->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1726 if (((GaimContact*)cnode)->online == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1727 ((GaimGroup*)gnode)->online--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1728 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1729 ((GaimContact*)cnode)->currentsize--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1730 if (((GaimContact*)cnode)->currentsize == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1731 ((GaimGroup*)gnode)->currentsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1732
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1733 ((GaimBuddy*)bnode)->present = GAIM_BUDDY_OFFLINE;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1734
6803
4bd2e181b3ab [gaim-migrate @ 7343]
Nathan Walp <nwalp@pidgin.im>
parents: 6794
diff changeset
1735 ((GaimBuddy*)bnode)->uc = 0;
9944
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9928
diff changeset
1736 /* XXX ((GaimBuddy*)bnode)->idle = 0; */
6803
4bd2e181b3ab [gaim-migrate @ 7343]
Nathan Walp <nwalp@pidgin.im>
parents: 6794
diff changeset
1737
6945
1f16326407fe [gaim-migrate @ 7492]
Nathan Walp <nwalp@pidgin.im>
parents: 6901
diff changeset
1738
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1739 if (ops && ops->remove)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1740 ops->remove(gaimbuddylist, bnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1741 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1742 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1743 if (recompute) {
6959
80a03de1a82f [gaim-migrate @ 7506]
Nathan Walp <nwalp@pidgin.im>
parents: 6957
diff changeset
1744 gaim_contact_compute_priority_buddy((GaimContact*)cnode);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1745 if (ops && ops->update)
6983
a32d7b7d0739 [gaim-migrate @ 7539]
Nathan Walp <nwalp@pidgin.im>
parents: 6975
diff changeset
1746 ops->update(gaimbuddylist, cnode);
a32d7b7d0739 [gaim-migrate @ 7539]
Nathan Walp <nwalp@pidgin.im>
parents: 6975
diff changeset
1747 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1748 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode) &&
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1749 ((GaimChat*)cnode)->account == account) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1750 ((GaimGroup*)gnode)->currentsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1751 ((GaimGroup*)gnode)->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1752 if (ops && ops->remove)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1753 ops->remove(gaimbuddylist, cnode);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1754 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1755 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1756 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1757 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1758
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1759 gboolean gaim_group_on_account(GaimGroup *g, GaimAccount *account)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1760 {
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1761 GaimBlistNode *cnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1762 for (cnode = ((GaimBlistNode *)g)->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1763 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1764 if(gaim_contact_on_account((GaimContact *) cnode, account))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1765 return TRUE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1766 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1767 GaimChat *chat = (GaimChat *)cnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1768 if ((!account && gaim_account_is_connected(chat->account))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1769 || chat->account == account)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1770 return TRUE;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1771 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1772 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1773 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1774 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1775
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1776 static gboolean blist_safe_to_write = FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1777
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1778 static void parse_setting(GaimBlistNode *node, xmlnode *setting)
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1779 {
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1780 const char *name = xmlnode_get_attrib(setting, "name");
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1781 const char *type = xmlnode_get_attrib(setting, "type");
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1782 char *value = xmlnode_get_data(setting);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1783
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1784 if (!value)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1785 return;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1786
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1787 if (!type || !strcmp(type, "string"))
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1788 gaim_blist_node_set_string(node, name, value);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1789 else if (!strcmp(type, "bool"))
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1790 gaim_blist_node_set_bool(node, name, atoi(value));
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1791 else if (!strcmp(type, "int"))
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1792 gaim_blist_node_set_int(node, name, atoi(value));
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1793
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1794 g_free(value);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1795 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1796
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1797 static void parse_buddy(GaimGroup *group, GaimContact *contact, xmlnode *bnode)
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1798 {
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1799 GaimAccount *account;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1800 GaimBuddy *buddy;
7727
c411c25868d1 [gaim-migrate @ 8372]
Nathan Walp <nwalp@pidgin.im>
parents: 7726
diff changeset
1801 char *name = NULL, *alias = NULL;
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1802 const char *acct_name, *proto, *protocol;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1803 xmlnode *x;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1804
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1805 acct_name = xmlnode_get_attrib(bnode, "account");
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1806 protocol = xmlnode_get_attrib(bnode, "protocol");
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1807 proto = xmlnode_get_attrib(bnode, "proto");
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1808
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1809 if (!acct_name || (!proto && !protocol))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1810 return;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1811
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1812 account = gaim_accounts_find(acct_name, proto ? proto : protocol);
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1813
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1814 if (!account)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1815 return;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1816
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1817 if ((x = xmlnode_get_child(bnode, "name")))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1818 name = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1819
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1820 if (!name)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1821 return;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1822
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1823 if ((x = xmlnode_get_child(bnode, "alias")))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1824 alias = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1825
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1826 buddy = gaim_buddy_new(account, name, alias);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1827 gaim_blist_add_buddy(buddy, contact, group,
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1828 gaim_blist_get_last_child((GaimBlistNode*)contact));
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1829
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1830 for (x = xmlnode_get_child(bnode, "setting"); x; x = xmlnode_get_next_twin(x)) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1831 parse_setting((GaimBlistNode*)buddy, x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1832 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1833
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1834 g_free(name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1835 if (alias)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1836 g_free(alias);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1837 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1838
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1839 static void parse_contact(GaimGroup *group, xmlnode *cnode)
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1840 {
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1841 GaimContact *contact = gaim_contact_new();
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1842 xmlnode *x;
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1843 const char *alias;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1844
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1845 gaim_blist_add_contact(contact, group,
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1846 gaim_blist_get_last_child((GaimBlistNode*)group));
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1847
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1848 if ((alias = xmlnode_get_attrib(cnode, "alias"))) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1849 gaim_contact_set_alias(contact, alias);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1850 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1851
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1852 for (x = cnode->child; x; x = x->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1853 if (x->type != XMLNODE_TYPE_TAG)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1854 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1855 if (!strcmp(x->name, "buddy"))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1856 parse_buddy(group, contact, x);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1857 else if (!strcmp(x->name, "setting"))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1858 parse_setting((GaimBlistNode*)contact, x);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1859 }
7825
a14f1c3fbbb3 [gaim-migrate @ 8477]
Nathan Walp <nwalp@pidgin.im>
parents: 7727
diff changeset
1860
a14f1c3fbbb3 [gaim-migrate @ 8477]
Nathan Walp <nwalp@pidgin.im>
parents: 7727
diff changeset
1861 /* if the contact is empty, don't keep it around. it causes problems */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1862 if (!((GaimBlistNode*)contact)->child)
7825
a14f1c3fbbb3 [gaim-migrate @ 8477]
Nathan Walp <nwalp@pidgin.im>
parents: 7727
diff changeset
1863 gaim_blist_remove_contact(contact);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1864 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1865
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1866 static void parse_chat(GaimGroup *group, xmlnode *cnode)
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1867 {
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1868 GaimChat *chat;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1869 GaimAccount *account;
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1870 const char *acct_name, *proto, *protocol;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1871 xmlnode *x;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1872 char *alias = NULL;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1873 GHashTable *components;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1874
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1875 acct_name = xmlnode_get_attrib(cnode, "account");
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1876 protocol = xmlnode_get_attrib(cnode, "protocol");
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1877 proto = xmlnode_get_attrib(cnode, "proto");
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1878
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1879 if (!acct_name || (!proto && !protocol))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1880 return;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1881
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1882 account = gaim_accounts_find(acct_name, proto ? proto : protocol);
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1883
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1884 if (!account)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1885 return;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1886
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1887 if ((x = xmlnode_get_child(cnode, "alias")))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1888 alias = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1889
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1890 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1891
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1892 for (x = xmlnode_get_child(cnode, "component"); x; x = xmlnode_get_next_twin(x)) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1893 const char *name;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1894 char *value;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1895
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1896 name = xmlnode_get_attrib(x, "name");
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1897 value = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1898 g_hash_table_replace(components, g_strdup(name), value);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1899 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1900
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1901 chat = gaim_chat_new(account, alias, components);
7151
1aaef4debfcf [gaim-migrate @ 7718]
Nathan Walp <nwalp@pidgin.im>
parents: 7133
diff changeset
1902 gaim_blist_add_chat(chat, group,
1aaef4debfcf [gaim-migrate @ 7718]
Nathan Walp <nwalp@pidgin.im>
parents: 7133
diff changeset
1903 gaim_blist_get_last_child((GaimBlistNode*)group));
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1904
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1905 for (x = xmlnode_get_child(cnode, "setting"); x; x = xmlnode_get_next_twin(x)) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1906 parse_setting((GaimBlistNode*)chat, x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1907 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1908
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1909 if (alias)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1910 g_free(alias);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1911 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1912
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1913
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1914 static void parse_group(xmlnode *groupnode)
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1915 {
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1916 const char *name = xmlnode_get_attrib(groupnode, "name");
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1917 GaimGroup *group;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1918 xmlnode *cnode;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1919
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1920 if (!name)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1921 name = _("Buddies");
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1922
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1923 group = gaim_group_new(name);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1924 gaim_blist_add_group(group,
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1925 gaim_blist_get_last_sibling(gaimbuddylist->root));
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1926
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1927 for (cnode = groupnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1928 if (cnode->type != XMLNODE_TYPE_TAG)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1929 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1930 if (!strcmp(cnode->name, "setting"))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1931 parse_setting((GaimBlistNode*)group, cnode);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1932 else if (!strcmp(cnode->name, "contact") ||
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1933 !strcmp(cnode->name, "person"))
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1934 parse_contact(group, cnode);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1935 else if (!strcmp(cnode->name, "chat"))
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1936 parse_chat(group, cnode);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1937 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1938 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1939
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1940 static gboolean gaim_blist_read(const char *filename)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1941 {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1942 GError *error;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1943 gchar *contents = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1944 gsize length;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1945 xmlnode *gaim, *blist, *privacy;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1946
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1947 gaim_debug(GAIM_DEBUG_INFO, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1948 "Reading %s\n", filename);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1949 if (!g_file_get_contents(filename, &contents, &length, &error)) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1950 gaim_debug(GAIM_DEBUG_ERROR, "blist import",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1951 "Error reading blist: %s\n", error->message);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1952 g_error_free(error);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1953 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1954 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1955
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1956 gaim = xmlnode_from_str(contents, length);
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1957
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1958 if (!gaim) {
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1959 FILE *backup;
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1960 char *name;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1961 gaim_debug(GAIM_DEBUG_ERROR, "blist import", "Error parsing %s\n",
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1962 filename);
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1963 name = g_build_filename(gaim_user_dir(), "blist.xml~", NULL);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1964
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1965 if ((backup = fopen(name, "w"))) {
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1966 fwrite(contents, length, 1, backup);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1967 fclose(backup);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1968 chmod(name, S_IRUSR | S_IWUSR);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1969 } else {
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1970 gaim_debug(GAIM_DEBUG_ERROR, "blist load", "Unable to write backup %s\n",
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1971 name);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1972 }
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1973 g_free(name);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1974 g_free(contents);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1975 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1976 }
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1977
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1978 g_free(contents);
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
1979
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1980 blist = xmlnode_get_child(gaim, "blist");
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1981 if (blist) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1982 xmlnode *groupnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1983 for (groupnode = xmlnode_get_child(blist, "group"); groupnode;
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8129
diff changeset
1984 groupnode = xmlnode_get_next_twin(groupnode)) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1985 parse_group(groupnode);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1986 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1987 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1988
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1989 privacy = xmlnode_get_child(gaim, "privacy");
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1990 if (privacy) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1991 xmlnode *anode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1992 for (anode = privacy->child; anode; anode = anode->next) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1993 xmlnode *x;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1994 GaimAccount *account;
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1995 const char *acct_name, *proto, *mode, *protocol;
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1996
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
1997 acct_name = xmlnode_get_attrib(anode, "name");
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1998 protocol = xmlnode_get_attrib(anode, "protocol");
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
1999 proto = xmlnode_get_attrib(anode, "proto");
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2000 mode = xmlnode_get_attrib(anode, "mode");
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2001
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2002 if (!acct_name || (!proto && !protocol) || !mode)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2003 continue;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2004
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
2005 account = gaim_accounts_find(acct_name, proto ? proto : protocol);
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2006
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2007 if (!account)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2008 continue;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2009
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2010 account->perm_deny = atoi(mode);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2011
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2012 for (x = anode->child; x; x = x->next) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2013 char *name;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2014 if (x->type != XMLNODE_TYPE_TAG)
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2015 continue;
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2016
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2017 if (!strcmp(x->name, "permit")) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2018 name = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2019 gaim_privacy_permit_add(account, name, TRUE);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2020 g_free(name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2021 } else if (!strcmp(x->name, "block")) {
7132
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2022 name = xmlnode_get_data(x);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2023 gaim_privacy_deny_add(account, name, TRUE);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2024 g_free(name);
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2025 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2026 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2027 }
97f31115cc80 [gaim-migrate @ 7699]
Nathan Walp <nwalp@pidgin.im>
parents: 7125
diff changeset
2028 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2029
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2030 gaim_debug(GAIM_DEBUG_INFO, "blist import", "Finished reading %s\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2031 filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2032
8200
555d3da2cff0 [gaim-migrate @ 8923]
Nathan Walp <nwalp@pidgin.im>
parents: 8194
diff changeset
2033 xmlnode_free(gaim);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2034 return TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2035 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2036
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2037 void gaim_blist_load()
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2038 {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2039 char *user_dir = gaim_user_dir();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2040 char *filename;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2041 char *msg;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2042
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2043 blist_safe_to_write = TRUE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2044
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2045 if (!user_dir)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2046 return;
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 filename = g_build_filename(user_dir, "blist.xml", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2049
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2050 if (g_file_test(filename, G_FILE_TEST_EXISTS)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2051 if (!gaim_blist_read(filename)) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2052 msg = g_strdup_printf(_("An error was encountered parsing your "
8826
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
2053 "buddy list. It has not been loaded, "
c70765d357d2 [gaim-migrate @ 9590]
Sean Egan <seanegan@pidgin.im>
parents: 8735
diff changeset
2054 "and the old file has moved to blist.xml~."));
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
2055 gaim_notify_error(NULL, NULL, _("Buddy List Error"), msg);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2056 g_free(msg);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2057 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2058 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2059
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2060 g_free(filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2061 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2062
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2063 void
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2064 gaim_blist_request_add_buddy(GaimAccount *account, const char *username,
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2065 const char *group, const char *alias)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2066 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2067 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2068
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2069 ui_ops = gaim_blist_get_ui_ops();
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2070
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2071 if (ui_ops != NULL && ui_ops->request_add_buddy != NULL)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2072 ui_ops->request_add_buddy(account, username, group, alias);
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2073 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2074
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2075 void
9754
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2076 gaim_blist_request_add_chat(GaimAccount *account, GaimGroup *group,
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2077 const char *alias, const char *name)
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2078 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2079 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2080
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2081 ui_ops = gaim_blist_get_ui_ops();
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2082
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2083 if (ui_ops != NULL && ui_ops->request_add_chat != NULL)
9754
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2084 ui_ops->request_add_chat(account, group, alias, name);
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2085 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2086
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2087 void
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2088 gaim_blist_request_add_group(void)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2089 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2090 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2091
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2092 ui_ops = gaim_blist_get_ui_ops();
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2093
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2094 if (ui_ops != NULL && ui_ops->request_add_group != NULL)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2095 ui_ops->request_add_group();
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2096 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2097
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2098 static void blist_print_setting(const char *key,
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2099 struct gaim_blist_node_setting *setting, FILE *file, int indent)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2100 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2101 char *key_val, *data_val = NULL;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2102 const char *type = NULL;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2103 int i;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2104
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2105 if (!key)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2106 return;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2107
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2108 switch(setting->type) {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2109 case GAIM_BLIST_NODE_SETTING_BOOL:
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2110 type = "bool";
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2111 data_val = g_strdup_printf("%d", setting->value.boolean);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2112 break;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2113 case GAIM_BLIST_NODE_SETTING_INT:
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2114 type = "int";
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2115 data_val = g_strdup_printf("%d", setting->value.integer);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2116 break;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2117 case GAIM_BLIST_NODE_SETTING_STRING:
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2118 if (!setting->value.string)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2119 return;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2120
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2121 type = "string";
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2122 data_val = g_markup_escape_text(setting->value.string, -1);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2123 break;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2124 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2125
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2126 /* this can't happen */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2127 if (!type || !data_val)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2128 return;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2129
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2130 for (i=0; i<indent; i++) fprintf(file, "\t");
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2131
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2132 key_val = g_markup_escape_text(key, -1);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2133 fprintf(file, "<setting name=\"%s\" type=\"%s\">%s</setting>\n", key_val, type,
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2134 data_val);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2135
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2136 g_free(key_val);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2137 g_free(data_val);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2138 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2139
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2140 static void blist_print_group_settings(gpointer key, gpointer data,
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2141 gpointer user_data)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2142 {
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2143 blist_print_setting(key, data, user_data, 3);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2144 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2145
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2146 static void blist_print_buddy_settings(gpointer key, gpointer data,
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2147 gpointer user_data)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2148 {
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2149 blist_print_setting(key, data, user_data, 5);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2150 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2151
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2152 static void blist_print_cnode_settings(gpointer key, gpointer data,
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2153 gpointer user_data)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2154 {
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2155 blist_print_setting(key, data, user_data, 4);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2156 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2157
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2158 static void blist_print_chat_components(gpointer key, gpointer data,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2159 gpointer user_data) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2160 char *key_val;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2161 char *data_val;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2162 FILE *file = user_data;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2163
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2164 if (!key || !data)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2165 return;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2166
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2167 key_val = g_markup_escape_text(key, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2168 data_val = g_markup_escape_text(data, -1);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2169
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2170 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
2171 data_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2172 g_free(key_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2173 g_free(data_val);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2174 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2175
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2176 static void print_buddy(FILE *file, GaimBuddy *buddy)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2177 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2178 char *bud_name = g_markup_escape_text(buddy->name, -1);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2179 char *bud_alias = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2180 char *acct_name = g_markup_escape_text(buddy->account->username, -1);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2181 if (buddy->alias)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2182 bud_alias= g_markup_escape_text(buddy->alias, -1);
9460
7c1ab9155fe2 [gaim-migrate @ 10285]
Daniel Atallah <datallah@pidgin.im>
parents: 9324
diff changeset
2183 fprintf(file, "\t\t\t\t<buddy account=\"%s\" proto=\"%s\">\n", acct_name,
7153
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
2184 gaim_account_get_protocol_id(buddy->account));
2b49a7d5ac97 [gaim-migrate @ 7720]
Nathan Walp <nwalp@pidgin.im>
parents: 7151
diff changeset
2185
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2186 fprintf(file, "\t\t\t\t\t<name>%s</name>\n", bud_name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2187 if (bud_alias) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2188 fprintf(file, "\t\t\t\t\t<alias>%s</alias>\n", bud_alias);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2189 }
7726
4f59399d6a5e [gaim-migrate @ 8371]
Luke Schierer <lschiere@pidgin.im>
parents: 7725
diff changeset
2190 g_hash_table_foreach(buddy->node.settings, blist_print_buddy_settings, file);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2191 fprintf(file, "\t\t\t\t</buddy>\n");
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2192 g_free(bud_name);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2193 g_free(bud_alias);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2194 g_free(acct_name);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2195 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2196
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2197
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2198 /* check for flagging and account exclusion on buddy */
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2199 static gboolean blist_buddy_should_save(GaimAccount *exp_acct, GaimBuddy *buddy)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2200 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2201 if (! GAIM_BLIST_NODE_SHOULD_SAVE((GaimBlistNode *) buddy))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2202 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2203
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2204 if (exp_acct && buddy->account != exp_acct)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2205 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2206
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2207 return TRUE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2208 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2209
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2210
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2211 static void blist_write_buddy(FILE *file, GaimAccount *exp_acct, GaimBuddy *buddy)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2212 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2213 if (blist_buddy_should_save(exp_acct, buddy))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2214 print_buddy(file, buddy);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2215 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2216
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2217
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2218 /* check for flagging and account exclusion on contact and all members */
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2219 static gboolean blist_contact_should_save(GaimAccount *exp_acct, GaimContact *contact)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2220 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2221 GaimBlistNode *bnode, *cnode = (GaimBlistNode *) contact;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2222
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2223 if (! GAIM_BLIST_NODE_SHOULD_SAVE(cnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2224 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2225
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2226 for (bnode = cnode->child; bnode; bnode = bnode->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2227 if (! GAIM_BLIST_NODE_IS_BUDDY(bnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2228 continue;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2229
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2230 if (blist_buddy_should_save(exp_acct, (GaimBuddy *) bnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2231 return TRUE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2232 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2233
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2234 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2235 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2236
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2237
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2238 static void blist_write_contact(FILE *file, GaimAccount *exp_acct, GaimContact *contact)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2239 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2240 GaimBlistNode *bnode, *cnode = (GaimBlistNode *) contact;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2241
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2242 if (! blist_contact_should_save(exp_acct, contact))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2243 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2244
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2245 fprintf(file, "\t\t\t<contact");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2246 if (contact->alias) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2247 char *alias = g_markup_escape_text(contact->alias, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2248 fprintf(file, " alias=\"%s\"", alias);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2249 g_free(alias);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2250 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2251 fprintf(file, ">\n");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2252
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2253 for (bnode = cnode->child; bnode; bnode = bnode->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2254 if (GAIM_BLIST_NODE_IS_BUDDY(bnode)) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2255 blist_write_buddy(file, exp_acct, (GaimBuddy *) bnode);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2256 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2257 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2258
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2259 g_hash_table_foreach(cnode->settings, blist_print_cnode_settings, file);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2260 fprintf(file, "\t\t\t</contact>\n");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2261 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2262
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2263
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2264 static void blist_write_chat(FILE *file, GaimAccount *exp_acct, GaimChat *chat)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2265 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2266 char *acct_name;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2267
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2268 if (! GAIM_BLIST_NODE_SHOULD_SAVE((GaimBlistNode *) chat))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2269 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2270
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2271 if (exp_acct && chat->account != exp_acct)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2272 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2273
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2274 acct_name = g_markup_escape_text(chat->account->username, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2275 fprintf(file, "\t\t\t<chat proto=\"%s\" account=\"%s\">\n",
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2276 gaim_account_get_protocol_id(chat->account), acct_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2277 g_free(acct_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2278
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2279 if (chat->alias) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2280 char *chat_alias = g_markup_escape_text(chat->alias, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2281 fprintf(file, "\t\t\t\t<alias>%s</alias>\n", chat_alias);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2282 g_free(chat_alias);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2283 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2284
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2285 g_hash_table_foreach(chat->components, blist_print_chat_components, file);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2286 g_hash_table_foreach(chat->node.settings, blist_print_cnode_settings, file);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2287
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2288 fprintf(file, "\t\t\t</chat>\n");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2289 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2290
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2291
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2292 static void blist_write_group(FILE *file, GaimAccount *exp_acct, GaimGroup *group)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2293 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2294 GaimBlistNode *cnode, *gnode = (GaimBlistNode *) group;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2295 char *group_name;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2296
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2297 if (! GAIM_BLIST_NODE_SHOULD_SAVE(gnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2298 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2299
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2300 if (exp_acct && ! gaim_group_on_account(group, exp_acct))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2301 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2302
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2303 group_name = g_markup_escape_text(group->name, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2304 fprintf(file, "\t\t<group name=\"%s\">\n", group_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2305 g_free(group_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2306
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2307 g_hash_table_foreach(group->node.settings,
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2308 blist_print_group_settings, file);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2309
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2310 for (cnode = gnode->child; cnode; cnode = cnode->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2311 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2312 blist_write_contact(file, exp_acct, (GaimContact *) cnode);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2313 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2314 blist_write_chat(file, exp_acct, (GaimChat *) cnode);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2315 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2316 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2317
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2318 fprintf(file, "\t\t</group>\n");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2319 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2320
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2321
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2322 static void blist_write_privacy_account(FILE *file, GaimAccount *exp_acct, GaimAccount *account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2323 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2324 char *acct_name;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2325 GSList *buds;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2326
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2327 if(exp_acct && exp_acct != account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2328 return;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2329
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2330 acct_name = g_markup_escape_text(account->username, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2331 fprintf(file, "\t\t<account proto=\"%s\" name=\"%s\" mode=\"%d\">\n",
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2332 gaim_account_get_protocol_id(account),
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2333 acct_name, account->perm_deny);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2334 g_free(acct_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2335
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2336 for (buds = account->permit; buds; buds = buds->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2337 char *bud_name = g_markup_escape_text(buds->data, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2338 fprintf(file, "\t\t\t<permit>%s</permit>\n", bud_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2339 g_free(bud_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2340 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2341
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2342 for (buds = account->deny; buds; buds = buds->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2343 char *bud_name = g_markup_escape_text(buds->data, -1);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2344 fprintf(file, "\t\t\t<block>%s</block>\n", bud_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2345 g_free(bud_name);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2346 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2347
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2348 fprintf(file, "\t\t</account>\n");
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2349 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2350
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2351
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2352 static void gaim_blist_write(FILE *file, GaimAccount *exp_acct)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2353 {
5580
a5a3e6dfb409 [gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents: 5563
diff changeset
2354 GList *accounts;
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2355 GaimBlistNode *gnode;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2356
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2357 fprintf(file, "<?xml version='1.0' encoding='UTF-8' ?>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2358 fprintf(file, "<gaim version=\"1\">\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2359 fprintf(file, "\t<blist>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2360
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2361 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2362 if (GAIM_BLIST_NODE_IS_GROUP(gnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2363 blist_write_group(file, exp_acct, (GaimGroup *) gnode);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2364 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2365
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2366 fprintf(file, "\t</blist>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2367 fprintf(file, "\t<privacy>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2368
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2369 for (accounts = gaim_accounts_get_all(); accounts; accounts = accounts->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2370 blist_write_privacy_account(file, exp_acct, (GaimAccount *) accounts->data);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2371 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2372
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2373 fprintf(file, "\t</privacy>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2374 fprintf(file, "</gaim>\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2375 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2376
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2377
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2378 void gaim_blist_sync()
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2379 {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2380 FILE *file;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2381 char *user_dir = gaim_user_dir();
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2382 char *filename;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2383 char *filename_real;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2384
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2385 if (!user_dir)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2386 return;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2387
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2388 if (!blist_safe_to_write) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2389 gaim_debug(GAIM_DEBUG_WARNING, "blist save",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2390 "AHH!! Tried to write the blist before we read it!\n");
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2391 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2392 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2393
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2394 file = fopen(user_dir, "r");
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2395 if (!file)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2396 mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2397 else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2398 fclose(file);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2399
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2400 filename = g_build_filename(user_dir, "blist.xml.save", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2401
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2402 if ((file = fopen(filename, "w"))) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2403 gaim_blist_write(file, NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2404 fclose(file);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2405 chmod(filename, S_IRUSR | S_IWUSR);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2406 } else {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2407 gaim_debug(GAIM_DEBUG_ERROR, "blist save", "Unable to write %s\n",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2408 filename);
8549
caf1637b2c17 [gaim-migrate @ 9291]
Nathan Walp <nwalp@pidgin.im>
parents: 8430
diff changeset
2409 g_free(filename);
caf1637b2c17 [gaim-migrate @ 9291]
Nathan Walp <nwalp@pidgin.im>
parents: 8430
diff changeset
2410 return;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2411 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2412
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2413 filename_real = g_build_filename(user_dir, "blist.xml", NULL);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2414
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2415 if (rename(filename, filename_real) < 0)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2416 gaim_debug(GAIM_DEBUG_ERROR, "blist save",
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2417 "Error renaming %s to %s\n", filename, filename_real);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2418
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2419
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2420 g_free(filename);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2421 g_free(filename_real);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2422 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2423
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2424
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2425 static void gaim_blist_node_setting_free(struct gaim_blist_node_setting *setting)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2426 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2427 switch(setting->type) {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2428 case GAIM_BLIST_NODE_SETTING_BOOL:
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2429 case GAIM_BLIST_NODE_SETTING_INT:
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2430 break;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2431 case GAIM_BLIST_NODE_SETTING_STRING:
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2432 g_free(setting->value.string);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2433 break;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2434 }
8020
9c5ae652fc7f [gaim-migrate @ 8700]
Nathan Walp <nwalp@pidgin.im>
parents: 7999
diff changeset
2435 g_free(setting);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2436 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2437
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2438 static void gaim_blist_node_initialize_settings(GaimBlistNode *node)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2439 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2440 if (node->settings)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2441 return;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2442
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2443 node->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2444 (GDestroyNotify)gaim_blist_node_setting_free);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2445 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2446
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2447 void gaim_blist_node_remove_setting(GaimBlistNode *node, const char *key)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2448 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2449 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2450 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2451 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2452
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2453 g_hash_table_remove(node->settings, key);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2454
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2455 schedule_blist_save();
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2456 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2457
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2458
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2459 void gaim_blist_node_set_bool(GaimBlistNode* node, const char *key, gboolean value)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2460 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2461 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2462
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2463 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2464 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2465 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2466
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2467 setting = g_new0(struct gaim_blist_node_setting, 1);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2468 setting->type = GAIM_BLIST_NODE_SETTING_BOOL;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2469 setting->value.boolean = value;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2470
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2471 g_hash_table_replace(node->settings, g_strdup(key), setting);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2472
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2473 schedule_blist_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2474 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2475
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2476 gboolean gaim_blist_node_get_bool(GaimBlistNode* node, const char *key)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2477 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2478 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2479
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2480 g_return_val_if_fail(node != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2481 g_return_val_if_fail(node->settings != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2482 g_return_val_if_fail(key != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2483
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2484 setting = g_hash_table_lookup(node->settings, key);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2485
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2486 if (!setting)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2487 return FALSE;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2488
7848
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2489 g_return_val_if_fail(setting->type == GAIM_BLIST_NODE_SETTING_BOOL, FALSE);
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2490
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2491 return setting->value.boolean;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2492 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2493
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2494 void gaim_blist_node_set_int(GaimBlistNode* node, const char *key, int value)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2495 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2496 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2497
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2498 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2499 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2500 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2501
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2502 setting = g_new0(struct gaim_blist_node_setting, 1);
8071
7a96fd51b973 [gaim-migrate @ 8769]
Etan Reisner <deryni@pidgin.im>
parents: 8046
diff changeset
2503 setting->type = GAIM_BLIST_NODE_SETTING_INT;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2504 setting->value.integer = value;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2505
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2506 g_hash_table_replace(node->settings, g_strdup(key), setting);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2507
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2508 schedule_blist_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2509 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2510
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2511 int gaim_blist_node_get_int(GaimBlistNode* node, const char *key)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2512 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2513 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2514
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2515 g_return_val_if_fail(node != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2516 g_return_val_if_fail(node->settings != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2517 g_return_val_if_fail(key != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2518
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2519 setting = g_hash_table_lookup(node->settings, key);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2520
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2521 if (!setting)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2522 return 0;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2523
7848
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2524 g_return_val_if_fail(setting->type == GAIM_BLIST_NODE_SETTING_INT, 0);
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2525
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2526 return setting->value.integer;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2527 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2528
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2529 void gaim_blist_node_set_string(GaimBlistNode* node, const char *key,
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2530 const char *value)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5874
diff changeset
2531 {
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2532 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2533
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2534 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2535 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2536 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2537
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2538 setting = g_new0(struct gaim_blist_node_setting, 1);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2539 setting->type = GAIM_BLIST_NODE_SETTING_STRING;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2540 setting->value.string = g_strdup(value);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2541
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2542 g_hash_table_replace(node->settings, g_strdup(key), setting);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2543
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2544 schedule_blist_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2545 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2546
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2547 const char *gaim_blist_node_get_string(GaimBlistNode* node, const char *key)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2548 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2549 struct gaim_blist_node_setting *setting;
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2550
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2551 g_return_val_if_fail(node != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2552 g_return_val_if_fail(node->settings != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2553 g_return_val_if_fail(key != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2554
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2555 setting = g_hash_table_lookup(node->settings, key);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2556
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2557 if (!setting)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2558 return NULL;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2559
7848
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2560 g_return_val_if_fail(setting->type == GAIM_BLIST_NODE_SETTING_STRING, NULL);
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2561
b5f43f67a55e [gaim-migrate @ 8502]
Nathan Walp <nwalp@pidgin.im>
parents: 7826
diff changeset
2562 return setting->value.string;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2563 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2564
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2565 GList *gaim_blist_node_get_extended_menu(GaimBlistNode *n)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2566 {
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2567 GList *menu = NULL;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2568
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2569 g_return_val_if_fail(n, NULL);
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2570
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2571 gaim_signal_emit(gaim_blist_get_handle(),
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2572 "blist-node-extended-menu",
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2573 n, &menu);
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2574 return menu;
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2575 }
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2576
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2577
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2578 GaimBlistNodeAction *
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2579 gaim_blist_node_action_new(char *label,
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2580 void (*callback)(GaimBlistNode *, gpointer),
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2581 gpointer data)
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2582 {
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2583 GaimBlistNodeAction *act = g_new0(GaimBlistNodeAction, 1);
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2584 act->label = label;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2585 act->callback = callback;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2586 act->data = data;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2587 return act;
8952
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2588 }
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2589
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2590
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2591 int gaim_blist_get_group_size(GaimGroup *group, gboolean offline)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2592 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2593 if (!group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2594 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2595
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2596 return offline ? group->totalsize : group->currentsize;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2597 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2598
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2599 int gaim_blist_get_group_online_count(GaimGroup *group)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2600 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2601 if (!group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2602 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2603
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2604 return group->online;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2605 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2606
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2607 void
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2608 gaim_blist_set_ui_ops(GaimBlistUiOps *ops)
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2609 {
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2610 blist_ui_ops = ops;
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2611 }
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2612
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2613 GaimBlistUiOps *
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2614 gaim_blist_get_ui_ops(void)
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2615 {
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2616 return blist_ui_ops;
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2617 }
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2618
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2619
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2620 void *
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2621 gaim_blist_get_handle(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2622 {
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2623 static int handle;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2624
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2625 return &handle;
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2626 }
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2627
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2628 void
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2629 gaim_blist_init(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2630 {
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2631 void *handle = gaim_blist_get_handle();
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2632
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2633 gaim_signal_register(handle, "buddy-away",
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2634 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2635 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2636 GAIM_SUBTYPE_BLIST_BUDDY));
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2637
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2638 gaim_signal_register(handle, "buddy-back",
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2639 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2640 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2641 GAIM_SUBTYPE_BLIST_BUDDY));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2642
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2643 gaim_signal_register(handle, "buddy-idle",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2644 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2645 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2646 GAIM_SUBTYPE_BLIST_BUDDY));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2647 gaim_signal_register(handle, "buddy-unidle",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2648 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2649 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2650 GAIM_SUBTYPE_BLIST_BUDDY));
9109
c9df1dd44feb [gaim-migrate @ 9886]
Christian Hammond <chipx86@chipx86.com>
parents: 9030
diff changeset
2651 gaim_signal_register(handle, "buddy-idle-updated",
c9df1dd44feb [gaim-migrate @ 9886]
Christian Hammond <chipx86@chipx86.com>
parents: 9030
diff changeset
2652 gaim_marshal_VOID__POINTER, NULL, 1,
c9df1dd44feb [gaim-migrate @ 9886]
Christian Hammond <chipx86@chipx86.com>
parents: 9030
diff changeset
2653 gaim_value_new(GAIM_TYPE_SUBTYPE,
c9df1dd44feb [gaim-migrate @ 9886]
Christian Hammond <chipx86@chipx86.com>
parents: 9030
diff changeset
2654 GAIM_SUBTYPE_BLIST_BUDDY));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2655
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2656 gaim_signal_register(handle, "buddy-signed-on",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2657 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2658 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2659 GAIM_SUBTYPE_BLIST_BUDDY));
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2660
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2661 gaim_signal_register(handle, "buddy-signed-off",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2662 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2663 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2664 GAIM_SUBTYPE_BLIST_BUDDY));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2665
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2666 gaim_signal_register(handle, "update-idle", gaim_marshal_VOID, NULL, 0);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2667
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2668 gaim_signal_register(handle, "blist-node-extended-menu",
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2669 gaim_marshal_VOID__POINTER_POINTER, NULL, 2,
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2670 gaim_value_new(GAIM_TYPE_SUBTYPE,
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2671 GAIM_SUBTYPE_BLIST_NODE),
8952
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2672 gaim_value_new(GAIM_TYPE_BOXED, "GList **"));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2673 }
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2674
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2675 void
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2676 gaim_blist_uninit(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2677 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2678 if (blist_save_timer != 0) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2679 gaim_timeout_remove(blist_save_timer);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2680 blist_save_timer = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2681 gaim_blist_sync();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2682 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2683
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2684 gaim_signals_unregister_by_instance(gaim_blist_get_handle());
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2685 }

mercurial