[geary] Add archive support for all IMAP accounts
- From: Robert Schroll <rschroll src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Add archive support for all IMAP accounts
- Date: Thu, 28 May 2015 16:23:20 +0000 (UTC)
commit 51ecfe0d9e20e5b8e00d4fcbc0c1014e6445244b
Author: Emersion <contact emersion fr>
Date: Thu May 28 12:19:56 2015 -0400
Add archive support for all IMAP accounts
https://bugzilla.gnome.org/show_bug.cgi?id=713986
.../folder-list/folder-list-folder-entry.vala | 1 +
src/engine/api/geary-account-information.vala | 14 +++++++++++++
.../imap-engine/imap-engine-generic-account.vala | 7 ++++++
.../other/imap-engine-other-account.vala | 2 +-
.../other/imap-engine-other-folder.vala | 21 ++++++++++++++++++-
.../imap/response/imap-mailbox-attributes.vala | 5 +--
6 files changed, 44 insertions(+), 6 deletions(-)
---
diff --git a/src/client/folder-list/folder-list-folder-entry.vala
b/src/client/folder-list/folder-list-folder-entry.vala
index 28931ec..3d9a7d4 100644
--- a/src/client/folder-list/folder-list-folder-entry.vala
+++ b/src/client/folder-list/folder-list-folder-entry.vala
@@ -68,6 +68,7 @@ public class FolderList.FolderEntry : FolderList.AbstractFolderEntry, Sidebar.In
return "task-due-symbolic";
case Geary.SpecialFolderType.ALL_MAIL:
+ case Geary.SpecialFolderType.ARCHIVE:
return "mail-archive-symbolic";
case Geary.SpecialFolderType.SPAM:
diff --git a/src/engine/api/geary-account-information.vala b/src/engine/api/geary-account-information.vala
index 0387503..3fa8cee 100644
--- a/src/engine/api/geary-account-information.vala
+++ b/src/engine/api/geary-account-information.vala
@@ -33,6 +33,7 @@ public class Geary.AccountInformation : BaseObject {
private const string SENT_MAIL_FOLDER_KEY = "sent_mail_folder";
private const string SPAM_FOLDER_KEY = "spam_folder";
private const string TRASH_FOLDER_KEY = "trash_folder";
+ private const string ARCHIVE_FOLDER_KEY = "archive_folder";
private const string SAVE_DRAFTS_KEY = "save_drafts";
private const string USE_EMAIL_SIGNATURE_KEY = "use_email_signature";
private const string EMAIL_SIGNATURE_KEY = "email_signature";
@@ -134,6 +135,7 @@ public class Geary.AccountInformation : BaseObject {
public Geary.FolderPath? sent_mail_folder_path { get; set; default = null; }
public Geary.FolderPath? spam_folder_path { get; set; default = null; }
public Geary.FolderPath? trash_folder_path { get; set; default = null; }
+ public Geary.FolderPath? archive_folder_path { get; set; default = null; }
public Geary.Credentials imap_credentials { get; set; default = new Geary.Credentials(null, null); }
public bool imap_remember_password { get; set; default = true; }
@@ -239,6 +241,8 @@ public class Geary.AccountInformation : BaseObject {
key_file, GROUP, SPAM_FOLDER_KEY));
trash_folder_path = build_folder_path(get_string_list_value(
key_file, GROUP, TRASH_FOLDER_KEY));
+ archive_folder_path = build_folder_path(get_string_list_value(
+ key_file, GROUP, ARCHIVE_FOLDER_KEY));
save_drafts = get_bool_value(key_file, GROUP, SAVE_DRAFTS_KEY, true);
}
@@ -302,6 +306,7 @@ public class Geary.AccountInformation : BaseObject {
sent_mail_folder_path = from.sent_mail_folder_path;
spam_folder_path = from.spam_folder_path;
trash_folder_path = from.trash_folder_path;
+ archive_folder_path = from.archive_folder_path;
save_drafts = from.save_drafts;
use_email_signature = from.use_email_signature;
email_signature = from.email_signature;
@@ -380,6 +385,9 @@ public class Geary.AccountInformation : BaseObject {
case Geary.SpecialFolderType.TRASH:
return trash_folder_path;
+
+ case Geary.SpecialFolderType.ARCHIVE:
+ return archive_folder_path;
default:
assert_not_reached();
@@ -409,6 +417,10 @@ public class Geary.AccountInformation : BaseObject {
case Geary.SpecialFolderType.TRASH:
trash_folder_path = path;
break;
+
+ case Geary.SpecialFolderType.ARCHIVE:
+ archive_folder_path = path;
+ break;
default:
assert_not_reached();
@@ -833,6 +845,8 @@ public class Geary.AccountInformation : BaseObject {
? spam_folder_path.as_list().to_array() : new string[] {}));
key_file.set_string_list(GROUP, TRASH_FOLDER_KEY, (trash_folder_path != null
? trash_folder_path.as_list().to_array() : new string[] {}));
+ key_file.set_string_list(GROUP, ARCHIVE_FOLDER_KEY, (archive_folder_path != null
+ ? archive_folder_path.as_list().to_array() : new string[] {}));
key_file.set_boolean(GROUP, SAVE_DRAFTS_KEY, save_drafts);
diff --git a/src/engine/imap-engine/imap-engine-generic-account.vala
b/src/engine/imap-engine/imap-engine-generic-account.vala
index a8aa022..bef229d 100644
--- a/src/engine/imap-engine/imap-engine-generic-account.vala
+++ b/src/engine/imap-engine/imap-engine-generic-account.vala
@@ -588,6 +588,11 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
// names for the Trash folder, leaving in the English names as well. The first in the list
// will be the default, so please add the most common localized name to the front.
_("Trash | Rubbish | Rubbish Bin"));
+ mailbox_search_names.set(Geary.SpecialFolderType.ARCHIVE,
+ // List of folder names to match for Archive, separated by |. Please add localized common
+ // names for the Trash folder, leaving in the English names as well. The first in the list
+ // will be the default, so please add the most common localized name to the front.
+ _("Archive | Archives"));
Gee.HashMap<Geary.SpecialFolderType, Gee.ArrayList<string>> compiled
= new Gee.HashMap<Geary.SpecialFolderType, Gee.ArrayList<string>>();
@@ -671,6 +676,7 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
case Geary.SpecialFolderType.SENT:
case Geary.SpecialFolderType.SPAM:
case Geary.SpecialFolderType.TRASH:
+ case Geary.SpecialFolderType.ARCHIVE:
break;
default:
@@ -690,6 +696,7 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
Geary.SpecialFolderType.SENT,
Geary.SpecialFolderType.SPAM,
Geary.SpecialFolderType.TRASH,
+ Geary.SpecialFolderType.ARCHIVE,
};
foreach (Geary.SpecialFolderType special in required)
yield ensure_special_folder_async(special, cancellable);
diff --git a/src/engine/imap-engine/other/imap-engine-other-account.vala
b/src/engine/imap-engine/other/imap-engine-other-account.vala
index 22d5fd5..e4e5bdc 100644
--- a/src/engine/imap-engine/other/imap-engine-other-account.vala
+++ b/src/engine/imap-engine/other/imap-engine-other-account.vala
@@ -7,7 +7,7 @@
private class Geary.ImapEngine.OtherAccount : Geary.ImapEngine.GenericAccount {
public OtherAccount(string name, AccountInformation account_information,
Imap.Account remote, ImapDB.Account local) {
- base (name, account_information, false, remote, local);
+ base (name, account_information, true, remote, local);
}
protected override MinimalFolder new_folder(Geary.FolderPath path, Imap.Account remote_account,
diff --git a/src/engine/imap-engine/other/imap-engine-other-folder.vala
b/src/engine/imap-engine/other/imap-engine-other-folder.vala
index 795429f..272d2b9 100644
--- a/src/engine/imap-engine/other/imap-engine-other-folder.vala
+++ b/src/engine/imap-engine/other/imap-engine-other-folder.vala
@@ -4,10 +4,27 @@
* (version 2.1 or later). See the COPYING file in this distribution.
*/
-private class Geary.ImapEngine.OtherFolder : GenericFolder {
+private class Geary.ImapEngine.OtherFolder : GenericFolder, FolderSupport.Archive {
public OtherFolder(OtherAccount account, Imap.Account remote, ImapDB.Account local,
ImapDB.Folder local_folder, SpecialFolderType special_folder_type) {
base (account, remote, local, local_folder, special_folder_type);
}
-}
+ public async Geary.Revokable? archive_email_async(Gee.List<Geary.EmailIdentifier> email_ids,
+ Cancellable? cancellable = null) throws Error {
+ Geary.Folder? archive_folder = null;
+ try {
+ archive_folder = yield
account.get_required_special_folder_async(Geary.SpecialFolderType.ARCHIVE, cancellable);
+ } catch (Error e) {
+ debug("Error looking up archive folder in %s: %s", account.to_string(), e.message);
+ }
+
+ if (archive_folder == null) {
+ debug("Can't archive email because no archive folder was found in %s", account.to_string());
+ } else {
+ return yield move_email_async(email_ids, archive_folder.path, cancellable);
+ }
+
+ return null;
+ }
+}
diff --git a/src/engine/imap/response/imap-mailbox-attributes.vala
b/src/engine/imap/response/imap-mailbox-attributes.vala
index ec9d153..5a84e5b 100644
--- a/src/engine/imap/response/imap-mailbox-attributes.vala
+++ b/src/engine/imap/response/imap-mailbox-attributes.vala
@@ -86,9 +86,8 @@ public class Geary.Imap.MailboxAttributes : Geary.Imap.Flags {
if (contains(MailboxAttribute.SPECIAL_FOLDER_ALL))
return Geary.SpecialFolderType.ALL_MAIL;
- // TODO: Convert into SpecialFolderType.ARCHIVE (to support services that have an Archive
- // folder that isn't an All Mail folder, i.e. Outlook.com):
- // http://redmine.yorba.org/issues/7492
+ if (contains(MailboxAttribute.SPECIAL_FOLDER_ARCHIVE))
+ return Geary.SpecialFolderType.ARCHIVE;
if (contains(MailboxAttribute.SPECIAL_FOLDER_FLAGGED))
return Geary.SpecialFolderType.FLAGGED;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]