91 lines
3.8 KiB
Diff
91 lines
3.8 KiB
Diff
Index: camel/providers/imap/camel-imap-store.c
|
|
===================================================================
|
|
--- camel/providers/imap/camel-imap-store.c (revision 9761)
|
|
+++ camel/providers/imap/camel-imap-store.c (working copy)
|
|
@@ -2385,7 +2385,7 @@ parse_list_response_as_folder_info (Came
|
|
if (si == NULL)
|
|
return NULL;
|
|
|
|
- newflags = (si->info.flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) | (flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED);
|
|
+ newflags = (si->info.flags & (CAMEL_STORE_INFO_FOLDER_SUBSCRIBED | CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | (flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED);
|
|
if (si->info.flags != newflags) {
|
|
si->info.flags = newflags;
|
|
camel_store_summary_touch((CamelStoreSummary *)imap_store->summary);
|
|
@@ -3074,12 +3074,19 @@ imap_can_refresh_folder (CamelStore *sto
|
|
(camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL) ||
|
|
(camel_url_get_param (((CamelService *)store)->url, "check_lsub") != NULL && (info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
|
|
|
|
- if (!res && !camel_exception_is_set (ex)) {
|
|
- CamelFolder *folder;
|
|
+ if (!res && !camel_exception_is_set (ex) && CAMEL_IS_IMAP_STORE (store)) {
|
|
+ CamelStoreInfo *si;
|
|
+ CamelStoreSummary *sm = CAMEL_STORE_SUMMARY (((CamelImapStore *)(store))->summary);
|
|
|
|
- folder = camel_store_get_folder (store, info->full_name, 0, ex);
|
|
- if (folder && CAMEL_IS_IMAP_FOLDER (folder))
|
|
- res = CAMEL_IMAP_FOLDER (folder)->check_folder;
|
|
+ if (!sm)
|
|
+ return FALSE;
|
|
+
|
|
+ si = camel_store_summary_path (sm, info->full_name);
|
|
+ if (si) {
|
|
+ res = (si->flags & CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW) != 0 ? TRUE : FALSE;
|
|
+
|
|
+ camel_store_summary_info_free (sm, si);
|
|
+ }
|
|
}
|
|
|
|
return res;
|
|
Index: camel/providers/imap/camel-imap-folder.c
|
|
===================================================================
|
|
--- camel/providers/imap/camel-imap-folder.c (revision 9761)
|
|
+++ camel/providers/imap/camel-imap-folder.c (working copy)
|
|
@@ -473,6 +473,7 @@ imap_getv(CamelObject *object, CamelExce
|
|
break; }
|
|
/* imap args */
|
|
case CAMEL_IMAP_FOLDER_ARG_CHECK_FOLDER:
|
|
+ /* The internal value has precedence before the one stored in the summary. */
|
|
*arg->ca_int = ((CamelImapFolder *)object)->check_folder;
|
|
break;
|
|
/* CamelObject args */
|
|
@@ -514,8 +515,27 @@ imap_setv (CamelObject *object, CamelExc
|
|
switch (tag & CAMEL_ARG_TAG) {
|
|
case CAMEL_IMAP_FOLDER_ARG_CHECK_FOLDER:
|
|
if (((CamelImapFolder *)object)->check_folder != arg->ca_int) {
|
|
+ CamelFolder *folder = (CamelFolder *)object;
|
|
+
|
|
((CamelImapFolder *)object)->check_folder = arg->ca_int;
|
|
save = 1;
|
|
+
|
|
+ /* store both to the summary and to folder cmeta, to have this value restored correctly next time folder is fully loaded */
|
|
+ if (folder->parent_store && CAMEL_IS_IMAP_STORE (folder->parent_store)) {
|
|
+ CamelStoreInfo *si;
|
|
+ CamelStoreSummary *sm = CAMEL_STORE_SUMMARY (((CamelImapStore *)(folder->parent_store))->summary);
|
|
+
|
|
+ si = camel_store_summary_path (sm, folder->full_name);
|
|
+ if (si) {
|
|
+ if ((si->flags & CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW) != 0 ? 1 : 0 != (arg->ca_int) ? 1 : 0) {
|
|
+ si->flags = (si->flags & (~CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | ((arg->ca_int) ? CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW : 0);
|
|
+ camel_store_summary_touch (sm);
|
|
+ camel_store_summary_save (sm);
|
|
+ }
|
|
+
|
|
+ camel_store_summary_info_free (sm, si);
|
|
+ }
|
|
+ }
|
|
}
|
|
break;
|
|
default:
|
|
Index: camel/camel-store-summary.h
|
|
===================================================================
|
|
--- camel/camel-store-summary.h (revision 9761)
|
|
+++ camel/camel-store-summary.h (working copy)
|
|
@@ -57,6 +57,7 @@ typedef enum _CamelStoreInfoFlags {
|
|
|
|
/* not in camle-store.h yet */
|
|
CAMEL_STORE_INFO_FOLDER_READONLY = 1<<13,
|
|
+ CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW = 1<<14,
|
|
|
|
CAMEL_STORE_INFO_FOLDER_FLAGGED = 1<<31
|
|
} CamelStoreInfoFlags;
|