Hi Again Timo ! I Trying to port quota plugin notify_sync to my plugin, but i found some issues.
I have the hooks already, to replace the mailbx_allocated, like quota plugin does. static struct mail_storage_hooks emexis_mail_storage_hooks = { .mail_user_created = Mplugin_mail_user_created, .mailbox_allocated = Mplugin_mailbox_allocated, .mail_allocated = Mplugin_mail_allocated, .mailbox_list_created = Mplugin_mailbox_list_created, .mail_namespaces_created = Mplugin_antispam_mail_namespaces_created }; inside the Mplugin_mailbox_allocated, i have: static void emexis_mailbox_allocated(struct mailbox *box) { union mailbox_module_context *zbox; zbox = p_new(box->pool, union mailbox_module_context, 1); zbox->super = box->v; box->v.open = Mplugin_mailbox_open; box->v.sync_notify = Mplugin_mailbox_sync_notify; MODULE_CONTEXT_SET_SELF(box, emexis_storage_module, zbox); } The v.open i rewrite because my plugin needs. I try to call the sync_notify like this: box->v.sync_notify = Mplugin_mailbox_sync_notify; and follow quota plugin, i try to to this too: struct mailbox_vfuncs *v = box->vlast; v->sync_notify = Mplugin_mailbox_sync_notify; But in this two cases, the Mplugin_mailbox_sync_notify is never called... i missing something ?? Tks ! Em 12 de fevereiro de 2012 14:48, Alex Baule <alexwba...@gmail.com> escreveu: > Tks timo ! > > I will see the plugin to do like it! > > Em 12/02/2012 13:46, "Timo Sirainen" <t...@iki.fi> escreveu: > >> Hi, >> >> Yeah, you shouldn't do the erasing directly in expunge(), because it may >> still be aborted. Do it in sync_notify() like quota plugin does. >> >> On 12.2.2012, at 16.52, Alex Baule wrote: >> >> > I want to know because i have header and body splited. To erase the >> > body, i must have shure, that header was expunged. Some tests that i >> > made, the client call expunge, but i don't know why (there is notting >> > in mail log) the header was not expunged, nut my body was, because i >> > call it before expunge the header. something like this. >> > >> > if (found_body){ >> > erase_body(); >> > super.expunge(_mail); >> > } >> > >> > Because that expunge that no happen, (the client call, but the email >> > was not expunged) i think to do like this way: >> > >> > if (found_body){ >> > super.expunge(_mail); >> > if(_mail was expunged){ >> > erase_body(); >> > } >> > } >> > >> > TKs Timo ! >> > >> > Em 12 de fevereiro de 2012 02:19, Timo Sirainen <t...@iki.fi> escreveu: >> >> On 10.2.2012, at 19.39, Alex Baule wrote: >> >> >> >>> Hy Everyone...and Timo ! >> >>> >> >>> There is a way to know if a email was expunged (deleted from hard >> >>> disk) inside a plugin ? I rewrite the expunge function, but the real >> >>> expunge function is void, i can't know if was really expunged. >> >>> >> >>> There is a way to know this ? >> >> >> >> It's not known until transaction_commit() what messages are expunged. >> >> What do you need to know this for? There are a few different ways. >> >> >> >> If you simply need one of the sessions to definitely know that it >> >> expunged a message, you can do it like quota plugin does. (So even if >> >> there >> >> are multiple clients doing EXPUNGE at the same time, quota is never >> >> decreased more than once per mail.) See quota-storage.c and most >> >> importantly >> >> quota_mailbox_sync_notify(). >> >> >> >> Quota code also shows the other method of doing it: keep track of what >> >> mail_expunge()s have been called, and then in transaction commit check if >> >> it >> >> succeeds and if it does do what you want to do. >> >> >> > >> >