annotate src/blist.c @ 11986:bfbb1798535e

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