Updated the properties to include all the same settings as the old imap

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.

svn path=/trunk/; revision=27880
This commit is contained in:
Jeffrey Stedfast
2004-11-09 21:04:25 +00:00
committed by Jeffrey Stedfast
parent af76723198
commit 34172c778d
4 changed files with 121 additions and 0 deletions

View File

@ -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.

View File

@ -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)
{

View File

@ -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;

View File

@ -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 }
};