imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
{
CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store;
- GPtrArray *changed_uids;
/* Sync twice - make sure deleted flags are written out,
then sync again incase expunge changed anything */
camel_exception_clear(ex);
- changed_uids = camel_folder_summary_get_changed (folder->summary);
-
if (is->server) {
camel_imapx_server_connect (is->server, 1);
- camel_imapx_server_sync_changes (is->server, folder, changed_uids, ex);
-
- if (camel_exception_is_set (ex))
- goto exception;
+ camel_imapx_server_sync_changes (is->server, folder, ex);
}
if (is->server && expunge) {
camel_imapx_server_expunge(is->server, folder, ex);
camel_exception_clear(ex);
}
-
-exception:
- g_ptr_array_foreach (changed_uids, (GFunc) camel_pstring_free, NULL);
- g_ptr_array_free (changed_uids, TRUE);
}
static CamelMimeMessage *
#include <camel/camel-stream-filter.h>
#include <camel/camel-mime-filter-canon.h>
#include <camel/camel-mime-message.h>
+#include "camel/camel-string-utils.h"
#include <camel/camel-net-utils.h>
#include <camel/camel-tcp-stream-ssl.h>
#include <camel/camel-tcp-stream-raw.h>
camel_folder_change_info_clear(job->u.refresh_info.changes);
}
+ /* Sync changes before fetching status, else unread check later would fail. need to think about better ways for this */
+ camel_imapx_server_sync_changes (is, folder, ex);
total = camel_folder_summary_count (folder->summary);
+
/* Check if a rescan is needed */
if (is->exists == total) {
CamelIMAPXCommand *ic;
}
void
-camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrArray *uids, CamelException *ex)
+camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex)
{
guint i, on_orset, off_orset;
+ GPtrArray *uids;
GArray *on_user = NULL, *off_user = NULL;
CamelIMAPXMessageInfo *info;
CamelIMAPXJob *job;
one for each flag being turned off, including each
info being turned off, and one for each flag being turned on.
*/
+ uids = camel_folder_summary_get_changed (folder->summary);
+
+ if (uids->len == 0) {
+ g_ptr_array_free (uids, TRUE);
+ return;
+ }
off_orset = on_orset = 0;
for (i=0; i < uids->len; i++) {
imapx_sync_free_user(on_user);
imapx_sync_free_user(off_user);
+
+ g_ptr_array_foreach (uids, (GFunc) camel_pstring_free, NULL);
+ g_ptr_array_free (uids, TRUE);
}
/* expunge-uids? */
GPtrArray *camel_imapx_server_list(CamelIMAPXServer *is, const gchar *top, guint32 flags, CamelException *ex);
void camel_imapx_server_refresh_info(CamelIMAPXServer *is, CamelFolder *folder, struct _CamelException *ex);
-void camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrArray *infos, CamelException *ex);
+void camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
void camel_imapx_server_expunge(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
CamelStream *camel_imapx_server_get_message(CamelIMAPXServer *is, CamelFolder *folder, const gchar *uid, struct _CamelException *ex);