Plugin.MailMerge: Register folder with the engine rather than client
Use new support for registering local folders with the engine to do just that for the merge folder, allowing the conversation monitor to successfully load and display email in the folder.
This commit is contained in:
parent
0d283dfc72
commit
da9e01897a
2 changed files with 37 additions and 18 deletions
|
|
@ -108,14 +108,11 @@ public class Plugin.MailMergeFolder : Geary.AbstractLocalFolder {
|
|||
}
|
||||
private Geary.FolderPath _path;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* This is always {@link Folder.SpecialUse.CUSTOM}
|
||||
*/
|
||||
/** {@inheritDoc} */
|
||||
public override Geary.Folder.SpecialUse used_as {
|
||||
get { return CUSTOM; }
|
||||
get { return this._used_as; }
|
||||
}
|
||||
Geary.Folder.SpecialUse _used_as = NONE;
|
||||
|
||||
private Gee.Map<Geary.EmailIdentifier,Geary.Email> map =
|
||||
new Gee.HashMap<Geary.EmailIdentifier,Geary.Email>();
|
||||
|
|
@ -237,8 +234,10 @@ public class Plugin.MailMergeFolder : Geary.AbstractLocalFolder {
|
|||
|
||||
public override void set_used_as_custom(bool enabled)
|
||||
throws Geary.EngineError.UNSUPPORTED {
|
||||
throw new Geary.EngineError.UNSUPPORTED(
|
||||
"Folder special use cannot be changed"
|
||||
this._used_as = (
|
||||
enabled
|
||||
? Geary.Folder.SpecialUse.CUSTOM
|
||||
: Geary.Folder.SpecialUse.NONE
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,8 @@ public class Plugin.MailMerge :
|
|||
private FolderStore? folder_store = null;
|
||||
private EmailStore? email_store = null;
|
||||
|
||||
private MailMergeFolder? merge_folder = null;
|
||||
|
||||
private GLib.SimpleAction? edit_action = null;
|
||||
private GLib.SimpleAction? merge_action = null;
|
||||
|
||||
|
|
@ -84,6 +86,7 @@ public class Plugin.MailMerge :
|
|||
).add_all_to(this.folder_names);
|
||||
|
||||
this.folder_store = yield this.folders.get_folder_store();
|
||||
this.folder_store.folders_available.connect(on_folders_available);
|
||||
|
||||
this.email_store = yield this.email.get_email_store();
|
||||
this.email_store.email_displayed.connect(on_email_displayed);
|
||||
|
|
@ -191,24 +194,18 @@ public class Plugin.MailMerge :
|
|||
id.account
|
||||
);
|
||||
var email = Geary.Collection.first(emails);
|
||||
var merge_folder = new Plugin.MailMergeFolder(
|
||||
this.merge_folder = new Plugin.MailMergeFolder(
|
||||
account_context.account,
|
||||
account_context.account.local_folder_root,
|
||||
this.client_plugins.to_engine_email(email),
|
||||
csv
|
||||
);
|
||||
|
||||
var folder_context = new global::Application.FolderContext(
|
||||
merge_folder
|
||||
account_context.account.register_local_folder(
|
||||
this.merge_folder
|
||||
);
|
||||
folder_context.display_name = _("Mail Merge");
|
||||
folder_context.icon_name = "mail-outbox-symbolic";
|
||||
account_context.add_folders(
|
||||
Geary.Collection.single(folder_context)
|
||||
);
|
||||
|
||||
var main = this.client_application.get_active_main_window();
|
||||
yield main.select_folder(merge_folder, true);
|
||||
yield main.select_folder(this.merge_folder, true);
|
||||
}
|
||||
} catch (GLib.Error err) {
|
||||
debug("Displaying merge folder failed: %s", err.message);
|
||||
|
|
@ -416,6 +413,29 @@ public class Plugin.MailMerge :
|
|||
this.update_composer.begin(registered);
|
||||
}
|
||||
|
||||
private void on_folders_available(Gee.Collection<Folder> available) {
|
||||
foreach (var folder in available) {
|
||||
var engine_folder = this.client_plugins.to_engine_folder(folder);
|
||||
if (this.merge_folder == engine_folder) {
|
||||
try {
|
||||
this.folders.register_folder_used_as(
|
||||
folder,
|
||||
// Translators: The name of the folder used to
|
||||
// display merged email
|
||||
_("Mail Merge"),
|
||||
"mail-outbox-symbolic"
|
||||
);
|
||||
} catch (GLib.Error err) {
|
||||
warning(
|
||||
"Failed to register %s as merge folder: %s",
|
||||
folder.persistent_id,
|
||||
err.message
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void on_email_displayed(Email email) {
|
||||
this.update_email.begin(email);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue