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