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