| | 114 | } |
|---|
| | 115 | |
|---|
| | 116 | |
|---|
| | 117 | static void |
|---|
| | 118 | maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex) |
|---|
| | 119 | { |
|---|
| | 120 | if (delete_originals && CAMEL_IS_MAILDIR_FOLDER (source) && CAMEL_IS_MAILDIR_FOLDER (dest)) { |
|---|
| | 121 | gint i; |
|---|
| | 122 | CamelLocalFolder *lf = (CamelLocalFolder *) source; |
|---|
| | 123 | CamelLocalFolder *df = (CamelLocalFolder *) dest; |
|---|
| | 124 | |
|---|
| | 125 | camel_operation_start(NULL, _("Moving messages")); |
|---|
| | 126 | |
|---|
| | 127 | camel_folder_freeze(dest); |
|---|
| | 128 | camel_folder_freeze(source); |
|---|
| | 129 | |
|---|
| | 130 | for (i = 0; i < uids->len; i++) { |
|---|
| | 131 | char *uid = (char *) uids->pdata[i]; |
|---|
| | 132 | char *s_filename, *d_filename, *tmp; |
|---|
| | 133 | CamelMaildirMessageInfo *mdi; |
|---|
| | 134 | CamelMessageInfo *mi, *info; |
|---|
| | 135 | |
|---|
| | 136 | if ((info = camel_folder_summary_uid (source->summary, uid)) == NULL) { |
|---|
| | 137 | camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID, |
|---|
| | 138 | _("Cannot get message: %s from folder %s\n %s"), |
|---|
| | 139 | uid, lf->folder_path, _("No such message")); |
|---|
| | 140 | return; |
|---|
| | 141 | } |
|---|
| | 142 | |
|---|
| | 143 | mdi = (CamelMaildirMessageInfo *) info; |
|---|
| | 144 | tmp = camel_maildir_summary_info_to_name (mdi); |
|---|
| | 145 | |
|---|
| | 146 | d_filename = g_strdup_printf("%s/cur/%s", df->folder_path, tmp); |
|---|
| | 147 | g_free (tmp); |
|---|
| | 148 | s_filename = camel_maildir_get_filename (lf->folder_path, mdi, uid); |
|---|
| | 149 | camel_message_info_free (info); |
|---|
| | 150 | |
|---|
| | 151 | if (rename (s_filename, d_filename) != 0) |
|---|
| | 152 | camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM_IO_WRITE, |
|---|
| | 153 | _("Cannot transfer message to destination folder")); |
|---|
| | 154 | else { |
|---|
| | 155 | camel_folder_set_message_flags (source, uid, |
|---|
| | 156 | CAMEL_MESSAGE_EXPUNGED|CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN, ~0); |
|---|
| | 157 | ((CamelMessageInfoBase *)info)->flags |= CAMEL_MESSAGE_EXPUNGED; |
|---|
| | 158 | camel_folder_summary_remove (source->summary, info); |
|---|
| | 159 | } |
|---|
| | 160 | |
|---|
| | 161 | g_free (s_filename); |
|---|
| | 162 | g_free (d_filename); |
|---|
| | 163 | } |
|---|
| | 164 | |
|---|
| | 165 | camel_folder_thaw(dest); |
|---|
| | 166 | camel_folder_thaw(source); |
|---|
| | 167 | |
|---|
| | 168 | camel_operation_end(NULL); |
|---|
| | 169 | |
|---|
| | 170 | } else |
|---|
| | 171 | ((CamelFolderClass *)parent_class)->transfer_messages_to (source, uids, dest, transferred_uids, delete_originals, ex); |
|---|
| | 172 | |
|---|
| | 173 | return; |
|---|