Hi,

> I guess that in need_keyword_hook case save_init/save_finish hooks will
> have to check email for spams and keyword it. It is not clear how to
> mark mail as spam if both need_folder_hook and need_keyword_hook are
> true.

Well, the need_keyword_hook variable is just internal. The point is that
save_{init,finish} are not invoked when just the keywords change, so I
override the struct mail's update_keywords function.

See
http://git.sipsolutions.net/?p=dovecot-antispam.git;a=blob;f=antispam-storage-1.0.c;hb=HEAD#l265

> > One problem with this is that evolution doesn't sync the keywords to the
> > server right away, only when you change folders. Also, it's not entirely
> > obvious what the code should do when the backend fails since there
> > doesn't seem to be a way to roll back the keyword change easily. Any
> > comments on the code would be appreciated, and you can probably easily
> > make it invoke the backend with what's there to actually test it.
> 
> If I understand how it works with folders -- if message is moved from/to
> spam folder and spam learning fails, dovecot-antispam rolls back the
> IMAP transaction and dovecot reports error to client? (sorry if I am
> wrong, didn't read code nor IMAP specification, just assuming).

Yes.

> Then I think it would be correct to do exactly same with keywords and
> let client handle error. I am not sure if Evolution would handle that...

The thing is that I don't know what context the update_keywords function
runs in and whether it has a transaction at all, so I don't know how to
roll back. I suppose it would be possible to grab the original keyword
list before invoking super.update_keywords() and then resetting to that
if the backend fails...

johannes

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to