* camel-folder.c (camel_folder_transfer_messages_to): Replace copy_messages_to and move_messages_to with a single function that just takes a "delete_originals" flag. Also, use the vtrash implementation if *either* folder is a vtrash. (transfer_messages_to): Make this use camel_operation_progress (previously move_messages_to did but copy_messages_to didn't), and freeze/thaw the folder(s) if doing multiple messages. * camel-vtrash-folder.c (vtrash_transfer_messages_to): Update for move/copy merge. Move the "move messages into vtrash" code here from mail-ops.c. Now all of the vtrash move/copy special casing is in camel instead of half of it being here and half in mail/. (This should also make it so that "Move to Trash" will work in filter rules.) * camel-vee-folder.c (vee_transfer_messages_to): Make this just return an exception, since it will only be called when trying to move/copy messages from one vfolder to another. (vee_append_message): Add this too so we get a nicer error message than the default "unimplemented" one in camel-folder.c. * camel-digest-folder.c: Replace copy_messages_to and move_messages_to with transfer_messages_to. * camel-disco-folder.c: Likewise * camel-disco-diary.c (camel_disco_diary_log, camel_disco_diary_replay): replace MOVE/COPY with TRANSFER. * providers/imap/camel-imap-folder.c (imap_transfer_offline, imap_transfer_online, imap_transfer_resyncing): Update for changes. (This ends up being a bit more complicated than it was before for now, but later disconnected operation changes should resimplify it.) * camel-filter-driver.c (camel_filter_driver_filter_message, do_copy, do_move): Use transfer_messages_to instead of copy. svn path=/trunk/; revision=16744
99 lines
2.8 KiB
C
99 lines
2.8 KiB
C
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
|
*
|
|
* camel-disco-diary.h: class for logging disconnected operation
|
|
*
|
|
* Authors: Dan Winship <danw@ximian.com>
|
|
*
|
|
* Copyright 2001 Ximian, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of version 2 of the GNU General Public
|
|
* License as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA
|
|
*/
|
|
|
|
#ifndef CAMEL_DISCO_DIARY_H
|
|
#define CAMEL_DISCO_DIARY_H 1
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#pragma }
|
|
#endif /* __cplusplus }*/
|
|
|
|
#include "camel-object.h"
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
|
|
#define CAMEL_DISCO_DIARY_TYPE (camel_disco_diary_get_type ())
|
|
#define CAMEL_DISCO_DIARY(obj) (CAMEL_CHECK_CAST((obj), CAMEL_DISCO_DIARY_TYPE, CamelDiscoDiary))
|
|
#define CAMEL_DISCO_DIARY_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DISCO_DIARY_TYPE, CamelDiscoDiaryClass))
|
|
#define CAMEL_IS_DISCO_DIARY(o) (CAMEL_CHECK_TYPE((o), CAMEL_DISCO_DIARY_TYPE))
|
|
|
|
typedef enum {
|
|
CAMEL_DISCO_DIARY_END = 0,
|
|
|
|
CAMEL_DISCO_DIARY_FOLDER_EXPUNGE,
|
|
CAMEL_DISCO_DIARY_FOLDER_APPEND,
|
|
CAMEL_DISCO_DIARY_FOLDER_TRANSFER,
|
|
} CamelDiscoDiaryAction;
|
|
|
|
typedef enum {
|
|
CAMEL_DISCO_DIARY_ARG_NONE = 0,
|
|
|
|
CAMEL_DISCO_DIARY_ARG_FOLDER,
|
|
CAMEL_DISCO_DIARY_ARG_UID,
|
|
CAMEL_DISCO_DIARY_ARG_UID_LIST
|
|
} CamelDiscoDiaryArgType;
|
|
|
|
struct _CamelDiscoDiary {
|
|
CamelObject parent_object;
|
|
|
|
CamelDiscoStore *store;
|
|
FILE *file;
|
|
GHashTable *folders, *uidmap;
|
|
};
|
|
|
|
typedef struct {
|
|
CamelObjectClass parent_class;
|
|
|
|
} CamelDiscoDiaryClass;
|
|
|
|
|
|
/* public methods */
|
|
CamelDiscoDiary *camel_disco_diary_new (CamelDiscoStore *store,
|
|
const char *filename,
|
|
CamelException *ex);
|
|
|
|
gboolean camel_disco_diary_empty (CamelDiscoDiary *diary);
|
|
|
|
void camel_disco_diary_log (CamelDiscoDiary *diary,
|
|
CamelDiscoDiaryAction action,
|
|
...);
|
|
void camel_disco_diary_replay (CamelDiscoDiary *diary,
|
|
CamelException *ex);
|
|
|
|
/* Temporary->Permanent UID map stuff */
|
|
void camel_disco_diary_uidmap_add (CamelDiscoDiary *diary,
|
|
const char *old_uid,
|
|
const char *new_uid);
|
|
const char *camel_disco_diary_uidmap_lookup (CamelDiscoDiary *diary,
|
|
const char *uid);
|
|
|
|
/* Standard Camel function */
|
|
CamelType camel_disco_diary_get_type (void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* CAMEL_DISCO_DIARY_H */
|