diff options
-rw-r--r-- | camel/ChangeLog | 8 | ||||
-rw-r--r-- | camel/camel-filter-driver.c | 33 | ||||
-rw-r--r-- | camel/camel-filter-driver.h | 10 |
3 files changed, 33 insertions, 18 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 4c4e670168..06b0d553cd 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,11 @@ +2001-01-19 Not Zed <NotZed@Ximian.com> + + * camel-filter-driver.c (report_status): Add a percentage complete + indicator to the status thing. + (camel_filter_driver_filter_mbox): Add percentage complete to + reporting. + (camel_filter_driver_filter_folder): Same. + 2001-01-18 Dan Winship <danw@ximian.com> * camel-store.c (camel_folder_info_build): More tweaking... skip diff --git a/camel/camel-filter-driver.c b/camel/camel-filter-driver.c index 42aa442c60..2de96a14ea 100644 --- a/camel/camel-filter-driver.c +++ b/camel/camel-filter-driver.c @@ -62,11 +62,11 @@ struct _CamelFilterDriverPrivate { CamelFolder *defaultfolder; /* defualt folder */ - FDStatusFunc *statusfunc; /* status callback */ + CamelFilterStatusFunc *statusfunc; /* status callback */ void *statusdata; /* status callback data */ /* for callback */ - FilterGetFolderFunc get_folder; + CamelFilterGetFolderFunc get_folder; void *data; /* run-time data */ @@ -227,7 +227,7 @@ camel_filter_driver_finalise (CamelObject *obj) * Return value: A new CamelFilterDriver widget. **/ CamelFilterDriver * -camel_filter_driver_new (FilterGetFolderFunc get_folder, void *data) +camel_filter_driver_new (CamelFilterGetFolderFunc get_folder, void *data) { CamelFilterDriver *new; struct _CamelFilterDriverPrivate *p; @@ -250,7 +250,7 @@ camel_filter_driver_set_logfile (CamelFilterDriver *d, FILE *logfile) } void -camel_filter_driver_set_status_func (CamelFilterDriver *d, FDStatusFunc *func, void *data) +camel_filter_driver_set_status_func (CamelFilterDriver *d, CamelFilterStatusFunc *func, void *data) { struct _CamelFilterDriverPrivate *p = _PRIVATE (d); @@ -286,7 +286,7 @@ camel_filter_driver_add_rule(CamelFilterDriver *d, const char *name, const char } static void -report_status (CamelFilterDriver *driver, enum filter_status_t status, const char *desc, ...) +report_status (CamelFilterDriver *driver, enum camel_filter_status_t status, int pc, const char *desc, ...) { /* call user-defined status report function */ struct _CamelFilterDriverPrivate *p = _PRIVATE (driver); @@ -296,7 +296,7 @@ report_status (CamelFilterDriver *driver, enum filter_status_t status, const cha if (p->statusfunc) { va_start (ap, desc); str = g_strdup_vprintf (desc, ap); - p->statusfunc (driver, status, str, p->statusdata); + p->statusfunc (driver, status, pc, str, p->statusdata); g_free (str); } } @@ -610,11 +610,11 @@ camel_filter_driver_filter_mbox (CamelFilterDriver *driver, const char *mbox, co if (st.st_size > 0) pc = (int)(100.0 * ((double)camel_mime_parser_tell (mp) / (double)st.st_size)); - report_status (driver, FILTER_STATUS_START, "Getting message %d (%d%% of file)", i, pc); + report_status (driver, FILTER_STATUS_START, pc, "Getting message %d (%d%% of file)", i, pc); msg = camel_mime_message_new (); if (camel_mime_part_construct_from_parser (CAMEL_MIME_PART (msg), mp) == -1) { - report_status (driver, FILTER_STATUS_END, "Failed message %d", i); + report_status (driver, FILTER_STATUS_END, 100, "Failed message %d", i); camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, "Cannot open message"); camel_object_unref (CAMEL_OBJECT (msg)); goto fail; @@ -623,16 +623,18 @@ camel_filter_driver_filter_mbox (CamelFilterDriver *driver, const char *mbox, co camel_filter_driver_filter_message (driver, msg, NULL, source_url, source, ex); camel_object_unref (CAMEL_OBJECT (msg)); if (camel_exception_is_set (ex)) { - report_status (driver, FILTER_STATUS_END, "Failed message %d", i); + report_status (driver, FILTER_STATUS_END, 100, "Failed message %d", i); goto fail; } - report_status (driver, FILTER_STATUS_END, "Finished message %d", i); + report_status (driver, FILTER_STATUS_END, pc, "Finished message %d", i); i++; /* skip over the FROM_END state */ camel_mime_parser_step (mp, 0, 0); } + + report_status (driver, FILTER_STATUS_END, 100, "Complete"); if (p->defaultfolder) camel_folder_sync (p->defaultfolder, FALSE, ex); @@ -667,11 +669,13 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde } for (i = 0; i < uids->len; i++) { - report_status (driver, FILTER_STATUS_START, "Getting message %d of %d", i+1, uids->len); + int pc = (100 * i)/uids->len; + + report_status (driver, 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, FILTER_STATUS_END, "Failed at message %d of %d", i+1, uids->len); + report_status (driver, FILTER_STATUS_END, 100, "Failed at message %d of %d", i+1, uids->len); break; } @@ -686,7 +690,7 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde camel_folder_free_message_info (folder, info); if (camel_exception_is_set (ex)) { - report_status (driver, FILTER_STATUS_END, "Failed at message %d of %d", i+1, uids->len); + report_status (driver, FILTER_STATUS_END, 100, "Failed at message %d of %d", i+1, uids->len); break; } @@ -696,6 +700,9 @@ camel_filter_driver_filter_folder (CamelFilterDriver *driver, CamelFolder *folde camel_object_unref (CAMEL_OBJECT (message)); } + + if (i == uids->len) + report_status (driver, FILTER_STATUS_END, 100, "Complete"); if (freeuids) camel_folder_free_uids (folder, uids); diff --git a/camel/camel-filter-driver.h b/camel/camel-filter-driver.h index 0d3df60fe0..aba2b587e7 100644 --- a/camel/camel-filter-driver.h +++ b/camel/camel-filter-driver.h @@ -47,7 +47,7 @@ struct _CamelFilterDriverClass { /* FIXME: this maybe should change... */ /* type of status for a status report */ -enum filter_status_t { +enum camel_filter_status_t { FILTER_STATUS_NONE, FILTER_STATUS_START, /* start of new message processed */ FILTER_STATUS_ACTION, /* an action performed */ @@ -55,16 +55,16 @@ enum filter_status_t { FILTER_STATUS_END, /* end of message */ }; -typedef CamelFolder * (*FilterGetFolderFunc) (CamelFilterDriver *, const char *uri, void *data); +typedef CamelFolder * (*CamelFilterGetFolderFunc) (CamelFilterDriver *, const char *uri, void *data); /* report status */ -typedef void (FDStatusFunc)(CamelFilterDriver *driver, enum filter_status_t status, const char *desc, void *data); +typedef void (CamelFilterStatusFunc)(CamelFilterDriver *driver, enum camel_filter_status_t status, int pc, const char *desc, void *data); guint camel_filter_driver_get_type (void); -CamelFilterDriver *camel_filter_driver_new (FilterGetFolderFunc fetcher, void *data); +CamelFilterDriver *camel_filter_driver_new (CamelFilterGetFolderFunc fetcher, void *data); /* modifiers */ void camel_filter_driver_set_logfile (CamelFilterDriver *d, FILE *logfile); -void camel_filter_driver_set_status_func (CamelFilterDriver *d, FDStatusFunc *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); |