annotate src/lib-index/mail-index-transaction-view.c @ 9458:adee8cb3ff5d HEAD

Minor memory allocation tweaks.
author Timo Sirainen <tss@iki.fi>
date Wed, 28 Oct 2009 14:10:04 -0400
parents 22b45d08cd4e
children 00cd9aacd03c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 8549
diff changeset
1 /* Copyright (c) 2004-2009 Dovecot authors, see the included COPYING file */
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
3470
346a494c2feb Moved array declaration to array-decl.h and include it in lib.h. So array.h
Timo Sirainen <tss@iki.fi>
parents: 3195
diff changeset
4 #include "array.h"
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "buffer.h"
4333
8bfdd3928097 mail_index_lookup() and mail_index_lookup_full() returns now 0 if the mail has been expunged within the transaction.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
6 #include "seq-range-array.h"
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "mail-index-private.h"
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "mail-index-view-private.h"
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "mail-index-transaction-private.h"
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 struct mail_index_view_transaction {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 struct mail_index_view view;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
13 struct mail_index_view_vfuncs *super;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 struct mail_index_transaction *t;
4528
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
15
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
16 struct mail_index_map *lookup_map;
4528
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
17 struct mail_index_header hdr;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
18
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
19 buffer_t *lookup_return_data;
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
20 uint32_t lookup_prev_seq;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
21
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
22 unsigned int record_size;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
23 unsigned int recs_count;
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
24 void *recs;
9319
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
25 ARRAY_DEFINE(all_recs, void *);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 };
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
28 static void tview_close(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 (struct mail_index_view_transaction *)view;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
32 struct mail_index_transaction *t = tview->t;
9319
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
33 void **recs;
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
34 unsigned int i, count;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
36 if (tview->lookup_map != NULL)
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
37 mail_index_unmap(&tview->lookup_map);
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
38 if (tview->lookup_return_data != NULL)
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
39 buffer_free(&tview->lookup_return_data);
9319
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
40
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
41 if (array_is_created(&tview->all_recs)) {
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
42 recs = array_get_modifiable(&tview->all_recs, &count);
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
43 for (i = 0; i < count; i++)
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
44 i_free(recs[i]);
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
45 array_free(&tview->all_recs);
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
46 }
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
47
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
48 tview->super->close(view);
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
49 mail_index_transaction_unref(&t);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
52 static uint32_t tview_get_message_count(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 (struct mail_index_view_transaction *)view;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
5855
fd6ff4d9cab1 Removed view->hdr. Use view->map->hdr directly.
Timo Sirainen <tss@iki.fi>
parents: 5228
diff changeset
57 return view->map->hdr.messages_count +
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 (tview->t->last_new_seq == 0 ? 0 :
8213
ffefb9074966 Transaction view: get_message_count() returned one too few when there were new messages.
Timo Sirainen <tss@iki.fi>
parents: 8199
diff changeset
59 tview->t->last_new_seq - tview->t->first_new_seq + 1);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61
2892
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
62 static const struct mail_index_header *
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
63 tview_get_header(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 (struct mail_index_view_transaction *)view;
4528
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
67 const struct mail_index_header *hdr;
6037
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
68 uint32_t next_uid;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
70 /* FIXME: header counters may not be correct */
4528
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
71 hdr = tview->super->get_header(view);
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
72
6037
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
73 next_uid = mail_index_transaction_get_next_uid(tview->t);
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
74 if (next_uid != hdr->next_uid) {
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
75 tview->hdr = *hdr;
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
76 tview->hdr.next_uid = next_uid;
d911d943438e Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents: 6036
diff changeset
77 hdr = &tview->hdr;
4528
74212d11b6b5 Transaction view: mail_index_get_header() returns now updated next_uid field
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
78 }
4529
0ffb6fa11744 And fix for previous change..
Timo Sirainen <tss@iki.fi>
parents: 4528
diff changeset
79 return hdr;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
82 static const struct mail_index_record *
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
83 tview_apply_flag_updates(struct mail_index_view_transaction *tview,
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
84 struct mail_index_map *map,
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
85 const struct mail_index_record *rec, uint32_t seq)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
86 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
87 struct mail_index_transaction *t = tview->t;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
88 const struct mail_transaction_flag_update *updates;
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
89 struct mail_index_record *trec;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
90 unsigned int idx, count;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
91
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
92 /* see if there are any flag updates */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
93 if (seq < t->min_flagupdate_seq || seq > t->max_flagupdate_seq ||
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
94 !array_is_created(&t->updates))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
95 return rec;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
96
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
97 updates = array_get(&t->updates, &count);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
98 idx = mail_index_transaction_get_flag_update_pos(t, 0, count, seq);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
99 if (seq < updates[idx].uid1 || seq > updates[idx].uid2)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
100 return rec;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
101
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
102 /* yes, we have flag updates. since we can't modify rec directly and
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
103 we want to be able to handle multiple mail_index_lookup() calls
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
104 without the second one overriding the first one's data, we'll
9319
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
105 create a records array and return data from there.
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
106
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
107 it's also possible that the record size increases, so we potentially
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
108 have to create multiple arrays. they all get eventually freed when
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
109 the view gets freed. */
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
110 if (map->hdr.record_size > tview->record_size) {
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
111 if (!array_is_created(&tview->all_recs))
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
112 i_array_init(&tview->all_recs, 4);
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
113 tview->recs_count = t->first_new_seq;
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
114 tview->record_size = I_MAX(map->hdr.record_size,
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
115 tview->view.map->hdr.record_size);
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
116 tview->recs = i_malloc(tview->record_size *
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
117 tview->recs_count);
9319
22b45d08cd4e Transaction view: Don't assert-crash if record size grows during transaction.
Timo Sirainen <tss@iki.fi>
parents: 9234
diff changeset
118 array_append(&tview->all_recs, &tview->recs, 1);
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
119 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
120 i_assert(tview->recs_count == t->first_new_seq);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
121 i_assert(seq > 0 && seq <= tview->recs_count);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
122
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
123 trec = PTR_OFFSET(tview->recs, (seq-1) * tview->record_size);
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
124 memcpy(trec, rec, map->hdr.record_size);
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
125 trec->flags |= updates[idx].add_flags;
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
126 trec->flags &= ~updates[idx].remove_flags;
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
127 return trec;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
128 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
129
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
130 static const struct mail_index_record *
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
131 tview_lookup_full(struct mail_index_view *view, uint32_t seq,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
132 struct mail_index_map **map_r, bool *expunged_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 (struct mail_index_view_transaction *)view;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
136 const struct mail_index_record *rec;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 if (seq >= tview->t->first_new_seq) {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 /* FIXME: is this right to return index map..?
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 it's not there yet. */
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 *map_r = view->index->map;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
142 *expunged_r = FALSE;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
143 return mail_index_transaction_lookup(tview->t, seq);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 }
4333
8bfdd3928097 mail_index_lookup() and mail_index_lookup_full() returns now 0 if the mail has been expunged within the transaction.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
145
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
146 rec = tview->super->lookup_full(view, seq, map_r, expunged_r);
9234
ae3e0ff64c94 Transaction view: Fixed getting extension data from messages whose flags had changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
147 rec = tview_apply_flag_updates(tview, *map_r, rec, seq);
4333
8bfdd3928097 mail_index_lookup() and mail_index_lookup_full() returns now 0 if the mail has been expunged within the transaction.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
148
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
149 if (array_is_created(&tview->t->expunges) &&
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
150 seq_range_exists(&tview->t->expunges, seq))
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
151 *expunged_r = TRUE;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
152 return rec;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
155 static void
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
156 tview_lookup_uid(struct mail_index_view *view, uint32_t seq, uint32_t *uid_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 (struct mail_index_view_transaction *)view;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
161 if (seq >= tview->t->first_new_seq)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 *uid_r = mail_index_transaction_lookup(tview->t, seq)->uid;
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
163 else
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
164 tview->super->lookup_uid(view, seq, uid_r);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
167 static void tview_lookup_seq_range(struct mail_index_view *view,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
168 uint32_t first_uid, uint32_t last_uid,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
169 uint32_t *first_seq_r, uint32_t *last_seq_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 (struct mail_index_view_transaction *)view;
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
173 const struct mail_index_record *rec;
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
174 uint32_t seq;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175
8214
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
176 if (!tview->t->reset) {
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
177 tview->super->lookup_seq_range(view, first_uid, last_uid,
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
178 first_seq_r, last_seq_r);
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
179 } else {
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
180 /* index is being reset. we never want to return old
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
181 sequences. */
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
182 *first_seq_r = *last_seq_r = 0;
76425554b4bc Transaction view: If index is reset, don't return old to-be-removed sequences.
Timo Sirainen <tss@iki.fi>
parents: 8213
diff changeset
183 }
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
184 if (tview->t->last_new_seq == 0) {
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
185 /* no new messages, the results are final. */
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
186 return;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
189 rec = mail_index_transaction_lookup(tview->t, tview->t->first_new_seq);
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
190 if (rec->uid == 0) {
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
191 /* new messages don't have UIDs */
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
192 return;
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
193 }
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
194 if (last_uid < rec->uid) {
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
195 /* all wanted messages were existing */
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
196 return;
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
197 }
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
198
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
199 /* at least some of the wanted messages are newly created */
7064
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
200 if (*first_seq_r == 0) {
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
201 seq = tview->t->first_new_seq;
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
202 for (; seq <= tview->t->last_new_seq; seq++) {
8115
8ac8713b1386 mail_index_lookup_seq*() could have returned wrong sequences with transaction views.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
203 rec = mail_index_transaction_lookup(tview->t, seq);
7064
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
204 if (first_uid <= rec->uid)
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
205 break;
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
206 }
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
207 if (seq > tview->t->last_new_seq) {
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
208 /* no messages in range */
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
209 return;
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
210 }
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
211 *first_seq_r = seq;
046d06f52aa6 mail_index_lookup_seq*() were broken for updated transaction view when
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
212 }
6036
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
213
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
214 seq = tview->t->last_new_seq;
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
215 for (; seq >= tview->t->first_new_seq; seq--) {
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
216 rec = mail_index_transaction_lookup(tview->t, seq);
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
217 if (rec->uid <= last_uid) {
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
218 *last_seq_r = seq;
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
219 break;
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
220 }
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
221 }
5d3a941444f1 mail_index_lookup_uid_range() works now correctly when searching for newly
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
222 i_assert(seq >= tview->t->first_new_seq);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
223 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
224
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
225 static void tview_lookup_first(struct mail_index_view *view,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
226 enum mail_flags flags, uint8_t flags_mask,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
227 uint32_t *seq_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 struct mail_index_view_transaction *tview =
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230 (struct mail_index_view_transaction *)view;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 const struct mail_index_record *rec;
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
232 unsigned int append_count;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
233 uint32_t seq, message_count;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234
8215
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
235 if (!tview->t->reset) {
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
236 tview->super->lookup_first(view, flags, flags_mask, seq_r);
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
237 if (*seq_r != 0)
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
238 return;
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
239 } else {
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
240 *seq_r = 0;
c0888db40086 Transaction view: If index is reset, lookup_first() shouldn't return old sequences.
Timo Sirainen <tss@iki.fi>
parents: 8214
diff changeset
241 }
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
242
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
243 rec = array_get(&tview->t->appends, &append_count);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 seq = tview->t->first_new_seq;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 message_count = tview->t->last_new_seq;
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
246 i_assert(append_count == message_count - seq + 1);
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
247
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
248 for (; seq <= message_count; seq++, rec++) {
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
249 if ((rec->flags & flags_mask) == (uint8_t)flags) {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250 *seq_r = seq;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251 break;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
252 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
253 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
255
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
256 static void keyword_index_add(ARRAY_TYPE(keyword_indexes) *keywords,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
257 unsigned int idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
258 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
259 const unsigned int *indexes;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
260 unsigned int i, count;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
261
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
262 indexes = array_get(keywords, &count);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
263 for (i = 0; i < count; i++) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
264 if (indexes[i] == idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
265 return;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
266 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
267 array_append(keywords, &idx, 1);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
268 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
269
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
270 static void keyword_index_remove(ARRAY_TYPE(keyword_indexes) *keywords,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
271 unsigned int idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
272 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
273 const unsigned int *indexes;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
274 unsigned int i, count;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
275
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
276 indexes = array_get(keywords, &count);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
277 for (i = 0; i < count; i++) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
278 if (indexes[i] == idx) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
279 array_delete(keywords, i, 1);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
280 break;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
281 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
282 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
283 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
284
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
285 static void tview_lookup_keywords(struct mail_index_view *view, uint32_t seq,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
286 ARRAY_TYPE(keyword_indexes) *keyword_idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
287 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
288 struct mail_index_view_transaction *tview =
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
289 (struct mail_index_view_transaction *)view;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
290 struct mail_index_transaction *t = tview->t;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
291 const struct mail_index_transaction_keyword_update *updates;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
292 unsigned int i, count;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
293
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
294 tview->super->lookup_keywords(view, seq, keyword_idx);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
295
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
296 if (seq < t->min_flagupdate_seq || seq > t->max_flagupdate_seq) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
297 /* no keyword updates for this sequence */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
298 return;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
299 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
300
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
301 /* apply any keyword updates in this transaction */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
302 if (array_is_created(&t->keyword_resets)) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
303 if (seq_range_exists(&t->keyword_resets, seq))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
304 array_clear(keyword_idx);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
305 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
306
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
307 if (array_is_created(&t->keyword_updates))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
308 updates = array_get(&t->keyword_updates, &count);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
309 else {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
310 updates = NULL;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
311 count = 0;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
312 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
313 for (i = 0; i < count; i++) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
314 if (array_is_created(&updates[i].add_seq) &&
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
315 seq_range_exists(&updates[i].add_seq, seq))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
316 keyword_index_add(keyword_idx, i);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
317 else if (array_is_created(&updates[i].remove_seq) &&
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
318 seq_range_exists(&updates[i].remove_seq, seq))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
319 keyword_index_remove(keyword_idx, i);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
320 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
321 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
322
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
323 static struct mail_index_map *
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
324 tview_get_lookup_map(struct mail_index_view_transaction *tview)
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
325 {
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
326 if (tview->lookup_map == NULL) {
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
327 tview->lookup_map =
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
328 mail_index_map_clone(tview->view.index->map);
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
329 }
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
330 return tview->lookup_map;
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
331 }
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
332
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
333 static const void *
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
334 tview_return_updated_ext(struct mail_index_view_transaction *tview,
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
335 uint32_t seq, const void *data, uint32_t ext_id)
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
336 {
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
337 const struct mail_index_ext *ext;
8192
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
338 const struct mail_index_registered_ext *rext;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
339 const struct mail_transaction_ext_intro *intro;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
340 unsigned int record_align, record_size;
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
341 uint32_t ext_idx;
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
342 size_t pos;
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
343
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
344 /* data begins with a 32bit sequence, followed by the actual
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
345 extension data */
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
346 data = CONST_PTR_OFFSET(data, sizeof(uint32_t));
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
347
8192
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
348 if (!mail_index_map_get_ext_idx(tview->lookup_map, ext_id, &ext_idx)) {
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
349 /* we're adding the extension now. */
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
350 rext = array_idx(&tview->view.index->extensions, ext_id);
8195
413c70b0ae1d Transaction view: Fix for the previous lookup_ext() fix.
Timo Sirainen <tss@iki.fi>
parents: 8192
diff changeset
351 record_align = rext->record_align;
413c70b0ae1d Transaction view: Fix for the previous lookup_ext() fix.
Timo Sirainen <tss@iki.fi>
parents: 8192
diff changeset
352 record_size = rext->record_size;
8192
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
353 } else {
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
354 ext = array_idx(&tview->lookup_map->extensions, ext_idx);
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
355 record_align = ext->record_align;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
356 record_size = ext->record_size;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
357 }
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
358
8192
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
359 /* see if the extension has been resized within this transaction */
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
360 if (array_is_created(&tview->t->ext_resizes) &&
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
361 ext_id < array_count(&tview->t->ext_resizes)) {
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
362 intro = array_idx(&tview->t->ext_resizes, ext_id);
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
363 if (intro[ext_id].name_size != 0) {
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
364 record_align = intro->record_align;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
365 record_size = intro->record_size;
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
366 }
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
367 }
32aa972895cc Transaction view: lookup_ext() crashed if extension was just being added within the transaction.
Timo Sirainen <tss@iki.fi>
parents: 8126
diff changeset
368
8199
94c751fa58e3 Transaction view: One more try at really fixing lookup_ext()..
Timo Sirainen <tss@iki.fi>
parents: 8195
diff changeset
369 if (record_align <= sizeof(uint32_t)) {
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
370 /* data is 32bit aligned already */
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
371 return data;
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
372 } else {
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
373 /* assume we want 64bit alignment - copy the data to
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
374 temporary buffer and return it */
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
375 if (tview->lookup_return_data == NULL) {
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
376 tview->lookup_return_data =
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
377 buffer_create_dynamic(default_pool,
8199
94c751fa58e3 Transaction view: One more try at really fixing lookup_ext()..
Timo Sirainen <tss@iki.fi>
parents: 8195
diff changeset
378 record_size + 64);
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
379 } else if (seq != tview->lookup_prev_seq) {
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
380 /* clear the buffer between lookups for different
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
381 messages */
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
382 buffer_set_used_size(tview->lookup_return_data, 0);
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
383 }
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
384 tview->lookup_prev_seq = seq;
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
385 pos = tview->lookup_return_data->used;
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
386 buffer_append(tview->lookup_return_data, data, record_size);
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
387 return CONST_PTR_OFFSET(tview->lookup_return_data->data, pos);
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
388 }
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
389 }
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
390
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
391 static void
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
392 tview_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
393 uint32_t ext_id, struct mail_index_map **map_r,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
394 const void **data_r, bool *expunged_r)
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
395 {
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
396 struct mail_index_view_transaction *tview =
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
397 (struct mail_index_view_transaction *)view;
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4333
diff changeset
398 const ARRAY_TYPE(seq_array) *ext_buf;
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
399 const void *data;
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
400 unsigned int idx;
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
401
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
402 i_assert(ext_id < array_count(&view->index->extensions));
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
403
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
404 *expunged_r = FALSE;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
405
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
406 if (array_is_created(&tview->t->ext_rec_updates) &&
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
407 ext_id < array_count(&tview->t->ext_rec_updates)) {
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
408 /* there are some ext updates in transaction.
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
409 see if there's any for this sequence. */
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
410 ext_buf = array_idx(&tview->t->ext_rec_updates, ext_id);
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
411 if (array_is_created(ext_buf) &&
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
412 mail_index_seq_array_lookup(ext_buf, seq, &idx)) {
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
413 data = array_idx(ext_buf, idx);
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
414 *map_r = tview_get_lookup_map(tview);
8548
6a6a3bfea547 transaction view: Allow looking up multiple ext datas for the same message without breaking.
Timo Sirainen <tss@iki.fi>
parents: 8215
diff changeset
415 *data_r = tview_return_updated_ext(tview, seq, data,
8126
cf2c4f3c636f mail_index_lookup_ext*() didn't return properly aligned pointers with updated transaction views.
Timo Sirainen <tss@iki.fi>
parents: 8115
diff changeset
416 ext_id);
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
417 return;
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
418 }
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
419 }
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
420
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
421 /* not updated, return the existing value */
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 2918
diff changeset
422 if (seq < tview->t->first_new_seq) {
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
423 tview->super->lookup_ext_full(view, seq, ext_id,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
424 map_r, data_r, expunged_r);
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
425 } else {
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
426 *map_r = view->index->map;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
427 *data_r = NULL;
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
428 }
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
429 }
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2271
diff changeset
430
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
431 static void tview_get_header_ext(struct mail_index_view *view,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
432 struct mail_index_map *map, uint32_t ext_id,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
433 const void **data_r, size_t *data_size_r)
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
434 {
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
435 struct mail_index_view_transaction *tview =
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
436 (struct mail_index_view_transaction *)view;
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
437
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
438 /* FIXME: check updates */
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
439 tview->super->get_header_ext(view, map, ext_id, data_r, data_size_r);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
440 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
441
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
442 static bool tview_ext_get_reset_id(struct mail_index_view *view,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
443 struct mail_index_map *map,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
444 uint32_t ext_id, uint32_t *reset_id_r)
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
445 {
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
446 struct mail_index_view_transaction *tview =
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
447 (struct mail_index_view_transaction *)view;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
448 const uint32_t *reset_id_p;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
449
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
450 if (array_is_created(&tview->t->ext_reset_ids) &&
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
451 ext_id < array_count(&tview->t->ext_reset_ids) &&
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
452 map == tview->lookup_map) {
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
453 reset_id_p = array_idx(&tview->t->ext_reset_ids, ext_id);
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
454 *reset_id_r = *reset_id_p;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
455 return TRUE;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
456 }
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
457
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
458 return tview->super->ext_get_reset_id(view, map, ext_id, reset_id_r);
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
459 }
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6037
diff changeset
460
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
461 static struct mail_index_view_vfuncs trans_view_vfuncs = {
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
462 tview_close,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
463 tview_get_message_count,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
464 tview_get_header,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
465 tview_lookup_full,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
466 tview_lookup_uid,
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
467 tview_lookup_seq_range,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
468 tview_lookup_first,
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 8548
diff changeset
469 tview_lookup_keywords,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
470 tview_lookup_ext_full,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
471 tview_get_header_ext,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
472 tview_ext_get_reset_id
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
473 };
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
474
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
475 struct mail_index_view *
2271
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
476 mail_index_transaction_open_updated_view(struct mail_index_transaction *t)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
477 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
478 struct mail_index_view_transaction *tview;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
479
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
480 if (t->view->syncing) {
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
481 /* transaction view is being synced. while it's done, it's not
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
482 possible to add new messages, but the view itself might
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
483 change. so we can't make a copy of the view. */
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
484 mail_index_view_ref(t->view);
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
485 return t->view;
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
486 }
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
487
2271
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
488 tview = i_new(struct mail_index_view_transaction, 1);
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
489 mail_index_view_clone(&tview->view, t->view);
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
490 tview->view.v = trans_view_vfuncs;
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
491 tview->super = &t->view->v;
2271
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
492 tview->t = t;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
493
2271
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
494 mail_index_transaction_ref(t);
15d959d262a4 UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
495 return &tview->view;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
496 }