libgaim/blist.c

Wed, 18 Oct 2006 03:32:14 +0000

author
Daniel Atallah <datallah@pidgin.im>
date
Wed, 18 Oct 2006 03:32:14 +0000
changeset 14814
479ac60fb641
parent 14732
51548e9ed9e8
child 14843
5aa993aad339
permissions
-rw-r--r--

[gaim-migrate @ 17509]
Fix the situation (I think it will only happen while shutting down) where GaimBuddy->proto_data could be accessed after it is freed.
Specifically, it happened when gtkblist was requesting the emblems from the msn prpl.
Big thanks to henningn for noticing the funkiness in valgrind.
I discovered that there is no function to retrieve all the buddies for an account (shock, horror) - so I modified gaim_find_buddies() to return all the account buddies if "name" is NULL.

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

mercurial