aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog8
-rw-r--r--camel/providers/imap4/camel-imap4-folder.c91
-rw-r--r--camel/providers/imap4/camel-imap4-folder.h12
-rw-r--r--camel/providers/imap4/camel-imap4-provider.c10
4 files changed, 121 insertions, 0 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index ab9a878995..b0c412f23a 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,11 @@
+2004-11-09 Jeffrey Stedfast <fejj@novell.com>
+
+ * providers/imap4/camel-imap4-provider.c: Updated the properties
+ to include all the same settings as the old imap code.
+
+ * providers/imap4/camel-imap4-folder.c (imap4_getv): Implemented.
+ (imap4_setv): Implemented.
+
2004-11-08 Jeffrey Stedfast <fejj@novell.com>
Fix for bug #69241.
diff --git a/camel/providers/imap4/camel-imap4-folder.c b/camel/providers/imap4/camel-imap4-folder.c
index 1b48ef7234..6c989b6908 100644
--- a/camel/providers/imap4/camel-imap4-folder.c
+++ b/camel/providers/imap4/camel-imap4-folder.c
@@ -55,10 +55,19 @@
#define d(x) x
+static GSList *imap4_folder_props = NULL;
+
+static CamelProperty imap4_prop_list[] = {
+ { CAMEL_IMAP4_FOLDER_SYNC_OFFLINE, "sync_offline", N_("Copy folder content locally for offline operation") },
+};
+
static void camel_imap4_folder_class_init (CamelIMAP4FolderClass *klass);
static void camel_imap4_folder_init (CamelIMAP4Folder *folder, CamelIMAP4FolderClass *klass);
static void camel_imap4_folder_finalize (CamelObject *object);
+static int imap4_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args);
+static int imap4_setv (CamelObject *object, CamelException *ex, CamelArgV *args);
+
static void imap4_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
static void imap4_refresh_info (CamelFolder *folder, CamelException *ex);
static void imap4_expunge (CamelFolder *folder, CamelException *ex);
@@ -98,9 +107,19 @@ static void
camel_imap4_folder_class_init (CamelIMAP4FolderClass *klass)
{
CamelFolderClass *folder_class = (CamelFolderClass *) klass;
+ CamelObjectClass *object_class = (CamelObjectClass *) klass;
+ int i;
parent_class = (CamelFolderClass *) camel_type_get_global_classfuncs (CAMEL_FOLDER_TYPE);
+ for (i = 0; i < G_N_ELEMENTS (imap4_prop_list); i++) {
+ imap4_prop_list[i].description = _(imap4_prop_list[i].description);
+ imap4_folder_props = g_slist_prepend (imap4_folder_props, &imap4_prop_list[i]);
+ }
+
+ object_class->getv = imap4_getv;
+ object_class->setv = imap4_setv;
+
folder_class->sync = imap4_sync;
folder_class->refresh_info = imap4_refresh_info;
folder_class->expunge = imap4_expunge;
@@ -117,6 +136,7 @@ camel_imap4_folder_init (CamelIMAP4Folder *folder, CamelIMAP4FolderClass *klass)
{
((CamelFolder *) folder)->folder_flags |= CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY | CAMEL_FOLDER_HAS_SEARCH_CAPABILITY;
+ folder->sync_offline = FALSE;
folder->utf7_name = NULL;
folder->cachedir = NULL;
folder->search = NULL;
@@ -136,6 +156,77 @@ camel_imap4_folder_finalize (CamelObject *object)
g_free (folder->cachedir);
}
+static int
+imap4_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args)
+{
+ CamelArgGetV props;
+ int i, count = 0;
+ guint32 tag;
+
+ for (i = 0; i <args->argc; i++) {
+ CamelArgGet *arg = &args->argv[i];
+
+ tag = arg->tag;
+
+ switch (tag & CAMEL_ARG_TAG) {
+ case CAMEL_OBJECT_ARG_PERSISTENT_PROPERTIES:
+ case CAMEL_FOLDER_ARG_PROPERTIES:
+ props.argc = 1;
+ props.argv[0] = *arg;
+ ((CamelObjectClass *) parent_class)->getv (object, ex, &props);
+ *arg->ca_ptr = g_slist_concat (*arg->ca_ptr, g_slist_copy (imap4_folder_props));
+ break;
+ case CAMEL_IMAP4_FOLDER_ARG_SYNC_OFFLINE:
+ *arg->ca_int = ((CamelIMAP4Folder *) object)->sync_offline;
+ break;
+ default:
+ count++;
+ continue;
+ }
+
+ arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
+ }
+
+ if (count)
+ return ((CamelObjectClass *) parent_class)->getv (object, ex, args);
+
+ return 0;
+}
+
+static int
+imap4_setv (CamelObject *object, CamelException *ex, CamelArgV *args)
+{
+ CamelIMAP4Folder *folder = (CamelIMAP4Folder *) object;
+ gboolean save = FALSE;
+ guint32 tag;
+ int i;
+
+ for (i = 0; i < args->argc; i++) {
+ CamelArg *arg = &args->argv[i];
+
+ tag = arg->tag;
+
+ switch (tag & CAMEL_ARG_TAG) {
+ case CAMEL_IMAP4_FOLDER_ARG_SYNC_OFFLINE:
+ if (folder->sync_offline != arg->ca_int) {
+ folder->sync_offline = arg->ca_int;
+ save = TRUE;
+ }
+ break;
+ default:
+ continue;
+ }
+
+ arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
+ }
+
+ if (save)
+ camel_object_state_write (object);
+
+ return ((CamelObjectClass *) parent_class)->setv (object, ex, args);
+}
+
+
static char *
imap_get_summary_filename (const char *path)
{
diff --git a/camel/providers/imap4/camel-imap4-folder.h b/camel/providers/imap4/camel-imap4-folder.h
index c4936dfabe..ae0263f31d 100644
--- a/camel/providers/imap4/camel-imap4-folder.h
+++ b/camel/providers/imap4/camel-imap4-folder.h
@@ -40,9 +40,21 @@ extern "C" {
typedef struct _CamelIMAP4Folder CamelIMAP4Folder;
typedef struct _CamelIMAP4FolderClass CamelIMAP4FolderClass;
+enum {
+ CAMEL_IMAP4_FOLDER_ARG_SYNC_OFFLINE = CAMEL_FOLDER_ARG_LAST,
+ CAMEL_IMAP4_FOLDER_ARG_LAST = CAMEL_FOLDER_ARG_LAST + 0x100
+};
+
+
+enum {
+ CAMEL_IMAP4_FOLDER_SYNC_OFFLINE = CAMEL_IMAP4_FOLDER_ARG_SYNC_OFFLINE | CAMEL_ARG_BOO,
+};
+
struct _CamelIMAP4Folder {
CamelFolder parent_object;
+ unsigned int sync_offline:1;
+
CamelFolderSearch *search;
CamelDataCache *cache;
diff --git a/camel/providers/imap4/camel-imap4-provider.c b/camel/providers/imap4/camel-imap4-provider.c
index a1b5c7fd39..fa529e0c2a 100644
--- a/camel/providers/imap4/camel-imap4-provider.c
+++ b/camel/providers/imap4/camel-imap4-provider.c
@@ -46,6 +46,16 @@ CamelProviderConfEntry imap4_conf_entries[] = {
{ CAMEL_PROVIDER_CONF_ENTRY, "namespace", "override_namespace",
N_("Namespace") },
{ CAMEL_PROVIDER_CONF_SECTION_END },
+ { CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter", NULL,
+ N_("Apply filters to new messages in INBOX on this server"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter_junk", NULL,
+ N_("Check new messages for Junk contents"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "filter_junk_inbox", "filter_junk",
+ N_("Only check for Junk messages in the INBOX folder"), "0" },
+ { CAMEL_PROVIDER_CONF_CHECKBOX, "sync_offline", NULL,
+ N_("Automatically synchronize remote mail locally"), "0" },
+ { CAMEL_PROVIDER_CONF_SECTION_END },
{ CAMEL_PROVIDER_CONF_END }
};