return 0;
}
+static bool multi_dbox_get_save_date(struct mail *mail, time_t *date_r)
+{
+ struct dbox_mailbox *mbox =
+ (struct dbox_mailbox *)mail->transaction->box;
+ const struct dbox_mail_index_record *dbox_rec;
+ const void *data;
+ bool expunged;
+
+ mail_index_lookup_ext(mbox->ibox.view, mail->seq,
+ mbox->dbox_ext_id, &data, &expunged);
+ dbox_rec = data;
+ if (dbox_rec == NULL || dbox_rec->map_uid == 0)
+ return FALSE;
+
+ *date_r = dbox_rec->save_date;
+ return TRUE;
+}
+
static int dbox_mail_get_save_date(struct mail *_mail, time_t *date_r)
{
struct dbox_mail *mail = (struct dbox_mail *)_mail;
struct stat st;
const char *value;
- if (index_mail_get_save_date(_mail, date_r) == 0)
+ if (multi_dbox_get_save_date(_mail, date_r))
+ return 0;
+
+ if (index_mail_get_save_date(_mail, date_r) == 0)
return 0;
if (dbox_mail_metadata_read(mail, &file) < 0)
dbox_add_missing_map_uidvalidity(ctx);
memset(&rec, 0, sizeof(rec));
+ rec.save_date = ioloop_time;
mails = array_get(&ctx->mails, &count);
for (i = 0; i < count; i++) {
if (mails[i].file->single_mbox != NULL)
src_mbox = (struct dbox_mailbox *)mail->box;
memset(&rec, 0, sizeof(rec));
+ rec.save_date = ioloop_time;
if (dbox_mail_lookup(src_mbox, src_mbox->ibox.view, mail->seq,
&rec.map_uid) < 0)
return -1;
#include "lib.h"
#include "array.h"
+#include "ioloop.h"
#include "istream.h"
#include "hash.h"
#include "hex-binary.h"
/* add the new message */
memset(&dbox_rec, 0, sizeof(dbox_rec));
dbox_rec.map_uid = msg->map_uid;
+ dbox_rec.save_date = ioloop_time;
mail_index_append(ctx->prev_msg.trans, ctx->prev_msg.next_uid++, &seq);
mail_index_update_ext(ctx->prev_msg.trans, seq, mbox->dbox_ext_id,
&dbox_rec, NULL);
struct dbox_mail_index_record {
uint32_t map_uid;
+ /* UNIX timestamp of when the message was saved/copied to this
+ mailbox */
+ uint32_t save_date;
};
struct dbox_mailbox {