Mercurial > pidgin
annotate src/pounce.c @ 10432:dc4475bf718f
[gaim-migrate @ 11684]
Shuffle some things around in pounce.c to match savedstatuses.c, blist.c
and accounts.c
Write the pounces using the util function and xmlnodes (so pounces.xml is
out-of-disk-space safe, now)
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Mon, 27 Dec 2004 08:56:04 +0000 |
| parents | 3232e1a33899 |
| children | 50224ac8184d |
| rev | line source |
|---|---|
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
1 /** |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
2 * @file pounce.c Buddy Pounce API |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
3 * @ingroup core |
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
4 * |
| 4687 | 5 * gaim |
| 6 * | |
| 8046 | 7 * Gaim is the legal property of its developers, whose names are too numerous |
| 8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 * source distribution. | |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
10 * |
| 4687 | 11 * This program is free software; you can redistribute it and/or modify |
| 12 * it under the terms of the GNU General Public License as published by | |
| 13 * the Free Software Foundation; either version 2 of the License, or | |
| 14 * (at your option) any later version. | |
| 15 * | |
| 16 * This program is distributed in the hope that it will be useful, | |
| 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 * GNU General Public License for more details. | |
| 20 * | |
| 21 * You should have received a copy of the GNU General Public License | |
| 22 * along with this program; if not, write to the Free Software | |
| 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 */ | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
25 #include "internal.h" |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
26 #include "conversation.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
27 #include "debug.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
28 #include "pounce.h" |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
29 |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
30 #include "debug.h" |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
31 #include "pounce.h" |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
32 #include "util.h" |
| 4687 | 33 |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
34 typedef struct |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
35 { |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
36 GString *buffer; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
37 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
38 GaimPounce *pounce; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
39 GaimPounceEvent events; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
40 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
41 char *ui_name; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
42 char *pouncee; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
43 char *protocol_id; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
44 char *event_type; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
45 char *action_name; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
46 char *param_name; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
47 char *account_name; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
48 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
49 } PounceParserData; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
50 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
51 typedef struct |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
52 { |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
53 char *name; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
54 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
55 gboolean enabled; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
56 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
57 GHashTable *atts; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
58 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
59 } GaimPounceActionData; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
60 |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
61 typedef struct |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
62 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
63 char *ui; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
64 GaimPounceCb cb; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
65 void (*new_pounce)(GaimPounce *); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
66 void (*free_pounce)(GaimPounce *); |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
67 |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
68 } GaimPounceHandler; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
69 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
70 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
71 static GHashTable *pounce_handlers = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
72 static GList *pounces = NULL; |
| 10432 | 73 static guint save_timer = 0; |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
74 static gboolean pounces_loaded = FALSE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
75 |
| 4687 | 76 |
| 10432 | 77 /********************************************************************* |
| 78 * Private utility functions * | |
| 79 *********************************************************************/ | |
| 80 | |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
81 static GaimPounceActionData * |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
82 find_action_data(const GaimPounce *pounce, const char *name) |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
83 { |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
84 GaimPounceActionData *action; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
85 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
86 g_return_val_if_fail(pounce != NULL, NULL); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
87 g_return_val_if_fail(name != NULL, NULL); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
88 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
89 action = g_hash_table_lookup(pounce->actions, name); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
90 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
91 return action; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
92 } |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
93 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
94 static void |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
95 free_action_data(gpointer data) |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
96 { |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
97 GaimPounceActionData *action_data = data; |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
98 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
99 g_free(action_data->name); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
100 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
101 g_hash_table_destroy(action_data->atts); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
102 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
103 g_free(action_data); |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
104 } |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
105 |
| 10432 | 106 |
| 107 /********************************************************************* | |
| 108 * Writing to disk * | |
| 109 *********************************************************************/ | |
| 110 | |
| 111 static void | |
| 112 action_parameter_to_xmlnode(gpointer key, gpointer value, gpointer user_data) | |
| 113 { | |
| 114 const char *name, *param_value; | |
| 115 xmlnode *node, *child; | |
| 116 | |
| 117 name = (const char *)key; | |
| 118 param_value = (const char *)value; | |
| 119 node = (xmlnode *)user_data; | |
| 120 | |
| 121 child = xmlnode_new_child(node, "param"); | |
| 122 xmlnode_set_attrib(child, "name", name); | |
| 123 xmlnode_insert_data(child, param_value, -1); | |
| 124 } | |
| 125 | |
| 126 static void | |
| 127 action_parameter_list_to_xmlnode(gpointer key, gpointer value, gpointer user_data) | |
| 128 { | |
| 129 const char *action; | |
| 130 GaimPounceActionData *action_data; | |
| 131 xmlnode *node, *child; | |
| 132 | |
| 133 action = (const char *)key; | |
| 134 action_data = (GaimPounceActionData *)value; | |
| 135 node = (xmlnode *)user_data; | |
| 136 | |
| 137 if (!action_data->enabled) | |
| 138 return; | |
| 139 | |
| 140 child = xmlnode_new_child(node, "action"); | |
| 141 xmlnode_set_attrib(child, "type", action); | |
| 142 | |
| 143 g_hash_table_foreach(action_data->atts, action_parameter_to_xmlnode, child); | |
| 144 } | |
| 145 | |
| 146 static void | |
| 147 add_event_to_xmlnode(xmlnode *node, const char *type) | |
| 148 { | |
| 149 xmlnode *child; | |
| 150 | |
| 151 child = xmlnode_new_child(node, "event"); | |
| 152 xmlnode_set_attrib(child, "type", type); | |
| 153 } | |
| 154 | |
| 155 static xmlnode * | |
| 156 pounce_to_xmlnode(GaimPounce *pounce) | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
157 { |
| 10432 | 158 xmlnode *node, *child; |
| 159 GaimAccount *pouncer; | |
| 160 GaimPounceEvent events; | |
| 161 | |
| 162 pouncer = gaim_pounce_get_pouncer(pounce); | |
| 163 events = gaim_pounce_get_events(pounce); | |
| 164 | |
| 165 node = xmlnode_new("pounce"); | |
| 166 xmlnode_set_attrib(node, "ui", pounce->ui_type); | |
| 167 | |
| 168 child = xmlnode_new_child(node, "account"); | |
| 169 xmlnode_set_attrib(child, "protocol", pouncer->protocol_id); | |
| 170 xmlnode_insert_data(child, gaim_account_get_username(pouncer), -1); | |
| 171 | |
| 172 child = xmlnode_new_child(node, "pouncee"); | |
| 173 xmlnode_insert_data(child, gaim_pounce_get_pouncee(pounce), -1); | |
| 174 | |
| 175 /* Write pounce events */ | |
| 176 child = xmlnode_new_child(node, "events"); | |
| 177 if (events & GAIM_POUNCE_SIGNON) | |
| 178 add_event_to_xmlnode(child, "sign-on"); | |
| 179 if (events & GAIM_POUNCE_SIGNOFF) | |
| 180 add_event_to_xmlnode(child, "sign-off"); | |
| 181 if (events & GAIM_POUNCE_AWAY) | |
| 182 add_event_to_xmlnode(child, "away"); | |
| 183 if (events & GAIM_POUNCE_AWAY_RETURN) | |
| 184 add_event_to_xmlnode(child, "return-from-away"); | |
| 185 if (events & GAIM_POUNCE_IDLE) | |
| 186 add_event_to_xmlnode(child, "idle"); | |
| 187 if (events & GAIM_POUNCE_IDLE_RETURN) | |
| 188 add_event_to_xmlnode(child, "return-from-idle"); | |
| 189 if (events & GAIM_POUNCE_TYPING) | |
| 190 add_event_to_xmlnode(child, "start-typing"); | |
| 191 if (events & GAIM_POUNCE_TYPING_STOPPED) | |
| 192 add_event_to_xmlnode(child, "stop-typing"); | |
| 193 | |
| 194 /* Write pounce actions */ | |
| 195 child = xmlnode_new_child(node, "actions"); | |
| 196 g_hash_table_foreach(pounce->actions, action_parameter_list_to_xmlnode, child); | |
| 197 | |
| 198 if (gaim_pounce_get_save(pounce)) | |
| 199 child = xmlnode_new_child(node, "save"); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
200 |
| 10432 | 201 return node; |
| 202 } | |
| 203 | |
| 204 static xmlnode * | |
| 205 pounces_to_xmlnode(void) | |
| 206 { | |
| 207 xmlnode *node, *child; | |
| 208 GList *cur; | |
| 209 | |
| 210 node = xmlnode_new("pounces"); | |
| 211 xmlnode_set_attrib(node, "version", "1.0"); | |
| 212 | |
| 213 for (cur = gaim_pounces_get_all(); cur != NULL; cur = cur->next) | |
| 214 { | |
| 215 child = pounce_to_xmlnode(cur->data); | |
| 216 xmlnode_insert_child(node, child); | |
| 217 } | |
| 218 | |
| 219 return node; | |
| 220 } | |
| 221 | |
| 222 static void | |
| 223 sync_pounces(void) | |
| 224 { | |
| 225 xmlnode *node; | |
| 226 char *data; | |
| 227 | |
| 228 if (!pounces_loaded) | |
| 229 { | |
| 230 gaim_debug_error("pounce", "Attempted to save buddy pounces before " | |
| 231 "they were read!\n"); | |
| 232 return; | |
| 233 } | |
| 234 | |
| 235 node = pounces_to_xmlnode(); | |
| 236 data = xmlnode_to_formatted_str(node, NULL); | |
| 237 gaim_util_write_data_to_file("pounces.xml", data, -1); | |
| 238 g_free(data); | |
| 239 xmlnode_free(node); | |
| 240 } | |
| 241 | |
| 242 static gboolean | |
| 243 save_cb(gpointer data) | |
| 244 { | |
| 245 sync_pounces(); | |
| 246 save_timer = 0; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
247 return FALSE; |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
248 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
249 |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
250 static void |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
251 schedule_pounces_save(void) |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
252 { |
| 10432 | 253 if (save_timer == 0) |
| 254 save_timer = gaim_timeout_add(5000, save_cb, NULL); | |
|
5864
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
255 } |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
256 |
|
417b1001d2b1
[gaim-migrate @ 6295]
Christian Hammond <chipx86@chipx86.com>
parents:
5857
diff
changeset
|
257 |
| 10432 | 258 /********************************************************************* |
| 259 * Reading from disk * | |
| 260 *********************************************************************/ | |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
261 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
262 static void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
263 free_parser_data(gpointer user_data) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
264 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
265 PounceParserData *data = user_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
266 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
267 if (data->buffer != NULL) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
268 g_string_free(data->buffer, TRUE); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
269 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
270 if (data->ui_name != NULL) g_free(data->ui_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
271 if (data->pouncee != NULL) g_free(data->pouncee); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
272 if (data->protocol_id != NULL) g_free(data->protocol_id); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
273 if (data->event_type != NULL) g_free(data->event_type); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
274 if (data->action_name != NULL) g_free(data->action_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
275 if (data->param_name != NULL) g_free(data->param_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
276 if (data->account_name != NULL) g_free(data->account_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
277 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
278 g_free(data); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
279 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
280 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
281 static void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
282 start_element_handler(GMarkupParseContext *context, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
283 const gchar *element_name, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
284 const gchar **attribute_names, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
285 const gchar **attribute_values, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
286 gpointer user_data, GError **error) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
287 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
288 PounceParserData *data = user_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
289 GHashTable *atts; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
290 int i; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
291 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
292 atts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
293 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
294 for (i = 0; attribute_names[i] != NULL; i++) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
295 g_hash_table_insert(atts, g_strdup(attribute_names[i]), |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
296 g_strdup(attribute_values[i])); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
297 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
298 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
299 if (data->buffer != NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
300 g_string_free(data->buffer, TRUE); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
301 data->buffer = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
302 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
303 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
304 if (!strcmp(element_name, "pounce")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
305 const char *ui = g_hash_table_lookup(atts, "ui"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
306 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
307 if (ui == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
308 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
309 "Unset 'ui' parameter for pounce!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
310 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
311 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
312 data->ui_name = g_strdup(ui); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
313 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
314 data->events = 0; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
315 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
316 else if (!strcmp(element_name, "account")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
317 const char *protocol_id = g_hash_table_lookup(atts, "protocol"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
318 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
319 if (protocol_id == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
320 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
321 "Unset 'protocol' parameter for account!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
322 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
323 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
324 data->protocol_id = g_strdup(protocol_id); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
325 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
326 else if (!strcmp(element_name, "event")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
327 const char *type = g_hash_table_lookup(atts, "type"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
328 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
329 if (type == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
330 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
331 "Unset 'type' parameter for event!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
332 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
333 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
334 data->event_type = g_strdup(type); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
335 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
336 else if (!strcmp(element_name, "action")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
337 const char *type = g_hash_table_lookup(atts, "type"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
338 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
339 if (type == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
340 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
341 "Unset 'type' parameter for action!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
342 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
343 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
344 data->action_name = g_strdup(type); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
345 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
346 else if (!strcmp(element_name, "param")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
347 const char *param_name = g_hash_table_lookup(atts, "name"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
348 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
349 if (param_name == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
350 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
351 "Unset 'name' parameter for param!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
352 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
353 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
354 data->param_name = g_strdup(param_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
355 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
356 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
357 g_hash_table_destroy(atts); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
358 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
359 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
360 static void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
361 end_element_handler(GMarkupParseContext *context, const gchar *element_name, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
362 gpointer user_data, GError **error) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
363 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
364 PounceParserData *data = user_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
365 gchar *buffer = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
366 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
367 if (data->buffer != NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
368 buffer = g_string_free(data->buffer, FALSE); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
369 data->buffer = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
370 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
371 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
372 if (!strcmp(element_name, "account")) { |
| 9598 | 373 g_free(data->account_name); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
374 data->account_name = g_strdup(buffer); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
375 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
376 else if (!strcmp(element_name, "pouncee")) { |
| 9598 | 377 g_free(data->pouncee); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
378 data->pouncee = g_strdup(buffer); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
379 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
380 else if (!strcmp(element_name, "event")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
381 if (!strcmp(data->event_type, "sign-on")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
382 data->events |= GAIM_POUNCE_SIGNON; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
383 else if (!strcmp(data->event_type, "sign-off")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
384 data->events |= GAIM_POUNCE_SIGNOFF; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
385 else if (!strcmp(data->event_type, "away")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
386 data->events |= GAIM_POUNCE_AWAY; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
387 else if (!strcmp(data->event_type, "return-from-away")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
388 data->events |= GAIM_POUNCE_AWAY_RETURN; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
389 else if (!strcmp(data->event_type, "idle")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
390 data->events |= GAIM_POUNCE_IDLE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
391 else if (!strcmp(data->event_type, "return-from-idle")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
392 data->events |= GAIM_POUNCE_IDLE_RETURN; |
|
6444
601c2a52d74a
[gaim-migrate @ 6953]
Christian Hammond <chipx86@chipx86.com>
parents:
6271
diff
changeset
|
393 else if (!strcmp(data->event_type, "start-typing")) |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
394 data->events |= GAIM_POUNCE_TYPING; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
395 else if (!strcmp(data->event_type, "stop-typing")) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
396 data->events |= GAIM_POUNCE_TYPING_STOPPED; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
397 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
398 g_free(data->event_type); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
399 data->event_type = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
400 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
401 else if (!strcmp(element_name, "action")) { |
| 9598 | 402 if (data->pounce != NULL) { |
| 403 gaim_pounce_action_register(data->pounce, data->action_name); | |
| 404 gaim_pounce_action_set_enabled(data->pounce, data->action_name, TRUE); | |
| 405 } | |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
406 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
407 g_free(data->action_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
408 data->action_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
409 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
410 else if (!strcmp(element_name, "param")) { |
| 9598 | 411 if (data->pounce != NULL) { |
| 412 gaim_pounce_action_set_attribute(data->pounce, data->action_name, | |
| 413 data->param_name, buffer); | |
| 414 } | |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
415 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
416 g_free(data->param_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
417 data->param_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
418 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
419 else if (!strcmp(element_name, "events")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
420 GaimAccount *account; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
421 |
| 7132 | 422 account = gaim_accounts_find(data->account_name, data->protocol_id); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
423 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
424 g_free(data->account_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
425 g_free(data->protocol_id); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
426 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
427 data->account_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
428 data->protocol_id = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
429 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
430 if (account == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
431 gaim_debug(GAIM_DEBUG_ERROR, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
432 "Account for pounce not found!\n"); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
433 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
434 else { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
435 gaim_debug(GAIM_DEBUG_INFO, "pounce", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
436 "Creating pounce: %s, %s\n", data->ui_name, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
437 data->pouncee); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
438 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
439 data->pounce = gaim_pounce_new(data->ui_name, account, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
440 data->pouncee, data->events); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
441 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
442 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
443 g_free(data->pouncee); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
444 data->pouncee = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
445 } |
|
5878
9e54bb2ee3b5
[gaim-migrate @ 6310]
Christian Hammond <chipx86@chipx86.com>
parents:
5875
diff
changeset
|
446 else if (!strcmp(element_name, "save")) { |
|
9e54bb2ee3b5
[gaim-migrate @ 6310]
Christian Hammond <chipx86@chipx86.com>
parents:
5875
diff
changeset
|
447 gaim_pounce_set_save(data->pounce, TRUE); |
|
9e54bb2ee3b5
[gaim-migrate @ 6310]
Christian Hammond <chipx86@chipx86.com>
parents:
5875
diff
changeset
|
448 } |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
449 else if (!strcmp(element_name, "pounce")) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
450 data->pounce = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
451 data->events = 0; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
452 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
453 if (data->ui_name != NULL) g_free(data->ui_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
454 if (data->pouncee != NULL) g_free(data->pouncee); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
455 if (data->protocol_id != NULL) g_free(data->protocol_id); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
456 if (data->event_type != NULL) g_free(data->event_type); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
457 if (data->action_name != NULL) g_free(data->action_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
458 if (data->param_name != NULL) g_free(data->param_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
459 if (data->account_name != NULL) g_free(data->account_name); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
460 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
461 data->ui_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
462 data->pounce = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
463 data->protocol_id = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
464 data->event_type = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
465 data->action_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
466 data->param_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
467 data->account_name = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
468 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
469 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
470 if (buffer != NULL) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
471 g_free(buffer); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
472 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
473 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
474 static void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
475 text_handler(GMarkupParseContext *context, const gchar *text, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
476 gsize text_len, gpointer user_data, GError **error) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
477 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
478 PounceParserData *data = user_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
479 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
480 if (data->buffer == NULL) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
481 data->buffer = g_string_new_len(text, text_len); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
482 else |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
483 g_string_append_len(data->buffer, text, text_len); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
484 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
485 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
486 static GMarkupParser pounces_parser = |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
487 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
488 start_element_handler, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
489 end_element_handler, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
490 text_handler, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
491 NULL, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
492 NULL |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
493 }; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
494 |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
495 gboolean |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
496 gaim_pounces_load(void) |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
497 { |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
498 gchar *filename = g_build_filename(gaim_user_dir(), "pounces.xml", NULL); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
499 gchar *contents = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
500 gsize length; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
501 GMarkupParseContext *context; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
502 GError *error = NULL; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
503 PounceParserData *parser_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
504 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
505 if (filename == NULL) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
506 pounces_loaded = TRUE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
507 return FALSE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
508 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
509 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
510 if (!g_file_get_contents(filename, &contents, &length, &error)) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
511 gaim_debug(GAIM_DEBUG_ERROR, "pounces", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
512 "Error reading pounces: %s\n", error->message); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
513 |
| 5940 | 514 g_free(filename); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
515 g_error_free(error); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
516 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
517 pounces_loaded = TRUE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
518 return FALSE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
519 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
520 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
521 parser_data = g_new0(PounceParserData, 1); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
522 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
523 context = g_markup_parse_context_new(&pounces_parser, 0, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
524 parser_data, free_parser_data); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
525 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
526 if (!g_markup_parse_context_parse(context, contents, length, NULL)) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
527 g_markup_parse_context_free(context); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
528 g_free(contents); |
| 5940 | 529 g_free(filename); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
530 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
531 pounces_loaded = TRUE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
532 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
533 return FALSE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
534 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
535 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
536 if (!g_markup_parse_context_end_parse(context, NULL)) { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
537 gaim_debug(GAIM_DEBUG_ERROR, "pounces", "Error parsing %s\n", |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
538 filename); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
539 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
540 g_markup_parse_context_free(context); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
541 g_free(contents); |
| 5940 | 542 g_free(filename); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
543 pounces_loaded = TRUE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
544 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
545 return FALSE; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
546 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
547 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
548 g_markup_parse_context_free(context); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
549 g_free(contents); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
550 g_free(filename); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
551 |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
552 pounces_loaded = TRUE; |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
553 |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
554 return TRUE; |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
555 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
556 |
| 10432 | 557 |
| 558 GaimPounce * | |
| 559 gaim_pounce_new(const char *ui_type, GaimAccount *pouncer, | |
| 560 const char *pouncee, GaimPounceEvent event) | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
561 { |
| 10432 | 562 GaimPounce *pounce; |
| 563 GaimPounceHandler *handler; | |
| 564 | |
| 565 g_return_val_if_fail(ui_type != NULL, NULL); | |
| 566 g_return_val_if_fail(pouncer != NULL, NULL); | |
| 567 g_return_val_if_fail(pouncee != NULL, NULL); | |
| 568 g_return_val_if_fail(event != 0, NULL); | |
| 569 | |
| 570 pounce = g_new0(GaimPounce, 1); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
571 |
| 10432 | 572 pounce->ui_type = g_strdup(ui_type); |
| 573 pounce->pouncer = pouncer; | |
| 574 pounce->pouncee = g_strdup(pouncee); | |
| 575 pounce->events = event; | |
| 576 | |
| 577 pounce->actions = g_hash_table_new_full(g_str_hash, g_str_equal, | |
| 578 g_free, free_action_data); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
579 |
| 10432 | 580 handler = g_hash_table_lookup(pounce_handlers, pounce->ui_type); |
| 581 | |
| 582 if (handler != NULL && handler->new_pounce != NULL) | |
| 583 handler->new_pounce(pounce); | |
| 584 | |
| 585 pounces = g_list_append(pounces, pounce); | |
| 586 | |
| 587 schedule_pounces_save(); | |
| 588 | |
| 589 return pounce; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
590 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
591 |
| 10432 | 592 void |
| 593 gaim_pounce_destroy(GaimPounce *pounce) | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
594 { |
| 10432 | 595 GaimPounceHandler *handler; |
| 596 | |
| 597 g_return_if_fail(pounce != NULL); | |
| 598 | |
| 599 handler = g_hash_table_lookup(pounce_handlers, pounce->ui_type); | |
| 600 | |
| 601 pounces = g_list_remove(pounces, pounce); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
602 |
| 10432 | 603 if (pounce->ui_type != NULL) g_free(pounce->ui_type); |
| 604 if (pounce->pouncee != NULL) g_free(pounce->pouncee); | |
| 605 | |
| 606 g_hash_table_destroy(pounce->actions); | |
| 607 | |
| 608 if (handler != NULL && handler->free_pounce != NULL) | |
| 609 handler->free_pounce(pounce); | |
| 610 | |
| 611 g_free(pounce); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
612 |
| 10432 | 613 schedule_pounces_save(); |
| 614 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
615 |
| 10432 | 616 void |
| 617 gaim_pounce_destroy_all_by_account(GaimAccount *account) | |
| 618 { | |
| 619 GaimAccount *pouncer; | |
| 620 GaimPounce *pounce; | |
| 621 GList *l, *l_next; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
622 |
| 10432 | 623 g_return_if_fail(account != NULL); |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
624 |
| 10432 | 625 for (l = gaim_pounces_get_all(); l != NULL; l = l_next) |
| 626 { | |
| 627 pounce = (GaimPounce *)l->data; | |
| 628 l_next = l->next; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
629 |
| 10432 | 630 pouncer = gaim_pounce_get_pouncer(pounce); |
| 631 if (pouncer == account) | |
| 632 gaim_pounce_destroy(pounce); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
633 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
634 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
635 |
| 10432 | 636 void |
| 637 gaim_pounce_set_events(GaimPounce *pounce, GaimPounceEvent events) | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
638 { |
| 10432 | 639 g_return_if_fail(pounce != NULL); |
| 640 g_return_if_fail(pounce != GAIM_POUNCE_NONE); | |
| 641 | |
| 642 pounce->events = events; | |
| 643 | |
| 644 schedule_pounces_save(); | |
| 645 } | |
| 646 | |
| 647 void | |
| 648 gaim_pounce_set_pouncer(GaimPounce *pounce, GaimAccount *pouncer) | |
| 649 { | |
| 650 g_return_if_fail(pounce != NULL); | |
| 651 g_return_if_fail(pouncer != NULL); | |
| 652 | |
| 653 pounce->pouncer = pouncer; | |
| 654 | |
| 655 schedule_pounces_save(); | |
| 656 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
657 |
| 10432 | 658 void |
| 659 gaim_pounce_set_pouncee(GaimPounce *pounce, const char *pouncee) | |
| 660 { | |
| 661 g_return_if_fail(pounce != NULL); | |
| 662 g_return_if_fail(pouncee != NULL); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
663 |
| 10432 | 664 if (pounce->pouncee != NULL) |
| 665 g_free(pounce->pouncee); | |
| 666 | |
| 667 pounce->pouncee = (pouncee == NULL ? NULL : g_strdup(pouncee)); | |
| 668 | |
| 669 schedule_pounces_save(); | |
| 670 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
671 |
| 10432 | 672 void |
| 673 gaim_pounce_set_save(GaimPounce *pounce, gboolean save) | |
| 674 { | |
| 675 g_return_if_fail(pounce != NULL); | |
| 676 | |
| 677 pounce->save = save; | |
| 678 | |
| 679 schedule_pounces_save(); | |
| 680 } | |
| 681 | |
| 682 void | |
| 683 gaim_pounce_action_register(GaimPounce *pounce, const char *name) | |
| 684 { | |
| 685 GaimPounceActionData *action_data; | |
| 686 | |
| 687 g_return_if_fail(pounce != NULL); | |
| 688 g_return_if_fail(name != NULL); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
689 |
| 10432 | 690 if (g_hash_table_lookup(pounce->actions, name) != NULL) |
| 691 return; | |
| 692 | |
| 693 action_data = g_new0(GaimPounceActionData, 1); | |
| 694 | |
| 695 action_data->name = g_strdup(name); | |
| 696 action_data->enabled = FALSE; | |
| 697 action_data->atts = g_hash_table_new_full(g_str_hash, g_str_equal, | |
| 698 g_free, g_free); | |
| 699 | |
| 700 g_hash_table_insert(pounce->actions, g_strdup(name), action_data); | |
| 701 | |
| 702 schedule_pounces_save(); | |
| 703 } | |
| 704 | |
| 705 void | |
| 706 gaim_pounce_action_set_enabled(GaimPounce *pounce, const char *action, | |
| 707 gboolean enabled) | |
| 708 { | |
| 709 GaimPounceActionData *action_data; | |
| 710 | |
| 711 g_return_if_fail(pounce != NULL); | |
| 712 g_return_if_fail(action != NULL); | |
| 713 | |
| 714 action_data = find_action_data(pounce, action); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
715 |
| 10432 | 716 g_return_if_fail(action_data != NULL); |
| 717 | |
| 718 action_data->enabled = enabled; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
719 |
| 10432 | 720 schedule_pounces_save(); |
| 721 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
722 |
| 10432 | 723 void |
| 724 gaim_pounce_action_set_attribute(GaimPounce *pounce, const char *action, | |
| 725 const char *attr, const char *value) | |
| 726 { | |
| 727 GaimPounceActionData *action_data; | |
|
5878
9e54bb2ee3b5
[gaim-migrate @ 6310]
Christian Hammond <chipx86@chipx86.com>
parents:
5875
diff
changeset
|
728 |
| 10432 | 729 g_return_if_fail(pounce != NULL); |
| 730 g_return_if_fail(action != NULL); | |
| 731 g_return_if_fail(attr != NULL); | |
| 732 | |
| 733 action_data = find_action_data(pounce, action); | |
| 734 | |
| 735 g_return_if_fail(action_data != NULL); | |
|
5878
9e54bb2ee3b5
[gaim-migrate @ 6310]
Christian Hammond <chipx86@chipx86.com>
parents:
5875
diff
changeset
|
736 |
| 10432 | 737 if (value == NULL) |
| 738 g_hash_table_remove(action_data->atts, attr); | |
| 739 else | |
| 740 g_hash_table_insert(action_data->atts, g_strdup(attr), | |
| 741 g_strdup(value)); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
742 |
| 10432 | 743 schedule_pounces_save(); |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
744 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
745 |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
746 void |
| 10432 | 747 gaim_pounce_set_data(GaimPounce *pounce, void *data) |
| 748 { | |
| 749 g_return_if_fail(pounce != NULL); | |
| 750 | |
| 751 pounce->data = data; | |
| 752 | |
| 753 schedule_pounces_save(); | |
| 754 } | |
| 755 | |
| 756 GaimPounceEvent | |
| 757 gaim_pounce_get_events(const GaimPounce *pounce) | |
| 758 { | |
| 759 g_return_val_if_fail(pounce != NULL, GAIM_POUNCE_NONE); | |
| 760 | |
| 761 return pounce->events; | |
| 762 } | |
| 763 | |
| 764 GaimAccount * | |
| 765 gaim_pounce_get_pouncer(const GaimPounce *pounce) | |
| 766 { | |
| 767 g_return_val_if_fail(pounce != NULL, NULL); | |
| 768 | |
| 769 return pounce->pouncer; | |
| 770 } | |
| 771 | |
| 772 const char * | |
| 773 gaim_pounce_get_pouncee(const GaimPounce *pounce) | |
| 774 { | |
| 775 g_return_val_if_fail(pounce != NULL, NULL); | |
| 776 | |
| 777 return pounce->pouncee; | |
| 778 } | |
| 779 | |
| 780 gboolean | |
| 781 gaim_pounce_get_save(const GaimPounce *pounce) | |
| 782 { | |
| 783 g_return_val_if_fail(pounce != NULL, FALSE); | |
| 784 | |
| 785 return pounce->save; | |
| 786 } | |
| 787 | |
| 788 gboolean | |
| 789 gaim_pounce_action_is_enabled(const GaimPounce *pounce, const char *action) | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
790 { |
| 10432 | 791 GaimPounceActionData *action_data; |
| 792 | |
| 793 g_return_val_if_fail(pounce != NULL, FALSE); | |
| 794 g_return_val_if_fail(action != NULL, FALSE); | |
| 795 | |
| 796 action_data = find_action_data(pounce, action); | |
| 797 | |
| 798 g_return_val_if_fail(action_data != NULL, FALSE); | |
| 799 | |
| 800 return action_data->enabled; | |
| 801 } | |
| 802 | |
| 803 const char * | |
| 804 gaim_pounce_action_get_attribute(const GaimPounce *pounce, | |
| 805 const char *action, const char *attr) | |
| 806 { | |
| 807 GaimPounceActionData *action_data; | |
| 808 | |
| 809 g_return_val_if_fail(pounce != NULL, NULL); | |
| 810 g_return_val_if_fail(action != NULL, NULL); | |
| 811 g_return_val_if_fail(attr != NULL, NULL); | |
| 812 | |
| 813 action_data = find_action_data(pounce, action); | |
| 814 | |
| 815 g_return_val_if_fail(action_data != NULL, NULL); | |
| 816 | |
| 817 return g_hash_table_lookup(action_data->atts, attr); | |
| 818 } | |
| 819 | |
| 820 void * | |
| 821 gaim_pounce_get_data(const GaimPounce *pounce) | |
| 822 { | |
| 823 g_return_val_if_fail(pounce != NULL, NULL); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
824 |
| 10432 | 825 return pounce->data; |
| 826 } | |
| 827 | |
| 828 void | |
| 829 gaim_pounce_execute(const GaimAccount *pouncer, const char *pouncee, | |
| 830 GaimPounceEvent events) | |
| 831 { | |
| 832 GaimPounce *pounce; | |
| 833 GaimPounceHandler *handler; | |
| 834 GList *l, *l_next; | |
| 835 char *norm_pouncee; | |
| 836 | |
| 837 g_return_if_fail(pouncer != NULL); | |
| 838 g_return_if_fail(pouncee != NULL); | |
| 839 g_return_if_fail(events != GAIM_POUNCE_NONE); | |
| 840 | |
| 841 norm_pouncee = g_strdup(gaim_normalize(pouncer, pouncee)); | |
| 842 | |
| 843 for (l = gaim_pounces_get_all(); l != NULL; l = l_next) | |
| 844 { | |
| 845 pounce = (GaimPounce *)l->data; | |
| 846 l_next = l->next; | |
| 847 | |
| 848 if ((gaim_pounce_get_events(pounce) & events) && | |
| 849 (gaim_pounce_get_pouncer(pounce) == pouncer) && | |
| 850 !gaim_utf8_strcasecmp(gaim_normalize(pouncer, gaim_pounce_get_pouncee(pounce)), | |
| 851 norm_pouncee)) | |
| 852 { | |
| 853 handler = g_hash_table_lookup(pounce_handlers, pounce->ui_type); | |
| 854 | |
| 855 if (handler != NULL && handler->cb != NULL) | |
| 856 { | |
| 857 handler->cb(pounce, events, gaim_pounce_get_data(pounce)); | |
| 858 | |
| 859 if (!gaim_pounce_get_save(pounce)) | |
| 860 gaim_pounce_destroy(pounce); | |
| 861 } | |
| 862 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
863 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
864 |
| 10432 | 865 g_free(norm_pouncee); |
| 866 } | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
867 |
| 10432 | 868 GaimPounce * |
| 869 gaim_find_pounce(const GaimAccount *pouncer, const char *pouncee, | |
| 870 GaimPounceEvent events) | |
| 871 { | |
| 872 GaimPounce *pounce = NULL; | |
| 873 GList *l; | |
| 874 char *norm_pouncee; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
875 |
| 10432 | 876 g_return_val_if_fail(pouncer != NULL, NULL); |
| 877 g_return_val_if_fail(pouncee != NULL, NULL); | |
| 878 g_return_val_if_fail(events != GAIM_POUNCE_NONE, NULL); | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
879 |
| 10432 | 880 norm_pouncee = g_strdup(gaim_normalize(pouncer, pouncee)); |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
881 |
| 10432 | 882 for (l = gaim_pounces_get_all(); l != NULL; l = l->next) |
| 883 { | |
| 884 pounce = (GaimPounce *)l->data; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
885 |
| 10432 | 886 if ((gaim_pounce_get_events(pounce) & events) && |
| 887 (gaim_pounce_get_pouncer(pounce) == pouncer) && | |
| 888 !gaim_utf8_strcasecmp(gaim_normalize(pouncer, gaim_pounce_get_pouncee(pounce)), | |
| 889 norm_pouncee)) | |
| 890 { | |
| 891 break; | |
| 892 } | |
| 893 | |
| 894 pounce = NULL; | |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
895 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
896 |
| 10432 | 897 g_free(norm_pouncee); |
| 10399 | 898 |
| 10432 | 899 return pounce; |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
900 } |
|
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
901 |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
902 void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
903 gaim_pounces_register_handler(const char *ui, GaimPounceCb cb, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
904 void (*new_pounce)(GaimPounce *pounce), |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
905 void (*free_pounce)(GaimPounce *pounce)) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
906 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
907 GaimPounceHandler *handler; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
908 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
909 g_return_if_fail(ui != NULL); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
910 g_return_if_fail(cb != NULL); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
911 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
912 handler = g_new0(GaimPounceHandler, 1); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
913 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
914 handler->ui = g_strdup(ui); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
915 handler->cb = cb; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
916 handler->new_pounce = new_pounce; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
917 handler->free_pounce = free_pounce; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
918 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
919 g_hash_table_insert(pounce_handlers, g_strdup(ui), handler); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
920 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
921 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
922 void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
923 gaim_pounces_unregister_handler(const char *ui) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
924 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
925 g_return_if_fail(ui != NULL); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
926 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
927 g_hash_table_remove(pounce_handlers, ui); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
928 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
929 |
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
930 GList * |
|
5866
d6b5cab288bb
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5864
diff
changeset
|
931 gaim_pounces_get_all(void) |
|
5032
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
932 { |
|
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
933 return pounces; |
|
cb700c07ee07
[gaim-migrate @ 5375]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
934 } |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
935 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
936 static void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
937 free_pounce_handler(gpointer user_data) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
938 { |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
939 GaimPounceHandler *handler = (GaimPounceHandler *)user_data; |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
940 |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
941 g_free(handler->ui); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
942 g_free(handler); |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
943 } |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
944 |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
945 static void |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
946 buddy_state_cb(GaimBuddy *buddy, GaimPounceEvent event) |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
947 { |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
948 gaim_pounce_execute(buddy->account, buddy->name, event); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
949 } |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
950 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
951 static void |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
952 buddy_typing_cb(GaimConversation *conv, void *data) |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
953 { |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
954 GaimAccount *account = gaim_conversation_get_account(conv); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
955 const char *name = gaim_conversation_get_name(conv); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
956 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
957 if (gaim_find_buddy(account, name) != NULL) |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
958 { |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
959 GaimPounceEvent event; |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
960 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
961 event = (gaim_conv_im_get_typing_state(GAIM_CONV_IM(conv)) == GAIM_TYPING |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
962 ? GAIM_POUNCE_TYPING : GAIM_POUNCE_TYPING_STOPPED); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
963 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
964 gaim_pounce_execute(account, name, event); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
965 } |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
966 } |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
967 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
968 void * |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
969 gaim_pounces_get_handle(void) |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
970 { |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
971 static int pounce_handle; |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
972 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
973 return &pounce_handle; |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
974 } |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
975 |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
976 void |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
977 gaim_pounces_init(void) |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
978 { |
| 10432 | 979 void *handle = gaim_pounces_get_handle(); |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
980 void *blist_handle = gaim_blist_get_handle(); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
981 void *conv_handle = gaim_conversations_get_handle(); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
982 |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
983 pounce_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, |
|
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
984 g_free, free_pounce_handler); |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
985 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
986 gaim_signal_connect(blist_handle, "buddy-idle", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
987 handle, GAIM_CALLBACK(buddy_state_cb), |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
988 GINT_TO_POINTER(GAIM_POUNCE_IDLE)); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
989 gaim_signal_connect(blist_handle, "buddy-unidle", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
990 handle, GAIM_CALLBACK(buddy_state_cb), |
| 7627 | 991 GINT_TO_POINTER(GAIM_POUNCE_IDLE_RETURN)); |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
992 gaim_signal_connect(blist_handle, "buddy-away", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
993 handle, GAIM_CALLBACK(buddy_state_cb), |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
994 GINT_TO_POINTER(GAIM_POUNCE_AWAY)); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
995 gaim_signal_connect(blist_handle, "buddy-back", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
996 handle, GAIM_CALLBACK(buddy_state_cb), |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
997 GINT_TO_POINTER(GAIM_POUNCE_AWAY_RETURN)); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
998 gaim_signal_connect(blist_handle, "buddy-signed-on", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
999 handle, GAIM_CALLBACK(buddy_state_cb), |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1000 GINT_TO_POINTER(GAIM_POUNCE_SIGNON)); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1001 gaim_signal_connect(blist_handle, "buddy-signed-off", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1002 handle, GAIM_CALLBACK(buddy_state_cb), |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1003 GINT_TO_POINTER(GAIM_POUNCE_SIGNOFF)); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1004 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1005 gaim_signal_connect(conv_handle, "buddy-typing", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1006 handle, GAIM_CALLBACK(buddy_typing_cb), NULL); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1007 gaim_signal_connect(conv_handle, "buddy-typing-stopped", |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1008 handle, GAIM_CALLBACK(buddy_typing_cb), NULL); |
|
5875
448f2f4ca3ec
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
1009 } |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1010 |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1011 void |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1012 gaim_pounces_uninit() |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1013 { |
| 10432 | 1014 if (save_timer != 0) |
| 1015 { | |
| 1016 gaim_timeout_remove(save_timer); | |
| 1017 save_timer = 0; | |
| 1018 sync_pounces(); | |
| 8235 | 1019 } |
| 1020 | |
|
6837
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1021 gaim_signals_disconnect_by_handle(gaim_pounces_get_handle()); |
|
f098765ac919
[gaim-migrate @ 7382]
Christian Hammond <chipx86@chipx86.com>
parents:
6719
diff
changeset
|
1022 } |
