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