We now have a proper junk mail filtering API. All junk filtering
extensions must subclass EMailJunkFilter for user preferences and
availability testing, and implement the CamelJunkFilter interface
for the actual junk filtering and learning operations.
The bogofilter module should be feature-equivalent to its former
EPlugin. The spamassassin module is far more complex. It's nearly
feature-equivalent to its former EPlugin, but I ditched the spamd
respawning code since it seemed unnecessary for a mail client to
have to deal with. If there's a huge outcry from users about it
I'll reluctantly put it back, but I don't expect one.
This gets us a step closer to killing off EConfig, and eventually
the EPlugin framework itself.
Remove the "Generate a D-Bus message" checkbox and just do it.
Replaced "Show icon in notification area" and "Popup message together
with the icon" checkboxes with a single "Show notification when a new
message arrives" checkbox.
Re-show an unacknowledged notification message when additional new
messages arrive.
Replaced the "Default" action label in notification messages with
"Show $FOLDER_NAME" (e.g. "Show Inbox").
camel_stream_printf() is next on the chopping block.
Use g_strdup_printf() or a GString to construct a formatted string in
memory, pass it to camel_stream_write() in one go, and then check for
errors (unless it's a memory stream).
Give it a CamelStore and folder name instead of an EAccount and folder
URI. Both the EAccount and folder URI can be easily retrieved from the
CamelStore and folder name.
There were a few places where we were accessing the folder tree model
directly to get the selected store + folder name, or were asking for the
selected URI only to parse back into its store + folder name components.
All this so EMFolderTree can submit EActivity instances for async ops.
You can obtain an EMailSession from an EMailBackend, but not vice versa.
Creates lots of pretty ripples in the mail code, but ultimately reduces
complexity. So it's a code cleanup of sorts.
Use g_io_scheduler_push_job() instead of g_thread_create(). When the
operation is finished, call gtk_main_quit() from the main thread using
g_io_scheduler_job_send_to_mainloop().
Also, check for cancellation with a GCancellable instead of a boolean.
Note: We really should be using GLib's process spawning API
instead of system(), but that's a job for another day.
I'm mainly trying to get rid of mail_get_folder(), but I'm also tired of
this plugin blocking the UI. If there's a lot of messages the lockup is
really noticable.
Rename the existing 'account' member to 'modified_account' and add an
'original_account' member so plugins have direct access to both.
Mostly of benefit to the imap-features plugin.