src/blist.c

Fri, 06 Jan 2006 04:46:00 +0000

author
Casey Harkins <charkins@pidgin.im>
date
Fri, 06 Jan 2006 04:46:00 +0000
changeset 12744
45d72d69f399
parent 12687
0e34db1bd104
child 12797
d0f51cfde6bc
permissions
-rw-r--r--

[gaim-migrate @ 15091]
" Adds an emblem to a buddy if they have a queued message
(hidden conversation). In the large buddy list it is
added in the northwest corner, sliding the existing
northwest emblem (if specified) to the northeast
position and discarding the northeast emblem. In the
small buddy list, the emblem is added to the southeast.

Attached is a patch and an emblem image to be dropped
in pixmaps/status/default/. The emblem image is a
scaled down version of the send-im.png image." -- Casey Harkins

as I asked for this patch, and since there don't seem to be objections to
it (yet), I'm going ahead and applying it.

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

mercurial