diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java index 72fae3789e..dcee7e352a 100644 --- a/app/src/main/java/eu/faircode/email/DB.java +++ b/app/src/main/java/eu/faircode/email/DB.java @@ -562,7 +562,17 @@ public abstract class DB extends RoomDatabase { " BEGIN" + " UPDATE account SET last_modified = strftime('%s') * 1000" + " WHERE id = NEW.id" + - " AND (NEW.auth_type = " + AUTH_TYPE_PASSWORD + " OR OLD.password = NEW.password);" + + " AND (NEW.auth_type = " + AUTH_TYPE_PASSWORD + " OR OLD.password = NEW.password)" + + " AND OLD.keep_alive_ok IS NEW.keep_alive_ok" + + " AND OLD.keep_alive_failed IS NEW.keep_alive_failed" + + " AND OLD.keep_alive_succeeded IS NEW.keep_alive_succeeded" + + " AND OLD.quota_usage IS NEW.quota_usage" + + " AND OLD.thread IS NEW.thread" + + " AND OLD.state IS NEW.state" + + " AND OLD.warning IS NEW.warning" + + " AND OLD.error IS NEW.error" + + " AND OLD.last_connected IS NEW.last_connected" + + " AND OLD.backoff_until IS NEW.backoff_until;" + " END"); db.execSQL("CREATE TRIGGER IF NOT EXISTS identity_update" + @@ -570,6 +580,9 @@ public abstract class DB extends RoomDatabase { " BEGIN" + " UPDATE identity SET last_modified = strftime('%s') * 1000" + " WHERE id = NEW.id" + + " AND OLD.state IS NEW.state" + + " AND OLD.error IS NEW.error" + + " AND OLD.last_connected IS NEW.last_connected" + " AND (NEW.auth_type = " + AUTH_TYPE_PASSWORD + " OR OLD.password = NEW.password);" + " END"); } diff --git a/app/src/main/java/eu/faircode/email/EntityAccount.java b/app/src/main/java/eu/faircode/email/EntityAccount.java index 6c4f64ade4..e0219e14fa 100644 --- a/app/src/main/java/eu/faircode/email/EntityAccount.java +++ b/app/src/main/java/eu/faircode/email/EntityAccount.java @@ -429,8 +429,8 @@ public class EntityAccount extends EntityOrder implements Serializable { } public static boolean areEqual(EntityAccount a1, EntityAccount other, boolean auth, boolean state) { - return (Objects.equals(a1.uuid, other.uuid) && - Objects.equals(a1.order, other.order) && + return (Objects.equals(a1.order, other.order) && + Objects.equals(a1.uuid, other.uuid) && a1.protocol.equals(other.protocol) && a1.host.equals(other.host) && a1.encryption.equals(other.encryption) && @@ -440,43 +440,57 @@ public class EntityAccount extends EntityOrder implements Serializable { Objects.equals(a1.provider, other.provider) && a1.user.equals(other.user) && (!auth || a1.password.equals(other.password)) && + // certificate Objects.equals(a1.certificate_alias, other.certificate_alias) && Objects.equals(a1.realm, other.realm) && + Objects.equals(a1.fingerprint, other.fingerprint) && Objects.equals(a1.name, other.name) && Objects.equals(a1.category, other.category) && + // signature Objects.equals(a1.color, other.color) && Objects.equals(a1.calendar, other.calendar) && a1.synchronize.equals(other.synchronize) && + Objects.equals(a1.ondemand, other.ondemand) && + Objects.equals(a1.poll_exempted, other.poll_exempted) && a1.primary.equals(other.primary) && a1.notify.equals(other.notify) && a1.browse.equals(other.browse) && a1.leave_on_server.equals(other.leave_on_server) && + Objects.equals(a1.leave_deleted, other.leave_deleted) && a1.leave_on_device.equals(other.leave_on_device) && Objects.equals(a1.max_messages, other.max_messages) && a1.auto_seen.equals(other.auto_seen) && + // separator Objects.equals(a1.swipe_left, other.swipe_left) && Objects.equals(a1.swipe_right, other.swipe_right) && + Objects.equals(a1.move_to, other.move_to) && a1.poll_interval.equals(other.poll_interval) && + Objects.equals(a1.keep_alive_noop, other.keep_alive_noop) && + (!state || Objects.equals(a1.keep_alive_ok, other.keep_alive_ok)) && + (!state || Objects.equals(a1.keep_alive_failed, other.keep_alive_failed)) && + (!state || Objects.equals(a1.keep_alive_succeeded, other.keep_alive_succeeded)) && a1.partial_fetch == other.partial_fetch && a1.ignore_size == other.ignore_size && a1.use_date == other.use_date && a1.use_received == other.use_received && + // prefix a1.unicode == other.unicode && Objects.equals(a1.conditions, other.conditions) && (!state || Objects.equals(a1.quota_usage, other.quota_usage)) && - (!state || Objects.equals(a1.quota_limit, other.quota_limit)) && - (!state || Objects.equals(a1.created, other.created)) && + Objects.equals(a1.quota_limit, other.quota_limit) && + Objects.equals(a1.created, other.created) && Objects.equals(a1.tbd, other.tbd) && + // thread (!state || Objects.equals(a1.state, other.state)) && (!state || Objects.equals(a1.warning, other.warning)) && (!state || Objects.equals(a1.error, other.error)) && (!state || Objects.equals(a1.last_connected, other.last_connected)) && (!state || Objects.equals(a1.backoff_until, other.backoff_until)) && - (!state || Objects.equals(a1.max_size, other.max_size)) && - (!state || Objects.equals(a1.capabilities, other.capabilities)) && - (!state || Objects.equals(a1.capability_idle, other.capability_idle)) && - (!state || Objects.equals(a1.capability_utf8, other.capability_utf8)) && - (!state || Objects.equals(a1.capability_uidl, other.capability_uidl)) && + Objects.equals(a1.max_size, other.max_size) && + Objects.equals(a1.capabilities, other.capabilities) && + Objects.equals(a1.capability_idle, other.capability_idle) && + Objects.equals(a1.capability_utf8, other.capability_utf8) && + Objects.equals(a1.capability_uidl, other.capability_uidl) && (!state || Objects.equals(a1.last_modified, other.last_modified))); } diff --git a/app/src/main/java/eu/faircode/email/EntityIdentity.java b/app/src/main/java/eu/faircode/email/EntityIdentity.java index da0a8d79ec..c46a7e58eb 100644 --- a/app/src/main/java/eu/faircode/email/EntityIdentity.java +++ b/app/src/main/java/eu/faircode/email/EntityIdentity.java @@ -345,8 +345,10 @@ public class EntityIdentity { Objects.equals(i1.provider, other.provider) && i1.user.equals(other.user) && (!auth || i1.password.equals(other.password)) && + // certificate Objects.equals(i1.certificate_alias, other.certificate_alias) && Objects.equals(i1.realm, other.realm) && + Objects.equals(i1.fingerprint, other.fingerprint) && i1.use_ip == other.use_ip && Objects.equals(i1.ehlo, other.ehlo) && i1.synchronize.equals(other.synchronize) && @@ -359,12 +361,23 @@ public class EntityIdentity { Objects.equals(i1.cc, other.cc) && Objects.equals(i1.bcc, other.bcc) && Objects.equals(i1.internal, other.internal) && + Objects.equals(i1.unicode, other.unicode) && + Objects.equals(i1.octetmime, other.octetmime) && + // plain_only + Objects.equals(i1.sign_default, other.sign_default) && + Objects.equals(i1.encrypt_default, other.encrypt_default) && + Objects.equals(i1.encrypt, other.encrypt) && + // delivery_receipt + // read_receipt + // store_sent + // sent_folder Objects.equals(i1.sign_key, other.sign_key) && Objects.equals(i1.sign_key_alias, other.sign_key_alias) && + Objects.equals(i1.tbd, other.tbd) && (!state || Objects.equals(i1.state, other.state)) && (!state || Objects.equals(i1.error, other.error)) && (!state || Objects.equals(i1.last_connected, other.last_connected)) && - (!state || Objects.equals(i1.max_size, other.max_size)) && + Objects.equals(i1.max_size, other.max_size) && (!state || Objects.equals(i1.last_modified, other.last_modified))); }