+
+ if (missing_uids) {
+ unlock_session(IMAP_SESSION(REMOTE_FOLDER(folder)->session));
+ folder_item_scan_full(dest, FALSE);
+ lock_session(IMAP_SESSION(REMOTE_FOLDER(folder)->session));
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ guint32 new_uid = 0;
+ fileinfo = (MsgFileInfo *)cur->data;
+
+ if (!fileinfo->file)
+ continue;
+
+ new_uid = imap_get_msg_from_local(folder, dest, fileinfo->file);
+ debug_print("new uid %d from scanning\n", new_uid);
+ if (new_uid > 0) {
+ gchar *cache_path = folder_item_get_path(dest);
+ if (!is_dir_exist(cache_path))
+ make_dir_hier(cache_path);
+ if (is_dir_exist(cache_path)) {
+ gchar *cache_file = g_strconcat(
+ cache_path, G_DIR_SEPARATOR_S,
+ itos(new_uid), NULL);
+ copy_file(fileinfo->file, cache_file, TRUE);
+ debug_print("copied to cache: %s\n", cache_file);
+ g_free(cache_file);
+ }
+ g_free(cache_path);
+ g_relation_delete(relation, fileinfo->msginfo != NULL ?
+ (gpointer) fileinfo->msginfo : (gpointer) fileinfo,
+ 0);
+
+ g_relation_insert(relation, fileinfo->msginfo != NULL ?
+ (gpointer) fileinfo->msginfo : (gpointer) fileinfo,
+ GINT_TO_POINTER(new_uid));
+ }
+ if (last_uid < new_uid) {
+ last_uid = new_uid;
+ }
+ }
+ }