annotate libgaim/plugins/offlinemsg.c @ 15209:ffec45ff82d0

[gaim-migrate @ 17999] Setting this namespaced attribute will tell the Google Talk servers that we can accept back a JID from the bind result that isn't necessarily related to the one we requested. This allows googlemail.com users to enter gmail.com as their server and still authenticate properly. Technically, we shouldn't need an attribute like this (this is all valid XMPP), but lesser clients might choke on this. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Thu, 14 Dec 2006 22:25:18 +0000
parents 630b794db0c8
children 2db21e0292b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15168
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Offline Message Emulation - Save messages sent to an offline user as pounce
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) 2004
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * modify it under the terms of the GNU General Public License as
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * published by the Free Software Foundation; either version 2 of the
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 * License, or (at your option) any later version.
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 *
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful, but
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 * General Public License for more details.
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 *
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * along with this program; if not, write to the Free Software
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 * 02111-1307, USA.
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 #include "internal.h"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22 #define PLUGIN_ID "core-plugin_pack-offlinemsg"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #define PLUGIN_NAME "Offline Message Emulation"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24 #define PLUGIN_STATIC_NAME "offlinemsg"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #define PLUGIN_SUMMARY "Save messages sent to an offline user as pounce."
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 #define PLUGIN_DESCRIPTION "Save messages sent to an offline user as pounce."
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #define PLUGIN_AUTHOR "Sadrul H Chowdhury <sadrul@users.sourceforge.net>"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 /* Gaim headers */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 #include <version.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 #include <blist.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 #include <conversation.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 #include <core.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 #include <debug.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 #include <pounce.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 #include <request.h>
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 #define PREF_PREFIX "/plugins/core/" PLUGIN_ID
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 #define PREF_ALWAYS PREF_PREFIX "/always"
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 typedef struct _OfflineMsg OfflineMsg;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 typedef enum
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 OFFLINE_MSG_NONE,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 OFFLINE_MSG_YES,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 OFFLINE_MSG_NO
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 } OfflineMessageSetting;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 struct _OfflineMsg
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 GaimAccount *account;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 GaimConversation *conv;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 char *who;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 char *message;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 };
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 static void
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 discard_data(OfflineMsg *offline)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 g_free(offline->who);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 g_free(offline->message);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 g_free(offline);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 static void
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 cancel_poune(OfflineMsg *offline)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 gaim_conversation_set_data(offline->conv, "plugin_pack:offlinemsg",
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 GINT_TO_POINTER(OFFLINE_MSG_NO));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 gaim_conv_im_send_with_flags(GAIM_CONV_IM(offline->conv), offline->message, 0);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 discard_data(offline);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 static void
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 record_pounce(OfflineMsg *offline)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 GaimPounce *pounce;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 GaimPounceEvent event;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 GaimPounceOption option;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 GaimConversation *conv;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 event = GAIM_POUNCE_SIGNON;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 option = GAIM_POUNCE_OPTION_NONE;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 pounce = gaim_pounce_new(gaim_core_get_ui(), offline->account, offline->who,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 event, option);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 gaim_pounce_action_set_enabled(pounce, "send-message", TRUE);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 gaim_pounce_action_set_attribute(pounce, "send-message", "message", offline->message);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 conv = offline->conv;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 if (!gaim_conversation_get_data(conv, "plugin_pack:offlinemsg"))
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 gaim_conversation_write(conv, NULL, _("The rest of the messages will be saved "
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 "as pounce. You can edit/delete the pounce from the `Buddy "
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 "Pounce' dialog."),
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 GAIM_MESSAGE_SYSTEM, time(NULL));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 gaim_conversation_set_data(conv, "plugin_pack:offlinemsg",
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 GINT_TO_POINTER(OFFLINE_MSG_YES));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 gaim_conv_im_write(GAIM_CONV_IM(conv), offline->who, offline->message,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 GAIM_MESSAGE_SEND, time(NULL));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 discard_data(offline);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 static void
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 sending_msg_cb(GaimAccount *account, const char *who, char **message, gpointer handle)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 GaimBuddy *buddy;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 OfflineMsg *offline;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 GaimConversation *conv;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 OfflineMessageSetting setting;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 buddy = gaim_find_buddy(account, who);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 if (!buddy)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 return;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 if (gaim_presence_is_online(gaim_buddy_get_presence(buddy)))
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 return;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 if (gaim_account_supports_offline_message(account, buddy))
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 gaim_debug_info("offlinemsg", "Account \"%s\" supports offline message.",
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 gaim_account_get_username(account));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 return;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 who, account);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 if (!conv)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 return;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 setting = GPOINTER_TO_INT(gaim_conversation_get_data(conv, "plugin_pack:offlinemsg"));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 if (setting == OFFLINE_MSG_NO)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 return;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 offline = g_new0(OfflineMsg, 1);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 offline->conv = conv;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 offline->account = account;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 offline->who = g_strdup(who);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 offline->message = *message;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 *message = NULL;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 if (gaim_prefs_get_bool(PREF_ALWAYS) || setting == OFFLINE_MSG_YES)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 record_pounce(offline);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 else if (setting == OFFLINE_MSG_NONE)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 char *ask;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 ask = g_strdup_printf(_("\"%s\" is currently offline. Do you want to save the "
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 "rest of the messages in a pounce and automatically send them "
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 "when \"%s\" logs back in?"), who, who);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 gaim_request_action(handle, _("Offline Message"), ask,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 _("You can edit/delete the pounce from the `Buddy Pounces' dialog"),
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 1, offline, 2,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 _("Yes"), record_pounce,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 _("No"), cancel_poune);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 g_free(ask);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 static gboolean
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 plugin_load(GaimPlugin *plugin)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 gaim_signal_connect(gaim_conversations_get_handle(), "sending-im-msg",
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 plugin, GAIM_CALLBACK(sending_msg_cb), plugin);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 return TRUE;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 static gboolean
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 plugin_unload(GaimPlugin *plugin)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 return TRUE;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 static GaimPluginPrefFrame *
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 get_plugin_pref_frame(GaimPlugin *plugin)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 GaimPluginPrefFrame *frame;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 GaimPluginPref *pref;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 frame = gaim_plugin_pref_frame_new();
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 pref = gaim_plugin_pref_new_with_label(_("Save offline messages in pounce"));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 gaim_plugin_pref_frame_add(frame, pref);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 pref = gaim_plugin_pref_new_with_name_and_label(PREF_ALWAYS,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 _("Do not ask. Always save in pounce."));
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 gaim_plugin_pref_frame_add(frame, pref);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 return frame;
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 static GaimPluginUiInfo prefs_info = {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 get_plugin_pref_frame,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 0,
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 NULL
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 };
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 static GaimPluginInfo info =
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 GAIM_PLUGIN_MAGIC, /* Magic */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 GAIM_MAJOR_VERSION, /* Gaim Major Version */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 GAIM_MINOR_VERSION, /* Gaim Minor Version */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 GAIM_PLUGIN_STANDARD, /* plugin type */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 NULL, /* ui requirement */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 0, /* flags */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 NULL, /* dependencies */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 GAIM_PRIORITY_DEFAULT, /* priority */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 PLUGIN_ID, /* plugin id */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 N_(PLUGIN_NAME), /* name */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 VERSION, /* version */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 N_(PLUGIN_SUMMARY), /* summary */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 N_(PLUGIN_DESCRIPTION), /* description */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 PLUGIN_AUTHOR, /* author */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 GAIM_WEBSITE, /* website */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 plugin_load, /* load */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 plugin_unload, /* unload */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 NULL, /* destroy */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 NULL, /* ui_info */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 NULL, /* extra_info */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 &prefs_info, /* prefs_info */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 NULL /* actions */
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 };
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 static void
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 init_plugin(GaimPlugin *plugin)
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 {
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 gaim_prefs_add_none(PREF_PREFIX);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 gaim_prefs_add_bool(PREF_ALWAYS, FALSE);
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 }
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238
630b794db0c8 [gaim-migrate @ 17954]
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 GAIM_INIT_PLUGIN(PLUGIN_STATIC_NAME, init_plugin, info)