Remove the 'FIXME: remove because this isn't required...' comment for

2001-02-22  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-folder.h: Remove the 'FIXME: remove because this isn't
	required...' comment for copy_message_to since we now need and
	cherish its existance in the filter-driver code ;-)

	* camel-filter-driver.c (camel_filter_driver_filter_message): Now
	takes a UID and CamelFolder arguments (which can be NULL) to allow
	for possible optimizations when copying messages between folders
	on the same store.
	(camel_filter_driver_filter_mbox): Updated (passes NULL for both
	since this case can't be optimized anyway).
	(camel_filter_driver_filter_folder): Updated to pass in the uid
	and folder of the message.

svn path=/trunk/; revision=8346
This commit is contained in:
Jeffrey Stedfast
2001-02-22 16:22:27 +00:00
committed by Jeffrey Stedfast
parent 93a285353c
commit 0a3fde6ecd
4 changed files with 62 additions and 23 deletions

View File

@ -1,3 +1,18 @@
2001-02-22 Jeffrey Stedfast <fejj@ximian.com>
* camel-folder.h: Remove the 'FIXME: remove because this isn't
required...' comment for copy_message_to since we now need and
cherish its existance in the filter-driver code ;-)
* camel-filter-driver.c (camel_filter_driver_filter_message): Now
takes a UID and CamelFolder arguments (which can be NULL) to allow
for possible optimizations when copying messages between folders
on the same store.
(camel_filter_driver_filter_mbox): Updated (passes NULL for both
since this case can't be optimized anyway).
(camel_filter_driver_filter_folder): Updated to pass in the uid
and folder of the message.
2001-02-22 Dan Winship <danw@ximian.com>
* providers/imap/camel-imap-summary.h (CAMEL_IMAP_SERVER_FLAGS):

View File

@ -71,7 +71,7 @@ struct _CamelFilterDriverPrivate {
/* run-time data */
GHashTable *folders; /* folders that message has been copied to */
int closed; /* close count */
int closed; /* close count */
GHashTable *forwards; /* addresses that have been forwarded the message */
gboolean terminated; /* message processing was terminated */
@ -80,10 +80,12 @@ struct _CamelFilterDriverPrivate {
CamelMimeMessage *message; /* input message */
CamelMessageInfo *info; /* message summary info */
const char *uid; /* message uid */
CamelFolder *source; /* message source folder */
FILE *logfile; /* log file */
EDList rules; /* list of _filter_rule structs */
EDList rules; /* list of _filter_rule structs */
CamelException *ex;
@ -369,10 +371,14 @@ do_copy (struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFilterDriv
break;
p->copied = TRUE;
camel_folder_append_message (outbox, p->message, p->info, p->ex);
if (p->uid && p->source)
camel_folder_copy_message_to (p->source, p->uid, outbox, p->ex);
else
camel_folder_append_message (outbox, p->message, p->info, p->ex);
service_url = camel_service_get_url (CAMEL_SERVICE (camel_folder_get_parent_store (outbox)));
camel_filter_driver_log (driver, FILTER_LOG_ACTION, "Copy to folder %s", service_url);
camel_filter_driver_log (driver, FILTER_LOG_ACTION, "Copy to folder %s",
service_url);
g_free (service_url);
}
}
@ -402,10 +408,14 @@ do_move (struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFilterDriv
p->copied = TRUE;
p->deleted = TRUE; /* a 'move' is a copy & delete */
camel_folder_append_message (outbox, p->message, p->info, p->ex);
if (p->uid && p->source)
camel_folder_copy_message_to (p->source, p->uid, outbox, p->ex);
else
camel_folder_append_message (outbox, p->message, p->info, p->ex);
service_url = camel_service_get_url (CAMEL_SERVICE (camel_folder_get_parent_store (outbox)));
camel_filter_driver_log (driver, FILTER_LOG_ACTION, "Move to folder %s", service_url);
camel_filter_driver_log (driver, FILTER_LOG_ACTION, "Move to folder %s",
service_url);
g_free (service_url);
}
}
@ -634,7 +644,7 @@ camel_filter_driver_filter_mbox (CamelFilterDriver *driver, const char *mbox, Ca
goto fail;
}
camel_filter_driver_filter_message (driver, msg, NULL, source_url, ex);
camel_filter_driver_filter_message (driver, msg, NULL, NULL, NULL, source_url, ex);
camel_object_unref (CAMEL_OBJECT (msg));
if (camel_exception_is_set (ex)) {
report_status (driver, CAMEL_FILTER_STATUS_END, 100, "Failed message %d", i);
@ -686,11 +696,13 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde
for (i = 0; i < uids->len; i++) {
int pc = (100 * i)/uids->len;
report_status (driver, CAMEL_FILTER_STATUS_START, pc, "Getting message %d of %d", i+1, uids->len);
report_status (driver, CAMEL_FILTER_STATUS_START, pc, "Getting message %d of %d", i+1,
uids->len);
message = camel_folder_get_message (folder, uids->pdata[i], ex);
if (camel_exception_is_set (ex)) {
report_status (driver, CAMEL_FILTER_STATUS_END, 100, "Failed at message %d of %d", i+1, uids->len);
report_status (driver, CAMEL_FILTER_STATUS_END, 100, "Failed at message %d of %d",
i+1, uids->len);
break;
}
@ -699,13 +711,15 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde
else
info = NULL;
camel_filter_driver_filter_message (driver, message, info, source_url, ex);
camel_filter_driver_filter_message (driver, message, info, uids->pdata[i],
folder, source_url, ex);
if (camel_folder_has_summary_capability (folder))
camel_folder_free_message_info (folder, info);
if (camel_exception_is_set (ex)) {
report_status (driver, CAMEL_FILTER_STATUS_END, 100, "Failed at message %d of %d", i+1, uids->len);
report_status (driver, CAMEL_FILTER_STATUS_END, 100, "Failed at message %d of %d",
i+1, uids->len);
break;
}
@ -718,7 +732,6 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde
if (freeuids)
camel_folder_free_uids (folder, uids);
if (p->defaultfolder) {
report_status(driver, CAMEL_FILTER_STATUS_PROGRESS, 100, "Syncing folder");
@ -733,8 +746,10 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde
}
void
camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage *message, CamelMessageInfo *info,
const char *source_url, CamelException *ex)
camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage *message,
CamelMessageInfo *info, const char *uid,
CamelFolder *source, const char *source_url,
CamelException *ex)
{
struct _CamelFilterDriverPrivate *p = _PRIVATE (driver);
ESExpResult *r;
@ -758,7 +773,9 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage
p->copied = FALSE;
p->message = message;
p->info = info;
p->uid = uid;
p->source = source;
node = (struct _filter_rule *)p->rules.head;
while (node->next) {
d(fprintf (stderr, "applying rule %s\n action %s\n", node->match, node->action));
@ -794,7 +811,10 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage
/* copy it to the default inbox */
filtered = TRUE;
camel_filter_driver_log (driver, FILTER_LOG_ACTION, "Copy to default folder");
camel_folder_append_message (p->defaultfolder, p->message, p->info, p->ex);
if (p->uid && p->source)
camel_folder_copy_message_to (p->source, p->uid, p->defaultfolder, p->ex);
else
camel_folder_append_message (p->defaultfolder, p->message, p->info, p->ex);
}
error:

View File

@ -64,15 +64,20 @@ CamelFilterDriver *camel_filter_driver_new (CamelFilterGetFolderFunc fetche
/* modifiers */
void camel_filter_driver_set_logfile (CamelFilterDriver *d, FILE *logfile);
void camel_filter_driver_set_status_func (CamelFilterDriver *d, CamelFilterStatusFunc *func, void *data);
void camel_filter_driver_set_status_func (CamelFilterDriver *d, CamelFilterStatusFunc *func,
void *data);
void camel_filter_driver_set_default_folder (CamelFilterDriver *d, CamelFolder *def);
void camel_filter_driver_add_rule (CamelFilterDriver *d, const char *name, const char *match, const char *action);
void camel_filter_driver_add_rule (CamelFilterDriver *d, const char *name, const char *match,
const char *action);
/*void camel_filter_driver_set_global(CamelFilterDriver *, const char *name, const char *value);*/
void camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage *message, CamelMessageInfo *info,
const char *source_url, CamelException *ex);
void camel_filter_driver_filter_mbox (CamelFilterDriver *driver, const char *mbox, CamelException *ex);
void camel_filter_driver_filter_message (CamelFilterDriver *driver, CamelMimeMessage *message,
CamelMessageInfo *info, const char *uri,
CamelFolder *source, const char *source_url,
CamelException *ex);
void camel_filter_driver_filter_mbox (CamelFilterDriver *driver, const char *mbox,
CamelException *ex);
void camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folder,
GPtrArray *uids, gboolean remove, CamelException *ex);

View File

@ -253,7 +253,6 @@ void camel_folder_search_free (CamelFolder *folder, GPtrArray *);
CamelMessageInfo *camel_folder_get_message_info (CamelFolder *folder, const char *uid);
void camel_folder_free_message_info (CamelFolder *folder, CamelMessageInfo *info);
/* FIXME: copy-message-to is not required */
void camel_folder_copy_message_to (CamelFolder *source,
const char *uid,
CamelFolder *dest,