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