{
time_t interval = list->mail_set->mail_temp_scan_interval;
- const char *username = list->ns->storage->user->username;
+ const char *username = list->ns->user->username;
/* No need for a cryptographic-quality hash here. */
unsigned int hash = crc32_str(username);
return 0;
}
-void dbox_mailbox_close_cleanup(struct mailbox *box)
+int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path,
+ time_t last_temp_file_scan)
{
- if (box->view == NULL)
- return;
-
- const struct mail_index_header *hdr =
- mail_index_get_header(box->view);
-
- const char *box_path = mailbox_get_path(box);
- time_t scan_time = hdr->last_temp_file_scan;
time_t change_time = -1;
- if (scan_time == 0) {
- /* Try to fetch the scan time from dhe directory's atime
+ if (last_temp_file_scan == 0) {
+ /* Try to fetch the scan time from the directory's atime
if the directory exists. In case, get also the ctime */
struct stat stats;
- if (stat(box_path, &stats) == 0) {
- scan_time = stats.st_atim.tv_sec;
+ if (stat(path, &stats) == 0) {
+ last_temp_file_scan = stats.st_atim.tv_sec;
change_time = stats.st_ctim.tv_sec;
} else {
if (errno != ENOENT) {
- e_error(box->event,
- "stat(%s) failed: %m", box_path);
+ e_error(list->ns->user->event,
+ "stat(%s) failed: %m", path);
}
- return;
+ return -1;
}
}
- if (dbox_cleanup_temp_files(box->list, box_path, scan_time, change_time) ||
- hdr->last_temp_file_scan == 0) {
+ if (dbox_cleanup_temp_files(list, path, last_temp_file_scan, change_time) ||
+ last_temp_file_scan == 0) {
/* temp files were scanned. update the last scan timestamp. */
- index_mailbox_update_last_temp_file_scan(box);
+ return 1;
}
+ return 0;
+}
+
+void dbox_mailbox_close_cleanup(struct mailbox *box)
+{
+ if (box->view == NULL)
+ return;
+
+ const struct mail_index_header *hdr =
+ mail_index_get_header(box->view);
+ if (dbox_mailbox_list_cleanup(box->list, mailbox_get_path(box),
+ hdr->last_temp_file_scan) > 0)
+ index_mailbox_update_last_temp_file_scan(box);
}
void dbox_mailbox_close(struct mailbox *box)
int dbox_mailbox_open(struct mailbox *box);
void dbox_mailbox_close(struct mailbox *box);
void dbox_mailbox_close_cleanup(struct mailbox *box);
+int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path,
+ time_t last_temp_file_scan);
int dbox_mailbox_create(struct mailbox *box,
const struct mailbox_update *update, bool directory);
int dbox_mailbox_create_indexes(struct mailbox *box,