Mercurial > pidgin
annotate src/notify.c @ 5943:a4f2aba0848d
[gaim-migrate @ 6384]
This should fix corruption in the blist, accounts, and pounces when some
protocol plugins cannot load. Some parts of gaim now use the new unique
Plugin or Protocol Plugin IDs, while some still use the old protocol
numbers. Accounts kind of used both, and when prpls were missing, it had
trouble finding accounts. It would find the names, even without mapping the
protocol numbers to IDs, and any duplicate accounts would get nuked. That
would then affect pounce saving. Anyhow, long story short (well, it's
already long, too late for that), this should fix all that mess. And
introduce new mess, but hopefully temporary mess.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Mon, 23 Jun 2003 02:00:15 +0000 |
| parents | a3e6a5ef49b5 |
| children | 99f4bbeb27bc |
| rev | line source |
|---|---|
| 5437 | 1 /** |
| 2 * @file notify.c Notification API | |
| 3 * @ingroup core | |
| 4 * | |
| 5 * gaim | |
| 6 * | |
| 7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
| 8 * | |
| 9 * This program is free software; you can redistribute it and/or modify | |
| 10 * it under the terms of the GNU General Public License as published by | |
| 11 * the Free Software Foundation; either version 2 of the License, or | |
| 12 * (at your option) any later version. | |
| 13 * | |
| 14 * This program is distributed in the hope that it will be useful, | |
| 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 17 * GNU General Public License for more details. | |
| 18 * | |
| 19 * You should have received a copy of the GNU General Public License | |
| 20 * along with this program; if not, write to the Free Software | |
| 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 22 */ | |
| 23 #include "notify.h" | |
| 24 | |
| 25 static GaimNotifyUiOps *notify_ui_ops = NULL; | |
| 26 static GList *handles = NULL; | |
| 27 | |
| 28 typedef struct | |
| 29 { | |
| 30 GaimNotifyType type; | |
| 31 void *handle; | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
32 void *ui_handle; |
| 5437 | 33 |
| 34 } GaimNotifyInfo; | |
| 35 | |
| 36 void * | |
| 37 gaim_notify_message(void *handle, GaimNotifyType type, | |
| 38 const char *title, const char *primary, | |
| 39 const char *secondary, GCallback cb, void *user_data) | |
| 40 { | |
| 41 GaimNotifyUiOps *ops; | |
| 42 | |
| 43 g_return_val_if_fail(primary != NULL, NULL); | |
| 44 | |
| 45 ops = gaim_get_notify_ui_ops(); | |
| 46 | |
| 47 if (ops != NULL && ops->notify_message != NULL) { | |
| 48 GaimNotifyInfo *info; | |
| 49 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
50 info = g_new0(GaimNotifyInfo, 1); |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
51 info->type = GAIM_NOTIFY_MESSAGE; |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
52 info->handle = handle; |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
53 info->ui_handle = ops->notify_message(type, title, primary, |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
54 secondary, cb, user_data); |
| 5437 | 55 |
| 56 handles = g_list_append(handles, info); | |
| 57 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
58 return info->ui_handle; |
| 5437 | 59 } |
| 60 | |
| 61 return NULL; | |
| 62 } | |
| 63 | |
| 64 void * | |
| 65 gaim_notify_email(void *handle, const char *subject, const char *from, | |
| 66 const char *to, const char *url, GCallback cb, | |
| 67 void *user_data) | |
| 68 { | |
| 69 GaimNotifyUiOps *ops; | |
| 70 | |
| 71 ops = gaim_get_notify_ui_ops(); | |
| 72 | |
| 73 if (ops != NULL && ops->notify_email != NULL) { | |
| 74 GaimNotifyInfo *info; | |
| 75 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
76 info = g_new0(GaimNotifyInfo, 1); |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
77 info->type = GAIM_NOTIFY_EMAIL; |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
78 info->handle = handle; |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
79 info->ui_handle = ops->notify_email(subject, from, to, url, cb, |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
80 user_data); |
| 5437 | 81 |
| 82 handles = g_list_append(handles, info); | |
| 83 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
84 return info->ui_handle; |
| 5437 | 85 } |
| 86 | |
| 87 return NULL; | |
| 88 } | |
| 89 | |
| 90 void * | |
|
5522
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
91 gaim_notify_emails(void *handle, size_t count, gboolean detailed, |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
92 const char **subjects, const char **froms, |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
93 const char **tos, const char **urls, |
| 5437 | 94 GCallback cb, void *user_data) |
| 95 { | |
| 96 GaimNotifyUiOps *ops; | |
| 97 | |
| 98 g_return_val_if_fail(count != 0, NULL); | |
| 99 | |
|
5522
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
100 if (count == 1) { |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
101 return gaim_notify_email(handle, |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
102 (subjects == NULL ? NULL : *subjects), |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
103 (froms == NULL ? NULL : *froms), |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
104 (tos == NULL ? NULL : *tos), |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
105 (urls == NULL ? NULL : *urls), |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
106 cb, user_data); |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
107 } |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
108 |
| 5437 | 109 ops = gaim_get_notify_ui_ops(); |
| 110 | |
| 111 if (ops != NULL && ops->notify_emails != NULL) { | |
| 112 GaimNotifyInfo *info; | |
| 113 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
114 info = g_new0(GaimNotifyInfo, 1); |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
115 info->type = GAIM_NOTIFY_EMAILS; |
|
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
116 info->handle = handle; |
|
5522
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
117 info->ui_handle = ops->notify_emails(count, detailed, subjects, |
|
a3e6a5ef49b5
[gaim-migrate @ 5922]
Christian Hammond <chipx86@chipx86.com>
parents:
5476
diff
changeset
|
118 froms, tos, urls, cb, user_data); |
| 5437 | 119 |
| 120 handles = g_list_append(handles, info); | |
| 121 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
122 return info->ui_handle; |
| 5437 | 123 } |
| 124 | |
| 125 return NULL; | |
| 126 } | |
| 127 | |
| 128 void | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
129 gaim_notify_close(GaimNotifyType type, void *ui_handle) |
| 5437 | 130 { |
| 131 GList *l; | |
| 132 GaimNotifyUiOps *ops; | |
| 133 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
134 g_return_if_fail(ui_handle != NULL); |
| 5437 | 135 |
| 136 ops = gaim_get_notify_ui_ops(); | |
| 137 | |
| 138 for (l = handles; l != NULL; l = l->next) { | |
| 139 GaimNotifyInfo *info = l->data; | |
| 140 | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
141 if (info->ui_handle == ui_handle) { |
| 5437 | 142 handles = g_list_remove(handles, info); |
| 143 | |
| 144 if (ops != NULL && ops->close_notify != NULL) | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
145 ops->close_notify(info->type, ui_handle); |
| 5437 | 146 |
| 147 g_free(info); | |
| 148 | |
| 149 break; | |
| 150 } | |
| 151 } | |
| 152 } | |
| 153 | |
| 154 void | |
| 155 gaim_notify_close_with_handle(void *handle) | |
| 156 { | |
| 157 GList *l, *l_next; | |
| 158 GaimNotifyUiOps *ops; | |
| 159 | |
| 160 g_return_if_fail(handle != NULL); | |
| 161 | |
| 162 ops = gaim_get_notify_ui_ops(); | |
| 163 | |
| 164 for (l = handles; l != NULL; l = l_next) { | |
| 165 GaimNotifyInfo *info = l->data; | |
| 166 | |
| 167 l_next = l->next; | |
| 168 | |
| 169 if (info->handle == handle) { | |
| 170 handles = g_list_remove(handles, info); | |
| 171 | |
| 172 if (ops != NULL && ops->close_notify != NULL) | |
|
5476
9bcd8cd625ae
[gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents:
5437
diff
changeset
|
173 ops->close_notify(info->type, info->ui_handle); |
| 5437 | 174 |
| 175 g_free(info); | |
| 176 } | |
| 177 } | |
| 178 } | |
| 179 | |
| 180 void | |
| 181 gaim_set_notify_ui_ops(GaimNotifyUiOps *ops) | |
| 182 { | |
| 183 notify_ui_ops = ops; | |
| 184 } | |
| 185 | |
| 186 GaimNotifyUiOps * | |
| 187 gaim_get_notify_ui_ops(void) | |
| 188 { | |
| 189 return notify_ui_ops; | |
| 190 } | |
| 191 |
