static void receive_status (CamelFilterDriver *driver, enum camel_filter_status_t status, int pc, const char *desc, void *data) { struct _send_info *info = data; time_t now = time(NULL); /* let it flow through to the folder, every now and then too? */ g_hash_table_foreach(info->data->folders, (GHFunc)update_folders, &now); if (info->data->inbox && now > info->data->inbox_update+20) { d(printf("updating inbox too\n")); /* this doesn't seem to work right :( */ /*camel_folder_thaw(info->data->inbox); camel_folder_freeze(info->data->inbox);*/ info->data->inbox_update = now; } /* we just pile them onto the port, assuming it can handle it. We could also have a receiver port and see if they've been processed yet, so if this is necessary its not too hard to add */ /* the mail_gui_port receiver will free everything for us */ switch (status) { case CAMEL_FILTER_STATUS_START: case CAMEL_FILTER_STATUS_END: set_send_status(info, desc, pc); break; default: break; } }
/* for camel operation status */ static void operation_status (CamelOperation *op, const gchar *what, gint pc, struct _send_info *info) { set_send_status (info, what, pc); }
/* for camel operation status */ static void operation_status(CamelOperation *op, const char *what, int pc, void *data) { struct _send_info *info = data; /*printf("Operation '%s', percent %d\n");*/ switch (pc) { case CAMEL_OPERATION_START: pc = 0; break; case CAMEL_OPERATION_END: pc = 100; break; } set_send_status(info, what, pc); }