aboutsummaryrefslogtreecommitdiffstats
path: root/modules/mail-config/e-mail-config-local-accounts.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/mail-config/e-mail-config-local-accounts.c')
-rw-r--r--modules/mail-config/e-mail-config-local-accounts.c385
1 files changed, 385 insertions, 0 deletions
diff --git a/modules/mail-config/e-mail-config-local-accounts.c b/modules/mail-config/e-mail-config-local-accounts.c
new file mode 100644
index 0000000000..c796065919
--- /dev/null
+++ b/modules/mail-config/e-mail-config-local-accounts.c
@@ -0,0 +1,385 @@
+/*
+ * e-mail-config-local-accounts.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include <config.h>
+#include <glib/gi18n-lib.h>
+
+#include <camel/camel.h>
+#include <libebackend/e-extension.h>
+
+#include <mail/e-mail-config-service-page.h>
+
+/* Standard GObject macros */
+#define E_TYPE_MAIL_CONFIG_LOCAL_BACKEND \
+ (e_mail_config_local_backend_get_type ())
+#define E_MAIL_CONFIG_LOCAL_BACKEND(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), E_TYPE_MAIL_CONFIG_LOCAL_BACKEND, EMailConfigLocalBackend))
+#define E_MAIL_CONFIG_LOCAL_BACKEND_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), E_TYPE_MAIL_CONFIG_LOCAL_BACKEND, EMailConfigLocalBackendClass))
+#define E_IS_MAIL_CONFIG_LOCAL_BACKEND(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), E_TYPE_MAIL_CONFIG_LOCAL_BACKEND))
+#define E_IS_MAIL_CONFIG_LOCAL_BACKEND_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), E_TYPE_MAIL_CONFIG_LOCAL_BACKEND))
+#define E_MAIL_CONFIG_LOCAL_BACKEND_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), E_TYPE_MAIL_CONFIG_LOCAL_BACKEND, EMailConfigLocalBackendClass))
+
+typedef struct _EMailConfigLocalBackend EMailConfigLocalBackend;
+typedef struct _EMailConfigLocalBackendClass EMailConfigLocalBackendClass;
+
+typedef EMailConfigLocalBackend EMailConfigMhBackend;
+typedef EMailConfigLocalBackendClass EMailConfigMhBackendClass;
+
+typedef EMailConfigLocalBackend EMailConfigMboxBackend;
+typedef EMailConfigLocalBackendClass EMailConfigMboxBackendClass;
+
+typedef EMailConfigLocalBackend EMailConfigMaildirBackend;
+typedef EMailConfigLocalBackendClass EMailConfigMaildirBackendClass;
+
+typedef EMailConfigLocalBackend EMailConfigSpoolDirBackend;
+typedef EMailConfigLocalBackendClass EMailConfigSpoolDirBackendClass;
+
+typedef EMailConfigLocalBackend EMailConfigSpoolFileBackend;
+typedef EMailConfigLocalBackendClass EMailConfigSpoolFileBackendClass;
+
+/* XXX For lack of a better place for this... */
+typedef EMailConfigServiceBackend EMailConfigNoneBackend;
+typedef EMailConfigServiceBackendClass EMailConfigNoneBackendClass;
+
+struct _EMailConfigLocalBackend {
+ EMailConfigServiceBackend parent;
+};
+
+struct _EMailConfigLocalBackendClass {
+ EMailConfigServiceBackendClass parent_class;
+
+ const gchar *file_chooser_label;
+ const gchar *file_chooser_title;
+ GtkFileChooserAction file_chooser_action;
+};
+
+/* Forward Declarations */
+void e_mail_config_local_accounts_register_types
+ (GTypeModule *type_module);
+GType e_mail_config_local_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_mh_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_mbox_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_maildir_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_spool_dir_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_spool_file_backend_get_type
+ (void) G_GNUC_CONST;
+GType e_mail_config_none_backend_get_type
+ (void) G_GNUC_CONST;
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+ EMailConfigLocalBackend,
+ e_mail_config_local_backend,
+ E_TYPE_MAIL_CONFIG_SERVICE_BACKEND,
+ G_TYPE_FLAG_ABSTRACT,
+ /* no custom code */)
+
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigMhBackend,
+ e_mail_config_mh_backend,
+ E_TYPE_MAIL_CONFIG_LOCAL_BACKEND)
+
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigMboxBackend,
+ e_mail_config_mbox_backend,
+ E_TYPE_MAIL_CONFIG_LOCAL_BACKEND)
+
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigMaildirBackend,
+ e_mail_config_maildir_backend,
+ E_TYPE_MAIL_CONFIG_LOCAL_BACKEND)
+
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigSpoolDirBackend,
+ e_mail_config_spool_dir_backend,
+ E_TYPE_MAIL_CONFIG_LOCAL_BACKEND)
+
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigSpoolFileBackend,
+ e_mail_config_spool_file_backend,
+ E_TYPE_MAIL_CONFIG_LOCAL_BACKEND)
+
+/* XXX For lack of a better place for this... */
+G_DEFINE_DYNAMIC_TYPE (
+ EMailConfigNoneBackend,
+ e_mail_config_none_backend,
+ E_TYPE_MAIL_CONFIG_SERVICE_BACKEND)
+
+static void
+mail_config_local_backend_file_set_cb (GtkFileChooserButton *file_chooser_button,
+ CamelLocalSettings *local_settings)
+{
+ GtkFileChooser *file_chooser;
+ gchar *path;
+
+ file_chooser = GTK_FILE_CHOOSER (file_chooser_button);
+
+ path = gtk_file_chooser_get_filename (file_chooser);
+ camel_local_settings_set_path (local_settings, path);
+ g_free (path);
+}
+
+static void
+mail_config_local_backend_insert_widgets (EMailConfigServiceBackend *backend,
+ GtkBox *parent)
+{
+ CamelSettings *settings;
+ EMailConfigLocalBackendClass *class;
+ GtkLabel *label;
+ GtkWidget *widget;
+ GtkWidget *container;
+ const gchar *path;
+
+ class = E_MAIL_CONFIG_LOCAL_BACKEND_GET_CLASS (backend);
+ settings = e_mail_config_service_backend_get_settings (backend);
+
+ widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_box_pack_start (parent, widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+
+ container = widget;
+
+ widget = gtk_label_new_with_mnemonic (class->file_chooser_label);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+
+ label = GTK_LABEL (widget);
+
+ widget = gtk_file_chooser_button_new (
+ class->file_chooser_title,
+ class->file_chooser_action);
+ gtk_label_set_mnemonic_widget (label, widget);
+ gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
+ gtk_widget_show (widget);
+
+ g_signal_connect (
+ widget, "file-set",
+ G_CALLBACK (mail_config_local_backend_file_set_cb),
+ CAMEL_LOCAL_SETTINGS (settings));
+
+ path = camel_local_settings_get_path (CAMEL_LOCAL_SETTINGS (settings));
+ if (path != NULL)
+ gtk_file_chooser_set_filename (
+ GTK_FILE_CHOOSER (widget), path);
+}
+
+static gboolean
+mail_config_local_backend_check_complete (EMailConfigServiceBackend *backend)
+{
+ CamelSettings *settings;
+ CamelLocalSettings *local_settings;
+ const gchar *path;
+
+ settings = e_mail_config_service_backend_get_settings (backend);
+
+ local_settings = CAMEL_LOCAL_SETTINGS (settings);
+ path = camel_local_settings_get_path (local_settings);
+
+ return (path != NULL && *path != '\0');
+}
+
+static void
+mail_config_local_backend_commit_changes (EMailConfigServiceBackend *backend)
+{
+ /* CamelLocalSettings "path" property is already up-to-date,
+ * and it's bound to the appropriate ESourceExtension property,
+ * so nothing to do here. */
+}
+
+static void
+e_mail_config_local_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->insert_widgets = mail_config_local_backend_insert_widgets;
+ backend_class->check_complete = mail_config_local_backend_check_complete;
+ backend_class->commit_changes = mail_config_local_backend_commit_changes;
+}
+
+static void
+e_mail_config_local_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_local_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_mh_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->backend_name = "mh";
+
+ class->file_chooser_label = _("Mail _Directory:");
+ class->file_chooser_title = _("Choose a MH mail directory");
+ class->file_chooser_action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
+}
+
+static void
+e_mail_config_mh_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_mh_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_mbox_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->backend_name = "mbox";
+
+ class->file_chooser_label = _("Local Delivery _File:");
+ class->file_chooser_title = _("Choose a local delivery file");
+ class->file_chooser_action = GTK_FILE_CHOOSER_ACTION_OPEN;
+}
+
+static void
+e_mail_config_mbox_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_mbox_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_maildir_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->backend_name = "maildir";
+
+ class->file_chooser_label = _("Mail _Directory:");
+ class->file_chooser_title = _("Choose a Maildir mail directory");
+ class->file_chooser_action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
+}
+
+static void
+e_mail_config_maildir_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_maildir_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_spool_dir_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->backend_name = "spool";
+
+ class->file_chooser_label = _("Spool _File:");
+ class->file_chooser_title = _("Choose a mbox spool file");
+ class->file_chooser_action = GTK_FILE_CHOOSER_ACTION_OPEN;
+}
+
+static void
+e_mail_config_spool_dir_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_spool_dir_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_spool_file_backend_class_init (EMailConfigLocalBackendClass *class)
+{
+ EMailConfigServiceBackendClass *backend_class;
+
+ backend_class = E_MAIL_CONFIG_SERVICE_BACKEND_CLASS (class);
+ backend_class->backend_name = "spooldir";
+
+ class->file_chooser_label = _("Spool _Directory:");
+ class->file_chooser_title = _("Choose a mbox spool directory");
+ class->file_chooser_action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
+}
+
+static void
+e_mail_config_spool_file_backend_class_finalize (EMailConfigLocalBackendClass *class)
+{
+}
+
+static void
+e_mail_config_spool_file_backend_init (EMailConfigLocalBackend *backend)
+{
+}
+
+static void
+e_mail_config_none_backend_class_init (EMailConfigServiceBackendClass *class)
+{
+ class->backend_name = "none";
+}
+
+static void
+e_mail_config_none_backend_class_finalize (EMailConfigServiceBackendClass *class)
+{
+}
+
+static void
+e_mail_config_none_backend_init (EMailConfigServiceBackend *backend)
+{
+}
+
+void
+e_mail_config_local_accounts_register_types (GTypeModule *type_module)
+{
+ /* Abstract base type */
+ e_mail_config_local_backend_register_type (type_module);
+
+ /* Concrete sub-types */
+ e_mail_config_mh_backend_register_type (type_module);
+ e_mail_config_mbox_backend_register_type (type_module);
+ e_mail_config_maildir_backend_register_type (type_module);
+ e_mail_config_spool_dir_backend_register_type (type_module);
+ e_mail_config_spool_file_backend_register_type (type_module);
+
+ /* XXX For lack of a better place for this... */
+ e_mail_config_none_backend_register_type (type_module);
+}
+