Add ManageSieve plugin
[claws.git] / src / plugins / managesieve / sieve_plugin.c
1 /*
2  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2015 the Claws Mail Team
4  * Copyright (C) 2014-2015 Charles Lehner
5  *
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 3 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, see <http://www.gnu.org/licenses/>.
18  * 
19  */
20
21 #include <glib.h>
22 #include <glib/gi18n.h>
23
24 #include "version.h"
25 #include "claws.h"
26 #include "plugin.h"
27 #include "utils.h"
28 #include "hooks.h"
29 #include "menu.h"
30 #include "mainwindow.h"
31 #include "log.h"
32 #include "sieve_prefs.h"
33 #include "sieve_manager.h"
34
35 #define PLUGIN_NAME (_("ManageSieve"))
36
37 static gint main_menu_id = 0;
38
39 static void manage_cb(GtkAction *action, gpointer data) {
40         sieve_manager_show();
41 }
42
43 static GtkActionEntry sieve_main_menu[] = {{
44         "Tools/ManageSieveFilters",
45         NULL, N_("Manage Sieve Filters..."), NULL, NULL, G_CALLBACK(manage_cb)
46 }};
47
48 /**
49  * Initialize plugin.
50  *
51  * @param error  For storing the returned error message.
52  *
53  * @return 0 if initialization succeeds, -1 on failure.
54  */
55 gint plugin_init(gchar **error)
56 {
57         MainWindow *mainwin = mainwindow_get_mainwindow();
58
59         if (!check_plugin_version(MAKE_NUMERIC_VERSION(2,9,2,72),
60                                 VERSION_NUMERIC, PLUGIN_NAME, error))
61                 return -1;
62
63         gtk_action_group_add_actions(mainwin->action_group, sieve_main_menu, 1,
64                         (gpointer)mainwin);
65         MENUITEM_ADDUI_ID_MANAGER(mainwin->ui_manager,
66                         "/Menu/Tools", "ManageSieveFilters", "Tools/ManageSieveFilters",
67                         GTK_UI_MANAGER_MENUITEM, main_menu_id)
68
69         sieve_prefs_init();
70
71         debug_print("ManageSieve plugin loaded\n");
72
73         return 0;
74 }
75
76 /**
77  * Destructor for the plugin.
78  * Unregister callback functions and free stuff.
79  *
80  * @return Always TRUE.
81  */
82 gboolean plugin_done(void)
83 {
84         MainWindow *mainwin = mainwindow_get_mainwindow();
85         if (mainwin == NULL)
86                 return FALSE;
87
88         MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/ManageSieveFilters", main_menu_id);
89         main_menu_id = 0;
90
91         sieve_prefs_done();
92         sieve_sessions_close();
93
94         debug_print("ManageSieve plugin unloaded\n");
95         return TRUE;
96 }
97
98 const gchar *plugin_name(void)
99 {
100         return PLUGIN_NAME;
101 }
102
103 /**
104  * Get the description of the plugin.
105  *
106  * @return The plugin's description, maybe translated.
107  */
108 const gchar *plugin_desc(void)
109 {
110         return _("Manage sieve filters on a server using the ManageSieve protocol.");
111 }
112
113 /**
114  * Get the kind of plugin.
115  *
116  * @return The "GTK2" constant.
117  */
118 const gchar *plugin_type(void)
119 {
120         return "GTK2";
121 }
122 /**
123  * Get the license acronym the plugin is released under.
124  *
125  * @return The "GPL3+" constant.
126  */
127 const gchar *plugin_licence(void)
128 {
129         return "GPL3+";
130 }
131
132 /**
133  * Get the version of the plugin.
134  *
135  * @return The current version string.
136  */
137 const gchar *plugin_version(void)
138 {
139         return VERSION;
140 }
141
142 /**
143  * Get the features implemented by the plugin.
144  *
145  * @return A constant PluginFeature structure with the features.
146  */
147 struct PluginFeature *plugin_provides(void)
148 {
149         static struct PluginFeature features[] =
150                 { {PLUGIN_UTILITY, N_("ManageSieve")},
151                   {PLUGIN_NOTHING, NULL}};
152
153         return features;
154 }