[geary: 47/66] Merge branch 'mainline' into remove-old-msgs-beyond-storage-pref
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary: 47/66] Merge branch 'mainline' into remove-old-msgs-beyond-storage-pref
- Date: Tue, 30 Jun 2020 07:11:36 +0000 (UTC)
commit 4ff783b231cc18ae8f3c3ded3469bcfe6f7c98fc
Merge: 01e114f09 223546773
Author: Chris Heywood <15127-creywood users noreply gitlab gnome org>
Date: Thu Apr 30 18:08:19 2020 +1000
Merge branch 'mainline' into remove-old-msgs-beyond-storage-pref
.gitlab-ci.yml | 15 +-
INSTALL | 21 +-
Makefile | 102 -
NEWS | 115 +
THANKS | 21 +-
code-of-conduct.md | 12 +-
desktop/org.gnome.Geary.appdata.xml.in.in | 34 +-
desktop/org.gnome.Geary.gschema.xml | 6 +
help/C/shortcuts.page | 1 +
help/LINGUAS | 1 +
help/ca/ca.po | 1512 ++++++
help/it/it.po | 635 ++-
icons/format-toolbar-toggle-symbolic.svg | 76 +
icons/meson.build | 1 +
meson.build | 56 +-
meson_options.txt | 11 +-
org.gnome.Geary.json | 66 +-
org.gnome.Geary.yml => org.gnome.Geary.yaml | 50 +-
po/POTFILES.in | 52 +-
po/ca.po | 3186 ++++++-------
po/da.po | 3311 +++++++------
po/de.po | 3050 +++++++-----
po/el.po | 3205 +++++++------
po/es.po | 1163 ++---
po/eu.po | 2330 ++++++----
po/fi.po | 2466 +++++-----
po/hr.po | 4780 ++++++++++++++-----
po/hu.po | 2140 +++++----
po/id.po | 984 ++--
po/it.po | 2032 ++++----
po/ja.po | 2404 ++++++----
po/nl.po | 3104 ++++++++-----
po/pl.po | 1100 +++--
po/pt_BR.po | 1651 ++++---
po/sv.po | 1453 +++---
po/tr.po | 1190 ++---
po/uk.po | 4609 ++++++++++++-------
po/zh_TW.po | 4848 ++++++++++++++------
src/client/accounts/accounts-editor-edit-pane.vala | 4 +-
src/client/accounts/accounts-editor-row.vala | 7 +-
src/client/accounts/accounts-editor.vala | 4 +-
src/client/accounts/accounts-manager.vala | 131 +-
.../accounts/accounts-signature-web-view.vala | 4 +-
.../application/application-account-context.vala | 146 +
.../application/application-avatar-store.vala | 5 +-
src/client/application/application-client.vala | 251 +-
.../application/application-configuration.vala | 21 +-
.../application/application-contact-store.vala | 21 +-
src/client/application/application-contact.vala | 15 +
src/client/application/application-controller.vala | 827 ++--
.../application-email-plugin-context.vala | 95 +
.../application-email-store-factory.vala | 288 ++
.../application/application-folder-context.vala | 108 +
.../application-folder-plugin-context.vala | 102 +
.../application-folder-store-factory.vala | 335 ++
.../application/application-main-window.vala | 567 +--
.../application-notification-context.vala | 296 --
.../application-notification-plugin-context.vala | 329 ++
.../application/application-plugin-manager.vala | 602 ++-
src/client/application/main.vala | 19 +-
...mponents-web-view.vala => client-web-view.vala} | 156 +-
.../components/components-info-bar-stack.vala | 193 +
src/client/components/components-info-bar.vala | 108 +
.../components/components-inspector-log-view.vala | 262 +-
src/client/components/components-inspector.vala | 18 +
.../components/components-preferences-window.vala | 151 +-
...ala => components-problem-report-info-bar.vala} | 50 +-
src/client/composer/composer-box.vala | 2 +-
src/client/composer/composer-email-entry.vala | 29 +-
src/client/composer/composer-embed.vala | 6 +-
src/client/composer/composer-headerbar.vala | 11 +-
src/client/composer/composer-link-popover.vala | 30 +-
src/client/composer/composer-web-view.vala | 12 +-
src/client/composer/composer-widget.vala | 650 +--
src/client/composer/composer-window.vala | 2 +-
src/client/composer/contact-entry-completion.vala | 94 +-
src/client/composer/spell-check-popover.vala | 73 +-
.../conversation-list/conversation-list-view.vala | 4 +-
.../formatted-conversation-data.vala | 2 +-
.../conversation-contact-popover.vala | 10 +-
.../conversation-viewer/conversation-email.vala | 50 +-
.../conversation-viewer/conversation-list-box.vala | 155 +-
.../conversation-viewer/conversation-message.vala | 355 +-
.../conversation-viewer/conversation-viewer.vala | 37 +-
.../conversation-viewer/conversation-web-view.vala | 46 +-
src/client/dialogs/alert-dialog.vala | 1 -
.../folder-list/folder-list-account-branch.vala | 82 +-
.../folder-list/folder-list-folder-entry.vala | 133 +-
.../folder-list-inbox-folder-entry.vala | 10 +-
.../folder-list/folder-list-inboxes-branch.vala | 8 +-
.../folder-list/folder-list-search-branch.vala | 6 +-
src/client/folder-list/folder-list-tree.vala | 136 +-
src/client/meson.build | 67 +-
....in => desktop-notifications.plugin.desktop.in} | 3 +-
.../desktop-notifications.vala | 303 +-
.../plugin/desktop-notifications/meson.build | 8 +-
.../email-templates.plugin.desktop.in | 4 +
.../plugin/email-templates/email-templates.vala | 364 ++
src/client/plugin/email-templates/meson.build | 26 +
.../folder-highlight.plugin.desktop.in | 4 +
.../plugin/folder-highlight/folder-highlight.vala | 99 +
src/client/plugin/folder-highlight/meson.build | 26 +
src/client/plugin/meson.build | 9 +
src/client/plugin/messaging-menu/meson.build | 10 +-
....plugin.in => messaging-menu.plugin.desktop.in} | 3 +-
.../plugin/messaging-menu/messaging-menu.vala | 112 +-
src/client/plugin/notification-badge/meson.build | 6 +-
.../notification-badge.plugin.desktop.in | 4 +
.../notification-badge.plugin.in | 5 -
.../notification-badge/notification-badge.vala | 90 +-
src/client/plugin/plugin-account.vala | 21 +
src/client/plugin/plugin-application.vala | 64 +
src/client/plugin/plugin-button.vala | 36 +
src/client/plugin/plugin-composer.vala | 50 +
src/client/plugin/plugin-contact-store.vala | 41 +
src/client/plugin/plugin-email-extension.vala | 78 +
src/client/plugin/plugin-email-store.vala | 47 +
src/client/plugin/plugin-email.vala | 60 +
src/client/plugin/plugin-error.vala | 30 +
src/client/plugin/plugin-folder-extension.vala | 97 +
src/client/plugin/plugin-folder-store.vala | 67 +
src/client/plugin/plugin-folder.vala | 44 +
src/client/plugin/plugin-info-bar.vala | 70 +
.../plugin/plugin-notification-extension.vala | 126 +
src/client/plugin/plugin-notification.vala | 29 -
src/client/plugin/plugin-plugin-base.vala | 47 +
src/client/plugin/plugin-trusted-extension.vala | 40 +
src/client/plugin/sent-sound/meson.build | 29 +
.../plugin/sent-sound/sent-sound.plugin.desktop.in | 4 +
src/client/plugin/sent-sound/sent-sound.vala | 55 +
src/client/plugin/special-folders/meson.build | 26 +
.../special-folders.plugin.desktop.in | 3 +
.../plugin/special-folders/special-folders.vala | 239 +
src/client/sidebar/sidebar-common.vala | 2 +-
src/client/sidebar/sidebar-entry.vala | 9 +-
src/client/sidebar/sidebar-tree.vala | 110 +-
src/client/util/util-avatar.vala | 14 +-
src/client/util/util-cache.vala | 11 +-
src/client/util/util-email.vala | 7 +-
.../{util-international.vala => util-i18n.vala} | 70 +-
src/client/web-process/web-process-extension.vala | 43 +-
src/console/main.vala | 18 +-
src/engine/api/geary-account-information.vala | 169 +-
src/engine/api/geary-account.vala | 33 +-
src/engine/api/geary-base-object.vala | 2 +-
src/engine/api/geary-client-service.vala | 19 +-
src/engine/api/geary-engine.vala | 10 +-
src/engine/api/geary-folder.vala | 149 +-
src/engine/api/geary-logging.vala | 607 ---
src/engine/api/geary-problem-report.vala | 33 +-
src/engine/api/geary-special-folder-type.vala | 46 +-
src/engine/app/app-conversation-monitor.vala | 155 +-
src/engine/app/app-draft-manager.vala | 109 +-
src/engine/app/app-search-folder.vala | 33 +-
.../conversation-monitor/app-conversation-set.vala | 29 +-
src/engine/common/common-contact-harvester.vala | 7 +-
src/engine/db/db-connection.vala | 8 +-
src/engine/db/db-context.vala | 63 +-
src/engine/db/db-result.vala | 34 +-
src/engine/db/db-statement.vala | 4 +-
.../gmail/imap-engine-gmail-account.vala | 40 +-
.../gmail/imap-engine-gmail-all-mail-folder.vala | 5 +-
.../gmail/imap-engine-gmail-drafts-folder.vala | 5 +-
.../gmail/imap-engine-gmail-folder.vala | 8 +-
.../gmail/imap-engine-gmail-spam-trash-folder.vala | 4 +-
.../imap-engine/imap-engine-account-operation.vala | 5 -
.../imap-engine/imap-engine-account-processor.vala | 5 -
.../imap-engine-account-synchronizer.vala | 5 -
.../imap-engine/imap-engine-generic-account.vala | 300 +-
.../imap-engine/imap-engine-generic-folder.vala | 8 +-
.../imap-engine/imap-engine-minimal-folder.vala | 47 +-
.../imap-engine/imap-engine-replay-queue.vala | 80 +-
.../other/imap-engine-other-account.vala | 12 +-
.../other/imap-engine-other-folder.vala | 5 +-
.../outlook/imap-engine-outlook-account.vala | 16 +-
.../outlook/imap-engine-outlook-drafts-folder.vala | 5 +-
.../outlook/imap-engine-outlook-folder.vala | 4 +-
.../yahoo/imap-engine-yahoo-account.vala | 12 +-
.../yahoo/imap-engine-yahoo-folder.vala | 4 +-
src/engine/imap/api/imap-account-session.vala | 24 +-
.../imap/{response => api}/imap-capabilities.vala | 47 +-
src/engine/imap/api/imap-client-service.vala | 137 +-
src/engine/imap/api/imap-session-object.vala | 7 +-
src/engine/imap/command/imap-command.vala | 6 +-
src/engine/imap/command/imap-create-command.vala | 36 +-
src/engine/imap/imap-error.vala | 7 +-
.../imap/response/imap-mailbox-attribute.vala | 127 +-
.../imap/response/imap-mailbox-attributes.vala | 57 +-
.../imap/response/imap-mailbox-information.vala | 2 +-
src/engine/imap/response/imap-response-code.vala | 16 +-
src/engine/imap/response/imap-server-data.vala | 20 +-
.../imap/transport/imap-client-connection.vala | 227 +-
src/engine/imap/transport/imap-client-session.vala | 625 ++-
src/engine/imap/transport/imap-deserializer.vala | 131 +-
src/engine/imap/transport/imap-serializer.vala | 80 +-
src/engine/meson.build | 4 +-
src/engine/outbox/outbox-folder.vala | 11 +-
.../rfc822/rfc822-gmime-filter-blockquotes.vala | 6 +-
src/engine/rfc822/rfc822-gmime-filter-flowed.vala | 4 +-
src/engine/rfc822/rfc822-gmime-filter-plain.vala | 4 +-
src/engine/rfc822/rfc822-message.vala | 46 +-
src/engine/rfc822/rfc822-utils.vala | 10 +-
src/engine/smtp/smtp-client-connection.vala | 58 +-
src/engine/smtp/smtp-client-service.vala | 22 +-
src/engine/smtp/smtp-client-session.vala | 34 +-
src/engine/util/util-connectivity-manager.vala | 2 +-
src/engine/util/util-generic-capabilities.vala | 82 +-
src/engine/util/util-logging.vala | 613 ++-
src/engine/util/util-stream.vala | 74 -
src/mailer/main.vala | 3 +-
src/meson.build | 58 +-
src/sqlite3-unicodesn/meson.build | 4 +-
test/client/accounts/accounts-manager-test.vala | 39 +-
...st-case.vala => client-web-view-test-case.vala} | 28 +-
...eb-view-test.vala => client-web-view-test.vala} | 10 +-
test/client/composer/composer-web-view-test.vala | 30 +-
test/client/util/util-avatar-test.vala | 2 +
test/engine/api/geary-account-mock.vala | 18 +-
test/engine/api/geary-attachment-test.vala | 36 +-
test/engine/api/geary-folder-mock.vala | 35 +-
test/engine/app/app-conversation-monitor-test.vala | 76 +-
test/engine/app/app-conversation-set-test.vala | 2 +-
test/engine/app/app-conversation-test.vala | 2 +-
.../common/common-contact-harvester-test.vala | 30 +-
.../common/common-contact-store-impl-test.vala | 28 +-
test/engine/db/db-database-test.vala | 21 +-
test/engine/db/db-versioned-database-test.vala | 3 +-
test/engine/imap-db/imap-db-account-test.vala | 38 +-
test/engine/imap-db/imap-db-attachment-test.vala | 4 +-
test/engine/imap-db/imap-db-database-test.vala | 6 +-
test/engine/imap-db/imap-db-folder-test.vala | 28 +-
.../imap-engine-generic-account-test.vala | 10 +-
.../imap/command/imap-create-command-test.vala | 2 +-
.../transport/imap-client-connection-test.vala | 160 +
.../imap/transport/imap-client-session-test.vala | 415 ++
.../imap/transport/imap-deserializer-test.vala | 48 +-
test/engine/rfc822-message-test.vala | 111 +-
test/engine/rfc822-utils-test.vala | 31 +
test/engine/util-timeout-manager-test.vala | 10 +-
test/integration/imap/client-session.vala | 16 +-
test/integration/smtp/client-session.vala | 12 +-
...state-test.vala => client-page-state-test.vala} | 16 +-
test/js/composer-page-state-test.vala | 2 +-
test/js/conversation-page-state-test.vala | 2 +-
test/meson.build | 9 +-
test/mock-object.vala | 217 +-
test/test-case.vala | 143 +-
test/test-client.vala | 10 +-
test/test-engine.vala | 16 +-
test/test-server.vala | 222 +
ui/application-main-window.ui | 319 +-
ui/client-web-view-allow-remote-images.js | 11 +
ui/{components-web-view.js => client-web-view.js} | 5 +-
ui/components-inspector-log-view.ui | 106 +-
ui/components-inspector.ui | 58 +-
ui/composer-link-popover.ui | 43 +-
ui/composer-web-view.css | 1 +
ui/composer-web-view.js | 4 +-
ui/composer-widget.ui | 21 +-
ui/conversation-email.ui | 137 +-
ui/conversation-message.ui | 146 +-
ui/geary.css | 20 +-
ui/main-toolbar-menus.ui | 16 +-
ui/main-window-info-bar.ui | 80 -
ui/org.gnome.Geary.gresource.xml | 4 +-
265 files changed, 42544 insertions(+), 26561 deletions(-)
---
diff --cc src/client/application/application-controller.vala
index 8c95cab2b,becc3acd8..dc9aa23f8
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@@ -1405,45 -1408,10 +1420,39 @@@ internal class Application.Controller
}
}
+ /**
+ * Track a window receiving focus, for idle background work.
+ */
+ public void window_focus_in() {
+ this.all_windows_backgrounded_timeout.reset();
+
+ if (this.storage_cleanup_cancellable != null) {
+ this.storage_cleanup_cancellable.cancel();
+
+ // Cleanup was still running and we don't know where we got to so
+ // we'll clear each of these so it runs next time we're in the
+ // background
+ foreach (AccountContext context in this.accounts.values) {
+ context.cancellable.cancelled.disconnect(this.storage_cleanup_cancellable.cancel);
+
+ Geary.Account account = context.account;
+ account.last_storage_cleanup = null;
+ }
+ this.storage_cleanup_cancellable = null;
+ }
+ }
+
+ /**
+ * Track a window going unfocused, for idle background work.
+ */
+ public void window_focus_out() {
+ this.all_windows_backgrounded_timeout.start();
+ }
+
/** Displays a composer on the last active main window. */
- internal void show_composer(Composer.Widget composer,
- Gee.Collection<Geary.EmailIdentifier>? refers_to,
- MainWindow? show_on) {
- var target = show_on;
- if (target == null) {
- target = this.application.get_active_main_window();
- }
-
- target.show_composer(composer, refers_to);
+ internal void show_composer(Composer.Widget composer) {
+ var target = this.application.get_active_main_window();
+ target.show_composer(composer);
composer.set_focus();
}
diff --cc src/engine/api/geary-account.vala
index 432fa3641,e08f9cc06..34d67a30c
--- a/src/engine/api/geary-account.vala
+++ b/src/engine/api/geary-account.vala
@@@ -279,16 -255,6 +279,11 @@@ public abstract class Geary.Account : B
public signal void email_flags_changed(Geary.Folder folder,
Gee.Map<Geary.EmailIdentifier, Geary.EmailFlags> map);
+ /**
+ * Fired when last_storage_cleanup changes.
+ */
+ public signal void last_storage_cleanup_changed(GLib.DateTime? new_value);
+
- /** {@inheritDoc} */
- public Logging.Flag logging_flags {
- get; protected set; default = Logging.Flag.ALL;
- }
-
/** {@inheritDoc} */
public Logging.Source? logging_parent { get { return null; } }
diff --cc src/engine/app/app-search-folder.vala
index bdc3f743b,f161c9fcf..85c8c75c6
--- a/src/engine/app/app-search-folder.vala
+++ b/src/engine/app/app-search-folder.vala
@@@ -126,10 -126,9 +126,10 @@@ public class Geary.App.SearchFolder
this._path = root.get_child(MAGIC_BASENAME, Trillian.TRUE);
account.folders_available_unavailable.connect(on_folders_available_unavailable);
- account.folders_special_type.connect(on_folders_special_type);
+ account.folders_use_changed.connect(on_folders_use_changed);
account.email_locally_complete.connect(on_email_locally_complete);
account.email_removed.connect(on_account_email_removed);
+ account.email_locally_removed.connect(on_account_email_removed);
new_contents();
@@@ -140,10 -139,9 +140,10 @@@
~SearchFolder() {
account.folders_available_unavailable.disconnect(on_folders_available_unavailable);
- account.folders_special_type.disconnect(on_folders_special_type);
+ account.folders_use_changed.disconnect(on_folders_use_changed);
account.email_locally_complete.disconnect(on_email_locally_complete);
account.email_removed.disconnect(on_account_email_removed);
+ account.email_locally_removed.disconnect(on_account_email_removed);
}
/**
diff --cc src/engine/imap-engine/imap-engine-generic-account.vala
index 89881c9be,6a83ff01d..1c3097b0d
--- a/src/engine/imap-engine/imap-engine-generic-account.vala
+++ b/src/engine/imap-engine/imap-engine-generic-account.vala
@@@ -17,15 -17,12 +17,15 @@@ private abstract class Geary.ImapEngine
// we don't need to double check.
private const int REFRESH_FOLDER_LIST_SEC = 15 * 60;
+ /** Minimum interval between account storage cleanup work */
+ private const uint APP_BACKGROUNDED_CLEANUP_WORK_INTERVAL_MINUTES = 60 * 24;
+
- private const Geary.SpecialFolderType[] SUPPORTED_SPECIAL_FOLDERS = {
- Geary.SpecialFolderType.DRAFTS,
- Geary.SpecialFolderType.SENT,
- Geary.SpecialFolderType.SPAM,
- Geary.SpecialFolderType.TRASH,
- Geary.SpecialFolderType.ARCHIVE,
+ private const Folder.SpecialUse[] SUPPORTED_SPECIAL_FOLDERS = {
+ DRAFTS,
+ SENT,
+ JUNK,
+ TRASH,
+ ARCHIVE,
};
private static GLib.VariantType email_id_type = new GLib.VariantType(
diff --cc test/engine/imap-db/imap-db-folder-test.vala
index 7bd023842,17baabdc9..eac4c0b85
--- a/test/engine/imap-db/imap-db-folder-test.vala
+++ b/test/engine/imap-db/imap-db-folder-test.vala
@@@ -324,70 -323,6 +324,70 @@@ class Geary.ImapDB.FolderTest : TestCas
assert_flags(test, test_flags);
}
+ public void detach_emails_before_timestamp() throws GLib.Error {
+ // Ensures that messages outside the folder and within the epoch aren't
+ // removed, and that messages meeting the criteria are removed.
+
+ this.account.db.exec(
+ "INSERT INTO FolderTable (id, name) VALUES (2, 'other');"
+ );
+
+ GLib.DateTime threshold = new GLib.DateTime.local(2020, 1, 1, 0, 0, 0);
+ GLib.DateTime beyond_threshold = new GLib.DateTime.local(2019, 1, 1, 0, 0, 0);
+ GLib.DateTime within_threshold = new GLib.DateTime.local(2021, 1, 1, 0, 0, 0);
+
+ Email.Field fixture_fields = Email.Field.RECEIVERS;
+ string fixture_to = "test1 example com";
+ this.account.db.exec(
+ "INSERT INTO MessageTable (id, fields, to_field, internaldate_time_t) " +
+ "VALUES (1, %d, '%s', %s);".printf(fixture_fields,
+ fixture_to,
+ within_threshold.to_unix().to_string())
+ );
+ this.account.db.exec(
+ "INSERT INTO MessageTable (id, fields, to_field, internaldate_time_t) " +
+ "VALUES (2, %d, '%s', %s);".printf(fixture_fields,
+ fixture_to,
+ within_threshold.to_unix().to_string())
+ );
+ this.account.db.exec(
+ "INSERT INTO MessageTable (id, fields, to_field, internaldate_time_t) " +
+ "VALUES (3, %d, '%s', %s);".printf(fixture_fields,
+ fixture_to,
+ beyond_threshold.to_unix().to_string())
+ );
+
+ this.account.db.exec("""
+ INSERT INTO MessageLocationTable
+ (id, message_id, folder_id, ordering, remove_marker)
+ VALUES
+ (1, 1, 1, 1, 1),
+ (2, 2, 2, 1, 1),
+ (3, 3, 1, 2, 1);
+ """);
+
+ this.folder.detach_emails_before_timestamp.begin(
+ threshold,
+ null,
- (obj, ret) => { async_complete(ret); }
++ this.async_completion
+ );
+ this.folder.detach_emails_before_timestamp.end(async_result());
+
+ int64[] expected = { 1, 2 };
+ Db.Result result = this.account.db.query(
+ "SELECT id FROM MessageLocationTable"
+ );
+
+ int i = 0;
+ while (!result.finished) {
+ assert_true(i < expected.length, "Too many rows");
+ assert_int64(expected[i], result.int64_at(0));
+ i++;
+ result.next();
+ }
+ assert_true(i == expected.length, "Not enough rows");
+ }
+
private Email new_mock_remote_email(int64 uid,
string? subject = null,
Geary.EmailFlags? flags = null) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]