Cloud sync: equals

This commit is contained in:
M66B 2023-01-20 09:22:37 +01:00
parent 94d7c74d27
commit 2eb9a5ade8
3 changed files with 51 additions and 11 deletions

View File

@ -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");
}

View File

@ -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)));
}

View File

@ -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)));
}