int (*get_last_uid)(struct fts_backend *backend, struct mailbox *box,
uint32_t *last_uid_r);
+ /* If NULL, this is implemented using get_last_uid() */
+ int (*is_uid_indexed)(struct fts_backend *backend, struct mailbox *box,
+ uint32_t uid, uint32_t *last_indexed_uid_r);
struct fts_backend_update_context *
(*update_init)(struct fts_backend *backend);
return backend->v.get_last_uid(backend, box, last_uid_r);
}
+int fts_backend_is_uid_indexed(struct fts_backend *backend, struct mailbox *box,
+ uint32_t uid, uint32_t *last_indexed_uid_r)
+{
+ uint32_t last_uid;
+
+ if (box->virtual_vfuncs != NULL || backend->v.is_uid_indexed == NULL) {
+ if (fts_backend_get_last_uid(backend, box, &last_uid) < 0)
+ return -1;
+ if (uid > last_uid) {
+ *last_indexed_uid_r = last_uid;
+ return 0;
+ }
+ return 1;
+ }
+ return backend->v.is_uid_indexed(backend, box, uid, last_indexed_uid_r);
+}
+
bool fts_backend_is_updating(struct fts_backend *backend)
{
return backend->updating;
/* Get the last_uid for the mailbox. */
int fts_backend_get_last_uid(struct fts_backend *backend, struct mailbox *box,
uint32_t *last_uid_r);
+/* Returns 1 if uid has already been indexed, 0 if not, -1 on error.
+ If 0 is returned, also return last_indexed_uid_r. */
+int fts_backend_is_uid_indexed(struct fts_backend *backend, struct mailbox *box,
+ uint32_t uid, uint32_t *last_indexed_uid_r);
/* Returns TRUE if there exists an update context. */
bool fts_backend_is_updating(struct fts_backend *backend);