src/blist.c

Tue, 17 Jan 2006 03:00:54 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Tue, 17 Jan 2006 03:00:54 +0000
changeset 12904
f01835b6bcac
parent 12862
f62868e5825e
child 12919
519199cca273
permissions
-rw-r--r--

[gaim-migrate @ 15257]
Part of SF Patch #1406437 from Sadrul

This disconnects the signal handlers on the imhtml and its text buffer
that have the toolbar as the data parameter. As Sadrul put it, "It makes
sure that when an imhtml-attached toolbar is destroyed and the imhtml
still exists, the signal-callbacks don't get triggered."

committer: Richard Laager <rlaager@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;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
744
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
745 g_return_if_fail(buddy != NULL);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
746
10052
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
747 presence = gaim_buddy_get_presence(buddy);
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
748 status = gaim_presence_get_active_status(presence);
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
749
10847
6893ac13cd53 [gaim-migrate @ 12519]
Nathan Walp <nwalp@pidgin.im>
parents: 10774
diff changeset
750 gaim_debug_info("blist", "Updating buddy status for %s (%s)\n",
6893ac13cd53 [gaim-migrate @ 12519]
Nathan Walp <nwalp@pidgin.im>
parents: 10774
diff changeset
751 buddy->name, gaim_account_get_protocol_name(buddy->account));
10052
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
752
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
753 if (gaim_status_is_online(status) &&
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
754 !gaim_status_is_online(old_status)) {
11910
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
755
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
756 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
757
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
758 ((GaimContact*)((GaimBlistNode*)buddy)->parent)->online++;
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
759 if (((GaimContact*)((GaimBlistNode*)buddy)->parent)->online == 1)
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
760 ((GaimGroup *)((GaimBlistNode *)buddy)->parent->parent)->online++;
10052
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
761 } else if (!gaim_status_is_online(status) &&
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
762 gaim_status_is_online(old_status)) {
10475
1b7fe16233f3 [gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents: 10431
diff changeset
763 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
764 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
765 ((GaimContact*)((GaimBlistNode*)buddy)->parent)->online--;
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
766 if (((GaimContact*)((GaimBlistNode*)buddy)->parent)->online == 0)
4f8184cdcfff [gaim-migrate @ 14201]
Nathan Walp <nwalp@pidgin.im>
parents: 11860
diff changeset
767 ((GaimGroup *)((GaimBlistNode *)buddy)->parent->parent)->online--;
11935
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
768 } else {
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
769 gaim_signal_emit(gaim_blist_get_handle(),
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
770 "buddy-status-changed", buddy, old_status,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
771 status);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
772 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
773
10205
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
774 /*
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
775 * 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
776 * 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
777 * 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
778 * to away then no signal is triggered.
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
779 *
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
780 * It's a safe assumption that SOMETHING called this function. PROBABLY
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
781 * because something, somewhere changed. Calling the stuff below
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
782 * 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
783 */
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
784 gaim_contact_invalidate_priority_buddy(gaim_buddy_get_contact(buddy));
10205
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
785 if (ops && ops->update)
efe6f0f708bd [gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents: 10166
diff changeset
786 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
787 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
788
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
789 void gaim_blist_update_buddy_icon(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
790 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
791 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
792
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
793 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
794
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
795 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
796 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
797 }
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 /*
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
800 * 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
801 * from oscar.c and toc.c instead?
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 void gaim_blist_rename_buddy(GaimBuddy *buddy, const char *name)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
804 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
805 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
806 struct _gaim_hbuddy *hb;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
807
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
808 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
809
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
810 hb = g_new(struct _gaim_hbuddy, 1);
8675
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
811 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
812 hb->account = buddy->account;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
813 hb->group = ((GaimBlistNode *)buddy)->parent->parent;
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
814 g_hash_table_remove(gaimbuddylist->buddies, hb);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
815
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
816 g_free(hb->name);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
817 hb->name = g_strdup(gaim_normalize(buddy->account, name));
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
818 g_hash_table_replace(gaimbuddylist->buddies, hb, buddy);
4a14d9ec84a5 [gaim-migrate @ 9428]
Sean Egan <seanegan@pidgin.im>
parents: 8549
diff changeset
819
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
820 g_free(buddy->name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
821 buddy->name = g_strdup(name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
822
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
823 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
824
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
825 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
826 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
827 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
828
12319
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
829 void gaim_blist_alias_contact(GaimContact *contact, const char *alias)
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
830 {
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
831 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
832 GaimConversation *conv;
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
833 char *old_alias = contact->alias;
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
834 GaimBlistNode *bnode;
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
835
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
836 g_return_if_fail(contact != NULL);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
837
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
838 if ((alias != NULL) && (*alias != '\0'))
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
839 contact->alias = g_strdup(alias);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
840 else
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
841 contact->alias = NULL;
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
842
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
843 gaim_blist_schedule_save();
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
844
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
845 if (ops && ops->update)
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
846 ops->update(gaimbuddylist, (GaimBlistNode *)contact);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
847
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
848 for(bnode = ((GaimBlistNode *)contact)->child; bnode != NULL; bnode = bnode->next)
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
849 {
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
850 GaimBuddy *buddy = (GaimBuddy *)bnode;
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 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
853 buddy->account);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
854 if (conv)
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
855 gaim_conversation_autoset_title(conv);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
856 }
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
857
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
858 gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
859 contact, old_alias);
42a0e8cecea3 [gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents: 12305
diff changeset
860 g_free(old_alias);
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
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
863 void gaim_blist_alias_chat(GaimChat *chat, const char *alias)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
864 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
865 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
866 char *old_alias = chat->alias;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
867
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
868 g_return_if_fail(chat != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
869
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
870 if ((alias != NULL) && (*alias != '\0'))
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
871 chat->alias = g_strdup(alias);
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
872 else
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
873 chat->alias = NULL;
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
874
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
875 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
876
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
877 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
878 ops->update(gaimbuddylist, (GaimBlistNode *)chat);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
879
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
880 gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
881 chat, old_alias);
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
882 g_free(old_alias);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
883 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
884
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
885 void gaim_blist_alias_buddy(GaimBuddy *buddy, const char *alias)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
886 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
887 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
5676
d3c2fdaf4821 [gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents: 5634
diff changeset
888 GaimConversation *conv;
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
889 char *old_alias = buddy->alias;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
890
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
891 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
892
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
893 if ((alias != NULL) && (*alias != '\0'))
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
894 buddy->alias = g_strdup(alias);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
895 else
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
896 buddy->alias = NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
897
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
898 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
899
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
900 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
901 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
902
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 11302
diff changeset
903 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
904 buddy->account);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
905 if (conv)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
906 gaim_conversation_autoset_title(conv);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
907
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
908 gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
909 buddy, old_alias);
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
910 g_free(old_alias);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
911 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
912
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
913 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
914 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
915 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
916 GaimConversation *conv;
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
917 char *old_alias = buddy->server_alias;
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
918
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
919 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
920
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
921 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
922 buddy->server_alias = g_strdup(alias);
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
923 else
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
924 buddy->server_alias = NULL;
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
925
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
926 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
927
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
928 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
929 ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
930
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 11302
diff changeset
931 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
932 buddy->account);
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
933 if (conv)
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
934 gaim_conversation_autoset_title(conv);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
935
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
936 gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
937 buddy, old_alias);
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
938 g_free(old_alias);
6058
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
939 }
0d5c66a5da5d [gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents: 6036
diff changeset
940
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
941 /*
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
942 * 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
943 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
944 void gaim_blist_rename_group(GaimGroup *source, const char *new_name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
945 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
946 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
947 GaimGroup *dest;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
948 gchar *old_name;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
949 GList *moved_buddies = NULL;
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
950 GSList *accts;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
951
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
952 g_return_if_fail(source != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
953 g_return_if_fail(new_name != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
954
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
955 if (*new_name == '\0' || !strcmp(new_name, source->name))
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
956 return;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
957
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
958 dest = gaim_find_group(new_name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
959 if (dest != NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
960 /* We're merging two groups */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
961 GaimBlistNode *prev, *child, *next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
962
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
963 prev = gaim_blist_get_last_child((GaimBlistNode*)dest);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
964 child = ((GaimBlistNode*)source)->child;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
965
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
966 /*
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
967 * 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
968 * 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
969 * one? PRPLs might be expecting to receive an add_buddy() for
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
970 * each moved buddy...
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
971 */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
972 while (child)
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
973 {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
974 next = child->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
975 if (GAIM_BLIST_NODE_IS_CONTACT(child)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
976 GaimBlistNode *bnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
977 gaim_blist_add_contact((GaimContact *)child, dest, prev);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
978 for (bnode = child->child; bnode != NULL; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
979 gaim_blist_add_buddy((GaimBuddy *)bnode, (GaimContact *)child,
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
980 NULL, bnode->prev);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
981 moved_buddies = g_list_append(moved_buddies, bnode);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
982 }
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
983 prev = child;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
984 } else if (GAIM_BLIST_NODE_IS_CHAT(child)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
985 gaim_blist_add_chat((GaimChat *)child, dest, prev);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
986 prev = child;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
987 } else {
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
988 gaim_debug(GAIM_DEBUG_ERROR, "blist",
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
989 "Unknown child type in group %s\n", source->name);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
990 }
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
991 child = next;
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
992 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
993
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
994 /* 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
995 old_name = g_strdup(source->name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
996 gaim_blist_remove_group(source);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
997 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
998 /* A simple rename */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
999 GaimBlistNode *cnode, *bnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1000
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1001 /* Build a GList of all buddies in this group */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1002 for (cnode = ((GaimBlistNode *)source)->child; cnode != NULL; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1003 if (GAIM_BLIST_NODE_IS_CONTACT(cnode))
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1004 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1005 moved_buddies = g_list_append(moved_buddies, bnode);
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
1006 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1007
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1008 old_name = source->name;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1009 source->name = g_strdup(new_name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1010
5346
4be84db22956 [gaim-migrate @ 5722]
Nathan Walp <nwalp@pidgin.im>
parents: 5313
diff changeset
1011 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1012
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1013 /* Save our changes */
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1014 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1015
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1016 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1017 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1018 ops->update(gaimbuddylist, (GaimBlistNode*)source);
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 /* Notify all PRPLs */
10853
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1021 if(old_name && source && strcmp(source->name, old_name)) {
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1022 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
1023 GaimAccount *account = accts->data;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1024 GaimPluginProtocolInfo *prpl_info = NULL;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1025 GList *l = NULL, *buddies = NULL;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1026
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1027 if(account->gc && account->gc->prpl)
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1028 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl);
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1029
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1030 if(!prpl_info)
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1031 continue;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1032
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1033 for(l = moved_buddies; l; l = l->next) {
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1034 GaimBuddy *buddy = (GaimBuddy *)l->data;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1035
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1036 if(buddy && buddy->account == account)
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1037 buddies = g_list_append(buddies, (GaimBlistNode *)buddy);
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1038 }
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(prpl_info->rename_group) {
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1041 prpl_info->rename_group(account->gc, old_name, source, buddies);
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1042 } else {
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1043 GList *cur, *groups = NULL;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1044
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1045 /* Make a list of what the groups each buddy is in */
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1046 for(cur = buddies; cur; cur = cur->next) {
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1047 GaimBlistNode *node = (GaimBlistNode *)cur->data;
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1048 groups = g_list_append(groups, node->parent->parent);
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1049 }
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1050
11643
f04408721780 [gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 11624
diff changeset
1051 gaim_account_remove_buddies(account, buddies, groups);
10853
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1052 g_list_free(groups);
11643
f04408721780 [gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 11624
diff changeset
1053 gaim_account_add_buddies(account, buddies);
10853
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1054 }
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1055
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1056 g_list_free(buddies);
6ed47bace3a5 [gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents: 10850
diff changeset
1057 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1058 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1059 g_list_free(moved_buddies);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1060 g_free(old_name);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1061 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1062
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1063 static void gaim_blist_node_initialize_settings(GaimBlistNode *node);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1064
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
1065 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
1066 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1067 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1068 GaimChat *chat;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1069
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1070 g_return_val_if_fail(account != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1071 g_return_val_if_fail(components != NULL, FALSE);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1072
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1073 chat = g_new0(GaimChat, 1);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1074 chat->account = account;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1075 if ((alias != NULL) && (*alias != '\0'))
5237
f3b88eae4b89 [gaim-migrate @ 5607]
Nathan Walp <nwalp@pidgin.im>
parents: 5234
diff changeset
1076 chat->alias = g_strdup(alias);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1077 chat->components = components;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1078 gaim_blist_node_initialize_settings((GaimBlistNode *)chat);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1079 ((GaimBlistNode *)chat)->type = GAIM_BLIST_CHAT_NODE;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1080
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1081 if (ops != NULL && ops->new_node != NULL)
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1082 ops->new_node((GaimBlistNode *)chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1083
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11101
diff changeset
1084 GAIM_DBUS_REGISTER_POINTER(chat, GaimChat);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1085 return chat;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1086 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1087
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1088 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
1089 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1090 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1091 GaimBuddy *buddy;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1092
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1093 g_return_val_if_fail(account != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1094 g_return_val_if_fail(screenname != NULL, FALSE);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1095
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1096 buddy = g_new0(GaimBuddy, 1);
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1097 buddy->account = account;
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1098 buddy->name = g_strdup(screenname);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1099 buddy->alias = g_strdup(alias);
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1100 buddy->presence = gaim_presence_new_for_buddy(buddy);
11624
0b281b559662 [gaim-migrate @ 13899]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11497
diff changeset
1101 ((GaimBlistNode *)buddy)->type = GAIM_BLIST_BUDDY_NODE;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
1102
10052
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
1103 gaim_presence_set_status_active(buddy->presence, "offline", TRUE);
329dad7e2da3 [gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents: 10037
diff changeset
1104
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1105 gaim_blist_node_initialize_settings((GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1106
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1107 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1108 ops->new_node((GaimBlistNode *)buddy);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1109
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11101
diff changeset
1110 GAIM_DBUS_REGISTER_POINTER(buddy, GaimBuddy);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1111 return buddy;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1112 }
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1113
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1114 void
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1115 gaim_buddy_set_icon(GaimBuddy *buddy, GaimBuddyIcon *icon)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1116 {
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1117 g_return_if_fail(buddy != NULL);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1118
12476
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1119 if (buddy->icon != icon) {
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1120 if (buddy->icon != NULL)
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1121 gaim_buddy_icon_unref(buddy->icon);
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1122
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1123 buddy->icon = (icon != NULL ? gaim_buddy_icon_ref(icon) : NULL);
c4e21f4ab5a7 [gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents: 12458
diff changeset
1124 }
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1125
9324
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
1126 if (buddy->icon)
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
1127 gaim_buddy_icon_cache(icon, buddy);
dfa7e7d6fb06 [gaim-migrate @ 10132]
Tim Ringenbach <marv@pidgin.im>
parents: 9299
diff changeset
1128 else
11040
37e247d18e78 [gaim-migrate @ 12940]
Richard Laager <rlaager@pidgin.im>
parents: 11033
diff changeset
1129 gaim_buddy_icon_uncache(buddy);
9299
6ea4c4da101a [gaim-migrate @ 10102]
Tim Ringenbach <marv@pidgin.im>
parents: 9285
diff changeset
1130
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1131 gaim_blist_schedule_save();
9926
9957e01fd88a [gaim-migrate @ 10818]
Nathan Walp <nwalp@pidgin.im>
parents: 9787
diff changeset
1132
12097
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
1133 gaim_signal_emit(gaim_blist_get_handle(), "buddy-icon-changed", buddy);
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
1134
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1135 gaim_blist_update_buddy_icon(buddy);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1136 }
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1137
10037
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1138 GaimAccount *
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1139 gaim_buddy_get_account(const GaimBuddy *buddy)
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1140 {
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1141 g_return_val_if_fail(buddy != NULL, NULL);
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1142
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1143 return buddy->account;
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
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1146 const char *
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1147 gaim_buddy_get_name(const GaimBuddy *buddy)
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 g_return_val_if_fail(buddy != NULL, NULL);
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1150
5f5b72040fa2 [gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents: 10001
diff changeset
1151 return buddy->name;
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
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1154 GaimBuddyIcon *
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1155 gaim_buddy_get_icon(const GaimBuddy *buddy)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1156 {
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1157 g_return_val_if_fail(buddy != NULL, NULL);
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1158
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1159 return buddy->icon;
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
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
1162 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
1163 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1164 GaimBlistNode *cnode = (GaimBlistNode*)chat;
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1165 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1166
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1167 g_return_if_fail(chat != NULL);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1168 g_return_if_fail(GAIM_BLIST_NODE_IS_CHAT((GaimBlistNode *)chat));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1169
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1170 if (node == NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1171 if (group == NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1172 group = gaim_group_new(_("Chats"));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1173 gaim_blist_add_group(group,
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1174 gaim_blist_get_last_sibling(gaimbuddylist->root));
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1175 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1176 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1177 group = (GaimGroup*)node->parent;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1178 }
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 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1181 if (cnode == node)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1182 return;
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 (cnode->parent) {
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1185 /* This chat was already in the list and is
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1186 * being moved.
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1187 */
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1188 ((GaimGroup *)cnode->parent)->totalsize--;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1189 if (gaim_account_is_connected(chat->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1190 ((GaimGroup *)cnode->parent)->online--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1191 ((GaimGroup *)cnode->parent)->currentsize--;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
1192 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1193 if (cnode->next)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1194 cnode->next->prev = cnode->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1195 if (cnode->prev)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1196 cnode->prev->next = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1197 if (cnode->parent->child == cnode)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1198 cnode->parent->child = cnode->next;
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1199
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1200 ops->remove(gaimbuddylist, cnode);
11101
a7ee14e2a30a [gaim-migrate @ 13140]
Daniel Atallah <datallah@pidgin.im>
parents: 11067
diff changeset
1201 /* 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
1202 * reinitialize it */
a7ee14e2a30a [gaim-migrate @ 13140]
Daniel Atallah <datallah@pidgin.im>
parents: 11067
diff changeset
1203 ops->new_node(cnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1204
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1205 gaim_blist_schedule_save();
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1206 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1207
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1208 if (node != NULL) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1209 if (node->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1210 node->next->prev = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1211 cnode->next = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1212 cnode->prev = node;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1213 cnode->parent = node->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1214 node->next = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1215 ((GaimGroup *)node->parent)->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1216 if (gaim_account_is_connected(chat->account)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1217 ((GaimGroup *)node->parent)->online++;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1218 ((GaimGroup *)node->parent)->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
1219 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1220 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1221 if (((GaimBlistNode *)group)->child)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1222 ((GaimBlistNode *)group)->child->prev = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1223 cnode->next = ((GaimBlistNode *)group)->child;
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1224 cnode->prev = NULL;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1225 ((GaimBlistNode *)group)->child = cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1226 cnode->parent = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1227 group->totalsize++;
5855
d95791d925db [gaim-migrate @ 6286]
Nathan Walp <nwalp@pidgin.im>
parents: 5776
diff changeset
1228 if (gaim_account_is_connected(chat->account)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1229 group->online++;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1230 group->currentsize++;
5287
ac05902f0535 [gaim-migrate @ 5659]
Nathan Walp <nwalp@pidgin.im>
parents: 5278
diff changeset
1231 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1232 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1233
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1234 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1235
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1236 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1237 ops->update(gaimbuddylist, (GaimBlistNode *)cnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1238 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1239
7879
8e5689b82138 [gaim-migrate @ 8533]
Mark Doliner <markdoliner@pidgin.im>
parents: 7859
diff changeset
1240 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
1241 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1242 GaimBlistNode *cnode, *bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1243 GaimGroup *g;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1244 GaimContact *c;
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1245 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1246 struct _gaim_hbuddy *hb;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1247
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1248 g_return_if_fail(buddy != NULL);
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1249 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
1250
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1251 bnode = (GaimBlistNode *)buddy;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1252
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1253 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1254 if (bnode == node || (!node && bnode->parent &&
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1255 contact && bnode->parent == (GaimBlistNode*)contact
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1256 && bnode == bnode->parent->child))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1257 return;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1258
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1259 if (node && GAIM_BLIST_NODE_IS_BUDDY(node)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1260 c = (GaimContact*)node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1261 g = (GaimGroup*)node->parent->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1262 } else if (contact) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1263 c = contact;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1264 g = (GaimGroup *)((GaimBlistNode *)c)->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1265 } else {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1266 if (group) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1267 g = group;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1268 } else {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1269 g = gaim_group_new(_("Buddies"));
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1270 gaim_blist_add_group(g,
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1271 gaim_blist_get_last_sibling(gaimbuddylist->root));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1272 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1273 c = gaim_contact_new();
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1274 gaim_blist_add_contact(c, g,
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1275 gaim_blist_get_last_child((GaimBlistNode*)g));
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1276 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1277
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1278 cnode = (GaimBlistNode *)c;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1279
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1280 if (bnode->parent) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1281 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1282 ((GaimContact*)bnode->parent)->online--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1283 if (((GaimContact*)bnode->parent)->online == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1284 ((GaimGroup*)bnode->parent->parent)->online--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1285 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1286 if (gaim_account_is_connected(buddy->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1287 ((GaimContact*)bnode->parent)->currentsize--;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1288 if (((GaimContact*)bnode->parent)->currentsize == 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1289 ((GaimGroup*)bnode->parent->parent)->currentsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1290 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1291 ((GaimContact*)bnode->parent)->totalsize--;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1292 /* 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
1293
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1294 if (bnode->parent->parent != (GaimBlistNode*)g)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1295 serv_move_buddy(buddy, (GaimGroup *)bnode->parent->parent, g);
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
1296
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1297 if (bnode->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1298 bnode->next->prev = bnode->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1299 if (bnode->prev)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1300 bnode->prev->next = bnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1301 if (bnode->parent->child == bnode)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1302 bnode->parent->child = bnode->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1303
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1304 ops->remove(gaimbuddylist, bnode);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1305
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1306 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1307
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1308 if (bnode->parent->parent != (GaimBlistNode*)g) {
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1309 hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1310 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1311 hb->account = buddy->account;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1312 hb->group = bnode->parent->parent;
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
1313 g_hash_table_remove(gaimbuddylist->buddies, hb);
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1314 g_free(hb->name);
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1315 g_free(hb);
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1316 }
6794
2c9fedb2c8a6 [gaim-migrate @ 7333]
Nathan Walp <nwalp@pidgin.im>
parents: 6778
diff changeset
1317
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1318 if (!bnode->parent->child) {
6794
2c9fedb2c8a6 [gaim-migrate @ 7333]
Nathan Walp <nwalp@pidgin.im>
parents: 6778
diff changeset
1319 gaim_blist_remove_contact((GaimContact*)bnode->parent);
7003
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
1320 } else {
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1321 gaim_contact_invalidate_priority_buddy((GaimContact*)bnode->parent);
7003
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
1322 ops->update(gaimbuddylist, bnode->parent);
f386c83fdf52 [gaim-migrate @ 7559]
Nathan Walp <nwalp@pidgin.im>
parents: 6983
diff changeset
1323 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1324 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1325
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1326 if (node && GAIM_BLIST_NODE_IS_BUDDY(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1327 if (node->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1328 node->next->prev = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1329 bnode->next = node->next;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1330 bnode->prev = node;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1331 bnode->parent = node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1332 node->next = bnode;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1333 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1334 if (cnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1335 cnode->child->prev = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1336 bnode->prev = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1337 bnode->next = cnode->child;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1338 cnode->child = bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1339 bnode->parent = cnode;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1340 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1341
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1342 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1343 ((GaimContact*)bnode->parent)->online++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1344 if (((GaimContact*)bnode->parent)->online == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1345 ((GaimGroup*)bnode->parent->parent)->online++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1346 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1347 if (gaim_account_is_connected(buddy->account)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1348 ((GaimContact*)bnode->parent)->currentsize++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1349 if (((GaimContact*)bnode->parent)->currentsize == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1350 ((GaimGroup*)bnode->parent->parent)->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1351 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1352 ((GaimContact*)bnode->parent)->totalsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1353
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1354 hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1355 hb->name = g_strdup(gaim_normalize(buddy->account, buddy->name));
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1356 hb->account = buddy->account;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1357 hb->group = ((GaimBlistNode*)buddy)->parent->parent;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1358
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1359 g_hash_table_replace(gaimbuddylist->buddies, hb, buddy);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1360
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1361 gaim_contact_invalidate_priority_buddy(gaim_buddy_get_contact(buddy));
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1362
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1363 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1364
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1365 if (ops && ops->update)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1366 ops->update(gaimbuddylist, (GaimBlistNode*)buddy);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1367
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1368 /* Signal that the buddy has been added */
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1369 gaim_signal_emit(gaim_blist_get_handle(), "buddy-added", buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1370 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1371
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1372 GaimContact *gaim_contact_new()
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1373 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1374 GaimBlistUiOps *ops = gaim_blist_get_ui_ops();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1375
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1376 GaimContact *contact = g_new0(GaimContact, 1);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1377 contact->totalsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1378 contact->currentsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1379 contact->online = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1380 gaim_blist_node_initialize_settings((GaimBlistNode *)contact);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1381 ((GaimBlistNode *)contact)->type = GAIM_BLIST_CONTACT_NODE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1382
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1383 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1384 ops->new_node((GaimBlistNode *)contact);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1385
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11101
diff changeset
1386 GAIM_DBUS_REGISTER_POINTER(contact, GaimContact);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1387 return contact;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1388 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1389
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1390 void gaim_contact_set_alias(GaimContact *contact, const char *alias)
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1391 {
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1392 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1393 char *old_alias = contact->alias;
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1394
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1395 g_return_if_fail(contact != NULL);
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1396
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1397 if ((alias != NULL) && (*alias != '\0'))
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1398 contact->alias = g_strdup(alias);
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1399 else
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1400 contact->alias = NULL;
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1401
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1402 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1403
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1404 if (ops && ops->update)
7245
13f6e5bf0582 [gaim-migrate @ 7822]
Nathan Walp <nwalp@pidgin.im>
parents: 7162
diff changeset
1405 ops->update(gaimbuddylist, (GaimBlistNode*)contact);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1406
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1407 gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1408 contact, old_alias);
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1409 g_free(old_alias);
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1410 }
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1411
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1412 const char *gaim_contact_get_alias(GaimContact* contact)
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1413 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1414 g_return_val_if_fail(contact != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1415
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1416 if (contact->alias)
7312
69a442443d9c [gaim-migrate @ 7896]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1417 return contact->alias;
69a442443d9c [gaim-migrate @ 7896]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1418
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1419 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
1420 }
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1421
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1422 gboolean gaim_contact_on_account(GaimContact *c, GaimAccount *account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1423 {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1424 GaimBlistNode *bnode, *cnode = (GaimBlistNode *) c;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1425
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1426 g_return_val_if_fail(c != NULL, FALSE);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1427 g_return_val_if_fail(account != NULL, FALSE);
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1428
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1429 for (bnode = cnode->child; bnode; bnode = bnode->next) {
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1430 GaimBuddy *buddy;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1431
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1432 if (! GAIM_BLIST_NODE_IS_BUDDY(bnode))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1433 continue;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1434
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1435 buddy = (GaimBuddy *)bnode;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1436 if (buddy->account == account)
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1437 return TRUE;
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 return FALSE;
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1440 }
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
1441
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1442 void gaim_contact_invalidate_priority_buddy(GaimContact *contact)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1443 {
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1444 g_return_if_fail(contact != NULL);
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1445
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
1446 contact->priority_valid = FALSE;
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
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1449 GaimGroup *gaim_group_new(const char *name)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1450 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1451 GaimBlistUiOps *ops = gaim_blist_get_ui_ops();
12458
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1452 GaimGroup *group;
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1453
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1454 g_return_val_if_fail(name != NULL, NULL);
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1455 g_return_val_if_fail(*name != '\0', NULL);
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1456
c1bb7ec2fb26 [gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents: 12398
diff changeset
1457 group = gaim_find_group(name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1458 if (group != NULL)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1459 return group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1460
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1461 group = g_new0(GaimGroup, 1);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1462 group->name = g_strdup(name);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1463 group->totalsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1464 group->currentsize = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1465 group->online = 0;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1466 gaim_blist_node_initialize_settings((GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1467 ((GaimBlistNode *)group)->type = GAIM_BLIST_GROUP_NODE;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1468
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1469 if (ops && ops->new_node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1470 ops->new_node((GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1471
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11101
diff changeset
1472 GAIM_DBUS_REGISTER_POINTER(group, GaimGroup);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1473 return group;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1474 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1475
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1476 void gaim_blist_add_contact(GaimContact *contact, GaimGroup *group, GaimBlistNode *node)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1477 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1478 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1479 GaimGroup *g;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1480 GaimBlistNode *gnode, *cnode, *bnode;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1481
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1482 g_return_if_fail(contact != NULL);
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1483 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
1484
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1485 if ((GaimBlistNode*)contact == node)
6975
76bab8ef24d2 [gaim-migrate @ 7528]
Nathan Walp <nwalp@pidgin.im>
parents: 6965
diff changeset
1486 return;
76bab8ef24d2 [gaim-migrate @ 7528]
Nathan Walp <nwalp@pidgin.im>
parents: 6965
diff changeset
1487
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1488 if (node && (GAIM_BLIST_NODE_IS_CONTACT(node) ||
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1489 GAIM_BLIST_NODE_IS_CHAT(node)))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1490 g = (GaimGroup*)node->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1491 else if (group)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1492 g = group;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1493 else {
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1494 g = gaim_group_new(_("Buddies"));
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1495 gaim_blist_add_group(g,
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1496 gaim_blist_get_last_sibling(gaimbuddylist->root));
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1497 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1498
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1499 gnode = (GaimBlistNode*)g;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1500 cnode = (GaimBlistNode*)contact;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1501
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1502 if (cnode->parent) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1503 if (cnode->parent->child == cnode)
6731
62951f77e983 [gaim-migrate @ 7258]
Nathan Walp <nwalp@pidgin.im>
parents: 6706
diff changeset
1504 cnode->parent->child = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1505 if (cnode->prev)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1506 cnode->prev->next = cnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1507 if (cnode->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1508 cnode->next->prev = cnode->prev;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1509
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1510 if (cnode->parent != gnode) {
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1511 bnode = cnode->child;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1512 while (bnode) {
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1513 GaimBlistNode *next_bnode = bnode->next;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1514 GaimBuddy *b = (GaimBuddy*)bnode;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1515
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1516 struct _gaim_hbuddy *hb = g_new(struct _gaim_hbuddy, 1);
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1517 hb->name = g_strdup(gaim_normalize(b->account, b->name));
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1518 hb->account = b->account;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1519 hb->group = cnode->parent;
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1520
6776
ff84b0971678 [gaim-migrate @ 7314]
Nathan Walp <nwalp@pidgin.im>
parents: 6775
diff changeset
1521 g_hash_table_remove(gaimbuddylist->buddies, hb);
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1522
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1523 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
1524 hb->group = gnode;
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1525 g_hash_table_replace(gaimbuddylist->buddies, hb, b);
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1526
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1527 if (b->account->gc)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1528 serv_move_buddy(b, (GaimGroup *)cnode->parent, g);
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1529 } else {
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1530 gboolean empty_contact = FALSE;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1531
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1532 /* this buddy already exists in the group, so we're
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1533 * gonna delete it instead */
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1534 g_free(hb->name);
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1535 g_free(hb);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1536 if (b->account->gc)
11643
f04408721780 [gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 11624
diff changeset
1537 gaim_account_remove_buddy(b->account, b, (GaimGroup *)cnode->parent);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1538
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1539 if (!cnode->child->next)
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1540 empty_contact = TRUE;
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1541 gaim_blist_remove_buddy(b);
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1542
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1543 /** in gaim_blist_remove_buddy(), if the last buddy in a
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1544 * contact is removed, the contact is cleaned up and
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1545 * 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
1546 if (empty_contact)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1547 return;
8328
bb0647a99b4f [gaim-migrate @ 9052]
Nathan Walp <nwalp@pidgin.im>
parents: 8287
diff changeset
1548 }
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1549 bnode = next_bnode;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1550 }
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1551 }
9928
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1552
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1553 if (contact->online > 0)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1554 ((GaimGroup*)cnode->parent)->online--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1555 if (contact->currentsize > 0)
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1556 ((GaimGroup*)cnode->parent)->currentsize--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1557 ((GaimGroup*)cnode->parent)->totalsize--;
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1558
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1559 ops->remove(gaimbuddylist, cnode);
49f4f7639644 [gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents: 9927
diff changeset
1560
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1561 gaim_blist_schedule_save();
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1562 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1563
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1564 if (node && (GAIM_BLIST_NODE_IS_CONTACT(node) ||
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1565 GAIM_BLIST_NODE_IS_CHAT(node))) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1566 if (node->next)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1567 node->next->prev = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1568 cnode->next = node->next;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1569 cnode->prev = node;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1570 cnode->parent = node->parent;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1571 node->next = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1572 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1573 if (gnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1574 gnode->child->prev = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1575 cnode->prev = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1576 cnode->next = gnode->child;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1577 gnode->child = cnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1578 cnode->parent = gnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1579 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1580
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1581 if (contact->online > 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1582 g->online++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1583 if (contact->currentsize > 0)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1584 g->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1585 g->totalsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1586
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1587 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1588
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1589 if (ops && cnode->child)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1590 ops->update(gaimbuddylist, cnode);
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
1591
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1592 for (bnode = cnode->child; bnode; bnode = bnode->next)
6775
497e575b6a5c [gaim-migrate @ 7313]
Nathan Walp <nwalp@pidgin.im>
parents: 6774
diff changeset
1593 ops->update(gaimbuddylist, bnode);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1594 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1595
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1596 void gaim_blist_merge_contact(GaimContact *source, GaimBlistNode *node)
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1597 {
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1598 GaimBlistNode *sourcenode = (GaimBlistNode*)source;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1599 GaimBlistNode *targetnode;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1600 GaimBlistNode *prev, *cur, *next;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1601 GaimContact *target;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1602
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1603 g_return_if_fail(source != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1604 g_return_if_fail(node != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1605
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1606 if (GAIM_BLIST_NODE_IS_CONTACT(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1607 target = (GaimContact *)node;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1608 prev = gaim_blist_get_last_child(node);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1609 } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1610 target = (GaimContact *)node->parent;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1611 prev = node;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1612 } else {
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1613 return;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1614 }
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1615
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1616 if (source == target || !target)
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1617 return;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1618
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1619 targetnode = (GaimBlistNode *)target;
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1620 next = sourcenode->child;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1621
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1622 while (next) {
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1623 cur = next;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1624 next = cur->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1625 if (GAIM_BLIST_NODE_IS_BUDDY(cur)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1626 gaim_blist_add_buddy((GaimBuddy *)cur, target, NULL, prev);
7246
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1627 prev = cur;
e61e8d301b34 [gaim-migrate @ 7823]
Nathan Walp <nwalp@pidgin.im>
parents: 7245
diff changeset
1628 }
6965
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1629 }
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1630 }
8e89df586ed1 [gaim-migrate @ 7512]
Nathan Walp <nwalp@pidgin.im>
parents: 6961
diff changeset
1631
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1632 void gaim_blist_add_group(GaimGroup *group, GaimBlistNode *node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1633 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1634 GaimBlistUiOps *ops;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1635 GaimBlistNode *gnode = (GaimBlistNode*)group;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1636
6774
3cb9bcebb10b [gaim-migrate @ 7312]
Nathan Walp <nwalp@pidgin.im>
parents: 6755
diff changeset
1637 g_return_if_fail(group != NULL);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1638 g_return_if_fail(GAIM_BLIST_NODE_IS_GROUP((GaimBlistNode *)group));
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1639
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1640 ops = gaimbuddylist->ui_ops;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1641
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1642 if (!gaimbuddylist->root) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1643 gaimbuddylist->root = gnode;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1644 return;
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
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1647 /* if we're moving to overtop of ourselves, do nothing */
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1648 if (gnode == node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1649 return;
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 (gaim_find_group(group->name)) {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1652 /* This is just being moved */
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1653
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1654 ops->remove(gaimbuddylist, (GaimBlistNode *)group);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1655
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1656 if (gnode == gaimbuddylist->root)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1657 gaimbuddylist->root = gnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1658 if (gnode->prev)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1659 gnode->prev->next = gnode->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1660 if (gnode->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1661 gnode->next->prev = gnode->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1662 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1663
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1664 if (node && GAIM_BLIST_NODE_IS_GROUP(node)) {
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1665 gnode->next = node->next;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1666 gnode->prev = node;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1667 if (node->next)
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1668 node->next->prev = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1669 node->next = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1670 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1671 if (gaimbuddylist->root)
6807
9b26492e1043 [gaim-migrate @ 7347]
Nathan Walp <nwalp@pidgin.im>
parents: 6803
diff changeset
1672 gaimbuddylist->root->prev = gnode;
5634
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1673 gnode->next = gaimbuddylist->root;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1674 gnode->prev = NULL;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1675 gaimbuddylist->root = gnode;
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1676 }
3eda74fc8a71 [gaim-migrate @ 6041]
Nathan Walp <nwalp@pidgin.im>
parents: 5580
diff changeset
1677
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1678 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1679
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1680 if (ops && ops->update) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1681 ops->update(gaimbuddylist, gnode);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1682 for (node = gnode->child; node; node = node->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1683 ops->update(gaimbuddylist, node);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1684 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1685 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1686
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1687 void gaim_blist_remove_contact(GaimContact *contact)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1688 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1689 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1690 GaimBlistNode *node, *gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1691
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1692 g_return_if_fail(contact != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1693
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1694 node = (GaimBlistNode *)contact;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1695 gnode = node->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1696
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1697 if (node->child) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1698 /*
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1699 * 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
1700 * buddy is removed from the contact, the contact is automatically
d87eed7d5744 [gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents: 10087
diff changeset
1701 * deleted.
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1702 */
10166
d87eed7d5744 [gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents: 10087
diff changeset
1703 while (node->child->next) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1704 gaim_blist_remove_buddy((GaimBuddy*)node->child);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1705 }
10166
d87eed7d5744 [gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents: 10087
diff changeset
1706 /*
d87eed7d5744 [gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents: 10087
diff changeset
1707 * 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
1708 * 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
1709 * 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
1710 */
d87eed7d5744 [gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents: 10087
diff changeset
1711 gaim_blist_remove_buddy((GaimBuddy*)node->child);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1712 } else {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1713 /* Remove the node from its parent */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1714 if (gnode->child == node)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1715 gnode->child = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1716 if (node->prev)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1717 node->prev->next = node->next;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1718 if (node->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1719 node->next->prev = node->prev;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1720
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1721 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1722
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1723 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1724 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1725 ops->remove(gaimbuddylist, node);
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 /* Delete the node */
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10475
diff changeset
1728 g_hash_table_destroy(contact->node.settings);
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11040
diff changeset
1729 GAIM_DBUS_UNREGISTER_POINTER(contact);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1730 g_free(contact);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1731 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1732 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1733
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1734 void gaim_blist_remove_buddy(GaimBuddy *buddy)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1735 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1736 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1737 GaimBlistNode *node, *cnode, *gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1738 GaimContact *contact;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1739 GaimGroup *group;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1740 struct _gaim_hbuddy hb;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1741
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1742 g_return_if_fail(buddy != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1743
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1744 node = (GaimBlistNode *)buddy;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1745 cnode = node->parent;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1746 gnode = cnode->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1747 contact = (GaimContact *)cnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1748 group = (GaimGroup *)gnode;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1749
11302
25694fe861b9 [gaim-migrate @ 13502]
Richard Laager <rlaager@pidgin.im>
parents: 11268
diff changeset
1750 /* Delete any buddy icon. */
11860
822903cf04c3 [gaim-migrate @ 14151]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11643
diff changeset
1751 gaim_buddy_icon_uncache(buddy);
11302
25694fe861b9 [gaim-migrate @ 13502]
Richard Laager <rlaager@pidgin.im>
parents: 11268
diff changeset
1752
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1753 /* Remove the node from its parent */
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1754 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1755 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1756 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1757 node->next->prev = node->prev;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1758 if (cnode->child == node)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1759 cnode->child = node->next;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1760
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1761 /* Adjust size counts */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1762 if (GAIM_BUDDY_IS_ONLINE(buddy)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1763 contact->online--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1764 if (contact->online == 0)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1765 group->online--;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1766 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1767 if (gaim_account_is_connected(buddy->account)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1768 contact->currentsize--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1769 if (contact->currentsize == 0)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1770 group->currentsize--;
8194
bf412cad6608 [gaim-migrate @ 8916]
Nathan Walp <nwalp@pidgin.im>
parents: 8175
diff changeset
1771 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1772 contact->totalsize--;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1773
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1774 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1775
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1776 /* Re-sort the contact */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1777 if (contact->priority == buddy) {
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1778 gaim_contact_invalidate_priority_buddy(contact);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1779 if (ops && ops->update)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1780 ops->update(gaimbuddylist, cnode);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1781 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1782
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1783 /* Remove this buddy from the buddies hash table */
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
1784 hb.name = g_strdup(gaim_normalize(buddy->account, buddy->name));
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1785 hb.account = buddy->account;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1786 hb.group = ((GaimBlistNode*)buddy)->parent->parent;
6742
e6474bba7574 [gaim-migrate @ 7274]
Nathan Walp <nwalp@pidgin.im>
parents: 6731
diff changeset
1787 g_hash_table_remove(gaimbuddylist->buddies, &hb);
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
1788 g_free(hb.name);
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
1789
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1790 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1791 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1792 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1793
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1794 /* 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
1795 gaim_signal_emit(gaim_blist_get_handle(), "buddy-removed", buddy);
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1796
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1797 /* Delete the node */
6846
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1798 if (buddy->icon != NULL)
f814f02dca87 [gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents: 6843
diff changeset
1799 gaim_buddy_icon_unref(buddy->icon);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
1800 g_hash_table_destroy(buddy->node.settings);
9944
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9928
diff changeset
1801 gaim_presence_remove_buddy(buddy->presence, buddy);
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9928
diff changeset
1802 gaim_presence_destroy(buddy->presence);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1803 g_free(buddy->name);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1804 g_free(buddy->alias);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10475
diff changeset
1805 g_free(buddy->server_alias);
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11040
diff changeset
1806
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11040
diff changeset
1807 GAIM_DBUS_UNREGISTER_POINTER(buddy);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1808 g_free(buddy);
6755
2d5c62f8809e [gaim-migrate @ 7287]
Nathan Walp <nwalp@pidgin.im>
parents: 6744
diff changeset
1809
12862
f62868e5825e [gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents: 12860
diff changeset
1810 /* FIXME: Once GaimBuddy is a GObject, timeout callbacks can
f62868e5825e [gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents: 12860
diff changeset
1811 * g_object_ref() it when connecting the callback and
f62868e5825e [gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents: 12860
diff changeset
1812 * g_object_unref() it in the handler. That way, it won't
f62868e5825e [gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents: 12860
diff changeset
1813 * get freed while the timeout is pending and this line can
f62868e5825e [gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents: 12860
diff changeset
1814 * be removed. */
12860
06b7fc0ded57 [gaim-migrate @ 15211]
Glauber de Oliveira Costa <gcosta@redhat.com>
parents: 12797
diff changeset
1815 while (g_source_remove_by_user_data((gpointer *)buddy));
06b7fc0ded57 [gaim-migrate @ 15211]
Glauber de Oliveira Costa <gcosta@redhat.com>
parents: 12797
diff changeset
1816
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1817 /* If the contact is empty then remove it */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1818 if (!cnode->child)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1819 gaim_blist_remove_contact(contact);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1820 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1821
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1822 void gaim_blist_remove_chat(GaimChat *chat)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1823 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1824 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1825 GaimBlistNode *node, *gnode;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1826 GaimGroup *group;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1827
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1828 g_return_if_fail(chat != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1829
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1830 node = (GaimBlistNode *)chat;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1831 gnode = node->parent;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1832 group = (GaimGroup *)gnode;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1833
12577
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1834 if (gnode != NULL)
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1835 {
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1836 /* Remove the node from its parent */
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1837 if (gnode->child == node)
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1838 gnode->child = node->next;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1839 if (node->prev)
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1840 node->prev->next = node->next;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1841 if (node->next)
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1842 node->next->prev = node->prev;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1843
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1844 /* Adjust size counts */
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1845 if (gaim_account_is_connected(chat->account)) {
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1846 group->online--;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1847 group->currentsize--;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1848 }
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1849 group->totalsize--;
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1850
d2ea7a4ec658 [gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents: 12476
diff changeset
1851 gaim_blist_schedule_save();
5394
c0edfd4a0491 [gaim-migrate @ 5770]
Nathan Walp <nwalp@pidgin.im>
parents: 5392
diff changeset
1852 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1853
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1854 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1855 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1856 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1857
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1858 /* Delete the node */
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1859 g_hash_table_destroy(chat->components);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10475
diff changeset
1860 g_hash_table_destroy(chat->node.settings);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1861 g_free(chat->alias);
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11040
diff changeset
1862 GAIM_DBUS_UNREGISTER_POINTER(chat);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1863 g_free(chat);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1864 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
1865
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1866 void gaim_blist_remove_group(GaimGroup *group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1867 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
1868 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1869 GaimBlistNode *node;
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1870 GList *l;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1871
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1872 g_return_if_fail(group != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1873
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1874 node = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1875
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1876 /* Make sure the group is empty */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1877 if (node->child) {
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1878 char *buf;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1879 int count = 0;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1880 GaimBlistNode *child;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1881
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1882 for (child = node->child; child != NULL; child = child->next)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1883 count++;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1884
6308
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1885 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
1886 "because its account was not logged in."
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1887 " This buddy and the group were not "
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
1888 "removed.\n",
6308
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1889 "%d buddies from group %s were not "
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1890 "removed because their accounts were "
6336
7c62a14b3486 [gaim-migrate @ 6835]
Mark Doliner <markdoliner@pidgin.im>
parents: 6322
diff changeset
1891 "not logged in. These buddies and "
7c62a14b3486 [gaim-migrate @ 6835]
Mark Doliner <markdoliner@pidgin.im>
parents: 6322
diff changeset
1892 "the group were not removed.\n", count),
6308
12d48b4e80db [gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents: 6307
diff changeset
1893 count, group->name);
5541
d4840f195f45 [gaim-migrate @ 5941]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1894 gaim_notify_error(NULL, NULL, _("Group not removed"), buf);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1895 g_free(buf);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1896 return;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1897 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1898
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1899 /* Remove the node from its parent */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1900 if (gaimbuddylist->root == node)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1901 gaimbuddylist->root = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1902 if (node->prev)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1903 node->prev->next = node->next;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1904 if (node->next)
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1905 node->next->prev = node->prev;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1906
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
1907 gaim_blist_schedule_save();
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1908
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1909 /* Update the UI */
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1910 if (ops && ops->remove)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1911 ops->remove(gaimbuddylist, node);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1912
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1913 /* Remove the group from all accounts that are online */
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1914 for (l = gaim_connections_get_all(); l != NULL; l = l->next)
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1915 {
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1916 GaimConnection *gc = (GaimConnection *)l->data;
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 if (gaim_connection_get_state(gc) == GAIM_CONNECTED)
11643
f04408721780 [gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 11624
diff changeset
1919 gaim_account_remove_group(gaim_connection_get_account(gc), group);
6885
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1920 }
65132ebfc662 [gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents: 6872
diff changeset
1921
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1922 /* Delete the node */
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10475
diff changeset
1923 g_hash_table_destroy(group->node.settings);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1924 g_free(group->name);
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11040
diff changeset
1925 GAIM_DBUS_UNREGISTER_POINTER(group);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1926 g_free(group);
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1927 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1928
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1929 GaimBuddy *gaim_contact_get_priority_buddy(GaimContact *contact)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1930 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1931 g_return_val_if_fail(contact != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1932
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1933 if (!contact->priority_valid)
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1934 gaim_contact_compute_priority_buddy(contact);
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
1935
6843
6c52aff34a1e [gaim-migrate @ 7388]
Nathan Walp <nwalp@pidgin.im>
parents: 6841
diff changeset
1936 return contact->priority;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1937 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1938
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1939 const char *gaim_buddy_get_alias_only(GaimBuddy *buddy)
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1940 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1941 g_return_val_if_fail(buddy != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1942
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1943 if ((buddy->alias != NULL) && (*buddy->alias != '\0')) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1944 return buddy->alias;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1945 } else if ((buddy->server_alias != NULL) &&
10389
6c8d0ef5b6c4 [gaim-migrate @ 11616]
Sean Egan <seanegan@pidgin.im>
parents: 10378
diff changeset
1946 (*buddy->server_alias != '\0')) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1947
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
1948 return buddy->server_alias;
5545
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1949 }
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1950
a8b1a1262402 [gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents: 5541
diff changeset
1951 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1952 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1953
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1954
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1955 const char *gaim_buddy_get_contact_alias(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1956 {
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1957 GaimContact *c;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1958
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1959 g_return_val_if_fail(buddy != NULL, NULL);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1960
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1961 /* 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
1962 /* The buddy alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1963 if (buddy->alias != NULL)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1964 return buddy->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1965
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1966 /* The contact alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1967 c = gaim_buddy_get_contact(buddy);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1968 if ((c != NULL) && (c->alias != NULL))
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1969 return c->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1970
10349
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
1971 /* The server alias */
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
1972 if ((buddy->server_alias) && (*buddy->server_alias))
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1973 return buddy->server_alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1974
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1975 /* The buddy's user name (i.e. no alias) */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1976 return buddy->name;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1977 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1978
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1979
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1980 const char *gaim_buddy_get_alias(GaimBuddy *buddy)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1981 {
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1982 g_return_val_if_fail(buddy != NULL, NULL);
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1983
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1984 /* 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
1985 /* The buddy alias */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1986 if (buddy->alias != NULL)
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1987 return buddy->alias;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1988
11266
a6807fe0f58d [gaim-migrate @ 13448]
Mark Doliner <markdoliner@pidgin.im>
parents: 11264
diff changeset
1989 /* The server alias */
10389
6c8d0ef5b6c4 [gaim-migrate @ 11616]
Sean Egan <seanegan@pidgin.im>
parents: 10378
diff changeset
1990 if ((buddy->server_alias) && (*buddy->server_alias))
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1991 return buddy->server_alias;
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 /* The buddy's user name (i.e. no alias) */
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1994 return buddy->name;
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1995 }
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
1996
10349
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
1997 const char *gaim_buddy_get_local_alias(GaimBuddy *buddy)
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
1998 {
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
1999 GaimContact *c;
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2000
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2001 g_return_val_if_fail(buddy != NULL, NULL);
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2002
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2003 /* Search for an alias for the buddy. In order of precedence: */
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2004 /* The buddy alias */
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2005 if (buddy->alias != NULL)
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2006 return buddy->alias;
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2007
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2008 /* The contact alias */
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2009 c = gaim_buddy_get_contact(buddy);
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2010 if ((c != NULL) && (c->alias != NULL))
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2011 return c->alias;
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2012
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2013 /* The buddy's user name (i.e. no alias) */
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2014 return buddy->name;
8edbe78b800c [gaim-migrate @ 11563]
Sean Egan <seanegan@pidgin.im>
parents: 10343
diff changeset
2015 }
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 9462
diff changeset
2016
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
2017 const char *gaim_chat_get_name(GaimChat *chat)
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
2018 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2019 struct proto_chat_entry *pce;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2020 GList *parts, *tmp;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2021 char *ret;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2022
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2023 g_return_val_if_fail(chat != NULL, NULL);
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 if ((chat->alias != NULL) && (*chat->alias != '\0'))
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
2026 return chat->alias;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2027
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2028 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
2029 pce = parts->data;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2030 ret = g_hash_table_lookup(chat->components, pce->identifier);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2031 for (tmp = parts; tmp; tmp = tmp->next)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2032 g_free(tmp->data);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2033 g_list_free(parts);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2034
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2035 return ret;
6744
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
2036 }
340fa61c8180 [gaim-migrate @ 7276]
Nathan Walp <nwalp@pidgin.im>
parents: 6742
diff changeset
2037
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2038 GaimBuddy *gaim_find_buddy(GaimAccount *account, const char *name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2039 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2040 GaimBuddy *buddy;
5247
f318e9d10c86 [gaim-migrate @ 5618]
Ethan Blanton <elb@pidgin.im>
parents: 5237
diff changeset
2041 struct _gaim_hbuddy hb;
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
2042 GaimBlistNode *group;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2043
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2044 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2045 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2046 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2047
7429
bc354dd928bf [gaim-migrate @ 8033]
Nathan Walp <nwalp@pidgin.im>
parents: 7420
diff changeset
2048 hb.account = account;
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
2049 hb.name = g_strdup(gaim_normalize(account, name));
7429
bc354dd928bf [gaim-migrate @ 8033]
Nathan Walp <nwalp@pidgin.im>
parents: 7420
diff changeset
2050
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2051 for (group = gaimbuddylist->root; group; group = group->next) {
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
2052 hb.group = group;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2053 if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb))) {
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2054 g_free(hb.name);
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
2055 return buddy;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2056 }
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
2057 }
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2058 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2059
5758
d79016a52980 [gaim-migrate @ 6183]
Sean Egan <seanegan@pidgin.im>
parents: 5676
diff changeset
2060 return NULL;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2061 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2062
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2063 GaimBuddy *gaim_find_buddy_in_group(GaimAccount *account, const char *name,
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2064 GaimGroup *group)
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2065 {
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2066 struct _gaim_hbuddy hb;
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2067 GaimBuddy *ret;
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2068
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2069 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2070 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2071 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2072
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
2073 hb.name = g_strdup(gaim_normalize(account, name));
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2074 hb.account = account;
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2075 hb.group = (GaimBlistNode*)group;
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2076
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2077 ret = g_hash_table_lookup(gaimbuddylist->buddies, &hb);
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2078 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2079
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2080 return ret;
6872
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2081 }
61144295083e [gaim-migrate @ 7418]
Nathan Walp <nwalp@pidgin.im>
parents: 6870
diff changeset
2082
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2083 GSList *gaim_find_buddies(GaimAccount *account, const char *name)
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2084 {
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2085 struct buddy *buddy;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2086 struct _gaim_hbuddy hb;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2087 GaimBlistNode *node;
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2088 GSList *ret = NULL;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2089
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2090 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2091 g_return_val_if_fail(account != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2092 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2093
7261
4be05820d441 [gaim-migrate @ 7838]
Nathan Walp <nwalp@pidgin.im>
parents: 7246
diff changeset
2094 hb.name = g_strdup(gaim_normalize(account, name));
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2095 hb.account = account;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2096
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2097 for (node = gaimbuddylist->root; node != NULL; node = node->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2098 hb.group = node;
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2099 if ((buddy = g_hash_table_lookup(gaimbuddylist->buddies, &hb)) != NULL)
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2100 ret = g_slist_append(ret, buddy);
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2101 }
7162
dfd30c70acde [gaim-migrate @ 7729]
Nathan Walp <nwalp@pidgin.im>
parents: 7153
diff changeset
2102 g_free(hb.name);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2103
6245
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2104 return ret;
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2105 }
f7548d168415 [gaim-migrate @ 6739]
Nathan Walp <nwalp@pidgin.im>
parents: 6116
diff changeset
2106
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2107 GaimGroup *gaim_find_group(const char *name)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2108 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2109 GaimBlistNode *node;
9285
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 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2112 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2113
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2114 for (node = gaimbuddylist->root; node != NULL; node = node->next) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2115 if (!strcmp(((GaimGroup *)node)->name, name))
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2116 return (GaimGroup *)node;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2117 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2118
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2119 return NULL;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2120 }
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2121
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2122 GaimChat *
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2123 gaim_blist_find_chat(GaimAccount *account, const char *name)
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2124 {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2125 char *chat_name;
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2126 GaimChat *chat;
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2127 GaimPlugin *prpl;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2128 GaimPluginProtocolInfo *prpl_info = NULL;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2129 struct proto_chat_entry *pce;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2130 GaimBlistNode *node, *group;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2131 GList *parts;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2132
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2133 g_return_val_if_fail(gaimbuddylist != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2134 g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2135
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2136 if (!gaim_account_is_connected(account))
7970
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
2137 return NULL;
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
2138
7999
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
2139 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account));
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
2140 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl);
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
2141
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2142 if (prpl_info->find_blist_chat != NULL)
7999
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
2143 return prpl_info->find_blist_chat(account, name);
f3f95e0c956a [gaim-migrate @ 8676]
Nathan Walp <nwalp@pidgin.im>
parents: 7970
diff changeset
2144
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2145 for (group = gaimbuddylist->root; group != NULL; group = group->next) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2146 for (node = group->child; node != NULL; node = node->next) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2147 if (GAIM_BLIST_NODE_IS_CHAT(node)) {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2148
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2149 chat = (GaimChat*)node;
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2150
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2151 if (account != chat->account)
7970
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
2152 continue;
54394d929829 [gaim-migrate @ 8647]
Nathan Walp <nwalp@pidgin.im>
parents: 7969
diff changeset
2153
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2154 parts = prpl_info->chat_info(
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2155 gaim_account_get_connection(chat->account));
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2156
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2157 pce = parts->data;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2158 chat_name = g_hash_table_lookup(chat->components,
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2159 pce->identifier);
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2160
9153
d5e23e391a05 [gaim-migrate @ 9937]
Nathan Walp <nwalp@pidgin.im>
parents: 9109
diff changeset
2161 if (chat->account == account && chat_name != NULL &&
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2162 name != NULL && !strcmp(chat_name, name)) {
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 return chat;
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 }
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
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2170 return NULL;
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2171 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2172
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2173 GaimGroup *
7125
69f5aeec3f5b [gaim-migrate @ 7692]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
2174 gaim_chat_get_group(GaimChat *chat)
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2175 {
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2176 g_return_val_if_fail(chat != NULL, NULL);
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2177
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2178 return (GaimGroup *)(((GaimBlistNode *)chat)->parent);
6456
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2179 }
e4e7dee16c1a [gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents: 6450
diff changeset
2180
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2181 GaimContact *gaim_buddy_get_contact(GaimBuddy *buddy)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2182 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2183 g_return_val_if_fail(buddy != NULL, NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2184
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2185 return (GaimContact*)((GaimBlistNode*)buddy)->parent;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2186 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2187
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
2188 GaimPresence *gaim_buddy_get_presence(const GaimBuddy *buddy)
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 g_return_val_if_fail(buddy != NULL, NULL);
11935
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2191 return buddy->presence;
9949
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
2192 }
377cd65fab3d [gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents: 9944
diff changeset
2193
12088
ac4a09f8cfcb [gaim-migrate @ 14385]
Will Thompson <resiak@pidgin.im>
parents: 11979
diff changeset
2194 GaimGroup *gaim_buddy_get_group(GaimBuddy *buddy)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2195 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2196 g_return_val_if_fail(buddy != NULL, NULL);
6706
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
2197
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
2198 if (((GaimBlistNode *)buddy)->parent == NULL)
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
2199 return NULL;
fdd12f90fcf6 [gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents: 6695
diff changeset
2200
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2201 return (GaimGroup *)(((GaimBlistNode*)buddy)->parent->parent);
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
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2204 GSList *gaim_group_get_accounts(GaimGroup *group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2205 {
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2206 GSList *l = NULL;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2207 GaimBlistNode *gnode, *cnode, *bnode;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2208
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2209 gnode = (GaimBlistNode *)group;
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2210
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2211 for (cnode = gnode->child; cnode; cnode = cnode->next) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2212 if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2213 if (!g_slist_find(l, ((GaimChat *)cnode)->account))
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2214 l = g_slist_append(l, ((GaimChat *)cnode)->account);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2215 } else if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2216 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2217 if (GAIM_BLIST_NODE_IS_BUDDY(bnode)) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2218 if (!g_slist_find(l, ((GaimBuddy *)bnode)->account))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2219 l = g_slist_append(l, ((GaimBuddy *)bnode)->account);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2220 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2221 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2222 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2223 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2224
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2225 return l;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2226 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2227
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
2228 void gaim_blist_add_account(GaimAccount *account)
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2229 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2230 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2231 GaimBlistNode *gnode, *cnode, *bnode;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2232
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2233 g_return_if_fail(gaimbuddylist != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2234
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2235 if (!ops || !ops->update)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2236 return;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2237
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2238 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2239 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2240 continue;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2241 for (cnode = gnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2242 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
2243 gboolean recompute = FALSE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2244 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2245 if (GAIM_BLIST_NODE_IS_BUDDY(bnode) &&
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2246 ((GaimBuddy*)bnode)->account == account) {
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
2247 recompute = TRUE;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2248 ((GaimContact*)cnode)->currentsize++;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2249 if (((GaimContact*)cnode)->currentsize == 1)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2250 ((GaimGroup*)gnode)->currentsize++;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2251 ops->update(gaimbuddylist, bnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2252 }
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2253 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2254 if (recompute ||
8960
bfb231bd9ca0 [gaim-migrate @ 9734]
Nathan Walp <nwalp@pidgin.im>
parents: 8959
diff changeset
2255 gaim_blist_node_get_bool(cnode, "show_offline")) {
10378
190dba029852 [gaim-migrate @ 11603]
Tim Ringenbach <marv@pidgin.im>
parents: 10368
diff changeset
2256 gaim_contact_invalidate_priority_buddy((GaimContact*)cnode);
6956
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
2257 ops->update(gaimbuddylist, cnode);
0cc915e1f7ba [gaim-migrate @ 7503]
Nathan Walp <nwalp@pidgin.im>
parents: 6945
diff changeset
2258 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2259 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode) &&
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2260 ((GaimChat*)cnode)->account == account) {
6901
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
2261 ((GaimGroup *)gnode)->online++;
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
2262 ((GaimGroup *)gnode)->currentsize++;
94e1cf8c9d93 [gaim-migrate @ 7448]
Nathan Walp <nwalp@pidgin.im>
parents: 6886
diff changeset
2263 ops->update(gaimbuddylist, cnode);
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 }
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2266 ops->update(gaimbuddylist, gnode);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2267 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2268 }
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2269
5563
d5a7852aa0cb [gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents: 5545
diff changeset
2270 void gaim_blist_remove_account(GaimAccount *account)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2271 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2272 GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2273 GaimBlistNode *gnode, *cnode, *bnode;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2274 GaimBuddy *buddy;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2275 GaimChat *chat;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2276 GaimContact *contact;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2277 GaimGroup *group;
12305
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2278 GList *list = NULL, *iter = NULL;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2279
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2280 g_return_if_fail(gaimbuddylist != NULL);
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2281
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2282 for (gnode = gaimbuddylist->root; gnode; gnode = gnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2283 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2284 continue;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2285
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2286 group = (GaimGroup *)gnode;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2287
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2288 for (cnode = gnode->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2289 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
10727
4867e63f904a [gaim-migrate @ 12327]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10726
diff changeset
2290 gboolean recompute = FALSE;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2291 contact = (GaimContact *)cnode;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2292
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2293 for (bnode = cnode->child; bnode; bnode = bnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2294 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2295 continue;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2296
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2297 buddy = (GaimBuddy *)bnode;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2298 if (account == buddy->account) {
10557
7b2c41a3abea [gaim-migrate @ 11934]
Nathan Walp <nwalp@pidgin.im>
parents: 10548
diff changeset
2299 GaimPresence *presence;
6957
4c45f4202c6f [gaim-migrate @ 7504]
Nathan Walp <nwalp@pidgin.im>
parents: 6956
diff changeset
2300 recompute = TRUE;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2301
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2302 presence = gaim_buddy_get_presence(buddy);
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2303
10728
162b513042d6 [gaim-migrate @ 12328]
Gary Kramlich <grim@pidgin.im>
parents: 10727
diff changeset
2304 if(gaim_presence_is_online(presence)) {
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2305 contact->online--;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2306 if (contact->online == 0)
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2307 group->online--;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2308
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2309 gaim_blist_node_set_int(&buddy->node,
10475
1b7fe16233f3 [gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents: 10431
diff changeset
2310 "last_seen", time(NULL));
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2311 }
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2312
10728
162b513042d6 [gaim-migrate @ 12328]
Gary Kramlich <grim@pidgin.im>
parents: 10727
diff changeset
2313 contact->currentsize--;
162b513042d6 [gaim-migrate @ 12328]
Gary Kramlich <grim@pidgin.im>
parents: 10727
diff changeset
2314 if (contact->currentsize == 0)
162b513042d6 [gaim-migrate @ 12328]
Gary Kramlich <grim@pidgin.im>
parents: 10727
diff changeset
2315 group->currentsize--;
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2316
12305
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2317 if (!g_list_find(list, presence))
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2318 list = g_list_prepend(list, presence);
10557
7b2c41a3abea [gaim-migrate @ 11934]
Nathan Walp <nwalp@pidgin.im>
parents: 10548
diff changeset
2319
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2320 if (ops && ops->remove)
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2321 ops->remove(gaimbuddylist, bnode);
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2322 }
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5228
diff changeset
2323 }
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2324 if (recompute) {
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2325 gaim_contact_invalidate_priority_buddy(contact);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2326 if (ops && ops->update)
6983
a32d7b7d0739 [gaim-migrate @ 7539]
Nathan Walp <nwalp@pidgin.im>
parents: 6975
diff changeset
2327 ops->update(gaimbuddylist, cnode);
a32d7b7d0739 [gaim-migrate @ 7539]
Nathan Walp <nwalp@pidgin.im>
parents: 6975
diff changeset
2328 }
10726
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2329 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2330 chat = (GaimChat *)cnode;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2331
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2332 if(chat->account == account) {
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2333 group->currentsize--;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2334 group->online--;
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2335
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2336 if (ops && ops->remove)
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2337 ops->remove(gaimbuddylist, cnode);
bb259ec5d6be [gaim-migrate @ 12326]
Gary Kramlich <grim@pidgin.im>
parents: 10704
diff changeset
2338 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2339 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2340 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2341 }
12305
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2342
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2343 for (iter = list; iter; iter = iter->next)
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2344 {
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2345 gaim_presence_set_status_active(iter->data, "offline", TRUE);
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2346 }
6989da147d02 [gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12112
diff changeset
2347 g_list_free(list);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2348 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2349
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2350 gboolean gaim_group_on_account(GaimGroup *g, GaimAccount *account)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2351 {
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2352 GaimBlistNode *cnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2353 for (cnode = ((GaimBlistNode *)g)->child; cnode; cnode = cnode->next) {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2354 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) {
9787
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2355 if(gaim_contact_on_account((GaimContact *) cnode, account))
a88b7e860699 [gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents: 9754
diff changeset
2356 return TRUE;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2357 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) {
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7117
diff changeset
2358 GaimChat *chat = (GaimChat *)cnode;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2359 if ((!account && gaim_account_is_connected(chat->account))
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2360 || chat->account == account)
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2361 return TRUE;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2362 }
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2363 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2364 return FALSE;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2365 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2366
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2367 void
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2368 gaim_blist_request_add_buddy(GaimAccount *account, const char *username,
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2369 const char *group, const char *alias)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2370 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2371 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2372
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2373 ui_ops = gaim_blist_get_ui_ops();
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 if (ui_ops != NULL && ui_ops->request_add_buddy != NULL)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2376 ui_ops->request_add_buddy(account, username, group, alias);
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2377 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2378
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2379 void
9754
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2380 gaim_blist_request_add_chat(GaimAccount *account, GaimGroup *group,
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2381 const char *alias, const char *name)
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2382 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2383 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2384
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2385 ui_ops = gaim_blist_get_ui_ops();
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 if (ui_ops != NULL && ui_ops->request_add_chat != NULL)
9754
3a17eee239b2 [gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9741
diff changeset
2388 ui_ops->request_add_chat(account, group, alias, name);
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2389 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2390
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2391 void
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2392 gaim_blist_request_add_group(void)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2393 {
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2394 GaimBlistUiOps *ui_ops;
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2395
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2396 ui_ops = gaim_blist_get_ui_ops();
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 if (ui_ops != NULL && ui_ops->request_add_group != NULL)
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2399 ui_ops->request_add_group();
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2400 }
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 7035
diff changeset
2401
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2402 static void
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2403 gaim_blist_node_setting_free(gpointer data)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2404 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2405 GaimValue *value;
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2406
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2407 value = (GaimValue *)data;
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2408
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2409 gaim_value_destroy(value);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2410 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2411
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2412 static void gaim_blist_node_initialize_settings(GaimBlistNode *node)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2413 {
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2414 if (node->settings)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2415 return;
7693
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 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
2418 (GDestroyNotify)gaim_blist_node_setting_free);
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
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2421 void gaim_blist_node_remove_setting(GaimBlistNode *node, const char *key)
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2422 {
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2423 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2424 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2425 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2426
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2427 g_hash_table_remove(node->settings, key);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2428
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
2429 gaim_blist_schedule_save();
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2430 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2431
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2432 void
10548
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2433 gaim_blist_node_set_flags(GaimBlistNode *node, GaimBlistNodeFlags flags)
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2434 {
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2435 g_return_if_fail(node != NULL);
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 node->flags = flags;
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2438 }
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 GaimBlistNodeFlags
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2441 gaim_blist_node_get_flags(GaimBlistNode *node)
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2442 {
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2443 g_return_val_if_fail(node != NULL, 0);
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 return node->flags;
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2446 }
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2447
990b3ec2758e [gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents: 10504
diff changeset
2448 void
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2449 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
2450 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2451 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2452
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2453 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2454 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2455 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2456
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2457 value = gaim_value_new(GAIM_TYPE_BOOLEAN);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2458 gaim_value_set_boolean(value, data);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2459
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2460 g_hash_table_replace(node->settings, g_strdup(key), value);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2461
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
2462 gaim_blist_schedule_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2463 }
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 gboolean
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2466 gaim_blist_node_get_bool(GaimBlistNode* node, const char *key)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2467 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2468 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2469
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2470 g_return_val_if_fail(node != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2471 g_return_val_if_fail(node->settings != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2472 g_return_val_if_fail(key != NULL, FALSE);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2473
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2474 value = g_hash_table_lookup(node->settings, key);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2475
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2476 if (value == NULL)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2477 return FALSE;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2478
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2479 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
2480
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2481 return gaim_value_get_boolean(value);
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2482 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2483
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2484 void
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2485 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
2486 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2487 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2488
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2489 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2490 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2491 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2492
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2493 value = gaim_value_new(GAIM_TYPE_INT);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2494 gaim_value_set_int(value, data);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2495
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2496 g_hash_table_replace(node->settings, g_strdup(key), value);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2497
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
2498 gaim_blist_schedule_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2499 }
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 int
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2502 gaim_blist_node_get_int(GaimBlistNode* node, const char *key)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2503 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2504 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2505
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2506 g_return_val_if_fail(node != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2507 g_return_val_if_fail(node->settings != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2508 g_return_val_if_fail(key != NULL, 0);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2509
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2510 value = g_hash_table_lookup(node->settings, key);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2511
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2512 if (value == NULL)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2513 return 0;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2514
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2515 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
2516
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2517 return gaim_value_get_int(value);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2518 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2519
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2520 void
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2521 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
2522 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2523 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2524
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2525 g_return_if_fail(node != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2526 g_return_if_fail(node->settings != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2527 g_return_if_fail(key != NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2528
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2529 value = gaim_value_new(GAIM_TYPE_STRING);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2530 gaim_value_set_string(value, data);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2531
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2532 g_hash_table_replace(node->settings, g_strdup(key), value);
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2533
10704
99a466f384d2 [gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents: 10662
diff changeset
2534 gaim_blist_schedule_save();
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2535 }
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 const char *
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2538 gaim_blist_node_get_string(GaimBlistNode* node, const char *key)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2539 {
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2540 GaimValue *value;
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2541
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2542 g_return_val_if_fail(node != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2543 g_return_val_if_fail(node->settings != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2544 g_return_val_if_fail(key != NULL, NULL);
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2545
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2546 value = g_hash_table_lookup(node->settings, key);
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2547
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2548 if (value == NULL)
7849
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2549 return NULL;
c5cb6bc921a5 [gaim-migrate @ 8503]
Nathan Walp <nwalp@pidgin.im>
parents: 7848
diff changeset
2550
10430
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2551 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
2552
e86f83aefa04 [gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents: 10429
diff changeset
2553 return gaim_value_get_string(value);
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2554 }
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2555
10662
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2556 GList *
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2557 gaim_blist_node_get_extended_menu(GaimBlistNode *n)
7693
1f736efbd12d [gaim-migrate @ 8338]
Nathan Walp <nwalp@pidgin.im>
parents: 7671
diff changeset
2558 {
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2559 GList *menu = NULL;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2560
10662
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2561 g_return_val_if_fail(n != NULL, NULL);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2562
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2563 gaim_signal_emit(gaim_blist_get_handle(),
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2564 "blist-node-extended-menu",
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2565 n, &menu);
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2566 return menu;
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2567 }
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2568
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2569 GaimBlistNodeAction *
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2570 gaim_blist_node_action_new(char *label,
10662
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2571 void (*callback)(GaimBlistNode *, gpointer),
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2572 gpointer data, GList *children)
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2573 {
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2574 GaimBlistNodeAction *act = g_new0(GaimBlistNodeAction, 1);
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2575 act->label = label;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2576 act->callback = callback;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2577 act->data = data;
10662
e2dd08f1a92d [gaim-migrate @ 12199]
Etan Reisner <deryni@pidgin.im>
parents: 10567
diff changeset
2578 act->children = children;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2579 return act;
8952
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2580 }
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2581
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2582 int gaim_blist_get_group_size(GaimGroup *group, gboolean offline)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2583 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2584 if (!group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2585 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2586
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2587 return offline ? group->totalsize : group->currentsize;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2588 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2589
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2590 int gaim_blist_get_group_online_count(GaimGroup *group)
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2591 {
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2592 if (!group)
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2593 return 0;
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2594
5277
771f10d45bfd [gaim-migrate @ 5649]
Luke Schierer <lschiere@pidgin.im>
parents: 5266
diff changeset
2595 return group->online;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2596 }
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2597
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2598 void
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2599 gaim_blist_set_ui_ops(GaimBlistUiOps *ops)
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2600 {
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2601 blist_ui_ops = ops;
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2602 }
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2603
7098
22eabd4f5ed4 [gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents: 7060
diff changeset
2604 GaimBlistUiOps *
7035
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2605 gaim_blist_get_ui_ops(void)
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 return blist_ui_ops;
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2608 }
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2609
76bca80cd91d [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 7003
diff changeset
2610
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2611 void *
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2612 gaim_blist_get_handle(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2613 {
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2614 static int handle;
5228
83adaad2deb1 [gaim-migrate @ 5598]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2615
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2616 return &handle;
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2617 }
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
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2620 gaim_blist_init(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2621 {
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2622 void *handle = gaim_blist_get_handle();
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2623
11935
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2624 gaim_signal_register(handle, "buddy-status-changed",
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2625 gaim_marshal_VOID__POINTER_POINTER_POINTER, NULL,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2626 3,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2627 gaim_value_new(GAIM_TYPE_SUBTYPE,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2628 GAIM_SUBTYPE_BLIST_BUDDY),
11979
4c4d47cbbeeb [gaim-migrate @ 14272]
Eoin Coffey <ecoffey@soc.pidgin.im>
parents: 11935
diff changeset
2629 gaim_value_new(GAIM_TYPE_SUBTYPE,
12097
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2630 GAIM_SUBTYPE_STATUS),
11979
4c4d47cbbeeb [gaim-migrate @ 14272]
Eoin Coffey <ecoffey@soc.pidgin.im>
parents: 11935
diff changeset
2631 gaim_value_new(GAIM_TYPE_SUBTYPE,
12097
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2632 GAIM_SUBTYPE_STATUS));
11935
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2633
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2634 gaim_signal_register(handle, "buddy-idle-changed",
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2635 gaim_marshal_VOID__POINTER_INT_INT, NULL,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2636 3,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2637 gaim_value_new(GAIM_TYPE_SUBTYPE,
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2638 GAIM_SUBTYPE_BLIST_BUDDY),
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2639 gaim_value_new(GAIM_TYPE_INT),
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2640 gaim_value_new(GAIM_TYPE_INT));
1d95c7294577 [gaim-migrate @ 14226]
Etan Reisner <deryni@pidgin.im>
parents: 11910
diff changeset
2641
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2642
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2643 gaim_signal_register(handle, "buddy-signed-on",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2644 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2645 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2646 GAIM_SUBTYPE_BLIST_BUDDY));
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2647
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2648 gaim_signal_register(handle, "buddy-signed-off",
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2649 gaim_marshal_VOID__POINTER, NULL, 1,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2650 gaim_value_new(GAIM_TYPE_SUBTYPE,
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2651 GAIM_SUBTYPE_BLIST_BUDDY));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2652
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2653 gaim_signal_register(handle, "buddy-added",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2654 gaim_marshal_VOID__POINTER, NULL, 1,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2655 gaim_value_new(GAIM_TYPE_SUBTYPE,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2656 GAIM_SUBTYPE_BLIST_BUDDY));
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2657
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2658 gaim_signal_register(handle, "buddy-removed",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2659 gaim_marshal_VOID__POINTER, NULL, 1,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2660 gaim_value_new(GAIM_TYPE_SUBTYPE,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2661 GAIM_SUBTYPE_BLIST_BUDDY));
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2662
12097
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2663 gaim_signal_register(handle, "buddy-icon-changed",
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2664 gaim_marshal_VOID__POINTER, NULL, 1,
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2665 gaim_value_new(GAIM_TYPE_SUBTYPE,
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2666 GAIM_SUBTYPE_BLIST_BUDDY));
c8277c560c7c [gaim-migrate @ 14394]
Evan Schoenberg <evands@pidgin.im>
parents: 12088
diff changeset
2667
6564
a7a2c1927544 [gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents: 6506
diff changeset
2668 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
2669
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2670 gaim_signal_register(handle, "blist-node-extended-menu",
8710
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2671 gaim_marshal_VOID__POINTER_POINTER, NULL, 2,
360b660e428d [gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents: 8675
diff changeset
2672 gaim_value_new(GAIM_TYPE_SUBTYPE,
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9023
diff changeset
2673 GAIM_SUBTYPE_BLIST_NODE),
8952
b8bf830b3731 [gaim-migrate @ 9724]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8826
diff changeset
2674 gaim_value_new(GAIM_TYPE_BOXED, "GList **"));
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2675
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2676 gaim_signal_register(handle, "blist-node-aliased",
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2677 gaim_marshal_VOID__POINTER_POINTER, NULL, 2,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2678 gaim_value_new(GAIM_TYPE_SUBTYPE,
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2679 GAIM_SUBTYPE_BLIST_NODE),
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11434
diff changeset
2680 gaim_value_new(GAIM_TYPE_STRING));
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2681 }
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2682
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2683 void
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2684 gaim_blist_uninit(void)
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2685 {
10428
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
2686 if (save_timer != 0)
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
2687 {
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
2688 gaim_timeout_remove(save_timer);
940d15803cad [gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents: 10427
diff changeset
2689 save_timer = 0;
9285
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2690 gaim_blist_sync();
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2691 }
9cedf5d26577 [gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents: 9261
diff changeset
2692
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2693 gaim_signals_unregister_by_instance(gaim_blist_get_handle());
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6473
diff changeset
2694 }

mercurial