Fri, 02 Jan 2009 22:23:38 +0000
explicit merge of 'f7ef17277d80385cfe528045bc7fd46175996e23'
and 'f7c0c2664f9035927fad464b3b8987b91c302c1f'
| 5228 | 1 | /* |
| 15884 | 2 | * purple |
| 5228 | 3 | * |
| 15884 | 4 | * Purple is the legal property of its developers, whose names are too numerous |
| 8046 | 5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 6 | * source distribution. | |
| 5228 | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19602
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 5228 | 21 | * |
| 22 | */ | |
|
24569
5dbd0617a27d
Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
23 | #define _PURPLE_BLIST_C_ |
|
24548
f4b935168fc2
use some additional preproc logic to avoid copying the structs directly into the implementation files
Gary Kramlich <grim@reaperworld.com>
parents:
24531
diff
changeset
|
24 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
25 | #include "internal.h" |
| 5228 | 26 | #include "blist.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
27 | #include "conversation.h" |
|
11067
b6353889a9ba
[gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11040
diff
changeset
|
28 | #include "dbus-maybe.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
29 | #include "debug.h" |
|
5436
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
30 | #include "notify.h" |
|
5545
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5541
diff
changeset
|
31 | #include "prefs.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
32 | #include "privacy.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
33 | #include "prpl.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
34 | #include "server.h" |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
35 | #include "signals.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5855
diff
changeset
|
36 | #include "util.h" |
| 10431 | 37 | #include "value.h" |
| 7132 | 38 | #include "xmlnode.h" |
| 5228 | 39 | |
| 15884 | 40 | static PurpleBlistUiOps *blist_ui_ops = NULL; |
| 41 | ||
| 42 | static PurpleBuddyList *purplebuddylist = NULL; | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
43 | static guint save_timer = 0; |
|
10426
f026e2a8f909
[gaim-migrate @ 11678]
Mark Doliner <markdoliner@pidgin.im>
parents:
10423
diff
changeset
|
44 | static gboolean blist_loaded = FALSE; |
| 7693 | 45 | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
46 | /********************************************************************* |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
47 | * Private utility functions * |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
48 | *********************************************************************/ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
49 | |
| 15884 | 50 | static PurpleBlistNode *purple_blist_get_last_sibling(PurpleBlistNode *node) |
| 5228 | 51 | { |
| 15884 | 52 | PurpleBlistNode *n = node; |
| 5228 | 53 | if (!n) |
| 54 | return NULL; | |
| 55 | while (n->next) | |
| 56 | n = n->next; | |
| 57 | return n; | |
| 58 | } | |
| 6695 | 59 | |
| 15884 | 60 | static PurpleBlistNode *purple_blist_get_last_child(PurpleBlistNode *node) |
| 5228 | 61 | { |
| 62 | if (!node) | |
| 63 | return NULL; | |
| 15884 | 64 | return purple_blist_get_last_sibling(node->child); |
| 5228 | 65 | } |
| 66 | ||
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
67 | struct _list_account_buddies { |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
68 | GSList *list; |
| 15884 | 69 | PurpleAccount *account; |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
70 | }; |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
71 | |
| 15884 | 72 | struct _purple_hbuddy { |
| 5247 | 73 | char *name; |
| 15884 | 74 | PurpleAccount *account; |
| 75 | PurpleBlistNode *group; | |
| 5247 | 76 | }; |
| 77 | ||
| 15884 | 78 | static guint _purple_blist_hbuddy_hash(struct _purple_hbuddy *hb) |
| 5247 | 79 | { |
| 80 | return g_str_hash(hb->name); | |
| 81 | } | |
| 82 | ||
| 15884 | 83 | static guint _purple_blist_hbuddy_equal(struct _purple_hbuddy *hb1, struct _purple_hbuddy *hb2) |
| 5247 | 84 | { |
| 5758 | 85 | return ((!strcmp(hb1->name, hb2->name)) && hb1->account == hb2->account && hb1->group == hb2->group); |
| 5247 | 86 | } |
| 87 | ||
| 15884 | 88 | static void _purple_blist_hbuddy_free_key(struct _purple_hbuddy *hb) |
| 6742 | 89 | { |
| 90 | g_free(hb->name); | |
| 91 | g_free(hb); | |
| 92 | } | |
| 93 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
94 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
95 | /********************************************************************* |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
96 | * Writing to disk * |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
97 | *********************************************************************/ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
98 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
99 | static void |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
100 | value_to_xmlnode(gpointer key, gpointer hvalue, gpointer user_data) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
101 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
102 | const char *name; |
| 15884 | 103 | PurpleValue *value; |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
104 | xmlnode *node, *child; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
105 | char buf[20]; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
106 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
107 | name = (const char *)key; |
| 15884 | 108 | value = (PurpleValue *)hvalue; |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
109 | node = (xmlnode *)user_data; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
110 | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10431
diff
changeset
|
111 | g_return_if_fail(value != NULL); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10431
diff
changeset
|
112 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
113 | child = xmlnode_new_child(node, "setting"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
114 | xmlnode_set_attrib(child, "name", name); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
115 | |
| 15884 | 116 | if (purple_value_get_type(value) == PURPLE_TYPE_INT) { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
117 | xmlnode_set_attrib(child, "type", "int"); |
| 15884 | 118 | snprintf(buf, sizeof(buf), "%d", purple_value_get_int(value)); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
119 | xmlnode_insert_data(child, buf, -1); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
120 | } |
| 15884 | 121 | else if (purple_value_get_type(value) == PURPLE_TYPE_STRING) { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
122 | xmlnode_set_attrib(child, "type", "string"); |
| 15884 | 123 | xmlnode_insert_data(child, purple_value_get_string(value), -1); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
124 | } |
| 15884 | 125 | else if (purple_value_get_type(value) == PURPLE_TYPE_BOOLEAN) { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
126 | xmlnode_set_attrib(child, "type", "bool"); |
| 15884 | 127 | snprintf(buf, sizeof(buf), "%d", purple_value_get_boolean(value)); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
128 | xmlnode_insert_data(child, buf, -1); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
129 | } |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
130 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
131 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
132 | static void |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
133 | chat_component_to_xmlnode(gpointer key, gpointer value, gpointer user_data) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
134 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
135 | const char *name; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
136 | const char *data; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
137 | xmlnode *node, *child; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
138 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
139 | name = (const char *)key; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
140 | data = (const char *)value; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
141 | node = (xmlnode *)user_data; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
142 | |
| 10431 | 143 | g_return_if_fail(data != NULL); |
| 144 | ||
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
145 | child = xmlnode_new_child(node, "component"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
146 | xmlnode_set_attrib(child, "name", name); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
147 | xmlnode_insert_data(child, data, -1); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
148 | } |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
149 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
150 | static xmlnode * |
| 15884 | 151 | buddy_to_xmlnode(PurpleBlistNode *bnode) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
152 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
153 | xmlnode *node, *child; |
| 15884 | 154 | PurpleBuddy *buddy; |
| 155 | ||
| 156 | buddy = (PurpleBuddy *)bnode; | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
157 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
158 | node = xmlnode_new("buddy"); |
| 15884 | 159 | xmlnode_set_attrib(node, "account", purple_account_get_username(buddy->account)); |
| 160 | xmlnode_set_attrib(node, "proto", purple_account_get_protocol_id(buddy->account)); | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
161 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
162 | child = xmlnode_new_child(node, "name"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
163 | xmlnode_insert_data(child, buddy->name, -1); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
164 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
165 | if (buddy->alias != NULL) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
166 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
167 | child = xmlnode_new_child(node, "alias"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
168 | xmlnode_insert_data(child, buddy->alias, -1); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
169 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
170 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
171 | /* Write buddy settings */ |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
172 | g_hash_table_foreach(buddy->node.settings, value_to_xmlnode, node); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
173 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
174 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
175 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
176 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
177 | static xmlnode * |
| 15884 | 178 | contact_to_xmlnode(PurpleBlistNode *cnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
179 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
180 | xmlnode *node, *child; |
| 15884 | 181 | PurpleContact *contact; |
| 182 | PurpleBlistNode *bnode; | |
| 183 | ||
| 184 | contact = (PurpleContact *)cnode; | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
185 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
186 | node = xmlnode_new("contact"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
187 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
188 | if (contact->alias != NULL) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
189 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
190 | xmlnode_set_attrib(node, "alias", contact->alias); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
191 | } |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
192 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
193 | /* Write buddies */ |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
194 | for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
195 | { |
| 15884 | 196 | if (!PURPLE_BLIST_NODE_SHOULD_SAVE(bnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
197 | continue; |
| 15884 | 198 | if (PURPLE_BLIST_NODE_IS_BUDDY(bnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
199 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
200 | child = buddy_to_xmlnode(bnode); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
201 | xmlnode_insert_child(node, child); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
202 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
203 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
204 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
205 | /* Write contact settings */ |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
206 | g_hash_table_foreach(cnode->settings, value_to_xmlnode, node); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
207 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
208 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
209 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
210 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
211 | static xmlnode * |
| 15884 | 212 | chat_to_xmlnode(PurpleBlistNode *cnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
213 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
214 | xmlnode *node, *child; |
| 15884 | 215 | PurpleChat *chat; |
| 216 | ||
| 217 | chat = (PurpleChat *)cnode; | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
218 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
219 | node = xmlnode_new("chat"); |
| 15884 | 220 | xmlnode_set_attrib(node, "proto", purple_account_get_protocol_id(chat->account)); |
| 221 | xmlnode_set_attrib(node, "account", purple_account_get_username(chat->account)); | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
222 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
223 | if (chat->alias != NULL) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
224 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
225 | child = xmlnode_new_child(node, "alias"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
226 | xmlnode_insert_data(child, chat->alias, -1); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
227 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
228 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
229 | /* Write chat components */ |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
230 | g_hash_table_foreach(chat->components, chat_component_to_xmlnode, node); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
231 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
232 | /* Write chat settings */ |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
233 | g_hash_table_foreach(chat->node.settings, value_to_xmlnode, node); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
234 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
235 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
236 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
237 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
238 | static xmlnode * |
| 15884 | 239 | group_to_xmlnode(PurpleBlistNode *gnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
240 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
241 | xmlnode *node, *child; |
| 15884 | 242 | PurpleGroup *group; |
| 243 | PurpleBlistNode *cnode; | |
| 244 | ||
| 245 | group = (PurpleGroup *)gnode; | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
246 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
247 | node = xmlnode_new("group"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
248 | xmlnode_set_attrib(node, "name", group->name); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
249 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
250 | /* Write settings */ |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
251 | g_hash_table_foreach(group->node.settings, value_to_xmlnode, node); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
252 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
253 | /* Write contacts and chats */ |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
254 | for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
255 | { |
| 15884 | 256 | if (!PURPLE_BLIST_NODE_SHOULD_SAVE(cnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
257 | continue; |
| 15884 | 258 | if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
259 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
260 | child = contact_to_xmlnode(cnode); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
261 | xmlnode_insert_child(node, child); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
262 | } |
| 15884 | 263 | else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
264 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
265 | child = chat_to_xmlnode(cnode); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
266 | xmlnode_insert_child(node, child); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
267 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
268 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
269 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
270 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
271 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
272 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
273 | static xmlnode * |
| 15884 | 274 | accountprivacy_to_xmlnode(PurpleAccount *account) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
275 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
276 | xmlnode *node, *child; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
277 | GSList *cur; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
278 | char buf[10]; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
279 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
280 | node = xmlnode_new("account"); |
| 15884 | 281 | xmlnode_set_attrib(node, "proto", purple_account_get_protocol_id(account)); |
| 282 | xmlnode_set_attrib(node, "name", purple_account_get_username(account)); | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
283 | snprintf(buf, sizeof(buf), "%d", account->perm_deny); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
284 | xmlnode_set_attrib(node, "mode", buf); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
285 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
286 | for (cur = account->permit; cur; cur = cur->next) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
287 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
288 | child = xmlnode_new_child(node, "permit"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
289 | xmlnode_insert_data(child, cur->data, -1); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
290 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
291 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
292 | for (cur = account->deny; cur; cur = cur->next) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
293 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
294 | child = xmlnode_new_child(node, "block"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
295 | xmlnode_insert_data(child, cur->data, -1); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
296 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
297 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
298 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
299 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
300 | |
|
10850
6889f793b918
[gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents:
10847
diff
changeset
|
301 | static xmlnode * |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21833
diff
changeset
|
302 | blist_to_xmlnode(void) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
303 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
304 | xmlnode *node, *child, *grandchild; |
| 15884 | 305 | PurpleBlistNode *gnode; |
|
18122
9bf9970c1b6a
disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents:
18121
diff
changeset
|
306 | GList *cur; |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
307 | |
| 15884 | 308 | node = xmlnode_new("purple"); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
309 | xmlnode_set_attrib(node, "version", "1.0"); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
310 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
311 | /* Write groups */ |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
312 | child = xmlnode_new_child(node, "blist"); |
| 15884 | 313 | for (gnode = purplebuddylist->root; gnode != NULL; gnode = gnode->next) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
314 | { |
| 15884 | 315 | if (!PURPLE_BLIST_NODE_SHOULD_SAVE(gnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
316 | continue; |
| 15884 | 317 | if (PURPLE_BLIST_NODE_IS_GROUP(gnode)) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
318 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
319 | grandchild = group_to_xmlnode(gnode); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
320 | xmlnode_insert_child(child, grandchild); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
321 | } |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
322 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
323 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
324 | /* Write privacy settings */ |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
325 | child = xmlnode_new_child(node, "privacy"); |
| 15884 | 326 | for (cur = purple_accounts_get_all(); cur != NULL; cur = cur->next) |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
327 | { |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
328 | grandchild = accountprivacy_to_xmlnode(cur->data); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
329 | xmlnode_insert_child(child, grandchild); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
330 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
331 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
332 | return node; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
333 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
334 | |
|
12398
941cf8760f48
[gaim-migrate @ 14705]
Richard Laager <rlaager@pidgin.im>
parents:
12319
diff
changeset
|
335 | static void |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21833
diff
changeset
|
336 | purple_blist_sync(void) |
| 10378 | 337 | { |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
338 | xmlnode *node; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
339 | char *data; |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
340 | |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
341 | if (!blist_loaded) |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
342 | { |
| 15884 | 343 | purple_debug_error("blist", "Attempted to save buddy list before it " |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
344 | "was read!\n"); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
345 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
346 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
347 | |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
348 | node = blist_to_xmlnode(); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
349 | data = xmlnode_to_formatted_str(node, NULL); |
| 15884 | 350 | purple_util_write_data_to_file("blist.xml", data, -1); |
|
10429
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
351 | g_free(data); |
|
cc2f5ab7ed77
[gaim-migrate @ 11681]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
352 | xmlnode_free(node); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
353 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
354 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
355 | static gboolean |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
356 | save_cb(gpointer data) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
357 | { |
| 15884 | 358 | purple_blist_sync(); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
359 | save_timer = 0; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
360 | return FALSE; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
361 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
362 | |
|
10704
99a466f384d2
[gaim-migrate @ 12288]
Mark Doliner <markdoliner@pidgin.im>
parents:
10662
diff
changeset
|
363 | void |
| 15884 | 364 | purple_blist_schedule_save() |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
365 | { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
366 | if (save_timer == 0) |
|
18068
b6554e3c8224
merge of '1442df274a24edc9a31194327bd00dfbcf478720'
Richard Laager <rlaager@pidgin.im>
diff
changeset
|
367 | save_timer = purple_timeout_add_seconds(5, save_cb, NULL); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
368 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
369 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
370 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
371 | /********************************************************************* |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
372 | * Reading from disk * |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
373 | *********************************************************************/ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
374 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
375 | static void |
| 15884 | 376 | parse_setting(PurpleBlistNode *node, xmlnode *setting) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
377 | { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
378 | const char *name = xmlnode_get_attrib(setting, "name"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
379 | const char *type = xmlnode_get_attrib(setting, "type"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
380 | char *value = xmlnode_get_data(setting); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
381 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
382 | if (!value) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
383 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
384 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
385 | if (!type || !strcmp(type, "string")) |
| 15884 | 386 | purple_blist_node_set_string(node, name, value); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
387 | else if (!strcmp(type, "bool")) |
| 15884 | 388 | purple_blist_node_set_bool(node, name, atoi(value)); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
389 | else if (!strcmp(type, "int")) |
| 15884 | 390 | purple_blist_node_set_int(node, name, atoi(value)); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
391 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
392 | g_free(value); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
393 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
394 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
395 | static void |
| 15884 | 396 | parse_buddy(PurpleGroup *group, PurpleContact *contact, xmlnode *bnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
397 | { |
| 15884 | 398 | PurpleAccount *account; |
| 399 | PurpleBuddy *buddy; | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
400 | char *name = NULL, *alias = NULL; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
401 | const char *acct_name, *proto, *protocol; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
402 | xmlnode *x; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
403 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
404 | acct_name = xmlnode_get_attrib(bnode, "account"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
405 | protocol = xmlnode_get_attrib(bnode, "protocol"); |
| 15884 | 406 | protocol = _purple_oscar_convert(acct_name, protocol); /* XXX: Remove */ |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
407 | proto = xmlnode_get_attrib(bnode, "proto"); |
| 15884 | 408 | proto = _purple_oscar_convert(acct_name, proto); /* XXX: Remove */ |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
409 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
410 | if (!acct_name || (!proto && !protocol)) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
411 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
412 | |
| 15884 | 413 | account = purple_accounts_find(acct_name, proto ? proto : protocol); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
414 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
415 | if (!account) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
416 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
417 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
418 | if ((x = xmlnode_get_child(bnode, "name"))) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
419 | name = xmlnode_get_data(x); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
420 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
421 | if (!name) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
422 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
423 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
424 | if ((x = xmlnode_get_child(bnode, "alias"))) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
425 | alias = xmlnode_get_data(x); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
426 | |
| 15884 | 427 | buddy = purple_buddy_new(account, name, alias); |
| 428 | purple_blist_add_buddy(buddy, contact, group, | |
| 429 | purple_blist_get_last_child((PurpleBlistNode*)contact)); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
430 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
431 | for (x = xmlnode_get_child(bnode, "setting"); x; x = xmlnode_get_next_twin(x)) { |
| 15884 | 432 | parse_setting((PurpleBlistNode*)buddy, x); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
433 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
434 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
435 | g_free(name); |
|
12687
0e34db1bd104
[gaim-migrate @ 15030]
Mark Doliner <markdoliner@pidgin.im>
parents:
12577
diff
changeset
|
436 | g_free(alias); |
| 10378 | 437 | } |
| 438 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
439 | static void |
| 15884 | 440 | parse_contact(PurpleGroup *group, xmlnode *cnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
441 | { |
| 15884 | 442 | PurpleContact *contact = purple_contact_new(); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
443 | xmlnode *x; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
444 | const char *alias; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
445 | |
| 15884 | 446 | purple_blist_add_contact(contact, group, |
| 447 | purple_blist_get_last_child((PurpleBlistNode*)group)); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
448 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
449 | if ((alias = xmlnode_get_attrib(cnode, "alias"))) { |
|
24569
5dbd0617a27d
Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
450 | purple_blist_alias_contact(contact, alias); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
451 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
452 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
453 | for (x = cnode->child; x; x = x->next) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
454 | if (x->type != XMLNODE_TYPE_TAG) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
455 | continue; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
456 | if (!strcmp(x->name, "buddy")) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
457 | parse_buddy(group, contact, x); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
458 | else if (!strcmp(x->name, "setting")) |
| 15884 | 459 | parse_setting((PurpleBlistNode*)contact, x); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
460 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
461 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
462 | /* if the contact is empty, don't keep it around. it causes problems */ |
| 15884 | 463 | if (!((PurpleBlistNode*)contact)->child) |
| 464 | purple_blist_remove_contact(contact); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
465 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
466 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
467 | static void |
| 15884 | 468 | parse_chat(PurpleGroup *group, xmlnode *cnode) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
469 | { |
| 15884 | 470 | PurpleChat *chat; |
| 471 | PurpleAccount *account; | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
472 | const char *acct_name, *proto, *protocol; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
473 | xmlnode *x; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
474 | char *alias = NULL; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
475 | GHashTable *components; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
476 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
477 | acct_name = xmlnode_get_attrib(cnode, "account"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
478 | protocol = xmlnode_get_attrib(cnode, "protocol"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
479 | proto = xmlnode_get_attrib(cnode, "proto"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
480 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
481 | if (!acct_name || (!proto && !protocol)) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
482 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
483 | |
| 15884 | 484 | account = purple_accounts_find(acct_name, proto ? proto : protocol); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
485 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
486 | if (!account) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
487 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
488 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
489 | if ((x = xmlnode_get_child(cnode, "alias"))) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
490 | alias = xmlnode_get_data(x); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
491 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
492 | components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
493 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
494 | for (x = xmlnode_get_child(cnode, "component"); x; x = xmlnode_get_next_twin(x)) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
495 | const char *name; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
496 | char *value; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
497 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
498 | name = xmlnode_get_attrib(x, "name"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
499 | value = xmlnode_get_data(x); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
500 | g_hash_table_replace(components, g_strdup(name), value); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
501 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
502 | |
| 15884 | 503 | chat = purple_chat_new(account, alias, components); |
| 504 | purple_blist_add_chat(chat, group, | |
| 505 | purple_blist_get_last_child((PurpleBlistNode*)group)); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
506 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
507 | for (x = xmlnode_get_child(cnode, "setting"); x; x = xmlnode_get_next_twin(x)) { |
| 15884 | 508 | parse_setting((PurpleBlistNode*)chat, x); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
509 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
510 | |
|
12687
0e34db1bd104
[gaim-migrate @ 15030]
Mark Doliner <markdoliner@pidgin.im>
parents:
12577
diff
changeset
|
511 | g_free(alias); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
512 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
513 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
514 | static void |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
515 | parse_group(xmlnode *groupnode) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
516 | { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
517 | const char *name = xmlnode_get_attrib(groupnode, "name"); |
| 15884 | 518 | PurpleGroup *group; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
519 | xmlnode *cnode; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
520 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
521 | if (!name) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
522 | name = _("Buddies"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
523 | |
| 15884 | 524 | group = purple_group_new(name); |
| 525 | purple_blist_add_group(group, | |
| 526 | purple_blist_get_last_sibling(purplebuddylist->root)); | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
527 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
528 | for (cnode = groupnode->child; cnode; cnode = cnode->next) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
529 | if (cnode->type != XMLNODE_TYPE_TAG) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
530 | continue; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
531 | if (!strcmp(cnode->name, "setting")) |
| 15884 | 532 | parse_setting((PurpleBlistNode*)group, cnode); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
533 | else if (!strcmp(cnode->name, "contact") || |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
534 | !strcmp(cnode->name, "person")) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
535 | parse_contact(group, cnode); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
536 | else if (!strcmp(cnode->name, "chat")) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
537 | parse_chat(group, cnode); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
538 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
539 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
540 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
541 | /* TODO: Make static and rename to load_blist */ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
542 | void |
| 15884 | 543 | purple_blist_load() |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
544 | { |
| 15884 | 545 | xmlnode *purple, *blist, *privacy; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
546 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
547 | blist_loaded = TRUE; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
548 | |
| 15884 | 549 | purple = purple_util_read_xml_from_file("blist.xml", _("buddy list")); |
| 550 | ||
| 551 | if (purple == NULL) | |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
552 | return; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
553 | |
| 15884 | 554 | blist = xmlnode_get_child(purple, "blist"); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
555 | if (blist) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
556 | xmlnode *groupnode; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
557 | for (groupnode = xmlnode_get_child(blist, "group"); groupnode != NULL; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
558 | groupnode = xmlnode_get_next_twin(groupnode)) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
559 | parse_group(groupnode); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
560 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
561 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
562 | |
| 15884 | 563 | privacy = xmlnode_get_child(purple, "privacy"); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
564 | if (privacy) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
565 | xmlnode *anode; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
566 | for (anode = privacy->child; anode; anode = anode->next) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
567 | xmlnode *x; |
| 15884 | 568 | PurpleAccount *account; |
|
10944
b6f61a32cacc
[gaim-migrate @ 12737]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10853
diff
changeset
|
569 | int imode; |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
570 | const char *acct_name, *proto, *mode, *protocol; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
571 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
572 | acct_name = xmlnode_get_attrib(anode, "name"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
573 | protocol = xmlnode_get_attrib(anode, "protocol"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
574 | proto = xmlnode_get_attrib(anode, "proto"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
575 | mode = xmlnode_get_attrib(anode, "mode"); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
576 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
577 | if (!acct_name || (!proto && !protocol) || !mode) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
578 | continue; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
579 | |
| 15884 | 580 | account = purple_accounts_find(acct_name, proto ? proto : protocol); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
581 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
582 | if (!account) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
583 | continue; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
584 | |
|
10944
b6f61a32cacc
[gaim-migrate @ 12737]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10853
diff
changeset
|
585 | imode = atoi(mode); |
| 15884 | 586 | account->perm_deny = (imode != 0 ? imode : PURPLE_PRIVACY_ALLOW_ALL); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
587 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
588 | for (x = anode->child; x; x = x->next) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
589 | char *name; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
590 | if (x->type != XMLNODE_TYPE_TAG) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
591 | continue; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
592 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
593 | if (!strcmp(x->name, "permit")) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
594 | name = xmlnode_get_data(x); |
| 15884 | 595 | purple_privacy_permit_add(account, name, TRUE); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
596 | g_free(name); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
597 | } else if (!strcmp(x->name, "block")) { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
598 | name = xmlnode_get_data(x); |
| 15884 | 599 | purple_privacy_deny_add(account, name, TRUE); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
600 | g_free(name); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
601 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
602 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
603 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
604 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
605 | |
| 15884 | 606 | xmlnode_free(purple); |
|
16421
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
607 | |
|
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
608 | /* This tells the buddy icon code to do its thing. */ |
|
16698
1fb16746439f
Fix up the private function calls to be prefixed with an underscore.
Richard Laager <rlaager@pidgin.im>
parents:
16569
diff
changeset
|
609 | _purple_buddy_icons_blist_loaded_cb(); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
610 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
611 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
612 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
613 | /********************************************************************* |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
614 | * Stuff * |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
615 | *********************************************************************/ |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
616 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
617 | static void |
| 15884 | 618 | purple_contact_compute_priority_buddy(PurpleContact *contact) |
| 6843 | 619 | { |
| 15884 | 620 | PurpleBlistNode *bnode; |
| 621 | PurpleBuddy *new_priority = NULL; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
622 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
623 | g_return_if_fail(contact != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
624 | |
| 6870 | 625 | contact->priority = NULL; |
| 15884 | 626 | for (bnode = ((PurpleBlistNode*)contact)->child; |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
627 | bnode != NULL; |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
628 | bnode = bnode->next) |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
629 | { |
| 15884 | 630 | PurpleBuddy *buddy; |
| 631 | ||
| 632 | if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) | |
| 6843 | 633 | continue; |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
634 | |
| 15884 | 635 | buddy = (PurpleBuddy*)bnode; |
|
20676
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
636 | if (new_priority == NULL) |
|
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
637 | { |
|
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
638 | new_priority = buddy; |
| 6843 | 639 | continue; |
|
20676
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
640 | } |
|
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
641 | |
|
4a3fa8f7eb5f
Consider offline contacts when calculating the priority buddy. I
Mark Doliner <markdoliner@pidgin.im>
parents:
20620
diff
changeset
|
642 | if (purple_account_is_connected(buddy->account)) |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
643 | { |
|
22302
0ad090a41686
When computing priority buddies for a contact, a buddy on an online account will always have a higher priority over a buddy on an offline account.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22283
diff
changeset
|
644 | int cmp = 1; |
|
0ad090a41686
When computing priority buddies for a contact, a buddy on an online account will always have a higher priority over a buddy on an offline account.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22283
diff
changeset
|
645 | if (purple_account_is_connected(new_priority->account)) |
|
0ad090a41686
When computing priority buddies for a contact, a buddy on an online account will always have a higher priority over a buddy on an offline account.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22283
diff
changeset
|
646 | cmp = purple_presence_compare(purple_buddy_get_presence(new_priority), |
|
0ad090a41686
When computing priority buddies for a contact, a buddy on an online account will always have a higher priority over a buddy on an offline account.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22283
diff
changeset
|
647 | purple_buddy_get_presence(buddy)); |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
648 | |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
649 | if (cmp > 0 || (cmp == 0 && |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
15884
diff
changeset
|
650 | purple_prefs_get_bool("/purple/contact/last_match"))) |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
651 | { |
|
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
652 | new_priority = buddy; |
|
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
653 | } |
|
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
654 | } |
| 6843 | 655 | } |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
656 | |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
657 | contact->priority = new_priority; |
| 10378 | 658 | contact->priority_valid = TRUE; |
| 6843 | 659 | } |
| 660 | ||
| 661 | ||
| 5228 | 662 | /***************************************************************************** |
| 663 | * Public API functions * | |
| 664 | *****************************************************************************/ | |
| 665 | ||
| 15884 | 666 | PurpleBuddyList *purple_blist_new() |
| 5228 | 667 | { |
| 15884 | 668 | PurpleBlistUiOps *ui_ops; |
| 669 | PurpleBuddyList *gbl = g_new0(PurpleBuddyList, 1); | |
| 670 | PURPLE_DBUS_REGISTER_POINTER(gbl, PurpleBuddyList); | |
| 671 | ||
| 672 | ui_ops = purple_blist_get_ui_ops(); | |
| 673 | ||
| 674 | gbl->buddies = g_hash_table_new_full((GHashFunc)_purple_blist_hbuddy_hash, | |
| 675 | (GEqualFunc)_purple_blist_hbuddy_equal, | |
| 676 | (GDestroyNotify)_purple_blist_hbuddy_free_key, NULL); | |
| 5247 | 677 | |
|
13929
3f26cda5508a
[gaim-migrate @ 16333]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13496
diff
changeset
|
678 | if (ui_ops != NULL && ui_ops->new_list != NULL) |
|
3f26cda5508a
[gaim-migrate @ 16333]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13496
diff
changeset
|
679 | ui_ops->new_list(gbl); |
| 5228 | 680 | |
| 681 | return gbl; | |
| 682 | } | |
| 683 | ||
| 684 | void | |
| 15884 | 685 | purple_set_blist(PurpleBuddyList *list) |
| 5228 | 686 | { |
| 15884 | 687 | purplebuddylist = list; |
| 5228 | 688 | } |
| 689 | ||
| 15884 | 690 | PurpleBuddyList * |
| 691 | purple_get_blist() | |
| 5228 | 692 | { |
| 15884 | 693 | return purplebuddylist; |
| 5228 | 694 | } |
| 695 | ||
| 15884 | 696 | PurpleBlistNode * |
| 697 | purple_blist_get_root() | |
| 13485 | 698 | { |
| 15884 | 699 | return purplebuddylist ? purplebuddylist->root : NULL; |
| 13485 | 700 | } |
| 701 | ||
| 24953 | 702 | GHashTable * |
| 703 | purple_blist_get_buddies() | |
| 704 | { | |
| 705 | return purplebuddylist ? purplebuddylist->buddies : NULL; | |
| 706 | } | |
| 707 | ||
|
24968
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
708 | void * |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
709 | purple_blist_get_ui_data() |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
710 | { |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
711 | return purplebuddylist->ui_data; |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
712 | } |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
713 | |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
714 | void |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
715 | purple_blist_set_ui_data(void *ui_data) |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
716 | { |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
717 | purplebuddylist->ui_data = ui_data; |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
718 | } |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
719 | |
| 15884 | 720 | void purple_blist_show() |
| 5228 | 721 | { |
| 15884 | 722 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
723 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
724 | if (ops && ops->show) |
| 15884 | 725 | ops->show(purplebuddylist); |
| 5228 | 726 | } |
| 727 | ||
| 15884 | 728 | void purple_blist_destroy() |
| 5228 | 729 | { |
| 15884 | 730 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 731 | ||
| 732 | purple_debug(PURPLE_DEBUG_INFO, "blist", "Destroying\n"); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
733 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
734 | if (ops && ops->destroy) |
| 15884 | 735 | ops->destroy(purplebuddylist); |
| 5228 | 736 | } |
| 737 | ||
| 15884 | 738 | void purple_blist_set_visible(gboolean show) |
| 5228 | 739 | { |
| 15884 | 740 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
741 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
742 | if (ops && ops->set_visible) |
| 15884 | 743 | ops->set_visible(purplebuddylist, show); |
| 5228 | 744 | } |
| 745 | ||
| 15884 | 746 | static PurpleBlistNode *get_next_node(PurpleBlistNode *node, gboolean godeep) |
|
12112
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
747 | { |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
748 | if (node == NULL) |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
749 | return NULL; |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
750 | |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
751 | if (godeep && node->child) |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
752 | return node->child; |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
753 | |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
754 | if (node->next) |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
755 | return node->next; |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
756 | |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
757 | return get_next_node(node->parent, FALSE); |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
758 | } |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
759 | |
| 15884 | 760 | PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline) |
|
12112
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
761 | { |
| 15884 | 762 | PurpleBlistNode *ret = node; |
|
13951
4a340b669170
[gaim-migrate @ 16370]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents:
13929
diff
changeset
|
763 | |
|
4a340b669170
[gaim-migrate @ 16370]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents:
13929
diff
changeset
|
764 | if (offline) |
|
4a340b669170
[gaim-migrate @ 16370]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents:
13929
diff
changeset
|
765 | return get_next_node(ret, TRUE); |
|
12112
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
766 | do |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
767 | { |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
768 | ret = get_next_node(ret, TRUE); |
| 15884 | 769 | } while (ret && PURPLE_BLIST_NODE_IS_BUDDY(ret) && |
| 770 | !purple_account_is_connected(purple_buddy_get_account((PurpleBuddy *)ret))); | |
|
13951
4a340b669170
[gaim-migrate @ 16370]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents:
13929
diff
changeset
|
771 | |
|
12112
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
772 | return ret; |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
773 | } |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12097
diff
changeset
|
774 | |
|
22282
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
775 | PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node) |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
776 | { |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
777 | return node ? node->parent : NULL; |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
778 | } |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
779 | |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
780 | PurpleBlistNode *purple_blist_node_get_first_child(PurpleBlistNode *node) |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
781 | { |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
782 | return node ? node->child : NULL; |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
783 | } |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
784 | |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
785 | PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node) |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
786 | { |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
787 | return node? node->next : NULL; |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
788 | } |
|
a964668bd7e4
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22104
diff
changeset
|
789 | |
|
22334
6eec04817c0d
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22302
diff
changeset
|
790 | PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node) |
|
6eec04817c0d
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22302
diff
changeset
|
791 | { |
|
6eec04817c0d
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22302
diff
changeset
|
792 | return node? node->prev : NULL; |
|
6eec04817c0d
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22302
diff
changeset
|
793 | } |
|
6eec04817c0d
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22302
diff
changeset
|
794 | |
|
24968
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
795 | void * |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
796 | purple_blist_node_get_ui_data(const PurpleBlistNode *node) |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
797 | { |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
798 | g_return_val_if_fail(node, NULL); |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
799 | |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
800 | return node->ui_data; |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
801 | } |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
802 | |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
803 | void |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
804 | purple_blist_node_set_ui_data(PurpleBlistNode *node, void *ui_data) { |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
805 | g_return_if_fail(node); |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
806 | |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
807 | node->ui_data = ui_data; |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
808 | } |
|
2d500d10773f
Added purple_blist_get_ui_data, purple_blist_set_ui_data, purple_blist_node_get_ui_data, and purple_blist_node_set_ui_data functions.
Gary Kramlich <grim@reaperworld.com>
parents:
24953
diff
changeset
|
809 | |
|
10052
329dad7e2da3
[gaim-migrate @ 11013]
Dave West <kat@users.sourceforge.net>
parents:
10037
diff
changeset
|
810 | void |
| 15884 | 811 | purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
812 | { |
| 15884 | 813 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 814 | PurplePresence *presence; | |
| 815 | PurpleStatus *status; | |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
816 | PurpleBlistNode *cnode; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
817 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
818 | g_return_if_fail(buddy != NULL); |
| 5228 | 819 | |
| 15884 | 820 | presence = purple_buddy_get_presence(buddy); |
| 821 | status = purple_presence_get_active_status(presence); | |
| 822 | ||
| 823 | purple_debug_info("blist", "Updating buddy status for %s (%s)\n", | |
| 824 | buddy->name, purple_account_get_protocol_name(buddy->account)); | |
| 825 | ||
| 826 | if (purple_status_is_online(status) && | |
| 827 | !purple_status_is_online(old_status)) { | |
| 828 | ||
| 829 | purple_signal_emit(purple_blist_get_handle(), "buddy-signed-on", buddy); | |
| 830 | ||
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
831 | cnode = buddy->node.parent; |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
832 | if (++(PURPLE_CONTACT(cnode)->online) == 1) |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
833 | PURPLE_GROUP(cnode->parent)->online++; |
| 15884 | 834 | } else if (!purple_status_is_online(status) && |
| 835 | purple_status_is_online(old_status)) { | |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
836 | |
| 15884 | 837 | purple_blist_node_set_int(&buddy->node, "last_seen", time(NULL)); |
| 838 | purple_signal_emit(purple_blist_get_handle(), "buddy-signed-off", buddy); | |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
839 | |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
840 | cnode = buddy->node.parent; |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
841 | if (--(PURPLE_CONTACT(cnode)->online) == 0) |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
842 | PURPLE_GROUP(cnode->parent)->online--; |
| 11935 | 843 | } else { |
| 15884 | 844 | purple_signal_emit(purple_blist_get_handle(), |
| 11935 | 845 | "buddy-status-changed", buddy, old_status, |
| 846 | status); | |
| 5228 | 847 | } |
| 848 | ||
|
10205
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
849 | /* |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
850 | * This function used to only call the following two functions if one of |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
851 | * the above signals had been triggered, but that's not good, because |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
852 | * if someone's away message changes and they don't go from away to back |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
853 | * to away then no signal is triggered. |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
854 | * |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
855 | * It's a safe assumption that SOMETHING called this function. PROBABLY |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
856 | * because something, somewhere changed. Calling the stuff below |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
857 | * certainly won't hurt anything. Unless you're on a K6-2 300. |
|
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
858 | */ |
| 15884 | 859 | purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy)); |
|
10205
efe6f0f708bd
[gaim-migrate @ 11326]
Mark Doliner <markdoliner@pidgin.im>
parents:
10166
diff
changeset
|
860 | if (ops && ops->update) |
| 15884 | 861 | ops->update(purplebuddylist, (PurpleBlistNode *)buddy); |
| 5228 | 862 | } |
| 863 | ||
|
23282
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
864 | void |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
865 | purple_blist_update_node_icon(PurpleBlistNode *node) |
| 5228 | 866 | { |
| 15884 | 867 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
868 | |
|
23282
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
869 | g_return_if_fail(node != NULL); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
870 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
871 | if (ops && ops->update) |
|
23282
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
872 | ops->update(purplebuddylist, node); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
873 | } |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
874 | |
|
23282
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
875 | void |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
876 | purple_blist_update_buddy_icon(PurpleBuddy *buddy) |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
877 | { |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
878 | purple_blist_update_node_icon((PurpleBlistNode *)buddy); |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
879 | } |
|
ceef4b18f664
Add the purple_blist_update_node_icon function and deprecate the
Etan Reisner <deryni@pidgin.im>
parents:
22837
diff
changeset
|
880 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
881 | /* |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
882 | * TODO: Maybe remove the call to this from server.c and call it |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
883 | * from oscar.c and toc.c instead? |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
884 | */ |
| 15884 | 885 | void purple_blist_rename_buddy(PurpleBuddy *buddy, const char *name) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
886 | { |
| 15884 | 887 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 888 | struct _purple_hbuddy *hb; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
889 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
890 | g_return_if_fail(buddy != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
891 | |
| 15884 | 892 | hb = g_new(struct _purple_hbuddy, 1); |
| 893 | hb->name = g_strdup(purple_normalize(buddy->account, buddy->name)); | |
| 8675 | 894 | hb->account = buddy->account; |
| 15884 | 895 | hb->group = ((PurpleBlistNode *)buddy)->parent->parent; |
| 896 | g_hash_table_remove(purplebuddylist->buddies, hb); | |
| 8675 | 897 | |
| 898 | g_free(hb->name); | |
| 15884 | 899 | hb->name = g_strdup(purple_normalize(buddy->account, name)); |
| 900 | g_hash_table_replace(purplebuddylist->buddies, hb, buddy); | |
| 8675 | 901 | |
| 5634 | 902 | g_free(buddy->name); |
| 5228 | 903 | buddy->name = g_strdup(name); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
904 | |
| 15884 | 905 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
906 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
907 | if (ops && ops->update) |
| 15884 | 908 | ops->update(purplebuddylist, (PurpleBlistNode *)buddy); |
| 5228 | 909 | } |
| 5234 | 910 | |
|
20101
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
911 | static gboolean |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
912 | purple_strings_are_different(const char *one, const char *two) |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
913 | { |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
914 | return !((one && two && g_utf8_collate(one, two) == 0) || |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
915 | ((one == NULL || *one == '\0') && (two == NULL || *two == '\0'))); |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
916 | } |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
917 | |
| 15884 | 918 | void purple_blist_alias_contact(PurpleContact *contact, const char *alias) |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
919 | { |
| 15884 | 920 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 921 | PurpleConversation *conv; | |
| 922 | PurpleBlistNode *bnode; | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
923 | char *old_alias; |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
924 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
925 | g_return_if_fail(contact != NULL); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
926 | |
|
20101
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
927 | if (!purple_strings_are_different(contact->alias, alias)) |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
928 | return; |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
929 | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
930 | old_alias = contact->alias; |
|
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
931 | |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
932 | if ((alias != NULL) && (*alias != '\0')) |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
933 | contact->alias = g_strdup(alias); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
934 | else |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
935 | contact->alias = NULL; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
936 | |
| 15884 | 937 | purple_blist_schedule_save(); |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
938 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
939 | if (ops && ops->update) |
| 15884 | 940 | ops->update(purplebuddylist, (PurpleBlistNode *)contact); |
| 941 | ||
| 942 | for(bnode = ((PurpleBlistNode *)contact)->child; bnode != NULL; bnode = bnode->next) | |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
943 | { |
| 15884 | 944 | PurpleBuddy *buddy = (PurpleBuddy *)bnode; |
| 945 | ||
| 946 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy->name, | |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
947 | buddy->account); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
948 | if (conv) |
| 15884 | 949 | purple_conversation_autoset_title(conv); |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
950 | } |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
951 | |
| 15884 | 952 | purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
953 | contact, old_alias); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
954 | g_free(old_alias); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
955 | } |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12305
diff
changeset
|
956 | |
| 15884 | 957 | void purple_blist_alias_chat(PurpleChat *chat, const char *alias) |
| 5234 | 958 | { |
| 15884 | 959 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
960 | char *old_alias; |
| 5234 | 961 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
962 | g_return_if_fail(chat != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
963 | |
|
20101
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
964 | if (!purple_strings_are_different(chat->alias, alias)) |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
965 | return; |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
966 | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
967 | old_alias = chat->alias; |
|
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
968 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
969 | if ((alias != NULL) && (*alias != '\0')) |
| 5237 | 970 | chat->alias = g_strdup(alias); |
| 971 | else | |
| 972 | chat->alias = NULL; | |
| 973 | ||
| 15884 | 974 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
975 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
976 | if (ops && ops->update) |
| 15884 | 977 | ops->update(purplebuddylist, (PurpleBlistNode *)chat); |
| 978 | ||
| 979 | purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", | |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
980 | chat, old_alias); |
|
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
981 | g_free(old_alias); |
| 5234 | 982 | } |
| 983 | ||
| 15884 | 984 | void purple_blist_alias_buddy(PurpleBuddy *buddy, const char *alias) |
| 5228 | 985 | { |
| 15884 | 986 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 987 | PurpleConversation *conv; | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
988 | char *old_alias; |
| 5228 | 989 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
990 | g_return_if_fail(buddy != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
991 | |
|
20101
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
992 | if (!purple_strings_are_different(buddy->alias, alias)) |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
993 | return; |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
994 | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
995 | old_alias = buddy->alias; |
|
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
996 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
997 | if ((alias != NULL) && (*alias != '\0')) |
| 5228 | 998 | buddy->alias = g_strdup(alias); |
| 999 | else | |
| 1000 | buddy->alias = NULL; | |
| 1001 | ||
| 15884 | 1002 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1003 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1004 | if (ops && ops->update) |
| 15884 | 1005 | ops->update(purplebuddylist, (PurpleBlistNode *)buddy); |
| 1006 | ||
| 1007 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy->name, | |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10205
diff
changeset
|
1008 | buddy->account); |
| 5228 | 1009 | if (conv) |
| 15884 | 1010 | purple_conversation_autoset_title(conv); |
| 1011 | ||
| 1012 | purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", | |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1013 | buddy, old_alias); |
|
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1014 | g_free(old_alias); |
| 5228 | 1015 | } |
| 1016 | ||
| 15884 | 1017 | void purple_blist_server_alias_buddy(PurpleBuddy *buddy, const char *alias) |
|
6058
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1018 | { |
| 15884 | 1019 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1020 | PurpleConversation *conv; | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
1021 | char *old_alias; |
|
6058
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1022 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1023 | g_return_if_fail(buddy != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1024 | |
|
20101
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1025 | if (!purple_strings_are_different(buddy->server_alias, alias)) |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1026 | return; |
|
87fca4dd263d
applied changes from 8075949b7612e77d6eaa5f0d3cbf98f40715f948
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1027 | |
|
14732
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
1028 | old_alias = buddy->server_alias; |
|
51548e9ed9e8
[gaim-migrate @ 17416]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14553
diff
changeset
|
1029 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1030 | if ((alias != NULL) && (*alias != '\0') && g_utf8_validate(alias, -1, NULL)) |
|
6058
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1031 | buddy->server_alias = g_strdup(alias); |
|
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1032 | else |
|
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1033 | buddy->server_alias = NULL; |
|
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1034 | |
| 15884 | 1035 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1036 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1037 | if (ops && ops->update) |
| 15884 | 1038 | ops->update(purplebuddylist, (PurpleBlistNode *)buddy); |
| 1039 | ||
| 1040 | conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy->name, | |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10205
diff
changeset
|
1041 | buddy->account); |
|
6058
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1042 | if (conv) |
| 15884 | 1043 | purple_conversation_autoset_title(conv); |
| 1044 | ||
| 1045 | purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", | |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1046 | buddy, old_alias); |
|
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1047 | g_free(old_alias); |
|
6058
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1048 | } |
|
0d5c66a5da5d
[gaim-migrate @ 6508]
Mark Doliner <markdoliner@pidgin.im>
parents:
6036
diff
changeset
|
1049 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1050 | /* |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1051 | * TODO: If merging, prompt the user if they want to merge. |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1052 | */ |
| 15884 | 1053 | void purple_blist_rename_group(PurpleGroup *source, const char *new_name) |
| 5228 | 1054 | { |
| 15884 | 1055 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1056 | PurpleGroup *dest; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1057 | gchar *old_name; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1058 | GList *moved_buddies = NULL; |
| 5346 | 1059 | GSList *accts; |
| 1060 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1061 | g_return_if_fail(source != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1062 | g_return_if_fail(new_name != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1063 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1064 | if (*new_name == '\0' || !strcmp(new_name, source->name)) |
| 5346 | 1065 | return; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1066 | |
| 15884 | 1067 | dest = purple_find_group(new_name); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1068 | if (dest != NULL) { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1069 | /* We're merging two groups */ |
| 15884 | 1070 | PurpleBlistNode *prev, *child, *next; |
| 1071 | ||
| 1072 | prev = purple_blist_get_last_child((PurpleBlistNode*)dest); | |
| 1073 | child = ((PurpleBlistNode*)source)->child; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1074 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1075 | /* |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1076 | * TODO: This seems like a dumb way to do this... why not just |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1077 | * append all children from the old group to the end of the new |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1078 | * one? PRPLs might be expecting to receive an add_buddy() for |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1079 | * each moved buddy... |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1080 | */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1081 | while (child) |
| 5346 | 1082 | { |
| 1083 | next = child->next; | |
| 15884 | 1084 | if (PURPLE_BLIST_NODE_IS_CONTACT(child)) { |
| 1085 | PurpleBlistNode *bnode; | |
| 1086 | purple_blist_add_contact((PurpleContact *)child, dest, prev); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1087 | for (bnode = child->child; bnode != NULL; bnode = bnode->next) { |
| 15884 | 1088 | purple_blist_add_buddy((PurpleBuddy *)bnode, (PurpleContact *)child, |
| 6695 | 1089 | NULL, bnode->prev); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1090 | moved_buddies = g_list_append(moved_buddies, bnode); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1091 | } |
| 5346 | 1092 | prev = child; |
| 15884 | 1093 | } else if (PURPLE_BLIST_NODE_IS_CHAT(child)) { |
| 1094 | purple_blist_add_chat((PurpleChat *)child, dest, prev); | |
| 5346 | 1095 | prev = child; |
| 1096 | } else { | |
| 15884 | 1097 | purple_debug(PURPLE_DEBUG_ERROR, "blist", |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1098 | "Unknown child type in group %s\n", source->name); |
| 5346 | 1099 | } |
| 1100 | child = next; | |
| 1101 | } | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1102 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1103 | /* Make a copy of the old group name and then delete the old group */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1104 | old_name = g_strdup(source->name); |
| 15884 | 1105 | purple_blist_remove_group(source); |
|
13196
b34319a69167
[gaim-migrate @ 15558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13043
diff
changeset
|
1106 | source = dest; |
| 5346 | 1107 | } else { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1108 | /* A simple rename */ |
| 15884 | 1109 | PurpleBlistNode *cnode, *bnode; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1110 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1111 | /* Build a GList of all buddies in this group */ |
| 15884 | 1112 | for (cnode = ((PurpleBlistNode *)source)->child; cnode != NULL; cnode = cnode->next) { |
| 1113 | if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1114 | for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1115 | moved_buddies = g_list_append(moved_buddies, bnode); |
| 5346 | 1116 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1117 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1118 | old_name = source->name; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1119 | source->name = g_strdup(new_name); |
| 5346 | 1120 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1121 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1122 | /* Save our changes */ |
| 15884 | 1123 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1124 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1125 | /* Update the UI */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1126 | if (ops && ops->update) |
| 15884 | 1127 | ops->update(purplebuddylist, (PurpleBlistNode*)source); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1128 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1129 | /* Notify all PRPLs */ |
|
13196
b34319a69167
[gaim-migrate @ 15558]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13043
diff
changeset
|
1130 | /* TODO: Is this condition needed? Seems like it would always be TRUE */ |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1131 | if(old_name && source && strcmp(source->name, old_name)) { |
| 15884 | 1132 | for (accts = purple_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) { |
| 1133 | PurpleAccount *account = accts->data; | |
|
22390
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1134 | PurpleConnection *gc = NULL; |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1135 | PurplePlugin *prpl = NULL; |
| 15884 | 1136 | PurplePluginProtocolInfo *prpl_info = NULL; |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1137 | GList *l = NULL, *buddies = NULL; |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1138 | |
|
22390
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1139 | gc = purple_account_get_connection(account); |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1140 | |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1141 | if(gc) |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1142 | prpl = purple_connection_get_prpl(gc); |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1143 | |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1144 | if(gc && prpl) |
|
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1145 | prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1146 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1147 | if(!prpl_info) |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1148 | continue; |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1149 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1150 | for(l = moved_buddies; l; l = l->next) { |
| 15884 | 1151 | PurpleBuddy *buddy = (PurpleBuddy *)l->data; |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1152 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1153 | if(buddy && buddy->account == account) |
| 15884 | 1154 | buddies = g_list_append(buddies, (PurpleBlistNode *)buddy); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1155 | } |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1156 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1157 | if(prpl_info->rename_group) { |
|
22390
d22357d5c7ba
Kill off gc->prpl in the core everywhere but connection.c (when the struct
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22341
diff
changeset
|
1158 | prpl_info->rename_group(gc, old_name, source, buddies); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1159 | } else { |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1160 | GList *cur, *groups = NULL; |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1161 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1162 | /* Make a list of what the groups each buddy is in */ |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1163 | for(cur = buddies; cur; cur = cur->next) { |
| 15884 | 1164 | PurpleBlistNode *node = (PurpleBlistNode *)cur->data; |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
13951
diff
changeset
|
1165 | groups = g_list_prepend(groups, node->parent->parent); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1166 | } |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1167 | |
| 15884 | 1168 | purple_account_remove_buddies(account, buddies, groups); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1169 | g_list_free(groups); |
| 15884 | 1170 | purple_account_add_buddies(account, buddies); |
|
10853
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1171 | } |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1172 | |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1173 | g_list_free(buddies); |
|
6ed47bace3a5
[gaim-migrate @ 12527]
Luke Schierer <lschiere@pidgin.im>
parents:
10850
diff
changeset
|
1174 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1175 | } |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1176 | g_list_free(moved_buddies); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1177 | g_free(old_name); |
| 5228 | 1178 | } |
| 5234 | 1179 | |
| 15884 | 1180 | static void purple_blist_node_initialize_settings(PurpleBlistNode *node); |
| 1181 | ||
| 1182 | PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components) | |
| 5234 | 1183 | { |
| 15884 | 1184 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1185 | PurpleChat *chat; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1186 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1187 | g_return_val_if_fail(account != NULL, FALSE); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1188 | g_return_val_if_fail(components != NULL, FALSE); |
| 5234 | 1189 | |
| 15884 | 1190 | chat = g_new0(PurpleChat, 1); |
| 5234 | 1191 | chat->account = account; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1192 | if ((alias != NULL) && (*alias != '\0')) |
| 5237 | 1193 | chat->alias = g_strdup(alias); |
| 5234 | 1194 | chat->components = components; |
| 15884 | 1195 | purple_blist_node_initialize_settings((PurpleBlistNode *)chat); |
| 1196 | ((PurpleBlistNode *)chat)->type = PURPLE_BLIST_CHAT_NODE; | |
| 5234 | 1197 | |
| 1198 | if (ops != NULL && ops->new_node != NULL) | |
| 15884 | 1199 | ops->new_node((PurpleBlistNode *)chat); |
| 1200 | ||
| 1201 | PURPLE_DBUS_REGISTER_POINTER(chat, PurpleChat); | |
| 5234 | 1202 | return chat; |
| 1203 | } | |
| 1204 | ||
| 15884 | 1205 | PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *screenname, const char *alias) |
| 5228 | 1206 | { |
| 15884 | 1207 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1208 | PurpleBuddy *buddy; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1209 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1210 | g_return_val_if_fail(account != NULL, FALSE); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1211 | g_return_val_if_fail(screenname != NULL, FALSE); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1212 | |
| 15884 | 1213 | buddy = g_new0(PurpleBuddy, 1); |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
1214 | buddy->account = account; |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
1215 | buddy->name = g_strdup(screenname); |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
1216 | buddy->alias = g_strdup(alias); |
| 15884 | 1217 | buddy->presence = purple_presence_new_for_buddy(buddy); |
| 1218 | ((PurpleBlistNode *)buddy)->type = PURPLE_BLIST_BUDDY_NODE; | |
| 1219 | ||
| 1220 | purple_presence_set_status_active(buddy->presence, "offline", TRUE); | |
| 1221 | ||
| 1222 | purple_blist_node_initialize_settings((PurpleBlistNode *)buddy); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1223 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1224 | if (ops && ops->new_node) |
| 15884 | 1225 | ops->new_node((PurpleBlistNode *)buddy); |
| 1226 | ||
| 1227 | PURPLE_DBUS_REGISTER_POINTER(buddy, PurpleBuddy); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1228 | return buddy; |
| 5228 | 1229 | } |
| 5634 | 1230 | |
|
6846
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1231 | void |
| 15884 | 1232 | purple_buddy_set_icon(PurpleBuddy *buddy, PurpleBuddyIcon *icon) |
|
6846
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1233 | { |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1234 | g_return_if_fail(buddy != NULL); |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1235 | |
|
16421
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
1236 | if (buddy->icon != icon) |
|
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
1237 | { |
|
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
1238 | purple_buddy_icon_unref(buddy->icon); |
| 15884 | 1239 | buddy->icon = (icon != NULL ? purple_buddy_icon_ref(icon) : NULL); |
|
12476
c4e21f4ab5a7
[gaim-migrate @ 14787]
Evan Schoenberg <evands@pidgin.im>
parents:
12458
diff
changeset
|
1240 | } |
|
6846
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1241 | |
| 15884 | 1242 | purple_signal_emit(purple_blist_get_handle(), "buddy-icon-changed", buddy); |
| 1243 | ||
|
23284
8584cb2422e5
Update some calls to the functions I just deprecated.
Etan Reisner <deryni@pidgin.im>
parents:
23282
diff
changeset
|
1244 | purple_blist_update_node_icon((PurpleBlistNode*)buddy); |
|
6846
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1245 | } |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1246 | |
| 15884 | 1247 | PurpleAccount * |
| 1248 | purple_buddy_get_account(const PurpleBuddy *buddy) | |
|
10037
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1249 | { |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1250 | g_return_val_if_fail(buddy != NULL, NULL); |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1251 | |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1252 | return buddy->account; |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1253 | } |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1254 | |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1255 | const char * |
| 15884 | 1256 | purple_buddy_get_name(const PurpleBuddy *buddy) |
|
10037
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1257 | { |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1258 | g_return_val_if_fail(buddy != NULL, NULL); |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1259 | |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1260 | return buddy->name; |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1261 | } |
|
5f5b72040fa2
[gaim-migrate @ 10996]
Dave West <kat@users.sourceforge.net>
parents:
10001
diff
changeset
|
1262 | |
| 15884 | 1263 | PurpleBuddyIcon * |
| 1264 | purple_buddy_get_icon(const PurpleBuddy *buddy) | |
|
6846
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1265 | { |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1266 | g_return_val_if_fail(buddy != NULL, NULL); |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1267 | |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1268 | return buddy->icon; |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1269 | } |
|
f814f02dca87
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6843
diff
changeset
|
1270 | |
|
24934
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1271 | gpointer |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1272 | purple_buddy_get_protocol_data(const PurpleBuddy *buddy) |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1273 | { |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1274 | g_return_val_if_fail(buddy != NULL, NULL); |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1275 | |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1276 | return buddy->proto_data; |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1277 | } |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1278 | |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1279 | void |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1280 | purple_buddy_set_protocol_data(PurpleBuddy *buddy, gpointer data) |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1281 | { |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1282 | g_return_if_fail(buddy != NULL); |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1283 | |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1284 | buddy->proto_data = data; |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1285 | } |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1286 | |
|
d78663b75d9f
Add purple_buddy_get_protocol_data() and purple_buddy_set_protocol_data()
Richard Laager <rlaager@pidgin.im>
parents:
24548
diff
changeset
|
1287 | |
| 15884 | 1288 | void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node) |
| 5234 | 1289 | { |
| 15884 | 1290 | PurpleBlistNode *cnode = (PurpleBlistNode*)chat; |
| 1291 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); | |
| 6774 | 1292 | |
| 1293 | g_return_if_fail(chat != NULL); | |
| 15884 | 1294 | g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT((PurpleBlistNode *)chat)); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1295 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1296 | if (node == NULL) { |
|
23149
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1297 | if (group == NULL) |
| 15884 | 1298 | group = purple_group_new(_("Chats")); |
|
23149
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1299 | |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1300 | /* Add group to blist if isn't already on it. Fixes #2752. */ |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1301 | if (!purple_find_group(group->name)) { |
| 15884 | 1302 | purple_blist_add_group(group, |
| 1303 | purple_blist_get_last_sibling(purplebuddylist->root)); | |
| 5234 | 1304 | } |
| 1305 | } else { | |
| 15884 | 1306 | group = (PurpleGroup*)node->parent; |
| 5234 | 1307 | } |
| 1308 | ||
| 1309 | /* if we're moving to overtop of ourselves, do nothing */ | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1310 | if (cnode == node) |
| 5234 | 1311 | return; |
| 1312 | ||
| 1313 | if (cnode->parent) { | |
| 1314 | /* This chat was already in the list and is | |
| 1315 | * being moved. | |
| 1316 | */ | |
| 15884 | 1317 | ((PurpleGroup *)cnode->parent)->totalsize--; |
| 1318 | if (purple_account_is_connected(chat->account)) { | |
| 1319 | ((PurpleGroup *)cnode->parent)->online--; | |
| 1320 | ((PurpleGroup *)cnode->parent)->currentsize--; | |
| 5287 | 1321 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1322 | if (cnode->next) |
| 5234 | 1323 | cnode->next->prev = cnode->prev; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1324 | if (cnode->prev) |
| 5234 | 1325 | cnode->prev->next = cnode->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1326 | if (cnode->parent->child == cnode) |
| 5234 | 1327 | cnode->parent->child = cnode->next; |
| 1328 | ||
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1329 | if (ops && ops->remove) |
| 15884 | 1330 | ops->remove(purplebuddylist, cnode); |
|
11101
a7ee14e2a30a
[gaim-migrate @ 13140]
Daniel Atallah <datallah@pidgin.im>
parents:
11067
diff
changeset
|
1331 | /* ops->remove() cleaned up the cnode's ui_data, so we need to |
|
a7ee14e2a30a
[gaim-migrate @ 13140]
Daniel Atallah <datallah@pidgin.im>
parents:
11067
diff
changeset
|
1332 | * reinitialize it */ |
|
13496
c1942626f106
[gaim-migrate @ 15871]
Richard Laager <rlaager@pidgin.im>
parents:
13485
diff
changeset
|
1333 | if (ops && ops->new_node) |
|
c1942626f106
[gaim-migrate @ 15871]
Richard Laager <rlaager@pidgin.im>
parents:
13485
diff
changeset
|
1334 | ops->new_node(cnode); |
| 5234 | 1335 | |
| 15884 | 1336 | purple_blist_schedule_save(); |
| 5234 | 1337 | } |
| 1338 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1339 | if (node != NULL) { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1340 | if (node->next) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1341 | node->next->prev = cnode; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1342 | cnode->next = node->next; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1343 | cnode->prev = node; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1344 | cnode->parent = node->parent; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1345 | node->next = cnode; |
| 15884 | 1346 | ((PurpleGroup *)node->parent)->totalsize++; |
| 1347 | if (purple_account_is_connected(chat->account)) { | |
| 1348 | ((PurpleGroup *)node->parent)->online++; | |
| 1349 | ((PurpleGroup *)node->parent)->currentsize++; | |
| 5287 | 1350 | } |
| 5234 | 1351 | } else { |
| 15884 | 1352 | if (((PurpleBlistNode *)group)->child) |
| 1353 | ((PurpleBlistNode *)group)->child->prev = cnode; | |
| 1354 | cnode->next = ((PurpleBlistNode *)group)->child; | |
| 5634 | 1355 | cnode->prev = NULL; |
| 15884 | 1356 | ((PurpleBlistNode *)group)->child = cnode; |
| 1357 | cnode->parent = (PurpleBlistNode *)group; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1358 | group->totalsize++; |
| 15884 | 1359 | if (purple_account_is_connected(chat->account)) { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1360 | group->online++; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1361 | group->currentsize++; |
| 5287 | 1362 | } |
| 5234 | 1363 | } |
| 1364 | ||
| 15884 | 1365 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1366 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1367 | if (ops && ops->update) |
| 15884 | 1368 | ops->update(purplebuddylist, (PurpleBlistNode *)cnode); |
| 5234 | 1369 | } |
| 1370 | ||
| 15884 | 1371 | void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node) |
| 5228 | 1372 | { |
| 15884 | 1373 | PurpleBlistNode *cnode, *bnode; |
| 1374 | PurpleGroup *g; | |
| 1375 | PurpleContact *c; | |
| 1376 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); | |
| 1377 | struct _purple_hbuddy *hb; | |
| 6695 | 1378 | |
| 1379 | g_return_if_fail(buddy != NULL); | |
| 15884 | 1380 | g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY((PurpleBlistNode*)buddy)); |
| 1381 | ||
| 1382 | bnode = (PurpleBlistNode *)buddy; | |
| 5228 | 1383 | |
| 6695 | 1384 | /* if we're moving to overtop of ourselves, do nothing */ |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1385 | if (bnode == node || (!node && bnode->parent && |
| 15884 | 1386 | contact && bnode->parent == (PurpleBlistNode*)contact |
| 6695 | 1387 | && bnode == bnode->parent->child)) |
| 1388 | return; | |
| 1389 | ||
| 15884 | 1390 | if (node && PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
| 1391 | c = (PurpleContact*)node->parent; | |
| 1392 | g = (PurpleGroup*)node->parent->parent; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1393 | } else if (contact) { |
| 6695 | 1394 | c = contact; |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1395 | g = PURPLE_GROUP(PURPLE_BLIST_NODE(c)->parent); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1396 | } else { |
|
23149
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1397 | g = group; |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1398 | if (g == NULL) |
| 15884 | 1399 | g = purple_group_new(_("Buddies")); |
|
23149
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1400 | /* Add group to blist if isn't already on it. Fixes #2752. */ |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1401 | if (!purple_find_group(g->name)) { |
| 15884 | 1402 | purple_blist_add_group(g, |
| 1403 | purple_blist_get_last_sibling(purplebuddylist->root)); | |
| 5228 | 1404 | } |
| 15884 | 1405 | c = purple_contact_new(); |
| 1406 | purple_blist_add_contact(c, g, | |
| 1407 | purple_blist_get_last_child((PurpleBlistNode*)g)); | |
| 5228 | 1408 | } |
| 1409 | ||
| 15884 | 1410 | cnode = (PurpleBlistNode *)c; |
| 5228 | 1411 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1412 | if (bnode->parent) { |
| 15884 | 1413 | if (PURPLE_BUDDY_IS_ONLINE(buddy)) { |
| 1414 | ((PurpleContact*)bnode->parent)->online--; | |
| 1415 | if (((PurpleContact*)bnode->parent)->online == 0) | |
| 1416 | ((PurpleGroup*)bnode->parent->parent)->online--; | |
| 6695 | 1417 | } |
| 15884 | 1418 | if (purple_account_is_connected(buddy->account)) { |
| 1419 | ((PurpleContact*)bnode->parent)->currentsize--; | |
| 1420 | if (((PurpleContact*)bnode->parent)->currentsize == 0) | |
| 1421 | ((PurpleGroup*)bnode->parent->parent)->currentsize--; | |
| 6695 | 1422 | } |
| 15884 | 1423 | ((PurpleContact*)bnode->parent)->totalsize--; |
| 6695 | 1424 | /* the group totalsize will be taken care of by remove_contact below */ |
| 1425 | ||
| 15884 | 1426 | if (bnode->parent->parent != (PurpleBlistNode*)g) |
| 1427 | serv_move_buddy(buddy, (PurpleGroup *)bnode->parent->parent, g); | |
| 5277 | 1428 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1429 | if (bnode->next) |
| 5228 | 1430 | bnode->next->prev = bnode->prev; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1431 | if (bnode->prev) |
| 5228 | 1432 | bnode->prev->next = bnode->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1433 | if (bnode->parent->child == bnode) |
| 5228 | 1434 | bnode->parent->child = bnode->next; |
| 1435 | ||
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1436 | if (ops && ops->remove) |
| 15884 | 1437 | ops->remove(purplebuddylist, bnode); |
| 1438 | ||
| 1439 | purple_blist_schedule_save(); | |
| 1440 | ||
| 1441 | if (bnode->parent->parent != (PurpleBlistNode*)g) { | |
| 1442 | hb = g_new(struct _purple_hbuddy, 1); | |
| 1443 | hb->name = g_strdup(purple_normalize(buddy->account, buddy->name)); | |
| 6742 | 1444 | hb->account = buddy->account; |
| 1445 | hb->group = bnode->parent->parent; | |
| 15884 | 1446 | g_hash_table_remove(purplebuddylist->buddies, hb); |
| 7162 | 1447 | g_free(hb->name); |
| 6742 | 1448 | g_free(hb); |
| 1449 | } | |
| 6794 | 1450 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1451 | if (!bnode->parent->child) { |
| 15884 | 1452 | purple_blist_remove_contact((PurpleContact*)bnode->parent); |
| 7003 | 1453 | } else { |
| 15884 | 1454 | purple_contact_invalidate_priority_buddy((PurpleContact*)bnode->parent); |
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1455 | if (ops && ops->update) |
| 15884 | 1456 | ops->update(purplebuddylist, bnode->parent); |
| 7003 | 1457 | } |
| 5228 | 1458 | } |
| 1459 | ||
| 15884 | 1460 | if (node && PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1461 | if (node->next) |
| 6695 | 1462 | node->next->prev = bnode; |
| 1463 | bnode->next = node->next; | |
| 1464 | bnode->prev = node; | |
| 1465 | bnode->parent = node->parent; | |
| 1466 | node->next = bnode; | |
| 5228 | 1467 | } else { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1468 | if (cnode->child) |
| 6695 | 1469 | cnode->child->prev = bnode; |
| 1470 | bnode->prev = NULL; | |
| 1471 | bnode->next = cnode->child; | |
| 1472 | cnode->child = bnode; | |
| 1473 | bnode->parent = cnode; | |
| 5228 | 1474 | } |
| 1475 | ||
| 15884 | 1476 | if (PURPLE_BUDDY_IS_ONLINE(buddy)) { |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1477 | if (++(PURPLE_CONTACT(bnode->parent)->online) == 1) |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1478 | PURPLE_GROUP(bnode->parent->parent)->online++; |
| 6695 | 1479 | } |
| 15884 | 1480 | if (purple_account_is_connected(buddy->account)) { |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1481 | if (++(PURPLE_CONTACT(bnode->parent)->currentsize) == 1) |
|
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1482 | PURPLE_GROUP(bnode->parent->parent)->currentsize++; |
| 6695 | 1483 | } |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1484 | PURPLE_CONTACT(bnode->parent)->totalsize++; |
| 15884 | 1485 | |
| 1486 | hb = g_new(struct _purple_hbuddy, 1); | |
| 1487 | hb->name = g_strdup(purple_normalize(buddy->account, buddy->name)); | |
| 5247 | 1488 | hb->account = buddy->account; |
| 15884 | 1489 | hb->group = ((PurpleBlistNode*)buddy)->parent->parent; |
| 1490 | ||
| 1491 | g_hash_table_replace(purplebuddylist->buddies, hb, buddy); | |
| 1492 | ||
| 1493 | purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy)); | |
| 1494 | ||
| 1495 | purple_blist_schedule_save(); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1496 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1497 | if (ops && ops->update) |
| 15884 | 1498 | ops->update(purplebuddylist, (PurpleBlistNode*)buddy); |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1499 | |
|
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1500 | /* Signal that the buddy has been added */ |
| 15884 | 1501 | purple_signal_emit(purple_blist_get_handle(), "buddy-added", buddy); |
| 5228 | 1502 | } |
| 1503 | ||
| 15884 | 1504 | PurpleContact *purple_contact_new() |
| 5228 | 1505 | { |
| 15884 | 1506 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1507 | ||
| 1508 | PurpleContact *contact = g_new0(PurpleContact, 1); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1509 | contact->totalsize = 0; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1510 | contact->currentsize = 0; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1511 | contact->online = 0; |
| 15884 | 1512 | purple_blist_node_initialize_settings((PurpleBlistNode *)contact); |
| 1513 | ((PurpleBlistNode *)contact)->type = PURPLE_BLIST_CONTACT_NODE; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1514 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1515 | if (ops && ops->new_node) |
| 15884 | 1516 | ops->new_node((PurpleBlistNode *)contact); |
| 1517 | ||
| 1518 | PURPLE_DBUS_REGISTER_POINTER(contact, PurpleContact); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1519 | return contact; |
| 6695 | 1520 | } |
| 1521 | ||
| 15884 | 1522 | void purple_contact_set_alias(PurpleContact *contact, const char *alias) |
| 6755 | 1523 | { |
|
20620
daa111825e61
Looking at purple_contact_set_alias and purple_blist_alias_contact functions
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20101
diff
changeset
|
1524 | purple_blist_alias_contact(contact,alias); |
| 6755 | 1525 | } |
| 1526 | ||
| 15884 | 1527 | const char *purple_contact_get_alias(PurpleContact* contact) |
| 6755 | 1528 | { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1529 | g_return_val_if_fail(contact != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1530 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1531 | if (contact->alias) |
| 7312 | 1532 | return contact->alias; |
| 1533 | ||
| 15884 | 1534 | return purple_buddy_get_alias(purple_contact_get_priority_buddy(contact)); |
| 6755 | 1535 | } |
| 1536 | ||
| 15884 | 1537 | gboolean purple_contact_on_account(PurpleContact *c, PurpleAccount *account) |
|
9787
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1538 | { |
| 15884 | 1539 | PurpleBlistNode *bnode, *cnode = (PurpleBlistNode *) c; |
|
9787
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1540 | |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1541 | g_return_val_if_fail(c != NULL, FALSE); |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1542 | g_return_val_if_fail(account != NULL, FALSE); |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1543 | |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1544 | for (bnode = cnode->child; bnode; bnode = bnode->next) { |
| 15884 | 1545 | PurpleBuddy *buddy; |
| 1546 | ||
| 1547 | if (! PURPLE_BLIST_NODE_IS_BUDDY(bnode)) | |
|
9787
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1548 | continue; |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1549 | |
| 15884 | 1550 | buddy = (PurpleBuddy *)bnode; |
|
9787
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1551 | if (buddy->account == account) |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1552 | return TRUE; |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1553 | } |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1554 | return FALSE; |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1555 | } |
|
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
1556 | |
| 15884 | 1557 | void purple_contact_invalidate_priority_buddy(PurpleContact *contact) |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1558 | { |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1559 | g_return_if_fail(contact != NULL); |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1560 | |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1561 | contact->priority_valid = FALSE; |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1562 | } |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
1563 | |
| 15884 | 1564 | PurpleGroup *purple_group_new(const char *name) |
| 6695 | 1565 | { |
| 15884 | 1566 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1567 | PurpleGroup *group; | |
|
12458
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12398
diff
changeset
|
1568 | |
|
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12398
diff
changeset
|
1569 | g_return_val_if_fail(name != NULL, NULL); |
|
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12398
diff
changeset
|
1570 | g_return_val_if_fail(*name != '\0', NULL); |
|
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12398
diff
changeset
|
1571 | |
| 15884 | 1572 | group = purple_find_group(name); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1573 | if (group != NULL) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1574 | return group; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1575 | |
| 15884 | 1576 | group = g_new0(PurpleGroup, 1); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1577 | group->name = g_strdup(name); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1578 | group->totalsize = 0; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1579 | group->currentsize = 0; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1580 | group->online = 0; |
| 15884 | 1581 | purple_blist_node_initialize_settings((PurpleBlistNode *)group); |
| 1582 | ((PurpleBlistNode *)group)->type = PURPLE_BLIST_GROUP_NODE; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1583 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1584 | if (ops && ops->new_node) |
| 15884 | 1585 | ops->new_node((PurpleBlistNode *)group); |
| 1586 | ||
| 1587 | PURPLE_DBUS_REGISTER_POINTER(group, PurpleGroup); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1588 | return group; |
| 5228 | 1589 | } |
| 1590 | ||
| 15884 | 1591 | void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node) |
| 6695 | 1592 | { |
| 15884 | 1593 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1594 | PurpleGroup *g; | |
| 1595 | PurpleBlistNode *gnode, *cnode, *bnode; | |
| 6695 | 1596 | |
| 6774 | 1597 | g_return_if_fail(contact != NULL); |
| 15884 | 1598 | g_return_if_fail(PURPLE_BLIST_NODE_IS_CONTACT((PurpleBlistNode*)contact)); |
| 1599 | ||
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
1600 | if (PURPLE_BLIST_NODE(contact) == node) |
| 6975 | 1601 | return; |
| 1602 | ||
| 15884 | 1603 | if (node && (PURPLE_BLIST_NODE_IS_CONTACT(node) || |
| 1604 | PURPLE_BLIST_NODE_IS_CHAT(node))) | |
| 1605 | g = (PurpleGroup*)node->parent; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1606 | else if (group) |
| 6695 | 1607 | g = group; |
| 1608 | else { | |
|
23149
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1609 | g = purple_find_group(_("Buddies")); |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1610 | if (g == NULL) { |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1611 | g = purple_group_new(_("Buddies")); |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1612 | purple_blist_add_group(g, |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1613 | purple_blist_get_last_sibling(purplebuddylist->root)); |
|
0745ed631bd4
When defaulting a group, don't move it to the bottom if it exists.
Daniel Atallah <datallah@pidgin.im>
parents:
23083
diff
changeset
|
1614 | } |
| 6695 | 1615 | } |
| 1616 | ||
| 15884 | 1617 | gnode = (PurpleBlistNode*)g; |
| 1618 | cnode = (PurpleBlistNode*)contact; | |
| 6695 | 1619 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1620 | if (cnode->parent) { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1621 | if (cnode->parent->child == cnode) |
| 6731 | 1622 | cnode->parent->child = cnode->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1623 | if (cnode->prev) |
| 6695 | 1624 | cnode->prev->next = cnode->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1625 | if (cnode->next) |
| 6695 | 1626 | cnode->next->prev = cnode->prev; |
| 1627 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1628 | if (cnode->parent != gnode) { |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1629 | bnode = cnode->child; |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1630 | while (bnode) { |
| 15884 | 1631 | PurpleBlistNode *next_bnode = bnode->next; |
| 1632 | PurpleBuddy *b = (PurpleBuddy*)bnode; | |
| 1633 | ||
| 1634 | struct _purple_hbuddy *hb = g_new(struct _purple_hbuddy, 1); | |
| 1635 | hb->name = g_strdup(purple_normalize(b->account, b->name)); | |
| 6742 | 1636 | hb->account = b->account; |
| 1637 | hb->group = cnode->parent; | |
| 1638 | ||
| 15884 | 1639 | g_hash_table_remove(purplebuddylist->buddies, hb); |
| 1640 | ||
| 1641 | if (!purple_find_buddy_in_group(b->account, b->name, g)) { | |
| 8328 | 1642 | hb->group = gnode; |
| 15884 | 1643 | g_hash_table_replace(purplebuddylist->buddies, hb, b); |
| 8328 | 1644 | |
|
22458
42e804b6db56
Kill off some uses of account->gc.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22390
diff
changeset
|
1645 | if (purple_account_get_connection(b->account)) |
| 15884 | 1646 | serv_move_buddy(b, (PurpleGroup *)cnode->parent, g); |
| 8328 | 1647 | } else { |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1648 | gboolean empty_contact = FALSE; |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1649 | |
| 8328 | 1650 | /* this buddy already exists in the group, so we're |
| 1651 | * gonna delete it instead */ | |
| 1652 | g_free(hb->name); | |
| 1653 | g_free(hb); | |
|
22458
42e804b6db56
Kill off some uses of account->gc.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22390
diff
changeset
|
1654 | if (purple_account_get_connection(b->account)) |
| 15884 | 1655 | purple_account_remove_buddy(b->account, b, (PurpleGroup *)cnode->parent); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1656 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1657 | if (!cnode->child->next) |
| 8328 | 1658 | empty_contact = TRUE; |
| 15884 | 1659 | purple_blist_remove_buddy(b); |
| 1660 | ||
| 1661 | /** in purple_blist_remove_buddy(), if the last buddy in a | |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1662 | * contact is removed, the contact is cleaned up and |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1663 | * g_free'd, so we mustn't try to reference bnode->next */ |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1664 | if (empty_contact) |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1665 | return; |
| 8328 | 1666 | } |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1667 | bnode = next_bnode; |
| 6742 | 1668 | } |
| 1669 | } | |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1670 | |
|
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1671 | if (contact->online > 0) |
| 15884 | 1672 | ((PurpleGroup*)cnode->parent)->online--; |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1673 | if (contact->currentsize > 0) |
| 15884 | 1674 | ((PurpleGroup*)cnode->parent)->currentsize--; |
| 1675 | ((PurpleGroup*)cnode->parent)->totalsize--; | |
|
9928
49f4f7639644
[gaim-migrate @ 10820]
Daniel Atallah <datallah@pidgin.im>
parents:
9927
diff
changeset
|
1676 | |
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1677 | if (ops && ops->remove) |
| 15884 | 1678 | ops->remove(purplebuddylist, cnode); |
| 1679 | ||
| 1680 | purple_blist_schedule_save(); | |
| 6695 | 1681 | } |
| 1682 | ||
| 15884 | 1683 | if (node && (PURPLE_BLIST_NODE_IS_CONTACT(node) || |
| 1684 | PURPLE_BLIST_NODE_IS_CHAT(node))) { | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1685 | if (node->next) |
| 6695 | 1686 | node->next->prev = cnode; |
| 1687 | cnode->next = node->next; | |
| 1688 | cnode->prev = node; | |
| 1689 | cnode->parent = node->parent; | |
| 1690 | node->next = cnode; | |
| 1691 | } else { | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1692 | if (gnode->child) |
| 6695 | 1693 | gnode->child->prev = cnode; |
| 1694 | cnode->prev = NULL; | |
| 1695 | cnode->next = gnode->child; | |
| 1696 | gnode->child = cnode; | |
| 1697 | cnode->parent = gnode; | |
| 1698 | } | |
| 1699 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1700 | if (contact->online > 0) |
| 6695 | 1701 | g->online++; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1702 | if (contact->currentsize > 0) |
| 6695 | 1703 | g->currentsize++; |
| 1704 | g->totalsize++; | |
| 1705 | ||
| 15884 | 1706 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1707 | |
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1708 | if (ops && ops->update) |
|
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1709 | { |
|
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1710 | if (cnode->child) |
| 15884 | 1711 | ops->update(purplebuddylist, cnode); |
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1712 | |
|
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1713 | for (bnode = cnode->child; bnode; bnode = bnode->next) |
| 15884 | 1714 | ops->update(purplebuddylist, bnode); |
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1715 | } |
| 6695 | 1716 | } |
| 1717 | ||
| 15884 | 1718 | void purple_blist_merge_contact(PurpleContact *source, PurpleBlistNode *node) |
| 6965 | 1719 | { |
| 15884 | 1720 | PurpleBlistNode *sourcenode = (PurpleBlistNode*)source; |
| 1721 | PurpleBlistNode *targetnode; | |
| 1722 | PurpleBlistNode *prev, *cur, *next; | |
| 1723 | PurpleContact *target; | |
| 7246 | 1724 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1725 | g_return_if_fail(source != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1726 | g_return_if_fail(node != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1727 | |
| 15884 | 1728 | if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
| 1729 | target = (PurpleContact *)node; | |
| 1730 | prev = purple_blist_get_last_child(node); | |
| 1731 | } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | |
| 1732 | target = (PurpleContact *)node->parent; | |
| 7246 | 1733 | prev = node; |
| 1734 | } else { | |
| 6965 | 1735 | return; |
| 7246 | 1736 | } |
| 1737 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1738 | if (source == target || !target) |
| 7246 | 1739 | return; |
| 1740 | ||
| 15884 | 1741 | targetnode = (PurpleBlistNode *)target; |
| 7246 | 1742 | next = sourcenode->child; |
| 1743 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1744 | while (next) { |
| 7246 | 1745 | cur = next; |
| 1746 | next = cur->next; | |
| 15884 | 1747 | if (PURPLE_BLIST_NODE_IS_BUDDY(cur)) { |
| 1748 | purple_blist_add_buddy((PurpleBuddy *)cur, target, NULL, prev); | |
| 7246 | 1749 | prev = cur; |
| 1750 | } | |
| 6965 | 1751 | } |
| 1752 | } | |
| 1753 | ||
| 15884 | 1754 | void purple_blist_add_group(PurpleGroup *group, PurpleBlistNode *node) |
| 5228 | 1755 | { |
| 15884 | 1756 | PurpleBlistUiOps *ops; |
| 1757 | PurpleBlistNode *gnode = (PurpleBlistNode*)group; | |
| 5228 | 1758 | |
| 6774 | 1759 | g_return_if_fail(group != NULL); |
| 15884 | 1760 | g_return_if_fail(PURPLE_BLIST_NODE_IS_GROUP((PurpleBlistNode *)group)); |
| 1761 | ||
| 1762 | ops = purple_blist_get_ui_ops(); | |
| 1763 | ||
| 1764 | if (!purplebuddylist->root) { | |
| 1765 | purplebuddylist->root = gnode; | |
| 5228 | 1766 | return; |
| 1767 | } | |
| 1768 | ||
| 1769 | /* if we're moving to overtop of ourselves, do nothing */ | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1770 | if (gnode == node) |
| 5228 | 1771 | return; |
| 1772 | ||
| 15884 | 1773 | if (purple_find_group(group->name)) { |
| 5228 | 1774 | /* This is just being moved */ |
| 1775 | ||
|
13423
0da8342608c3
[gaim-migrate @ 15797]
Richard Laager <rlaager@pidgin.im>
parents:
13196
diff
changeset
|
1776 | if (ops && ops->remove) |
| 15884 | 1777 | ops->remove(purplebuddylist, (PurpleBlistNode *)group); |
| 1778 | ||
| 1779 | if (gnode == purplebuddylist->root) | |
| 1780 | purplebuddylist->root = gnode->next; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1781 | if (gnode->prev) |
| 5228 | 1782 | gnode->prev->next = gnode->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1783 | if (gnode->next) |
| 5228 | 1784 | gnode->next->prev = gnode->prev; |
| 1785 | } | |
| 1786 | ||
| 15884 | 1787 | if (node && PURPLE_BLIST_NODE_IS_GROUP(node)) { |
| 5634 | 1788 | gnode->next = node->next; |
| 1789 | gnode->prev = node; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1790 | if (node->next) |
| 5634 | 1791 | node->next->prev = gnode; |
| 1792 | node->next = gnode; | |
| 1793 | } else { | |
| 15884 | 1794 | if (purplebuddylist->root) |
| 1795 | purplebuddylist->root->prev = gnode; | |
| 1796 | gnode->next = purplebuddylist->root; | |
| 5634 | 1797 | gnode->prev = NULL; |
| 15884 | 1798 | purplebuddylist->root = gnode; |
| 5634 | 1799 | } |
| 1800 | ||
| 15884 | 1801 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1802 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1803 | if (ops && ops->update) { |
| 15884 | 1804 | ops->update(purplebuddylist, gnode); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1805 | for (node = gnode->child; node; node = node->next) |
| 15884 | 1806 | ops->update(purplebuddylist, node); |
| 5228 | 1807 | } |
| 1808 | } | |
| 1809 | ||
| 15884 | 1810 | void purple_blist_remove_contact(PurpleContact *contact) |
| 5228 | 1811 | { |
| 15884 | 1812 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1813 | PurpleBlistNode *node, *gnode; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1814 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1815 | g_return_if_fail(contact != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1816 | |
| 15884 | 1817 | node = (PurpleBlistNode *)contact; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1818 | gnode = node->parent; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1819 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1820 | if (node->child) { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1821 | /* |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1822 | * If this contact has children then remove them. When the last |
|
10166
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1823 | * buddy is removed from the contact, the contact is automatically |
|
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1824 | * deleted. |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1825 | */ |
|
10166
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1826 | while (node->child->next) { |
| 15884 | 1827 | purple_blist_remove_buddy((PurpleBuddy*)node->child); |
| 6695 | 1828 | } |
|
10166
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1829 | /* |
|
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1830 | * Remove the last buddy and trigger the deletion of the contact. |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1831 | * It would probably be cleaner if contact-deletion was done after |
|
10166
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1832 | * a timeout? Or if it had to be done manually, like below? |
|
d87eed7d5744
[gaim-migrate @ 11252]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10087
diff
changeset
|
1833 | */ |
| 15884 | 1834 | purple_blist_remove_buddy((PurpleBuddy*)node->child); |
| 6695 | 1835 | } else { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1836 | /* Remove the node from its parent */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1837 | if (gnode->child == node) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1838 | gnode->child = node->next; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1839 | if (node->prev) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1840 | node->prev->next = node->next; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1841 | if (node->next) |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1842 | node->next->prev = node->prev; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1843 | |
| 15884 | 1844 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1845 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1846 | /* Update the UI */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1847 | if (ops && ops->remove) |
| 15884 | 1848 | ops->remove(purplebuddylist, node); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1849 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1850 | /* Delete the node */ |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10475
diff
changeset
|
1851 | g_hash_table_destroy(contact->node.settings); |
| 15884 | 1852 | PURPLE_DBUS_UNREGISTER_POINTER(contact); |
| 6695 | 1853 | g_free(contact); |
| 1854 | } | |
| 1855 | } | |
| 1856 | ||
| 15884 | 1857 | void purple_blist_remove_buddy(PurpleBuddy *buddy) |
| 6695 | 1858 | { |
| 15884 | 1859 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1860 | PurpleBlistNode *node, *cnode, *gnode; | |
| 1861 | PurpleContact *contact; | |
| 1862 | PurpleGroup *group; | |
| 1863 | struct _purple_hbuddy hb; | |
|
25241
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1864 | PurplePlugin *prpl; |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1865 | PurplePluginProtocolInfo *prpl_info; |
| 5228 | 1866 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1867 | g_return_if_fail(buddy != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1868 | |
| 15884 | 1869 | node = (PurpleBlistNode *)buddy; |
| 6695 | 1870 | cnode = node->parent; |
|
17690
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1871 | gnode = (cnode != NULL) ? cnode->parent : NULL; |
| 15884 | 1872 | contact = (PurpleContact *)cnode; |
| 1873 | group = (PurpleGroup *)gnode; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1874 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1875 | /* Remove the node from its parent */ |
| 5228 | 1876 | if (node->prev) |
| 1877 | node->prev->next = node->next; | |
| 1878 | if (node->next) | |
| 1879 | node->next->prev = node->prev; | |
|
17690
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1880 | if ((cnode != NULL) && (cnode->child == node)) |
| 6695 | 1881 | cnode->child = node->next; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1882 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1883 | /* Adjust size counts */ |
|
17690
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1884 | if (contact != NULL) { |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1885 | if (PURPLE_BUDDY_IS_ONLINE(buddy)) { |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1886 | contact->online--; |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1887 | if (contact->online == 0) |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1888 | group->online--; |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1889 | } |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1890 | if (purple_account_is_connected(buddy->account)) { |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1891 | contact->currentsize--; |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1892 | if (contact->currentsize == 0) |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1893 | group->currentsize--; |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1894 | } |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1895 | contact->totalsize--; |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1896 | |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1897 | /* Re-sort the contact */ |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1898 | if (cnode->child && contact->priority == buddy) { |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1899 | purple_contact_invalidate_priority_buddy(contact); |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1900 | if (ops && ops->update) |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1901 | ops->update(purplebuddylist, cnode); |
|
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1902 | } |
| 6695 | 1903 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1904 | |
| 15884 | 1905 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1906 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1907 | /* Remove this buddy from the buddies hash table */ |
| 15884 | 1908 | hb.name = g_strdup(purple_normalize(buddy->account, buddy->name)); |
| 5247 | 1909 | hb.account = buddy->account; |
|
17690
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1910 | hb.group = gnode; |
| 15884 | 1911 | g_hash_table_remove(purplebuddylist->buddies, &hb); |
| 7162 | 1912 | g_free(hb.name); |
| 5247 | 1913 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1914 | /* Update the UI */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1915 | if (ops && ops->remove) |
| 15884 | 1916 | ops->remove(purplebuddylist, node); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1917 | |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1918 | /* Signal that the buddy has been removed before freeing the memory for it */ |
| 15884 | 1919 | purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy); |
|
11454
a604c2097a6e
[gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents:
11434
diff
changeset
|
1920 | |
|
25241
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1921 | /* |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1922 | * Tell the owner PRPL that we're about to free the buddy so it |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1923 | * can free proto_data |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1924 | */ |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1925 | prpl = purple_find_prpl(purple_account_get_protocol_id(buddy->account)); |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1926 | prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1927 | if (prpl_info && prpl_info->buddy_free) |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1928 | prpl_info->buddy_free(buddy); |
|
92eff650de33
We have a prpl function "buddy_free" that I don't think any of our
Mark Doliner <markdoliner@pidgin.im>
parents:
24665
diff
changeset
|
1929 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1930 | /* Delete the node */ |
|
16421
f9218e1c4703
The buddy icon code as it stands, with lots of bugs and design flaws.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
1931 | purple_buddy_icon_unref(buddy->icon); |
| 7693 | 1932 | g_hash_table_destroy(buddy->node.settings); |
| 15884 | 1933 | purple_presence_destroy(buddy->presence); |
| 5228 | 1934 | g_free(buddy->name); |
| 1935 | g_free(buddy->alias); | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10475
diff
changeset
|
1936 | g_free(buddy->server_alias); |
|
11067
b6353889a9ba
[gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11040
diff
changeset
|
1937 | |
| 15884 | 1938 | PURPLE_DBUS_UNREGISTER_POINTER(buddy); |
| 5228 | 1939 | g_free(buddy); |
| 6755 | 1940 | |
| 15884 | 1941 | /* FIXME: Once PurpleBuddy is a GObject, timeout callbacks can |
|
12862
f62868e5825e
[gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents:
12860
diff
changeset
|
1942 | * g_object_ref() it when connecting the callback and |
|
f62868e5825e
[gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents:
12860
diff
changeset
|
1943 | * g_object_unref() it in the handler. That way, it won't |
|
f62868e5825e
[gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents:
12860
diff
changeset
|
1944 | * get freed while the timeout is pending and this line can |
|
f62868e5825e
[gaim-migrate @ 15213]
Richard Laager <rlaager@pidgin.im>
parents:
12860
diff
changeset
|
1945 | * be removed. */ |
|
12860
06b7fc0ded57
[gaim-migrate @ 15211]
Glauber de Oliveira Costa <gcosta@redhat.com>
parents:
12797
diff
changeset
|
1946 | while (g_source_remove_by_user_data((gpointer *)buddy)); |
|
06b7fc0ded57
[gaim-migrate @ 15211]
Glauber de Oliveira Costa <gcosta@redhat.com>
parents:
12797
diff
changeset
|
1947 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1948 | /* If the contact is empty then remove it */ |
|
17690
32b7b02dd752
Fix purple_blist_remove_buddy() so it doesn't crash (NULL pointer
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16856
diff
changeset
|
1949 | if ((contact != NULL) && !cnode->child) |
| 15884 | 1950 | purple_blist_remove_contact(contact); |
| 5228 | 1951 | } |
| 1952 | ||
| 15884 | 1953 | void purple_blist_remove_chat(PurpleChat *chat) |
| 5234 | 1954 | { |
| 15884 | 1955 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 1956 | PurpleBlistNode *node, *gnode; | |
| 1957 | PurpleGroup *group; | |
| 5234 | 1958 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1959 | g_return_if_fail(chat != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1960 | |
| 15884 | 1961 | node = (PurpleBlistNode *)chat; |
| 5234 | 1962 | gnode = node->parent; |
| 15884 | 1963 | group = (PurpleGroup *)gnode; |
| 5234 | 1964 | |
|
12577
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1965 | if (gnode != NULL) |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1966 | { |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1967 | /* Remove the node from its parent */ |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1968 | if (gnode->child == node) |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1969 | gnode->child = node->next; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1970 | if (node->prev) |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1971 | node->prev->next = node->next; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1972 | if (node->next) |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1973 | node->next->prev = node->prev; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1974 | |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1975 | /* Adjust size counts */ |
| 15884 | 1976 | if (purple_account_is_connected(chat->account)) { |
|
12577
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1977 | group->online--; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1978 | group->currentsize--; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1979 | } |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1980 | group->totalsize--; |
|
d2ea7a4ec658
[gaim-migrate @ 14899]
Richard Laager <rlaager@pidgin.im>
parents:
12476
diff
changeset
|
1981 | |
| 15884 | 1982 | purple_blist_schedule_save(); |
| 5394 | 1983 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1984 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1985 | /* Update the UI */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1986 | if (ops && ops->remove) |
| 15884 | 1987 | ops->remove(purplebuddylist, node); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1988 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
1989 | /* Delete the node */ |
| 5234 | 1990 | g_hash_table_destroy(chat->components); |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10475
diff
changeset
|
1991 | g_hash_table_destroy(chat->node.settings); |
| 5234 | 1992 | g_free(chat->alias); |
| 15884 | 1993 | PURPLE_DBUS_UNREGISTER_POINTER(chat); |
| 5234 | 1994 | g_free(chat); |
| 1995 | } | |
| 1996 | ||
| 15884 | 1997 | void purple_blist_remove_group(PurpleGroup *group) |
| 5228 | 1998 | { |
| 15884 | 1999 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 2000 | PurpleBlistNode *node; | |
|
18122
9bf9970c1b6a
disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents:
18121
diff
changeset
|
2001 | GList *l; |
| 5228 | 2002 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2003 | g_return_if_fail(group != NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2004 | |
| 15884 | 2005 | node = (PurpleBlistNode *)group; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2006 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2007 | /* Make sure the group is empty */ |
|
15740
1448fbe9b0d5
Remove a few unneeded strings, per evans's recommendation
Sean Egan <seanegan@pidgin.im>
parents:
15482
diff
changeset
|
2008 | if (node->child) |
| 5228 | 2009 | return; |
| 2010 | ||
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2011 | /* Remove the node from its parent */ |
| 15884 | 2012 | if (purplebuddylist->root == node) |
| 2013 | purplebuddylist->root = node->next; | |
| 5228 | 2014 | if (node->prev) |
| 2015 | node->prev->next = node->next; | |
| 2016 | if (node->next) | |
| 2017 | node->next->prev = node->prev; | |
| 2018 | ||
| 15884 | 2019 | purple_blist_schedule_save(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2020 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2021 | /* Update the UI */ |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2022 | if (ops && ops->remove) |
| 15884 | 2023 | ops->remove(purplebuddylist, node); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2024 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2025 | /* Remove the group from all accounts that are online */ |
| 15884 | 2026 | for (l = purple_connections_get_all(); l != NULL; l = l->next) |
|
6885
65132ebfc662
[gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents:
6872
diff
changeset
|
2027 | { |
| 15884 | 2028 | PurpleConnection *gc = (PurpleConnection *)l->data; |
| 2029 | ||
| 2030 | if (purple_connection_get_state(gc) == PURPLE_CONNECTED) | |
| 2031 | purple_account_remove_group(purple_connection_get_account(gc), group); | |
|
6885
65132ebfc662
[gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents:
6872
diff
changeset
|
2032 | } |
|
65132ebfc662
[gaim-migrate @ 7431]
Christian Hammond <chipx86@chipx86.com>
parents:
6872
diff
changeset
|
2033 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2034 | /* Delete the node */ |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10475
diff
changeset
|
2035 | g_hash_table_destroy(group->node.settings); |
| 5228 | 2036 | g_free(group->name); |
| 15884 | 2037 | PURPLE_DBUS_UNREGISTER_POINTER(group); |
| 5228 | 2038 | g_free(group); |
| 2039 | } | |
| 2040 | ||
| 15884 | 2041 | PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2042 | { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2043 | g_return_val_if_fail(contact != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2044 | |
| 10378 | 2045 | if (!contact->priority_valid) |
| 15884 | 2046 | purple_contact_compute_priority_buddy(contact); |
| 10378 | 2047 | |
| 6843 | 2048 | return contact->priority; |
| 6695 | 2049 | } |
| 2050 | ||
| 15884 | 2051 | const char *purple_buddy_get_alias_only(PurpleBuddy *buddy) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2052 | { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2053 | g_return_val_if_fail(buddy != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2054 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2055 | if ((buddy->alias != NULL) && (*buddy->alias != '\0')) { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2056 | return buddy->alias; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2057 | } else if ((buddy->server_alias != NULL) && |
| 10389 | 2058 | (*buddy->server_alias != '\0')) { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2059 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2060 | return buddy->server_alias; |
|
5545
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5541
diff
changeset
|
2061 | } |
|
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5541
diff
changeset
|
2062 | |
|
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5541
diff
changeset
|
2063 | return NULL; |
| 5228 | 2064 | } |
| 2065 | ||
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2066 | |
| 15884 | 2067 | const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy) |
| 5228 | 2068 | { |
| 15884 | 2069 | PurpleContact *c; |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2070 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2071 | g_return_val_if_fail(buddy != NULL, NULL); |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2072 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2073 | /* Search for an alias for the buddy. In order of precedence: */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2074 | /* The buddy alias */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2075 | if (buddy->alias != NULL) |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2076 | return buddy->alias; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2077 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2078 | /* The contact alias */ |
| 15884 | 2079 | c = purple_buddy_get_contact(buddy); |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2080 | if ((c != NULL) && (c->alias != NULL)) |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2081 | return c->alias; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2082 | |
| 10349 | 2083 | /* The server alias */ |
| 2084 | if ((buddy->server_alias) && (*buddy->server_alias)) | |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2085 | return buddy->server_alias; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2086 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2087 | /* The buddy's user name (i.e. no alias) */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2088 | return buddy->name; |
| 5228 | 2089 | } |
| 2090 | ||
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2091 | |
| 15884 | 2092 | const char *purple_buddy_get_alias(PurpleBuddy *buddy) |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2093 | { |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2094 | g_return_val_if_fail(buddy != NULL, NULL); |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2095 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2096 | /* Search for an alias for the buddy. In order of precedence: */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2097 | /* The buddy alias */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2098 | if (buddy->alias != NULL) |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2099 | return buddy->alias; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2100 | |
|
11266
a6807fe0f58d
[gaim-migrate @ 13448]
Mark Doliner <markdoliner@pidgin.im>
parents:
11264
diff
changeset
|
2101 | /* The server alias */ |
| 10389 | 2102 | if ((buddy->server_alias) && (*buddy->server_alias)) |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2103 | return buddy->server_alias; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2104 | |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2105 | /* The buddy's user name (i.e. no alias) */ |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2106 | return buddy->name; |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2107 | } |
|
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2108 | |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2109 | const char *purple_buddy_get_local_buddy_alias(PurpleBuddy *buddy) |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2110 | { |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2111 | g_return_val_if_fail(buddy, NULL); |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2112 | return buddy->alias; |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2113 | } |
|
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
2114 | |
| 15884 | 2115 | const char *purple_buddy_get_server_alias(PurpleBuddy *buddy) |
|
14553
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2116 | { |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2117 | g_return_val_if_fail(buddy != NULL, NULL); |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2118 | |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2119 | if ((buddy->server_alias) && (*buddy->server_alias)) |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2120 | return buddy->server_alias; |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2121 | |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2122 | return NULL; |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2123 | } |
|
905eb6bb4afb
[gaim-migrate @ 17210]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
14254
diff
changeset
|
2124 | |
| 15884 | 2125 | const char *purple_buddy_get_local_alias(PurpleBuddy *buddy) |
| 10349 | 2126 | { |
| 15884 | 2127 | PurpleContact *c; |
| 10349 | 2128 | |
| 2129 | g_return_val_if_fail(buddy != NULL, NULL); | |
| 2130 | ||
| 2131 | /* Search for an alias for the buddy. In order of precedence: */ | |
| 2132 | /* The buddy alias */ | |
| 2133 | if (buddy->alias != NULL) | |
| 2134 | return buddy->alias; | |
| 2135 | ||
| 2136 | /* The contact alias */ | |
| 15884 | 2137 | c = purple_buddy_get_contact(buddy); |
| 10349 | 2138 | if ((c != NULL) && (c->alias != NULL)) |
| 2139 | return c->alias; | |
| 2140 | ||
| 2141 | /* The buddy's user name (i.e. no alias) */ | |
| 2142 | return buddy->name; | |
| 2143 | } | |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9462
diff
changeset
|
2144 | |
| 15884 | 2145 | const char *purple_chat_get_name(PurpleChat *chat) |
| 6744 | 2146 | { |
|
23083
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2147 | char *ret = NULL; |
|
16827
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2148 | PurplePlugin *prpl; |
|
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2149 | PurplePluginProtocolInfo *prpl_info = NULL; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2150 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2151 | g_return_val_if_fail(chat != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2152 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2153 | if ((chat->alias != NULL) && (*chat->alias != '\0')) |
| 6744 | 2154 | return chat->alias; |
|
16827
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2155 | |
|
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2156 | prpl = purple_find_prpl(purple_account_get_protocol_id(chat->account)); |
|
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2157 | prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
08c81caecaf0
We don't really need an active connection to get the name of a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16822
diff
changeset
|
2158 | |
|
23083
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2159 | if (prpl_info->chat_info) { |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2160 | struct proto_chat_entry *pce; |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2161 | GList *parts = prpl_info->chat_info(purple_account_get_connection(chat->account)); |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2162 | pce = parts->data; |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2163 | ret = g_hash_table_lookup(chat->components, pce->identifier); |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2164 | g_list_foreach(parts, (GFunc)g_free, NULL); |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2165 | g_list_free(parts); |
|
1d91012f3a75
For chats created using the "normal" (i.e. Join a Chat) flow, there will always
Daniel Atallah <datallah@pidgin.im>
parents:
22837
diff
changeset
|
2166 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2167 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2168 | return ret; |
| 6744 | 2169 | } |
| 2170 | ||
| 15884 | 2171 | PurpleBuddy *purple_find_buddy(PurpleAccount *account, const char *name) |
| 5228 | 2172 | { |
| 15884 | 2173 | PurpleBuddy *buddy; |
| 2174 | struct _purple_hbuddy hb; | |
| 2175 | PurpleBlistNode *group; | |
| 2176 | ||
| 2177 | g_return_val_if_fail(purplebuddylist != NULL, NULL); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2178 | g_return_val_if_fail(account != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2179 | g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL); |
| 5228 | 2180 | |
| 7429 | 2181 | hb.account = account; |
| 15884 | 2182 | hb.name = g_strdup(purple_normalize(account, name)); |
| 2183 | ||
| 2184 | for (group = purplebuddylist->root; group; group = group->next) { | |
| 5758 | 2185 | hb.group = group; |
| 15884 | 2186 | if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb))) { |
| 7162 | 2187 | g_free(hb.name); |
| 5758 | 2188 | return buddy; |
| 7162 | 2189 | } |
| 5758 | 2190 | } |
| 7162 | 2191 | g_free(hb.name); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2192 | |
| 5758 | 2193 | return NULL; |
| 5228 | 2194 | } |
| 2195 | ||
| 15884 | 2196 | PurpleBuddy *purple_find_buddy_in_group(PurpleAccount *account, const char *name, |
| 2197 | PurpleGroup *group) | |
| 6872 | 2198 | { |
| 15884 | 2199 | struct _purple_hbuddy hb; |
| 2200 | PurpleBuddy *ret; | |
| 2201 | ||
| 2202 | g_return_val_if_fail(purplebuddylist != NULL, NULL); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2203 | g_return_val_if_fail(account != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2204 | g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL); |
| 6872 | 2205 | |
| 15884 | 2206 | hb.name = g_strdup(purple_normalize(account, name)); |
| 6872 | 2207 | hb.account = account; |
| 15884 | 2208 | hb.group = (PurpleBlistNode*)group; |
| 2209 | ||
| 2210 | ret = g_hash_table_lookup(purplebuddylist->buddies, &hb); | |
| 7162 | 2211 | g_free(hb.name); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2212 | |
| 7162 | 2213 | return ret; |
| 6872 | 2214 | } |
| 2215 | ||
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2216 | static void find_acct_buddies(gpointer key, gpointer value, gpointer data) |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2217 | { |
| 15884 | 2218 | struct _purple_hbuddy *hb = key; |
| 2219 | PurpleBuddy *buddy = value; | |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2220 | struct _list_account_buddies *ab = data; |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2221 | |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2222 | if (hb->account == ab->account) { |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2223 | ab->list = g_slist_prepend(ab->list, buddy); |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2224 | } |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2225 | } |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2226 | |
| 15884 | 2227 | GSList *purple_find_buddies(PurpleAccount *account, const char *name) |
| 6245 | 2228 | { |
| 15884 | 2229 | PurpleBuddy *buddy; |
| 2230 | PurpleBlistNode *node; | |
| 6245 | 2231 | GSList *ret = NULL; |
| 2232 | ||
| 15884 | 2233 | g_return_val_if_fail(purplebuddylist != NULL, NULL); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2234 | g_return_val_if_fail(account != NULL, NULL); |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2235 | |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2236 | |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2237 | if ((name != NULL) && (*name != '\0')) { |
| 15884 | 2238 | struct _purple_hbuddy hb; |
| 2239 | ||
| 2240 | hb.name = g_strdup(purple_normalize(account, name)); | |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2241 | hb.account = account; |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2242 | |
| 15884 | 2243 | for (node = purplebuddylist->root; node != NULL; node = node->next) { |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2244 | hb.group = node; |
| 15884 | 2245 | if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb)) != NULL) |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2246 | ret = g_slist_prepend(ret, buddy); |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2247 | } |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2248 | g_free(hb.name); |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2249 | } else { |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2250 | struct _list_account_buddies *ab = g_new0(struct _list_account_buddies, 1); |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2251 | ab->account = account; |
| 15884 | 2252 | g_hash_table_foreach(purplebuddylist->buddies, find_acct_buddies, ab); |
|
14814
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2253 | ret = ab->list; |
|
479ac60fb641
[gaim-migrate @ 17509]
Daniel Atallah <datallah@pidgin.im>
parents:
14732
diff
changeset
|
2254 | g_free(ab); |
| 6245 | 2255 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2256 | |
| 6245 | 2257 | return ret; |
| 2258 | } | |
| 2259 | ||
| 15884 | 2260 | PurpleGroup *purple_find_group(const char *name) |
| 5228 | 2261 | { |
| 15884 | 2262 | PurpleBlistNode *node; |
| 2263 | ||
| 2264 | g_return_val_if_fail(purplebuddylist != NULL, NULL); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2265 | g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2266 | |
| 15884 | 2267 | for (node = purplebuddylist->root; node != NULL; node = node->next) { |
|
23291
9d91bfb63ce2
Make group names case insensitive, which is the case in the official MSN,
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22837
diff
changeset
|
2268 | if (!purple_utf8_strcasecmp(((PurpleGroup *)node)->name, name)) |
| 15884 | 2269 | return (PurpleGroup *)node; |
| 5228 | 2270 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2271 | |
| 5228 | 2272 | return NULL; |
| 2273 | } | |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2274 | |
| 15884 | 2275 | PurpleChat * |
| 2276 | purple_blist_find_chat(PurpleAccount *account, const char *name) | |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2277 | { |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2278 | char *chat_name; |
| 15884 | 2279 | PurpleChat *chat; |
| 2280 | PurplePlugin *prpl; | |
| 2281 | PurplePluginProtocolInfo *prpl_info = NULL; | |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2282 | struct proto_chat_entry *pce; |
| 15884 | 2283 | PurpleBlistNode *node, *group; |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2284 | GList *parts; |
|
24665
dc7eea813a9e
Use normalized chat names when searching for chats. This fixes an issue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24569
diff
changeset
|
2285 | char *normname; |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2286 | |
| 15884 | 2287 | g_return_val_if_fail(purplebuddylist != NULL, NULL); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2288 | g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2289 | |
| 15884 | 2290 | if (!purple_account_is_connected(account)) |
| 7970 | 2291 | return NULL; |
| 2292 | ||
| 15884 | 2293 | prpl = purple_find_prpl(purple_account_get_protocol_id(account)); |
| 2294 | prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); | |
| 7999 | 2295 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2296 | if (prpl_info->find_blist_chat != NULL) |
| 7999 | 2297 | return prpl_info->find_blist_chat(account, name); |
| 2298 | ||
|
24665
dc7eea813a9e
Use normalized chat names when searching for chats. This fixes an issue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24569
diff
changeset
|
2299 | normname = g_strdup(purple_normalize(account, name)); |
| 15884 | 2300 | for (group = purplebuddylist->root; group != NULL; group = group->next) { |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2301 | for (node = group->child; node != NULL; node = node->next) { |
| 15884 | 2302 | if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
| 2303 | ||
| 2304 | chat = (PurpleChat*)node; | |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2305 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2306 | if (account != chat->account) |
| 7970 | 2307 | continue; |
| 2308 | ||
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2309 | parts = prpl_info->chat_info( |
| 15884 | 2310 | purple_account_get_connection(chat->account)); |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2311 | |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2312 | pce = parts->data; |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2313 | chat_name = g_hash_table_lookup(chat->components, |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2314 | pce->identifier); |
|
22837
815d4b06b0e0
Leak fix. This is probably quite serious if you have busy chats on your
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22458
diff
changeset
|
2315 | g_list_foreach(parts, (GFunc)g_free, NULL); |
|
815d4b06b0e0
Leak fix. This is probably quite serious if you have busy chats on your
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22458
diff
changeset
|
2316 | g_list_free(parts); |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2317 | |
| 9153 | 2318 | if (chat->account == account && chat_name != NULL && |
|
24665
dc7eea813a9e
Use normalized chat names when searching for chats. This fixes an issue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24569
diff
changeset
|
2319 | normname != NULL && !strcmp(purple_normalize(account, chat_name), normname)) { |
|
dc7eea813a9e
Use normalized chat names when searching for chats. This fixes an issue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24569
diff
changeset
|
2320 | g_free(normname); |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2321 | return chat; |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2322 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2323 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2324 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2325 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2326 | |
|
24665
dc7eea813a9e
Use normalized chat names when searching for chats. This fixes an issue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24569
diff
changeset
|
2327 | g_free(normname); |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2328 | return NULL; |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2329 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2330 | |
| 15884 | 2331 | PurpleGroup * |
| 2332 | purple_chat_get_group(PurpleChat *chat) | |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2333 | { |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2334 | g_return_val_if_fail(chat != NULL, NULL); |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2335 | |
| 15884 | 2336 | return (PurpleGroup *)(((PurpleBlistNode *)chat)->parent); |
|
6456
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2337 | } |
|
e4e7dee16c1a
[gaim-migrate @ 6965]
Christian Hammond <chipx86@chipx86.com>
parents:
6450
diff
changeset
|
2338 | |
|
22283
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2339 | PurpleAccount * |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2340 | purple_chat_get_account(PurpleChat *chat) |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2341 | { |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2342 | g_return_val_if_fail(chat != NULL, NULL); |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2343 | |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2344 | return chat->account; |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2345 | } |
|
078d7f35f0f1
Add an accessor function for PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22282
diff
changeset
|
2346 | |
|
22341
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2347 | GHashTable * |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2348 | purple_chat_get_components(PurpleChat *chat) |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2349 | { |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2350 | g_return_val_if_fail(chat != NULL, NULL); |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2351 | |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2352 | return chat->components; |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2353 | } |
|
ed341c90116e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22334
diff
changeset
|
2354 | |
| 15884 | 2355 | PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2356 | { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2357 | g_return_val_if_fail(buddy != NULL, NULL); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2358 | |
|
24974
a81952e9babb
Update some casts (that the script didn't fix correctly) to GObject macros.
Richard Laager <rlaager@pidgin.im>
parents:
24968
diff
changeset
|
2359 | return PURPLE_CONTACT(PURPLE_BLIST_NODE(buddy)->parent); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2360 | } |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2361 | |
| 15884 | 2362 | PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy) |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
2363 | { |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
2364 | g_return_val_if_fail(buddy != NULL, NULL); |
| 11935 | 2365 | return buddy->presence; |
|
9949
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
2366 | } |
|
377cd65fab3d
[gaim-migrate @ 10845]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
2367 | |
| 15884 | 2368 | PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy) |
| 5228 | 2369 | { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2370 | g_return_val_if_fail(buddy != NULL, NULL); |
|
6706
fdd12f90fcf6
[gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
2371 | |
| 15884 | 2372 | if (((PurpleBlistNode *)buddy)->parent == NULL) |
|
6706
fdd12f90fcf6
[gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
2373 | return NULL; |
|
fdd12f90fcf6
[gaim-migrate @ 7232]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
2374 | |
| 15884 | 2375 | return (PurpleGroup *)(((PurpleBlistNode*)buddy)->parent->parent); |
| 5228 | 2376 | } |
| 2377 | ||
| 15884 | 2378 | GSList *purple_group_get_accounts(PurpleGroup *group) |
| 5228 | 2379 | { |
| 2380 | GSList *l = NULL; | |
| 15884 | 2381 | PurpleBlistNode *gnode, *cnode, *bnode; |
| 2382 | ||
| 2383 | gnode = (PurpleBlistNode *)group; | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2384 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2385 | for (cnode = gnode->child; cnode; cnode = cnode->next) { |
| 15884 | 2386 | if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { |
| 2387 | if (!g_slist_find(l, ((PurpleChat *)cnode)->account)) | |
| 2388 | l = g_slist_append(l, ((PurpleChat *)cnode)->account); | |
| 2389 | } else if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2390 | for (bnode = cnode->child; bnode; bnode = bnode->next) { |
| 15884 | 2391 | if (PURPLE_BLIST_NODE_IS_BUDDY(bnode)) { |
| 2392 | if (!g_slist_find(l, ((PurpleBuddy *)bnode)->account)) | |
| 2393 | l = g_slist_append(l, ((PurpleBuddy *)bnode)->account); | |
| 6695 | 2394 | } |
| 2395 | } | |
| 2396 | } | |
| 5228 | 2397 | } |
| 6695 | 2398 | |
| 5228 | 2399 | return l; |
| 2400 | } | |
| 2401 | ||
| 15884 | 2402 | void purple_blist_add_account(PurpleAccount *account) |
| 5234 | 2403 | { |
| 15884 | 2404 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 2405 | PurpleBlistNode *gnode, *cnode, *bnode; | |
| 2406 | ||
| 2407 | g_return_if_fail(purplebuddylist != NULL); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2408 | |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2409 | if (!ops || !ops->update) |
| 6695 | 2410 | return; |
| 2411 | ||
| 15884 | 2412 | for (gnode = purplebuddylist->root; gnode; gnode = gnode->next) { |
| 2413 | if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) | |
| 5234 | 2414 | continue; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2415 | for (cnode = gnode->child; cnode; cnode = cnode->next) { |
| 15884 | 2416 | if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { |
| 6956 | 2417 | gboolean recompute = FALSE; |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2418 | for (bnode = cnode->child; bnode; bnode = bnode->next) { |
| 15884 | 2419 | if (PURPLE_BLIST_NODE_IS_BUDDY(bnode) && |
| 2420 | ((PurpleBuddy*)bnode)->account == account) { | |
| 6956 | 2421 | recompute = TRUE; |
| 15884 | 2422 | ((PurpleContact*)cnode)->currentsize++; |
| 2423 | if (((PurpleContact*)cnode)->currentsize == 1) | |
| 2424 | ((PurpleGroup*)gnode)->currentsize++; | |
| 2425 | ops->update(purplebuddylist, bnode); | |
| 6695 | 2426 | } |
| 2427 | } | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2428 | if (recompute || |
| 15884 | 2429 | purple_blist_node_get_bool(cnode, "show_offline")) { |
| 2430 | purple_contact_invalidate_priority_buddy((PurpleContact*)cnode); | |
| 2431 | ops->update(purplebuddylist, cnode); | |
| 6956 | 2432 | } |
| 15884 | 2433 | } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode) && |
| 2434 | ((PurpleChat*)cnode)->account == account) { | |
| 2435 | ((PurpleGroup *)gnode)->online++; | |
| 2436 | ((PurpleGroup *)gnode)->currentsize++; | |
| 2437 | ops->update(purplebuddylist, cnode); | |
| 5234 | 2438 | } |
| 2439 | } | |
| 15884 | 2440 | ops->update(purplebuddylist, gnode); |
| 5234 | 2441 | } |
| 2442 | } | |
| 2443 | ||
| 15884 | 2444 | void purple_blist_remove_account(PurpleAccount *account) |
| 5228 | 2445 | { |
| 15884 | 2446 | PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); |
| 2447 | PurpleBlistNode *gnode, *cnode, *bnode; | |
| 2448 | PurpleBuddy *buddy; | |
| 2449 | PurpleChat *chat; | |
| 2450 | PurpleContact *contact; | |
| 2451 | PurpleGroup *group; | |
|
12305
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2452 | GList *list = NULL, *iter = NULL; |
| 5234 | 2453 | |
| 15884 | 2454 | g_return_if_fail(purplebuddylist != NULL); |
| 2455 | ||
| 2456 | for (gnode = purplebuddylist->root; gnode; gnode = gnode->next) { | |
| 2457 | if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) | |
| 5234 | 2458 | continue; |
| 10726 | 2459 | |
| 15884 | 2460 | group = (PurpleGroup *)gnode; |
| 10726 | 2461 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2462 | for (cnode = gnode->child; cnode; cnode = cnode->next) { |
| 15884 | 2463 | if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { |
|
10727
4867e63f904a
[gaim-migrate @ 12327]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10726
diff
changeset
|
2464 | gboolean recompute = FALSE; |
| 15884 | 2465 | contact = (PurpleContact *)cnode; |
| 10726 | 2466 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2467 | for (bnode = cnode->child; bnode; bnode = bnode->next) { |
| 15884 | 2468 | if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) |
| 6695 | 2469 | continue; |
| 10726 | 2470 | |
| 15884 | 2471 | buddy = (PurpleBuddy *)bnode; |
| 10726 | 2472 | if (account == buddy->account) { |
| 15884 | 2473 | PurplePresence *presence; |
| 10726 | 2474 | |
| 15884 | 2475 | presence = purple_buddy_get_presence(buddy); |
| 2476 | ||
| 2477 | if(purple_presence_is_online(presence)) { | |
| 10726 | 2478 | contact->online--; |
| 2479 | if (contact->online == 0) | |
| 2480 | group->online--; | |
| 2481 | ||
| 15884 | 2482 | purple_blist_node_set_int(&buddy->node, |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10431
diff
changeset
|
2483 | "last_seen", time(NULL)); |
| 6695 | 2484 | } |
| 10726 | 2485 | |
| 10728 | 2486 | contact->currentsize--; |
| 2487 | if (contact->currentsize == 0) | |
| 2488 | group->currentsize--; | |
| 10726 | 2489 | |
|
12305
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2490 | if (!g_list_find(list, presence)) |
|
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2491 | list = g_list_prepend(list, presence); |
| 10557 | 2492 | |
|
16569
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2493 | if (contact->priority == buddy) |
|
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2494 | purple_contact_invalidate_priority_buddy(contact); |
|
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2495 | else |
|
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2496 | recompute = TRUE; |
|
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2497 | |
|
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2498 | if (ops && ops->remove) { |
| 15884 | 2499 | ops->remove(purplebuddylist, bnode); |
|
16569
76f71be1b660
A patch from khc in ticket #87
Richard Laager <rlaager@pidgin.im>
parents:
16545
diff
changeset
|
2500 | } |
| 6695 | 2501 | } |
| 5234 | 2502 | } |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2503 | if (recompute) { |
| 15884 | 2504 | purple_contact_invalidate_priority_buddy(contact); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2505 | if (ops && ops->update) |
| 15884 | 2506 | ops->update(purplebuddylist, cnode); |
| 6983 | 2507 | } |
| 15884 | 2508 | } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { |
| 2509 | chat = (PurpleChat *)cnode; | |
| 10726 | 2510 | |
| 2511 | if(chat->account == account) { | |
| 2512 | group->currentsize--; | |
| 2513 | group->online--; | |
| 2514 | ||
| 2515 | if (ops && ops->remove) | |
| 15884 | 2516 | ops->remove(purplebuddylist, cnode); |
| 10726 | 2517 | } |
| 5228 | 2518 | } |
| 2519 | } | |
| 2520 | } | |
|
12305
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2521 | |
|
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2522 | for (iter = list; iter; iter = iter->next) |
|
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2523 | { |
| 15884 | 2524 | purple_presence_set_status_active(iter->data, "offline", TRUE); |
|
12305
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2525 | } |
|
6989da147d02
[gaim-migrate @ 14609]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12112
diff
changeset
|
2526 | g_list_free(list); |
| 5228 | 2527 | } |
| 2528 | ||
| 15884 | 2529 | gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2530 | { |
| 15884 | 2531 | PurpleBlistNode *cnode; |
| 2532 | for (cnode = ((PurpleBlistNode *)g)->child; cnode; cnode = cnode->next) { | |
| 2533 | if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { | |
| 2534 | if(purple_contact_on_account((PurpleContact *) cnode, account)) | |
|
9787
a88b7e860699
[gaim-migrate @ 10655]
Christopher O'Brien <siege@pidgin.im>
parents:
9754
diff
changeset
|
2535 | return TRUE; |
| 15884 | 2536 | } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { |
| 2537 | PurpleChat *chat = (PurpleChat *)cnode; | |
| 2538 | if ((!account && purple_account_is_connected(chat->account)) | |
| 6695 | 2539 | || chat->account == account) |
| 2540 | return TRUE; | |
| 2541 | } | |
| 5228 | 2542 | } |
| 2543 | return FALSE; | |
| 2544 | } | |
| 2545 | ||
|
16822
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2546 | const char *purple_group_get_name(PurpleGroup *group) |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2547 | { |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2548 | g_return_val_if_fail(group != NULL, NULL); |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2549 | |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2550 | return group->name; |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2551 | } |
|
d1ee7a30e9b8
Add a missing function useful for dbus clients, requested by Andrey Kostenko. And fix a crash from badly written dbus code.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16698
diff
changeset
|
2552 | |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2553 | void |
| 15884 | 2554 | purple_blist_request_add_buddy(PurpleAccount *account, const char *username, |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2555 | const char *group, const char *alias) |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2556 | { |
| 15884 | 2557 | PurpleBlistUiOps *ui_ops; |
| 2558 | ||
| 2559 | ui_ops = purple_blist_get_ui_ops(); | |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2560 | |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2561 | if (ui_ops != NULL && ui_ops->request_add_buddy != NULL) |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2562 | ui_ops->request_add_buddy(account, username, group, alias); |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2563 | } |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2564 | |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2565 | void |
| 15884 | 2566 | purple_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9741
diff
changeset
|
2567 | const char *alias, const char *name) |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2568 | { |
| 15884 | 2569 | PurpleBlistUiOps *ui_ops; |
| 2570 | ||
| 2571 | ui_ops = purple_blist_get_ui_ops(); | |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2572 | |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2573 | if (ui_ops != NULL && ui_ops->request_add_chat != NULL) |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9741
diff
changeset
|
2574 | ui_ops->request_add_chat(account, group, alias, name); |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2575 | } |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2576 | |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2577 | void |
| 15884 | 2578 | purple_blist_request_add_group(void) |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2579 | { |
| 15884 | 2580 | PurpleBlistUiOps *ui_ops; |
| 2581 | ||
| 2582 | ui_ops = purple_blist_get_ui_ops(); | |
|
7060
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2583 | |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2584 | if (ui_ops != NULL && ui_ops->request_add_group != NULL) |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2585 | ui_ops->request_add_group(); |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2586 | } |
|
717cbeb22b6d
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
2587 | |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2588 | static void |
| 15884 | 2589 | purple_blist_node_setting_free(gpointer data) |
| 7693 | 2590 | { |
| 15884 | 2591 | PurpleValue *value; |
| 2592 | ||
| 2593 | value = (PurpleValue *)data; | |
| 2594 | ||
| 2595 | purple_value_destroy(value); | |
| 7693 | 2596 | } |
| 2597 | ||
| 15884 | 2598 | static void purple_blist_node_initialize_settings(PurpleBlistNode *node) |
| 7693 | 2599 | { |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2600 | if (node->settings) |
| 5228 | 2601 | return; |
| 7693 | 2602 | |
| 2603 | node->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
| 15884 | 2604 | (GDestroyNotify)purple_blist_node_setting_free); |
| 7693 | 2605 | } |
| 2606 | ||
| 15884 | 2607 | void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key) |
| 7693 | 2608 | { |
| 2609 | g_return_if_fail(node != NULL); | |
| 2610 | g_return_if_fail(node->settings != NULL); | |
| 2611 | g_return_if_fail(key != NULL); | |
| 2612 | ||
| 2613 | g_hash_table_remove(node->settings, key); | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2614 | |
| 15884 | 2615 | purple_blist_schedule_save(); |
| 5228 | 2616 | } |
| 2617 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2618 | void |
| 15884 | 2619 | purple_blist_node_set_flags(PurpleBlistNode *node, PurpleBlistNodeFlags flags) |
|
10548
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2620 | { |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2621 | g_return_if_fail(node != NULL); |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2622 | |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2623 | node->flags = flags; |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2624 | } |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2625 | |
| 15884 | 2626 | PurpleBlistNodeFlags |
| 2627 | purple_blist_node_get_flags(PurpleBlistNode *node) | |
|
10548
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2628 | { |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2629 | g_return_val_if_fail(node != NULL, 0); |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2630 | |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2631 | return node->flags; |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2632 | } |
|
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2633 | |
|
17859
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2634 | PurpleBlistNodeType |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2635 | purple_blist_node_get_type(PurpleBlistNode *node) |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2636 | { |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2637 | g_return_val_if_fail(node != NULL, PURPLE_BLIST_OTHER_NODE); |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2638 | return node->type; |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2639 | } |
|
afbace92af8d
New function purple_blist_node_get_type.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16856
diff
changeset
|
2640 | |
|
10548
990b3ec2758e
[gaim-migrate @ 11918]
Mark Doliner <markdoliner@pidgin.im>
parents:
10504
diff
changeset
|
2641 | void |
| 15884 | 2642 | purple_blist_node_set_bool(PurpleBlistNode* node, const char *key, gboolean data) |
| 7693 | 2643 | { |
| 15884 | 2644 | PurpleValue *value; |
| 7693 | 2645 | |
| 2646 | g_return_if_fail(node != NULL); | |
| 2647 | g_return_if_fail(node->settings != NULL); | |
| 2648 | g_return_if_fail(key != NULL); | |
| 2649 | ||
| 15884 | 2650 | value = purple_value_new(PURPLE_TYPE_BOOLEAN); |
| 2651 | purple_value_set_boolean(value, data); | |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2652 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2653 | g_hash_table_replace(node->settings, g_strdup(key), value); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2654 | |
| 15884 | 2655 | purple_blist_schedule_save(); |
| 7693 | 2656 | } |
| 2657 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2658 | gboolean |
| 15884 | 2659 | purple_blist_node_get_bool(PurpleBlistNode* node, const char *key) |
| 7693 | 2660 | { |
| 15884 | 2661 | PurpleValue *value; |
| 7693 | 2662 | |
| 2663 | g_return_val_if_fail(node != NULL, FALSE); | |
| 2664 | g_return_val_if_fail(node->settings != NULL, FALSE); | |
| 2665 | g_return_val_if_fail(key != NULL, FALSE); | |
| 2666 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2667 | value = g_hash_table_lookup(node->settings, key); |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2668 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2669 | if (value == NULL) |
| 7849 | 2670 | return FALSE; |
| 2671 | ||
| 15884 | 2672 | g_return_val_if_fail(purple_value_get_type(value) == PURPLE_TYPE_BOOLEAN, FALSE); |
| 2673 | ||
| 2674 | return purple_value_get_boolean(value); | |
| 5228 | 2675 | } |
| 2676 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2677 | void |
| 15884 | 2678 | purple_blist_node_set_int(PurpleBlistNode* node, const char *key, int data) |
| 7693 | 2679 | { |
| 15884 | 2680 | PurpleValue *value; |
| 7693 | 2681 | |
| 2682 | g_return_if_fail(node != NULL); | |
| 2683 | g_return_if_fail(node->settings != NULL); | |
| 2684 | g_return_if_fail(key != NULL); | |
| 2685 | ||
| 15884 | 2686 | value = purple_value_new(PURPLE_TYPE_INT); |
| 2687 | purple_value_set_int(value, data); | |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2688 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2689 | g_hash_table_replace(node->settings, g_strdup(key), value); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2690 | |
| 15884 | 2691 | purple_blist_schedule_save(); |
| 7693 | 2692 | } |
| 2693 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2694 | int |
| 15884 | 2695 | purple_blist_node_get_int(PurpleBlistNode* node, const char *key) |
| 7693 | 2696 | { |
| 15884 | 2697 | PurpleValue *value; |
| 7693 | 2698 | |
| 2699 | g_return_val_if_fail(node != NULL, 0); | |
| 2700 | g_return_val_if_fail(node->settings != NULL, 0); | |
| 2701 | g_return_val_if_fail(key != NULL, 0); | |
| 2702 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2703 | value = g_hash_table_lookup(node->settings, key); |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2704 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2705 | if (value == NULL) |
| 7849 | 2706 | return 0; |
| 2707 | ||
| 15884 | 2708 | g_return_val_if_fail(purple_value_get_type(value) == PURPLE_TYPE_INT, 0); |
| 2709 | ||
| 2710 | return purple_value_get_int(value); | |
| 7693 | 2711 | } |
| 2712 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2713 | void |
| 15884 | 2714 | purple_blist_node_set_string(PurpleBlistNode* node, const char *key, const char *data) |
| 5906 | 2715 | { |
| 15884 | 2716 | PurpleValue *value; |
| 7693 | 2717 | |
| 2718 | g_return_if_fail(node != NULL); | |
| 2719 | g_return_if_fail(node->settings != NULL); | |
| 2720 | g_return_if_fail(key != NULL); | |
| 2721 | ||
| 15884 | 2722 | value = purple_value_new(PURPLE_TYPE_STRING); |
| 2723 | purple_value_set_string(value, data); | |
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2724 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2725 | g_hash_table_replace(node->settings, g_strdup(key), value); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2726 | |
| 15884 | 2727 | purple_blist_schedule_save(); |
| 7693 | 2728 | } |
| 2729 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2730 | const char * |
| 15884 | 2731 | purple_blist_node_get_string(PurpleBlistNode* node, const char *key) |
| 7693 | 2732 | { |
| 15884 | 2733 | PurpleValue *value; |
| 7693 | 2734 | |
| 2735 | g_return_val_if_fail(node != NULL, NULL); | |
| 2736 | g_return_val_if_fail(node->settings != NULL, NULL); | |
| 2737 | g_return_val_if_fail(key != NULL, NULL); | |
| 2738 | ||
|
10430
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2739 | value = g_hash_table_lookup(node->settings, key); |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2740 | |
|
e86f83aefa04
[gaim-migrate @ 11682]
Mark Doliner <markdoliner@pidgin.im>
parents:
10429
diff
changeset
|
2741 | if (value == NULL) |
| 7849 | 2742 | return NULL; |
| 2743 | ||
| 15884 | 2744 | g_return_val_if_fail(purple_value_get_type(value) == PURPLE_TYPE_STRING, NULL); |
| 2745 | ||
| 2746 | return purple_value_get_string(value); | |
| 7693 | 2747 | } |
| 2748 | ||
| 10662 | 2749 | GList * |
| 15884 | 2750 | purple_blist_node_get_extended_menu(PurpleBlistNode *n) |
| 7693 | 2751 | { |
|
8710
360b660e428d
[gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
2752 | GList *menu = NULL; |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9023
diff
changeset
|
2753 | |
| 10662 | 2754 | g_return_val_if_fail(n != NULL, NULL); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9023
diff
changeset
|
2755 | |
| 15884 | 2756 | purple_signal_emit(purple_blist_get_handle(), |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9023
diff
changeset
|
2757 | "blist-node-extended-menu", |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9023
diff
changeset
|
2758 | n, &menu); |
|
8710
360b660e428d
[gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
2759 | return menu; |
|
360b660e428d
[gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
2760 | } |
|
360b660e428d
[gaim-migrate @ 9464]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
2761 | |
| 15884 | 2762 | int purple_blist_get_group_size(PurpleGroup *group, gboolean offline) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2763 | { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2764 | if (!group) |
| 5228 | 2765 | return 0; |
| 2766 | ||
| 5277 | 2767 | return offline ? group->totalsize : group->currentsize; |
| 5228 | 2768 | } |
| 2769 | ||
| 15884 | 2770 | int purple_blist_get_group_online_count(PurpleGroup *group) |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2771 | { |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2772 | if (!group) |
| 5228 | 2773 | return 0; |
| 2774 | ||
| 5277 | 2775 | return group->online; |
| 5228 | 2776 | } |
| 2777 | ||
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2778 | void |
| 15884 | 2779 | purple_blist_set_ui_ops(PurpleBlistUiOps *ops) |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2780 | { |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2781 | blist_ui_ops = ops; |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2782 | } |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2783 | |
| 15884 | 2784 | PurpleBlistUiOps * |
| 2785 | purple_blist_get_ui_ops(void) | |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2786 | { |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2787 | return blist_ui_ops; |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2788 | } |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2789 | |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7003
diff
changeset
|
2790 | |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2791 | void * |
| 15884 | 2792 | purple_blist_get_handle(void) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2793 | { |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2794 | static int handle; |
| 5228 | 2795 | |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2796 | return &handle; |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2797 | } |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2798 | |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2799 | void |
| 15884 | 2800 | purple_blist_init(void) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2801 | { |
| 15884 | 2802 | void *handle = purple_blist_get_handle(); |
| 2803 | ||
| 2804 | purple_signal_register(handle, "buddy-status-changed", | |
| 2805 | purple_marshal_VOID__POINTER_POINTER_POINTER, NULL, | |
| 11935 | 2806 | 3, |
| 15884 | 2807 | purple_value_new(PURPLE_TYPE_SUBTYPE, |
| 2808 | PURPLE_SUBTYPE_BLIST_BUDDY), | |
| 2809 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2810 | PURPLE_SUBTYPE_STATUS), | |
| 2811 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2812 | PURPLE_SUBTYPE_STATUS)); | |
| 2813 | purple_signal_register(handle, "buddy-privacy-changed", | |
| 2814 | purple_marshal_VOID__POINTER, NULL, | |
|
14200
799dfae258cf
[gaim-migrate @ 16780]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents:
14097
diff
changeset
|
2815 | 1, |
| 15884 | 2816 | purple_value_new(PURPLE_TYPE_SUBTYPE, |
| 2817 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2818 | ||
| 2819 | purple_signal_register(handle, "buddy-idle-changed", | |
| 2820 | purple_marshal_VOID__POINTER_INT_INT, NULL, | |
| 11935 | 2821 | 3, |
| 15884 | 2822 | purple_value_new(PURPLE_TYPE_SUBTYPE, |
| 2823 | PURPLE_SUBTYPE_BLIST_BUDDY), | |
| 2824 | purple_value_new(PURPLE_TYPE_INT), | |
| 2825 | purple_value_new(PURPLE_TYPE_INT)); | |
| 2826 | ||
| 2827 | ||
| 2828 | purple_signal_register(handle, "buddy-signed-on", | |
| 2829 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2830 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2831 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2832 | ||
| 2833 | purple_signal_register(handle, "buddy-signed-off", | |
| 2834 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2835 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2836 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2837 | ||
| 2838 | purple_signal_register(handle, "buddy-got-login-time", | |
| 2839 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2840 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2841 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2842 | ||
| 2843 | purple_signal_register(handle, "buddy-added", | |
| 2844 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2845 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2846 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2847 | ||
| 2848 | purple_signal_register(handle, "buddy-removed", | |
| 2849 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2850 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2851 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2852 | ||
| 2853 | purple_signal_register(handle, "buddy-icon-changed", | |
| 2854 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 2855 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2856 | PURPLE_SUBTYPE_BLIST_BUDDY)); | |
| 2857 | ||
| 2858 | purple_signal_register(handle, "update-idle", purple_marshal_VOID, NULL, 0); | |
| 2859 | ||
| 2860 | purple_signal_register(handle, "blist-node-extended-menu", | |
| 2861 | purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
| 2862 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2863 | PURPLE_SUBTYPE_BLIST_NODE), | |
| 2864 | purple_value_new(PURPLE_TYPE_BOXED, "GList **")); | |
| 2865 | ||
| 2866 | purple_signal_register(handle, "blist-node-aliased", | |
| 2867 | purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
| 2868 | purple_value_new(PURPLE_TYPE_SUBTYPE, | |
| 2869 | PURPLE_SUBTYPE_BLIST_NODE), | |
| 2870 | purple_value_new(PURPLE_TYPE_STRING)); | |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2871 | } |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2872 | |
|
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2873 | void |
| 15884 | 2874 | purple_blist_uninit(void) |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2875 | { |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
2876 | if (save_timer != 0) |
|
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
2877 | { |
| 15884 | 2878 | purple_timeout_remove(save_timer); |
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10427
diff
changeset
|
2879 | save_timer = 0; |
| 15884 | 2880 | purple_blist_sync(); |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2881 | } |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9261
diff
changeset
|
2882 | |
| 15884 | 2883 | purple_signals_unregister_by_instance(purple_blist_get_handle()); |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6473
diff
changeset
|
2884 | } |