Mon, 18 Aug 2003 17:50:24 +0000
[gaim-migrate @ 7009]
Updates for new signal mechanism.. Nice job Christian.
| 981 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
5 | * |
| 981 | 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | * GNU General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 | * | |
| 20 | */ | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
21 | #include "internal.h" |
|
5945
941f14d90d22
[gaim-migrate @ 6386]
Christian Hammond <chipx86@chipx86.com>
parents:
5943
diff
changeset
|
22 | #include "conversation.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
23 | #include "debug.h" |
| 5717 | 24 | #include "multi.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
25 | #include "notify.h" |
| 981 | 26 | #include "prpl.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
27 | #include "request.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5717
diff
changeset
|
28 | #include "util.h" |
| 3738 | 29 | |
|
5938
4e7e6b3f34ea
[gaim-migrate @ 6378]
Christian Hammond <chipx86@chipx86.com>
parents:
5936
diff
changeset
|
30 | /* XXX */ |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
5945
diff
changeset
|
31 | #include "gtkinternal.h" |
|
5938
4e7e6b3f34ea
[gaim-migrate @ 6378]
Christian Hammond <chipx86@chipx86.com>
parents:
5936
diff
changeset
|
32 | #include "gtkconv.h" |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
5945
diff
changeset
|
33 | #include "ui.h" |
|
1500
f8a21f4aa105
[gaim-migrate @ 1510]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1499
diff
changeset
|
34 | |
|
5943
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
35 | const char * |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
36 | gaim_prpl_num_to_id(GaimProtocol protocol) |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
37 | { |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
38 | g_return_val_if_fail(protocol >= 0 && protocol < GAIM_PROTO_UNTAKEN, NULL); |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
39 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
40 | switch (protocol) |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
41 | { |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
42 | case GAIM_PROTO_TOC: return "prpl-toc"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
43 | case GAIM_PROTO_OSCAR: return "prpl-oscar"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
44 | case GAIM_PROTO_YAHOO: return "prpl-yahoo"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
45 | case GAIM_PROTO_ICQ: return "prpl-icq"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
46 | case GAIM_PROTO_MSN: return "prpl-msn"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
47 | case GAIM_PROTO_IRC: return "prpl-irc"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
48 | case GAIM_PROTO_JABBER: return "prpl-jabber"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
49 | case GAIM_PROTO_NAPSTER: return "prpl-napster"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
50 | case GAIM_PROTO_ZEPHYR: return "prpl-zephyr"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
51 | case GAIM_PROTO_GADUGADU: return "prpl-gg"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
52 | case GAIM_PROTO_MOO: return "prpl-moo"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
53 | case GAIM_PROTO_TREPIA: return "prpl-trepia"; break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
54 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
55 | default: |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
56 | break; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
57 | } |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
58 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
59 | return NULL; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
60 | } |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
61 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
62 | GaimProtocol |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
63 | gaim_prpl_id_to_num(const char *id) |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
64 | { |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
65 | g_return_val_if_fail(id != NULL, -1); |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
66 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
67 | if (!strcmp(id, "prpl-toc")) return GAIM_PROTO_TOC; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
68 | else if (!strcmp(id, "prpl-oscar")) return GAIM_PROTO_OSCAR; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
69 | else if (!strcmp(id, "prpl-yahoo")) return GAIM_PROTO_YAHOO; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
70 | else if (!strcmp(id, "prpl-icq")) return GAIM_PROTO_ICQ; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
71 | else if (!strcmp(id, "prpl-msn")) return GAIM_PROTO_MSN; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
72 | else if (!strcmp(id, "prpl-irc")) return GAIM_PROTO_IRC; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
73 | else if (!strcmp(id, "prpl-jabber")) return GAIM_PROTO_JABBER; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
74 | else if (!strcmp(id, "prpl-napster")) return GAIM_PROTO_NAPSTER; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
75 | else if (!strcmp(id, "prpl-zephyr")) return GAIM_PROTO_ZEPHYR; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
76 | else if (!strcmp(id, "prpl-gg")) return GAIM_PROTO_GADUGADU; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
77 | else if (!strcmp(id, "prpl-moo")) return GAIM_PROTO_MOO; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
78 | else if (!strcmp(id, "prpl-trepia")) return GAIM_PROTO_TREPIA; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
79 | |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
80 | return -1; |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
81 | } |
|
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5938
diff
changeset
|
82 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
83 | GaimPlugin * |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
84 | gaim_find_prpl(GaimProtocol type) |
| 981 | 85 | { |
|
5573
633880e3f137
[gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
86 | GList *l; |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
87 | GaimPlugin *plugin; |
| 981 | 88 | |
|
5573
633880e3f137
[gaim-migrate @ 5976]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
89 | for (l = gaim_plugins_get_protocols(); l != NULL; l = l->next) { |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
90 | plugin = (GaimPlugin *)l->data; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
91 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
92 | /* Just In Case (TM) */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
93 | if (GAIM_IS_PROTOCOL_PLUGIN(plugin)) { |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
94 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
95 | if (GAIM_PLUGIN_PROTOCOL_INFO(plugin)->protocol == type) |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
96 | return plugin; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5161
diff
changeset
|
97 | } |
| 981 | 98 | } |
| 99 | ||
| 100 | return NULL; | |
| 101 | } | |
| 102 | ||
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
103 | struct icon_data { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
104 | GaimConnection *gc; |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
105 | char *who; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
106 | void *data; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
107 | int len; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
108 | }; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
109 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
110 | static GList *icons = NULL; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
111 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
112 | static gint find_icon_data(gconstpointer a, gconstpointer b) |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
113 | { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
114 | const struct icon_data *x = a; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
115 | const struct icon_data *y = b; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
116 | |
| 4793 | 117 | return ((x->gc != y->gc) || gaim_utf8_strcasecmp(x->who, y->who)); |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
118 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
119 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
120 | void set_icon_data(GaimConnection *gc, const char *who, void *data, int len) |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
121 | { |
|
5676
d3c2fdaf4821
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
122 | GaimConversation *conv; |
| 3281 | 123 | struct icon_data tmp; |
| 124 | GList *l; | |
| 125 | struct icon_data *id; | |
| 4757 | 126 | struct buddy *b; |
| 4799 | 127 | /* i'm going to vent here a little bit about normalize(). normalize() |
| 128 | * uses a static buffer, so when we call functions that use normalize() from | |
| 129 | * functions that use normalize(), whose parameters are the result of running | |
| 130 | * normalize(), bad things happen. To prevent some of this, we're going | |
| 131 | * to make a copy of what we get from normalize(), so we know nothing else | |
| 132 | * touches it, and buddy icons don't go to the wrong person. Some day I | |
| 133 | * will kill normalize(), and dance on its grave. That will be a very happy | |
| 134 | * day for everyone. | |
| 135 | * --ndw | |
| 136 | */ | |
| 137 | char *realwho = g_strdup(normalize(who)); | |
| 3281 | 138 | tmp.gc = gc; |
| 4799 | 139 | tmp.who = realwho; |
| 3281 | 140 | tmp.data=NULL; |
| 4799 | 141 | tmp.len = 0; |
| 3281 | 142 | l = g_list_find_custom(icons, &tmp, find_icon_data); |
| 143 | id = l ? l->data : NULL; | |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
144 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
145 | if (id) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
146 | g_free(id->data); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
147 | if (!data) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
148 | icons = g_list_remove(icons, id); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
149 | g_free(id->who); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
150 | g_free(id); |
| 4799 | 151 | g_free(realwho); |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
152 | return; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
153 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
154 | } else if (data) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
155 | id = g_new0(struct icon_data, 1); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
156 | icons = g_list_append(icons, id); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
157 | id->gc = gc; |
| 4799 | 158 | id->who = g_strdup(realwho); |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
159 | } else { |
| 4799 | 160 | g_free(realwho); |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
161 | return; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
162 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
163 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
164 | gaim_debug(GAIM_DEBUG_MISC, "prpl", "Got icon for %s (length %d)\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
165 | realwho, len); |
|
2284
3a2222ceff7d
[gaim-migrate @ 2294]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2279
diff
changeset
|
166 | |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
167 | id->data = g_memdup(data, len); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
168 | id->len = len; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
169 | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
170 | /* Update the buddy icon for this user. */ |
| 4799 | 171 | conv = gaim_find_conversation(realwho); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
172 | |
| 4687 | 173 | /* XXX Buddy Icon should probalby be part of struct buddy instead of this weird global |
| 174 | * linked list stuff. */ | |
| 175 | ||
| 4799 | 176 | if ((b = gaim_find_buddy(gc->account, realwho)) != NULL) { |
| 4757 | 177 | char *random = g_strdup_printf("%x", g_random_int()); |
| 178 | char *filename = g_build_filename(gaim_user_dir(), "icons", random, | |
| 179 | NULL); | |
| 180 | char *dirname = g_build_filename(gaim_user_dir(), "icons", NULL); | |
| 181 | char *old_icon = gaim_buddy_get_setting(b, "buddy_icon"); | |
| 4687 | 182 | FILE *file = NULL; |
| 183 | ||
| 4757 | 184 | g_free(random); |
| 185 | ||
| 4802 | 186 | if(!g_file_test(dirname, G_FILE_TEST_IS_DIR)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
187 | gaim_debug(GAIM_DEBUG_INFO, "buddy icons", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
188 | "Creating icon cache directory.\n"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
189 | |
| 4802 | 190 | if(mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
191 | gaim_debug(GAIM_DEBUG_ERROR, "buddy icons", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
192 | "Unable to create directory %s: %s\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
193 | dirname, strerror(errno)); |
| 4802 | 194 | } |
| 4757 | 195 | |
| 196 | g_free(dirname); | |
| 197 | ||
| 4687 | 198 | file = fopen(filename, "wb"); |
| 4757 | 199 | if (file) { |
| 200 | fwrite(data, 1, len, file); | |
| 201 | fclose(file); | |
| 202 | } | |
| 203 | ||
| 204 | if(old_icon) { | |
| 205 | unlink(old_icon); | |
| 206 | g_free(old_icon); | |
| 207 | } | |
| 208 | ||
| 209 | gaim_buddy_set_setting(b, "buddy_icon", filename); | |
| 210 | gaim_blist_save(); | |
| 211 | ||
| 212 | g_free(filename); | |
| 213 | ||
| 214 | gaim_blist_update_buddy_icon(b); | |
| 4687 | 215 | } |
| 4757 | 216 | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
217 | if (conv != NULL && gaim_conversation_get_gc(conv) == gc) |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
218 | gaim_gtkconv_update_buddy_icon(conv); |
| 4799 | 219 | |
| 220 | g_free(realwho); | |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
221 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
222 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
223 | void remove_icon_data(GaimConnection *gc) |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
224 | { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
225 | GList *list = icons; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
226 | struct icon_data *id; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
227 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
228 | while (list) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
229 | id = list->data; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
230 | if (id->gc == gc) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
231 | g_free(id->data); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
232 | g_free(id->who); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
233 | list = icons = g_list_remove(icons, id); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
234 | g_free(id); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
235 | } else |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
236 | list = list->next; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
237 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
238 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
239 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
240 | void *get_icon_data(GaimConnection *gc, const char *who, int *len) |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
241 | { |
|
2718
89bcc8fa8bfd
[gaim-migrate @ 2731]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2662
diff
changeset
|
242 | struct icon_data tmp = { gc, normalize(who), NULL, 0 }; |
|
2191
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
243 | GList *l = g_list_find_custom(icons, &tmp, find_icon_data); |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
244 | struct icon_data *id = l ? l->data : NULL; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
245 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
246 | if (id) { |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
247 | *len = id->len; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
248 | return id->data; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
249 | } |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
250 | |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
251 | *len = 0; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
252 | return NULL; |
|
a40e37f5bf27
[gaim-migrate @ 2201]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2189
diff
changeset
|
253 | } |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
254 | |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
255 | struct got_add { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
256 | GaimConnection *gc; |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
257 | char *who; |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
258 | char *alias; |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
259 | }; |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
260 | |
| 3730 | 261 | static void dont_add(struct got_add *ga) |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
262 | { |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
263 | g_free(ga->who); |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
264 | if (ga->alias) |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
265 | g_free(ga->alias); |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
266 | g_free(ga); |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
267 | } |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
268 | |
| 3730 | 269 | static void do_add(struct got_add *ga) |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
270 | { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
271 | if (g_list_find(gaim_connections_get_all(), ga->gc)) |
|
2585
7f3e347fc1d2
[gaim-migrate @ 2598]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2582
diff
changeset
|
272 | show_add_buddy(ga->gc, ga->who, NULL, ga->alias); |
| 3730 | 273 | dont_add(ga); |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
274 | } |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
275 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
276 | void show_got_added(GaimConnection *gc, const char *id, |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
277 | const char *who, const char *alias, const char *msg) |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
278 | { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
279 | GaimAccount *account; |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
280 | char buf[BUF_LONG]; |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
281 | struct got_add *ga; |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
282 | struct buddy *b; |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
283 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
284 | account = gaim_connection_get_account(gc); |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
285 | b = gaim_find_buddy(gc->account, who); |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
286 | |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
287 | ga = g_new0(struct got_add, 1); |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
288 | ga->gc = gc; |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
289 | ga->who = g_strdup(who); |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
290 | ga->alias = (alias ? g_strdup(alias) : NULL); |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
291 | |
| 4349 | 292 | |
| 3150 | 293 | g_snprintf(buf, sizeof(buf), _("%s%s%s%s has made %s his or her buddy%s%s%s"), |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
294 | who, |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
295 | alias ? " (" : "", |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
296 | alias ? alias : "", |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
297 | alias ? ")" : "", |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
298 | (id |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
299 | ? id |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
300 | : (gaim_connection_get_display_name(gc) |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
301 | ? gaim_connection_get_display_name(gc) |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5538
diff
changeset
|
302 | : gaim_account_get_username(account))), |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
303 | msg ? ": " : ".", |
|
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
304 | msg ? msg : "", |
| 4349 | 305 | b ? "" : _("\n\nDo you wish to add him or her to your buddy list?")); |
|
5436
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5314
diff
changeset
|
306 | |
|
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5314
diff
changeset
|
307 | if (b) { |
|
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5314
diff
changeset
|
308 | gaim_notify_info(NULL, NULL, _("Gaim - Information"), buf); |
|
a0e0bacaa196
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5314
diff
changeset
|
309 | } |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
310 | else |
|
5498
01eec144d71b
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5496
diff
changeset
|
311 | gaim_request_action(NULL, NULL, _("Add buddy to your list?"), buf, |
|
01eec144d71b
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5496
diff
changeset
|
312 | 0, ga, 2, |
|
01eec144d71b
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5496
diff
changeset
|
313 | _("Add"), G_CALLBACK(do_add), |
|
01eec144d71b
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5496
diff
changeset
|
314 | _("Cancel"), G_CALLBACK(dont_add)); |
|
2582
7d3056893188
[gaim-migrate @ 2595]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2558
diff
changeset
|
315 | } |
|
2827
e3d10df95e74
[gaim-migrate @ 2840]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2725
diff
changeset
|
316 |