[Dovecot] dovecot notifying a database about total number of messages.

Timo Sirainen tss at iki.fi
Fri Aug 17 15:51:03 EEST 2007


On Fri, 2007-08-17 at 13:33 +0200, Erland Nylend wrote:
> 1) if I'm using perl, is there any way I can read in the information
> in the index files? Is the data formatted in some standarized way,
> so that I can parse it, or use a module which read in the data?

With v1.0 it would be pretty easy, but v1.1 makes this more difficult
because it doesn't keep dovecot.index up-to-date all the time. Instead
you'd have to read dovecot.index and apply new changes from
dovecot.index.log.

> 2) how would you proceed, if the aim is to end up with dovecot
> notifying a database regarding the number of messages, and unread
> messages?

Create a plugin which overrides mail_storage.sync_deinit(). Quota plugin
could be used as an example:

static int quota_mailbox_sync_deinit(struct mailbox_sync_context *ctx,
				     enum mailbox_status_items status_items,
				     struct mailbox_status *status_r)
{
	struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);

	/* just in case sync_notify() wasn't called with uid=0 */
	quota_mailbox_sync_finish(qbox);

	return qbox->module_ctx.super.sync_deinit(ctx, status_items, status_r);
}

Call super.sync_deinit() with status_items having STATUS_UNREAD.
status_r->unseen then contains the unseen counter.

If you want to avoid useless database updates, you could call
mailbox_get_status() in sync_init() and save the unseen count there, and
then compare in sync_deinit() if it got changed.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://dovecot.org/pipermail/dovecot/attachments/20070817/f3a39fdb/attachment.bin 


More information about the dovecot mailing list