Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-storage/index/maildir/maildir-mail.c @ 4907:5b4c9b20eba0 HEAD
Replaced void *context from a lot of callbacks with the actual context
type. Also added/fixed some context type checks.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 15 Dec 2006 20:38:08 +0200 |
parents | 5587c9345e39 |
children | b6b2b1d98f42 |
rev | line source |
---|---|
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 /* Copyright (C) 2003 Timo Sirainen */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "istream.h" |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "index-mail.h" |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "maildir-storage.h" |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "maildir-uidlist.h" |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include <fcntl.h> |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include <unistd.h> |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include <sys/stat.h> |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
13 static int |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4677
diff
changeset
|
14 do_open(struct maildir_mailbox *mbox, const char *path, int *fd) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 *fd = open(path, O_RDONLY); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 if (*fd != -1) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 return 1; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 if (errno == ENOENT) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 return 0; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 |
3280
2c72492dfd91
Created mbox_storage and maildir_storage.
Timo Sirainen <tss@iki.fi>
parents:
3279
diff
changeset
|
22 mail_storage_set_critical(STORAGE(mbox->storage), |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 "open(%s) failed: %m", path); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 return -1; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
27 static int |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4677
diff
changeset
|
28 do_stat(struct maildir_mailbox *mbox, const char *path, struct stat *st) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 if (stat(path, st) == 0) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 return 1; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 if (errno == ENOENT) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 return 0; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
3280
2c72492dfd91
Created mbox_storage and maildir_storage.
Timo Sirainen <tss@iki.fi>
parents:
3279
diff
changeset
|
35 mail_storage_set_critical(STORAGE(mbox->storage), |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 "stat(%s) failed: %m", path); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 return -1; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 static struct istream * |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
41 maildir_open_mail(struct maildir_mailbox *mbox, struct mail *mail, |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
42 bool *deleted_r) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 { |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
44 const char *path; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
45 int fd = -1; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
46 |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
47 *deleted_r = FALSE; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
49 if (mail->uid != 0) { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
50 if (maildir_file_do(mbox, mail->uid, do_open, &fd) < 0) |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
51 return NULL; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
52 } else { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
53 path = maildir_save_file_get_path(mail->transaction, mail->seq); |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
54 if (do_open(mbox, path, &fd) <= 0) |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
55 return NULL; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
56 } |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 if (fd == -1) { |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
59 *deleted_r = TRUE; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 return NULL; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
63 if (mbox->ibox.mail_read_mmaped) { |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 return i_stream_create_mmap(fd, default_pool, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 MAIL_MMAP_BLOCK_SIZE, 0, 0, TRUE); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 } else { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 return i_stream_create_file(fd, default_pool, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 MAIL_READ_BLOCK_SIZE, TRUE); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
72 static int maildir_mail_stat(struct mail *mail, struct stat *st) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 { |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
74 struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->box; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
75 struct index_mail_data *data = &((struct index_mail *)mail)->data; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
76 const char *path; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 int fd; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
3458
0c264f105899
Try to be a bit smarter about when to parse header/body.
Timo Sirainen <tss@iki.fi>
parents:
3418
diff
changeset
|
79 if (data->access_part != 0 && data->stream == NULL) { |
2298
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2061
diff
changeset
|
80 /* we're going to open the mail anyway */ |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
81 (void)mail_get_stream(mail, NULL, NULL); |
2298
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2061
diff
changeset
|
82 } |
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2061
diff
changeset
|
83 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 if (data->stream != NULL) { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 fd = i_stream_get_fd(data->stream); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 i_assert(fd != -1); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
88 if (fstat(fd, st) < 0) { |
3280
2c72492dfd91
Created mbox_storage and maildir_storage.
Timo Sirainen <tss@iki.fi>
parents:
3279
diff
changeset
|
89 mail_storage_set_critical(STORAGE(mbox->storage), |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 "fstat(maildir) failed: %m"); |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
91 return -1; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 } |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
93 } else if (mail->uid != 0) { |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
94 if (maildir_file_do(mbox, mail->uid, do_stat, st) <= 0) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
95 return -1; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 } else { |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
97 path = maildir_save_file_get_path(mail->transaction, mail->seq); |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
98 if (do_stat(mbox, path, st) <= 0) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
99 return -1; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 } |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
101 return 0; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
102 } |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
103 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
104 static time_t maildir_mail_get_received_date(struct mail *_mail) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
105 { |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
106 struct index_mail *mail = (struct index_mail *)_mail; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
107 struct index_mail_data *data = &mail->data; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
108 struct stat st; |
4677 | 109 uint32_t t; |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
110 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
111 (void)index_mail_get_received_date(_mail); |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
112 if (data->received_date != (time_t)-1) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
113 return data->received_date; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
114 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
115 if (maildir_mail_stat(_mail, &st) < 0) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
116 return (time_t)-1; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 |
4672
b7ff8c64c436
We added received date as time_t instead of uint32_t which crashed with
Timo Sirainen <tss@iki.fi>
parents:
4461
diff
changeset
|
118 data->received_date = t = st.st_mtime; |
b7ff8c64c436
We added received date as time_t instead of uint32_t which crashed with
Timo Sirainen <tss@iki.fi>
parents:
4461
diff
changeset
|
119 index_mail_cache_add(mail, MAIL_CACHE_RECEIVED_DATE, &t, sizeof(t)); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 return data->received_date; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
123 static time_t maildir_mail_get_save_date(struct mail *_mail) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
124 { |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
125 struct index_mail *mail = (struct index_mail *)_mail; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
126 struct index_mail_data *data = &mail->data; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
127 struct stat st; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
128 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
129 (void)index_mail_get_save_date(_mail); |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
130 if (data->save_date != (time_t)-1) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
131 return data->save_date; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
132 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
133 if (maildir_mail_stat(_mail, &st) < 0) |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
134 return (time_t)-1; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
135 |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
136 data->save_date = st.st_ctime; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
137 index_mail_cache_add(mail, MAIL_CACHE_SAVE_DATE, |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
138 &data->save_date, sizeof(data->save_date)); |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
139 return data->save_date; |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
140 } |
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
141 |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
142 static uoff_t maildir_mail_get_virtual_size(struct mail *_mail) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 { |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
144 struct index_mail *mail = (struct index_mail *)_mail; |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
145 struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 struct index_mail_data *data = &mail->data; |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
147 const char *path, *fname; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 uoff_t virtual_size; |
1947 | 149 enum maildir_uidlist_rec_flag flags; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
151 if (data->virtual_size != (uoff_t)-1) |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
152 return data->virtual_size; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
154 if ((mail->wanted_fields & MAIL_FETCH_VIRTUAL_SIZE) == 0) { |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
155 data->virtual_size = index_mail_get_cached_virtual_size(mail); |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
156 if (data->virtual_size != (uoff_t)-1) |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
157 return data->virtual_size; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
160 if (_mail->uid != 0) { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
161 fname = maildir_uidlist_lookup(mbox->uidlist, _mail->uid, |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
162 &flags); |
4421
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
163 if (fname == NULL) { |
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
164 _mail->expunged = TRUE; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
165 return (uoff_t)-1; |
4421
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
166 } |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
167 } else { |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
168 path = maildir_save_file_get_path(_mail->transaction, |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
169 _mail->seq); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
170 fname = strrchr(path, '/'); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
171 fname = fname != NULL ? fname + 1 : path; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
172 } |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 /* size can be included in filename */ |
4351
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
175 if (maildir_filename_get_size(fname, MAILDIR_EXTRA_VIRTUAL_SIZE, |
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
176 &virtual_size)) { |
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
177 index_mail_cache_add(mail, MAIL_CACHE_VIRTUAL_FULL_SIZE, |
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
178 &virtual_size, sizeof(virtual_size)); |
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
179 return virtual_size; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
182 return index_mail_get_virtual_size(_mail); |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
183 } |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
184 |
2996
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
185 static const char * |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
186 maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field) |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
187 { |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
188 struct index_mail *mail = (struct index_mail *)_mail; |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
189 struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox; |
2996
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
190 enum maildir_uidlist_rec_flag flags; |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
191 const char *path, *fname, *end; |
2996
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
192 |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
193 if (field == MAIL_FETCH_UIDL_FILE_NAME) { |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
194 if (_mail->uid != 0) { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
195 fname = maildir_uidlist_lookup(mbox->uidlist, |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
196 _mail->uid, &flags); |
4421
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
197 if (fname == NULL) { |
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
198 _mail->expunged = TRUE; |
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
199 return NULL; |
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
200 } |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
201 } else { |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
202 path = maildir_save_file_get_path(_mail->transaction, |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
203 _mail->seq); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
204 fname = strrchr(path, '/'); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
205 fname = fname != NULL ? fname + 1 : path; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
206 } |
3417
b0bdf32564b7
Replaced ':' and ',' character usages with #defines, so they can be changed
Timo Sirainen <tss@iki.fi>
parents:
3280
diff
changeset
|
207 end = strchr(fname, MAILDIR_INFO_SEP); |
2996
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
208 return end == NULL ? fname : t_strdup_until(fname, end); |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
209 } |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
210 |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
211 return index_mail_get_special(_mail, field); |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
212 } |
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
213 |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
214 static uoff_t maildir_mail_get_physical_size(struct mail *_mail) |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
215 { |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
216 struct index_mail *mail = (struct index_mail *)_mail; |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
217 struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox; |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
218 struct index_mail_data *data = &mail->data; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
219 struct stat st; |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
220 const char *path, *fname; |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
221 uoff_t size; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
222 enum maildir_uidlist_rec_flag flags; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
223 |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
224 size = index_mail_get_physical_size(_mail); |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
225 if (size != (uoff_t)-1) |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
226 return size; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
227 |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
228 if (_mail->uid != 0) { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
229 fname = maildir_uidlist_lookup(mbox->uidlist, _mail->uid, |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
230 &flags); |
4421
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
231 if (fname == NULL) { |
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
232 _mail->expunged = TRUE; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
233 return (uoff_t)-1; |
4421
f1888ce91702
If requested mail isn't found from uidlist, mark the mail as expunged.
Timo Sirainen <tss@iki.fi>
parents:
4351
diff
changeset
|
234 } |
4461
ce727f4e53e5
mail_get_physical_size() was broken with non-committed mails, which broke
Timo Sirainen <tss@iki.fi>
parents:
4455
diff
changeset
|
235 path = NULL; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
236 } else { |
4450
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
237 path = maildir_save_file_get_path(_mail->transaction, |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
238 _mail->seq); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
239 fname = strrchr(path, '/'); |
14b10f7ea70e
Don't break if mailbox path contains ':' characters.
Timo Sirainen <tss@iki.fi>
parents:
4421
diff
changeset
|
240 fname = fname != NULL ? fname + 1 : path; |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
241 } |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
242 |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
243 /* size can be included in filename */ |
4351
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
244 if (!maildir_filename_get_size(fname, MAILDIR_EXTRA_FILE_SIZE, &size)) { |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
245 if (_mail->uid != 0) { |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
246 if (maildir_file_do(mbox, _mail->uid, |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
247 do_stat, &st) <= 0) |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
248 return (uoff_t)-1; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
249 } else { |
4351
61cc7e40bec6
Add ",S=size" to maildir filenames when quota plugin is loaded with
Timo Sirainen <tss@iki.fi>
parents:
4274
diff
changeset
|
250 /* saved mail which hasn't been committed yet */ |
4461
ce727f4e53e5
mail_get_physical_size() was broken with non-committed mails, which broke
Timo Sirainen <tss@iki.fi>
parents:
4455
diff
changeset
|
251 if (do_stat(mbox, path, &st) <= 0) |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
252 return (uoff_t)-1; |
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
253 } |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
254 size = st.st_size; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
255 } |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
256 |
3909
411f20e72a8f
Added mail_cache_min_mail_count setting.
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
257 index_mail_cache_add(mail, MAIL_CACHE_PHYSICAL_FULL_SIZE, |
411f20e72a8f
Added mail_cache_min_mail_count setting.
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
258 &size, sizeof(size)); |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
259 data->physical_size = size; |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
260 return size; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
261 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
262 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
263 static struct istream *maildir_mail_get_stream(struct mail *_mail, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
264 struct message_size *hdr_size, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
265 struct message_size *body_size) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 { |
3279
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
267 struct index_mail *mail = (struct index_mail *)_mail; |
b698ae839a18
Moved mbox/maildir-specific variables from struct index_mailbox to
Timo Sirainen <tss@iki.fi>
parents:
3248
diff
changeset
|
268 struct maildir_mailbox *mbox = (struct maildir_mailbox *)mail->ibox; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 struct index_mail_data *data = &mail->data; |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3458
diff
changeset
|
270 bool deleted; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 if (data->stream == NULL) { |
4094
03e14e3a4610
Support accessing saved mails that haven't been committed yet (fixes quota for maildir).
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4088
diff
changeset
|
273 data->stream = maildir_open_mail(mbox, _mail, &deleted); |
2298
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2061
diff
changeset
|
274 if (data->stream == NULL) { |
3067
4c92f9eae613
mail->expunged field wasn't actually set. Now it's always set if
Timo Sirainen <tss@iki.fi>
parents:
3016
diff
changeset
|
275 _mail->expunged = deleted; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
276 return NULL; |
2298
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2061
diff
changeset
|
277 } |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
278 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
279 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
280 return index_mail_init_stream(mail, hdr_size, body_size); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
281 } |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
282 |
3209
923ff19873d4
Major mail-storage API changes. It's now a bit cleaner and much more plugin
Timo Sirainen <tss@iki.fi>
parents:
3207
diff
changeset
|
283 struct mail_vfuncs maildir_mail_vfuncs = { |
923ff19873d4
Major mail-storage API changes. It's now a bit cleaner and much more plugin
Timo Sirainen <tss@iki.fi>
parents:
3207
diff
changeset
|
284 index_mail_free, |
923ff19873d4
Major mail-storage API changes. It's now a bit cleaner and much more plugin
Timo Sirainen <tss@iki.fi>
parents:
3207
diff
changeset
|
285 index_mail_set_seq, |
4274
bd519db7f6e5
Added mail_set_uid() to select a mail by UID.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4094
diff
changeset
|
286 index_mail_set_uid, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
287 |
2317
0cf316c77b1b
Recent flags should be fully working now with maildir.
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
288 index_mail_get_flags, |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2996
diff
changeset
|
289 index_mail_get_keywords, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
290 index_mail_get_parts, |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
291 index_mail_get_date, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
292 maildir_mail_get_received_date, |
4455
fce5140fbe0b
Added mail_get_save_date() and some cleanups.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4450
diff
changeset
|
293 maildir_mail_get_save_date, |
2504
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
294 maildir_mail_get_virtual_size, |
98f6057f27a1
Added mail.get_physical_size().
Timo Sirainen <tss@iki.fi>
parents:
2317
diff
changeset
|
295 maildir_mail_get_physical_size, |
3248
ff47e78ad717
Renamed mail_get_header() to mail_get_first_header() and mail_gets_headers()
Timo Sirainen <tss@iki.fi>
parents:
3209
diff
changeset
|
296 index_mail_get_first_header, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
297 index_mail_get_headers, |
3248
ff47e78ad717
Renamed mail_get_header() to mail_get_first_header() and mail_gets_headers()
Timo Sirainen <tss@iki.fi>
parents:
3209
diff
changeset
|
298 index_mail_get_header_stream, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
299 maildir_mail_get_stream, |
2996
9219e788d774
Added %f pop3_uidl_format for maildir. Patch by Andrey Panin.
Timo Sirainen <tss@iki.fi>
parents:
2504
diff
changeset
|
300 maildir_mail_get_special, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
301 index_mail_update_flags, |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2996
diff
changeset
|
302 index_mail_update_keywords, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
303 index_mail_expunge |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
304 }; |