1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Authors: Michael Zucchi <notzed@ximian.com>
5 * Copyright 2004 Ximian, Inc. (www.ximian.com)
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
33 #include "libedataserver/e-msgport.h"
34 #include <e-util/e-icon-factory.h>
36 #include <camel/camel-store.h>
37 #include <camel/camel-folder.h>
38 #include <camel/camel-mime-message.h>
39 #include <camel/camel-string-utils.h>
40 #include <camel/camel-mime-utils.h>
41 #include <camel/camel-mime-part.h>
42 #include <camel/camel-url.h>
44 #include <camel/camel-vee-folder.h>
45 #include <camel/camel-vtrash-folder.h>
47 static GObjectClass
*eme_parent
;
48 static EMEvent
*em_event
;
53 /*EMEvent *eme = (EMEvent *)o; */
57 eme_finalise(GObject
*o
)
59 ((GObjectClass
*)eme_parent
)->finalize(o
);
63 eme_target_free(EEvent
*ep
, EEventTarget
*t
)
66 case EM_EVENT_TARGET_FOLDER
: {
67 EMEventTargetFolder
*s
= (EMEventTargetFolder
*)t
;
71 case EM_EVENT_TARGET_MESSAGE
: {
72 EMEventTargetMessage
*s
= (EMEventTargetMessage
*)t
;
75 camel_object_unref(s
->folder
);
77 camel_object_unref(s
->message
);
82 ((EEventClass
*)eme_parent
)->target_free(ep
, t
);
86 eme_class_init(GObjectClass
*klass
)
88 klass
->finalize
= eme_finalise
;
89 ((EEventClass
*)klass
)->target_free
= eme_target_free
;
93 em_event_get_type(void)
95 static GType type
= 0;
98 static const GTypeInfo info
= {
101 (GClassInitFunc
)eme_class_init
,
104 (GInstanceInitFunc
)eme_init
106 eme_parent
= g_type_class_ref(e_event_get_type());
107 type
= g_type_register_static(e_event_get_type(), "EMEvent", &info
, 0);
117 * Get the singular instance of the mail event handler.
121 EMEvent
*em_event_peek(void)
123 if (em_event
== NULL
) {
124 em_event
= g_object_new(em_event_get_type(), 0);
125 e_event_construct(&em_event
->popup
, "org.gnome.evolution.mail.events");
131 EMEventTargetFolder
*
132 em_event_target_new_folder (EMEvent
*eme
, const char *uri
, guint32 flags
)
134 EMEventTargetFolder
*t
= e_event_target_new(&eme
->popup
, EM_EVENT_TARGET_FOLDER
, sizeof(*t
));
136 t
->uri
= g_strdup(uri
);
137 t
->target
.mask
= ~flags
;
142 EMEventTargetMessage
*
143 em_event_target_new_message(EMEvent
*eme
, CamelFolder
*folder
, CamelMimeMessage
*message
, const char *uid
, guint32 flags
)
145 EMEventTargetMessage
*t
= e_event_target_new(&eme
->popup
, EM_EVENT_TARGET_MESSAGE
, sizeof(*t
));
147 t
->uid
= g_strdup (uid
);
150 camel_object_ref(folder
);
151 t
->message
= message
;
153 camel_object_ref(message
);
154 t
->target
.mask
= ~flags
;
159 /* ********************************************************************** */
161 static void *emeh_parent_class
;
162 #define emeh ((EMEventHook *)eph)
164 static const EEventHookTargetMask emeh_folder_masks
[] = {
165 { "newmail", EM_EVENT_FOLDER_NEWMAIL
},
170 static const EEventHookTargetMask emeh_message_masks
[] = {
171 { "replyall", EM_EVENT_MESSAGE_REPLY_ALL
},
175 static const EEventHookTargetMap emeh_targets
[] = {
176 { "folder", EM_EVENT_TARGET_FOLDER
, emeh_folder_masks
},
177 { "message", EM_EVENT_TARGET_MESSAGE
, emeh_message_masks
},
182 emeh_finalise(GObject
*o
)
184 /*EPluginHook *eph = (EPluginHook *)o;*/
186 ((GObjectClass
*)emeh_parent_class
)->finalize(o
);
190 emeh_class_init(EPluginHookClass
*klass
)
194 ((GObjectClass
*)klass
)->finalize
= emeh_finalise
;
195 ((EPluginHookClass
*)klass
)->id
= "org.gnome.evolution.mail.events:1.0";
197 for (i
=0;emeh_targets
[i
].type
;i
++)
198 e_event_hook_class_add_target_map((EEventHookClass
*)klass
, &emeh_targets
[i
]);
200 ((EEventHookClass
*)klass
)->event
= (EEvent
*)em_event_peek();
204 em_event_hook_get_type(void)
206 static GType type
= 0;
209 static const GTypeInfo info
= {
210 sizeof(EMEventHookClass
), NULL
, NULL
, (GClassInitFunc
) emeh_class_init
, NULL
, NULL
,
211 sizeof(EMEventHook
), 0, (GInstanceInitFunc
) NULL
,
214 emeh_parent_class
= g_type_class_ref(e_event_hook_get_type());
215 type
= g_type_register_static(e_event_hook_get_type(), "EMEventHook", &info
, 0);