/*
* 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.
*
* 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 General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*/
#include <config.h>
#include <glib/gi18n-lib.h>
#include <camel/camel.h>
#include <libebackend/libebackend.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);
}