diff --git a/app/schemas/eu.faircode.email.DB/42.json b/app/schemas/eu.faircode.email.DB/42.json deleted file mode 100644 index 21e0cf93f2..0000000000 --- a/app/schemas/eu.faircode.email.DB/42.json +++ /dev/null @@ -1,1453 +0,0 @@ -{ - "formatVersion": 1, - "database": { - "version": 42, - "identityHash": "c10e6fc6a2321f2811ec2a78184507f3", - "entities": [ - { - "tableName": "identity", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `email` TEXT NOT NULL, `account` INTEGER NOT NULL, `display` TEXT, `color` INTEGER, `signature` TEXT, `auth_type` INTEGER NOT NULL, `host` TEXT NOT NULL, `starttls` INTEGER NOT NULL, `insecure` INTEGER NOT NULL, `port` INTEGER NOT NULL, `user` TEXT NOT NULL, `password` TEXT NOT NULL, `realm` TEXT, `synchronize` INTEGER NOT NULL, `primary` INTEGER NOT NULL, `replyto` TEXT, `bcc` TEXT, `delivery_receipt` INTEGER NOT NULL, `read_receipt` INTEGER NOT NULL, `store_sent` INTEGER NOT NULL, `sent_folder` INTEGER, `tbd` INTEGER, `state` TEXT, `error` TEXT, `last_connected` INTEGER, FOREIGN KEY(`account`) REFERENCES `account`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "email", - "columnName": "email", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "account", - "columnName": "account", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "display", - "columnName": "display", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "color", - "columnName": "color", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "signature", - "columnName": "signature", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "auth_type", - "columnName": "auth_type", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "host", - "columnName": "host", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "starttls", - "columnName": "starttls", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "insecure", - "columnName": "insecure", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "port", - "columnName": "port", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "user", - "columnName": "user", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "password", - "columnName": "password", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "realm", - "columnName": "realm", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "synchronize", - "columnName": "synchronize", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "primary", - "columnName": "primary", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "replyto", - "columnName": "replyto", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "bcc", - "columnName": "bcc", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "delivery_receipt", - "columnName": "delivery_receipt", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "read_receipt", - "columnName": "read_receipt", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "store_sent", - "columnName": "store_sent", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "sent_folder", - "columnName": "sent_folder", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "tbd", - "columnName": "tbd", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "state", - "columnName": "state", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "last_connected", - "columnName": "last_connected", - "affinity": "INTEGER", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_identity_account", - "unique": false, - "columnNames": [ - "account" - ], - "createSql": "CREATE INDEX `index_identity_account` ON `${TABLE_NAME}` (`account`)" - }, - { - "name": "index_identity_account_email", - "unique": false, - "columnNames": [ - "account", - "email" - ], - "createSql": "CREATE INDEX `index_identity_account_email` ON `${TABLE_NAME}` (`account`, `email`)" - } - ], - "foreignKeys": [ - { - "table": "account", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "account" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "account", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `auth_type` INTEGER NOT NULL, `pop` INTEGER NOT NULL, `host` TEXT NOT NULL, `starttls` INTEGER NOT NULL, `insecure` INTEGER NOT NULL, `port` INTEGER NOT NULL, `user` TEXT NOT NULL, `password` TEXT NOT NULL, `realm` TEXT, `name` TEXT, `signature` TEXT, `color` INTEGER, `synchronize` INTEGER NOT NULL, `primary` INTEGER NOT NULL, `notify` INTEGER NOT NULL, `browse` INTEGER NOT NULL, `swipe_left` INTEGER, `swipe_right` INTEGER, `poll_interval` INTEGER NOT NULL, `prefix` TEXT, `created` INTEGER, `tbd` INTEGER, `state` TEXT, `error` TEXT, `last_connected` INTEGER)", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "auth_type", - "columnName": "auth_type", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "pop", - "columnName": "pop", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "host", - "columnName": "host", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "starttls", - "columnName": "starttls", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "insecure", - "columnName": "insecure", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "port", - "columnName": "port", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "user", - "columnName": "user", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "password", - "columnName": "password", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "realm", - "columnName": "realm", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "signature", - "columnName": "signature", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "color", - "columnName": "color", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "synchronize", - "columnName": "synchronize", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "primary", - "columnName": "primary", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "notify", - "columnName": "notify", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "browse", - "columnName": "browse", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "swipe_left", - "columnName": "swipe_left", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "swipe_right", - "columnName": "swipe_right", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "poll_interval", - "columnName": "poll_interval", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "prefix", - "columnName": "prefix", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "created", - "columnName": "created", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "tbd", - "columnName": "tbd", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "state", - "columnName": "state", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "last_connected", - "columnName": "last_connected", - "affinity": "INTEGER", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [], - "foreignKeys": [] - }, - { - "tableName": "folder", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` INTEGER, `name` TEXT NOT NULL, `type` TEXT NOT NULL, `level` INTEGER NOT NULL, `synchronize` INTEGER NOT NULL, `poll` INTEGER NOT NULL, `download` INTEGER NOT NULL, `sync_days` INTEGER NOT NULL, `keep_days` INTEGER NOT NULL, `display` TEXT, `hide` INTEGER NOT NULL, `unified` INTEGER NOT NULL, `notify` INTEGER NOT NULL, `keywords` TEXT, `initialize` INTEGER NOT NULL, `tbc` INTEGER, `tbd` INTEGER, `state` TEXT, `sync_state` TEXT, `error` TEXT, `last_sync` INTEGER, FOREIGN KEY(`account`) REFERENCES `account`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "account", - "columnName": "account", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "type", - "columnName": "type", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "level", - "columnName": "level", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "synchronize", - "columnName": "synchronize", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "poll", - "columnName": "poll", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "download", - "columnName": "download", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "sync_days", - "columnName": "sync_days", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "keep_days", - "columnName": "keep_days", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "display", - "columnName": "display", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "hide", - "columnName": "hide", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "unified", - "columnName": "unified", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "notify", - "columnName": "notify", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "keywords", - "columnName": "keywords", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "initialize", - "columnName": "initialize", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "tbc", - "columnName": "tbc", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "tbd", - "columnName": "tbd", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "state", - "columnName": "state", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "sync_state", - "columnName": "sync_state", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "last_sync", - "columnName": "last_sync", - "affinity": "INTEGER", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_folder_account_name", - "unique": true, - "columnNames": [ - "account", - "name" - ], - "createSql": "CREATE UNIQUE INDEX `index_folder_account_name` ON `${TABLE_NAME}` (`account`, `name`)" - }, - { - "name": "index_folder_account", - "unique": false, - "columnNames": [ - "account" - ], - "createSql": "CREATE INDEX `index_folder_account` ON `${TABLE_NAME}` (`account`)" - }, - { - "name": "index_folder_name", - "unique": false, - "columnNames": [ - "name" - ], - "createSql": "CREATE INDEX `index_folder_name` ON `${TABLE_NAME}` (`name`)" - }, - { - "name": "index_folder_type", - "unique": false, - "columnNames": [ - "type" - ], - "createSql": "CREATE INDEX `index_folder_type` ON `${TABLE_NAME}` (`type`)" - }, - { - "name": "index_folder_unified", - "unique": false, - "columnNames": [ - "unified" - ], - "createSql": "CREATE INDEX `index_folder_unified` ON `${TABLE_NAME}` (`unified`)" - } - ], - "foreignKeys": [ - { - "table": "account", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "account" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "message", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` INTEGER NOT NULL, `folder` INTEGER NOT NULL, `identity` INTEGER, `extra` TEXT, `replying` INTEGER, `forwarding` INTEGER, `uid` INTEGER, `msgid` TEXT, `references` TEXT, `deliveredto` TEXT, `inreplyto` TEXT, `thread` TEXT, `avatar` TEXT, `sender` TEXT, `from` TEXT, `to` TEXT, `cc` TEXT, `bcc` TEXT, `reply` TEXT, `headers` TEXT, `raw` INTEGER, `subject` TEXT, `size` INTEGER, `content` INTEGER NOT NULL, `preview` TEXT, `sent` INTEGER, `received` INTEGER NOT NULL, `stored` INTEGER NOT NULL, `seen` INTEGER NOT NULL, `answered` INTEGER NOT NULL, `flagged` INTEGER NOT NULL, `flags` TEXT, `keywords` TEXT, `ui_seen` INTEGER NOT NULL, `ui_answered` INTEGER NOT NULL, `ui_flagged` INTEGER NOT NULL, `ui_hide` INTEGER NOT NULL, `ui_found` INTEGER NOT NULL, `ui_ignored` INTEGER NOT NULL, `ui_browsed` INTEGER NOT NULL, `ui_snoozed` INTEGER, `warning` TEXT, `error` TEXT, `last_attempt` INTEGER, FOREIGN KEY(`account`) REFERENCES `account`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`folder`) REFERENCES `folder`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`identity`) REFERENCES `identity`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL , FOREIGN KEY(`replying`) REFERENCES `message`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL , FOREIGN KEY(`forwarding`) REFERENCES `message`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "account", - "columnName": "account", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "folder", - "columnName": "folder", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "identity", - "columnName": "identity", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "extra", - "columnName": "extra", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "replying", - "columnName": "replying", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "forwarding", - "columnName": "forwarding", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "uid", - "columnName": "uid", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "msgid", - "columnName": "msgid", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "references", - "columnName": "references", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "deliveredto", - "columnName": "deliveredto", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "inreplyto", - "columnName": "inreplyto", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "thread", - "columnName": "thread", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "avatar", - "columnName": "avatar", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "sender", - "columnName": "sender", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "from", - "columnName": "from", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "to", - "columnName": "to", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "cc", - "columnName": "cc", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "bcc", - "columnName": "bcc", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "reply", - "columnName": "reply", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "headers", - "columnName": "headers", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "raw", - "columnName": "raw", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "subject", - "columnName": "subject", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "size", - "columnName": "size", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "content", - "columnName": "content", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "preview", - "columnName": "preview", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "sent", - "columnName": "sent", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "received", - "columnName": "received", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "stored", - "columnName": "stored", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "seen", - "columnName": "seen", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "answered", - "columnName": "answered", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "flagged", - "columnName": "flagged", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "flags", - "columnName": "flags", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "keywords", - "columnName": "keywords", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "ui_seen", - "columnName": "ui_seen", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_answered", - "columnName": "ui_answered", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_flagged", - "columnName": "ui_flagged", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_hide", - "columnName": "ui_hide", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_found", - "columnName": "ui_found", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_ignored", - "columnName": "ui_ignored", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_browsed", - "columnName": "ui_browsed", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "ui_snoozed", - "columnName": "ui_snoozed", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "warning", - "columnName": "warning", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "last_attempt", - "columnName": "last_attempt", - "affinity": "INTEGER", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_message_account", - "unique": false, - "columnNames": [ - "account" - ], - "createSql": "CREATE INDEX `index_message_account` ON `${TABLE_NAME}` (`account`)" - }, - { - "name": "index_message_folder", - "unique": false, - "columnNames": [ - "folder" - ], - "createSql": "CREATE INDEX `index_message_folder` ON `${TABLE_NAME}` (`folder`)" - }, - { - "name": "index_message_identity", - "unique": false, - "columnNames": [ - "identity" - ], - "createSql": "CREATE INDEX `index_message_identity` ON `${TABLE_NAME}` (`identity`)" - }, - { - "name": "index_message_replying", - "unique": false, - "columnNames": [ - "replying" - ], - "createSql": "CREATE INDEX `index_message_replying` ON `${TABLE_NAME}` (`replying`)" - }, - { - "name": "index_message_forwarding", - "unique": false, - "columnNames": [ - "forwarding" - ], - "createSql": "CREATE INDEX `index_message_forwarding` ON `${TABLE_NAME}` (`forwarding`)" - }, - { - "name": "index_message_folder_uid", - "unique": true, - "columnNames": [ - "folder", - "uid" - ], - "createSql": "CREATE UNIQUE INDEX `index_message_folder_uid` ON `${TABLE_NAME}` (`folder`, `uid`)" - }, - { - "name": "index_message_msgid_folder", - "unique": true, - "columnNames": [ - "msgid", - "folder" - ], - "createSql": "CREATE UNIQUE INDEX `index_message_msgid_folder` ON `${TABLE_NAME}` (`msgid`, `folder`)" - }, - { - "name": "index_message_thread", - "unique": false, - "columnNames": [ - "thread" - ], - "createSql": "CREATE INDEX `index_message_thread` ON `${TABLE_NAME}` (`thread`)" - }, - { - "name": "index_message_sender", - "unique": false, - "columnNames": [ - "sender" - ], - "createSql": "CREATE INDEX `index_message_sender` ON `${TABLE_NAME}` (`sender`)" - }, - { - "name": "index_message_received", - "unique": false, - "columnNames": [ - "received" - ], - "createSql": "CREATE INDEX `index_message_received` ON `${TABLE_NAME}` (`received`)" - }, - { - "name": "index_message_ui_seen", - "unique": false, - "columnNames": [ - "ui_seen" - ], - "createSql": "CREATE INDEX `index_message_ui_seen` ON `${TABLE_NAME}` (`ui_seen`)" - }, - { - "name": "index_message_ui_flagged", - "unique": false, - "columnNames": [ - "ui_flagged" - ], - "createSql": "CREATE INDEX `index_message_ui_flagged` ON `${TABLE_NAME}` (`ui_flagged`)" - }, - { - "name": "index_message_ui_hide", - "unique": false, - "columnNames": [ - "ui_hide" - ], - "createSql": "CREATE INDEX `index_message_ui_hide` ON `${TABLE_NAME}` (`ui_hide`)" - }, - { - "name": "index_message_ui_found", - "unique": false, - "columnNames": [ - "ui_found" - ], - "createSql": "CREATE INDEX `index_message_ui_found` ON `${TABLE_NAME}` (`ui_found`)" - }, - { - "name": "index_message_ui_ignored", - "unique": false, - "columnNames": [ - "ui_ignored" - ], - "createSql": "CREATE INDEX `index_message_ui_ignored` ON `${TABLE_NAME}` (`ui_ignored`)" - }, - { - "name": "index_message_ui_browsed", - "unique": false, - "columnNames": [ - "ui_browsed" - ], - "createSql": "CREATE INDEX `index_message_ui_browsed` ON `${TABLE_NAME}` (`ui_browsed`)" - }, - { - "name": "index_message_ui_snoozed", - "unique": false, - "columnNames": [ - "ui_snoozed" - ], - "createSql": "CREATE INDEX `index_message_ui_snoozed` ON `${TABLE_NAME}` (`ui_snoozed`)" - } - ], - "foreignKeys": [ - { - "table": "account", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "account" - ], - "referencedColumns": [ - "id" - ] - }, - { - "table": "folder", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "folder" - ], - "referencedColumns": [ - "id" - ] - }, - { - "table": "identity", - "onDelete": "SET NULL", - "onUpdate": "NO ACTION", - "columns": [ - "identity" - ], - "referencedColumns": [ - "id" - ] - }, - { - "table": "message", - "onDelete": "SET NULL", - "onUpdate": "NO ACTION", - "columns": [ - "replying" - ], - "referencedColumns": [ - "id" - ] - }, - { - "table": "message", - "onDelete": "SET NULL", - "onUpdate": "NO ACTION", - "columns": [ - "forwarding" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "attachment", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` INTEGER NOT NULL, `sequence` INTEGER NOT NULL, `name` TEXT, `type` TEXT NOT NULL, `disposition` TEXT, `cid` TEXT, `encryption` INTEGER, `size` INTEGER, `progress` INTEGER, `available` INTEGER NOT NULL, `error` TEXT, FOREIGN KEY(`message`) REFERENCES `message`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "message", - "columnName": "message", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "sequence", - "columnName": "sequence", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "type", - "columnName": "type", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "disposition", - "columnName": "disposition", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "cid", - "columnName": "cid", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "encryption", - "columnName": "encryption", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "size", - "columnName": "size", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "progress", - "columnName": "progress", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "available", - "columnName": "available", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_attachment_message", - "unique": false, - "columnNames": [ - "message" - ], - "createSql": "CREATE INDEX `index_attachment_message` ON `${TABLE_NAME}` (`message`)" - }, - { - "name": "index_attachment_message_sequence", - "unique": true, - "columnNames": [ - "message", - "sequence" - ], - "createSql": "CREATE UNIQUE INDEX `index_attachment_message_sequence` ON `${TABLE_NAME}` (`message`, `sequence`)" - }, - { - "name": "index_attachment_message_cid", - "unique": true, - "columnNames": [ - "message", - "cid" - ], - "createSql": "CREATE UNIQUE INDEX `index_attachment_message_cid` ON `${TABLE_NAME}` (`message`, `cid`)" - } - ], - "foreignKeys": [ - { - "table": "message", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "message" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "operation", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `folder` INTEGER NOT NULL, `message` INTEGER, `name` TEXT NOT NULL, `args` TEXT NOT NULL, `created` INTEGER NOT NULL, `error` TEXT, FOREIGN KEY(`folder`) REFERENCES `folder`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`message`) REFERENCES `message`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "folder", - "columnName": "folder", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "message", - "columnName": "message", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "args", - "columnName": "args", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "created", - "columnName": "created", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "error", - "columnName": "error", - "affinity": "TEXT", - "notNull": false - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_operation_folder", - "unique": false, - "columnNames": [ - "folder" - ], - "createSql": "CREATE INDEX `index_operation_folder` ON `${TABLE_NAME}` (`folder`)" - }, - { - "name": "index_operation_message", - "unique": false, - "columnNames": [ - "message" - ], - "createSql": "CREATE INDEX `index_operation_message` ON `${TABLE_NAME}` (`message`)" - } - ], - "foreignKeys": [ - { - "table": "folder", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "folder" - ], - "referencedColumns": [ - "id" - ] - }, - { - "table": "message", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "message" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "answer", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `text` TEXT NOT NULL)", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "text", - "columnName": "text", - "affinity": "TEXT", - "notNull": true - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [], - "foreignKeys": [] - }, - { - "tableName": "rule", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `folder` INTEGER NOT NULL, `name` TEXT NOT NULL, `order` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `stop` INTEGER NOT NULL, `condition` TEXT NOT NULL, `action` TEXT NOT NULL, FOREIGN KEY(`folder`) REFERENCES `folder`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "folder", - "columnName": "folder", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "name", - "columnName": "name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "order", - "columnName": "order", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "enabled", - "columnName": "enabled", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "stop", - "columnName": "stop", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "condition", - "columnName": "condition", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "action", - "columnName": "action", - "affinity": "TEXT", - "notNull": true - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_rule_folder", - "unique": false, - "columnNames": [ - "folder" - ], - "createSql": "CREATE INDEX `index_rule_folder` ON `${TABLE_NAME}` (`folder`)" - }, - { - "name": "index_rule_order", - "unique": false, - "columnNames": [ - "order" - ], - "createSql": "CREATE INDEX `index_rule_order` ON `${TABLE_NAME}` (`order`)" - } - ], - "foreignKeys": [ - { - "table": "folder", - "onDelete": "CASCADE", - "onUpdate": "NO ACTION", - "columns": [ - "folder" - ], - "referencedColumns": [ - "id" - ] - } - ] - }, - { - "tableName": "log", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `time` INTEGER NOT NULL, `data` TEXT NOT NULL)", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": false - }, - { - "fieldPath": "time", - "columnName": "time", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "data", - "columnName": "data", - "affinity": "TEXT", - "notNull": true - } - ], - "primaryKey": { - "columnNames": [ - "id" - ], - "autoGenerate": true - }, - "indices": [ - { - "name": "index_log_time", - "unique": false, - "columnNames": [ - "time" - ], - "createSql": "CREATE INDEX `index_log_time` ON `${TABLE_NAME}` (`time`)" - } - ], - "foreignKeys": [] - } - ], - "setupQueries": [ - "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"c10e6fc6a2321f2811ec2a78184507f3\")" - ] - } -} \ No newline at end of file diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java index 6111efd574..165baa8b2c 100644 --- a/app/src/main/java/eu/faircode/email/DB.java +++ b/app/src/main/java/eu/faircode/email/DB.java @@ -49,7 +49,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory; // https://developer.android.com/topic/libraries/architecture/room.html @Database( - version = 42, + version = 41, entities = { EntityIdentity.class, EntityAccount.class, @@ -482,13 +482,6 @@ public abstract class DB extends RoomDatabase { db.execSQL("ALTER TABLE `message` ADD COLUMN `flags` TEXT"); } }) - .addMigrations(new Migration(41, 42) { - @Override - public void migrate(SupportSQLiteDatabase db) { - Log.i("DB migration from version " + startVersion + " to " + endVersion); - db.execSQL("ALTER TABLE `account` ADD COLUMN `pop` INTEGER NOT NULL DEFAULT 0"); - } - }) .build(); } diff --git a/app/src/main/java/eu/faircode/email/EntityAccount.java b/app/src/main/java/eu/faircode/email/EntityAccount.java index f1a5faf4e3..e44ecc1f3d 100644 --- a/app/src/main/java/eu/faircode/email/EntityAccount.java +++ b/app/src/main/java/eu/faircode/email/EntityAccount.java @@ -49,9 +49,7 @@ public class EntityAccount implements Serializable { @NonNull public Integer auth_type; @NonNull - public Boolean pop = false; - @NonNull - public String host; // POP3/IMAP + public String host; // IMAP @NonNull public Boolean starttls; @NonNull @@ -88,10 +86,6 @@ public class EntityAccount implements Serializable { public String error; public Long last_connected; - String getProtocol() { - return (pop ? "pop3" : "imap") + (starttls ? "" : "s"); - } - static String getNotificationChannelName(long account) { return "notification." + account; } @@ -116,7 +110,6 @@ public class EntityAccount implements Serializable { JSONObject json = new JSONObject(); json.put("id", id); json.put("auth_type", auth_type); - json.put("pop", pop); json.put("host", host); json.put("starttls", starttls); json.put("insecure", insecure); @@ -149,8 +142,6 @@ public class EntityAccount implements Serializable { EntityAccount account = new EntityAccount(); // id account.auth_type = json.getInt("auth_type"); - if (json.has("pop")) - account.pop = json.getBoolean("pop"); account.host = json.getString("host"); account.starttls = (json.has("starttls") && json.getBoolean("starttls")); account.insecure = (json.has("insecure") && json.getBoolean("insecure")); diff --git a/app/src/main/java/eu/faircode/email/EntityIdentity.java b/app/src/main/java/eu/faircode/email/EntityIdentity.java index 41e7d831b8..25bc8c6e2a 100644 --- a/app/src/main/java/eu/faircode/email/EntityIdentity.java +++ b/app/src/main/java/eu/faircode/email/EntityIdentity.java @@ -87,10 +87,6 @@ public class EntityIdentity { public String error; public Long last_connected; - String getProtocol() { - return (starttls ? "smtp" : "smtps"); - } - public JSONObject toJSON() throws JSONException { JSONObject json = new JSONObject(); json.put("id", id); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index d58b2959ef..cd3eafb564 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -74,11 +74,9 @@ import java.util.Properties; import javax.mail.AuthenticationFailedException; import javax.mail.Folder; import javax.mail.Session; -import javax.mail.Store; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.SwitchCompat; import androidx.constraintlayout.widget.Group; import androidx.fragment.app.FragmentTransaction; @@ -93,7 +91,6 @@ public class FragmentAccount extends FragmentBase { private Button btnAutoConfig; private Button btnAuthorize; - private SwitchCompat swPop; private EditText etHost; private CheckBox cbStartTls; private CheckBox cbInsecure; @@ -168,7 +165,6 @@ public class FragmentAccount extends FragmentBase { btnAutoConfig = view.findViewById(R.id.btnAutoConfig); btnAuthorize = view.findViewById(R.id.btnAuthorize); - swPop = view.findViewById(R.id.swPop); etHost = view.findViewById(R.id.etHost); etPort = view.findViewById(R.id.etPort); cbStartTls = view.findViewById(R.id.cbStartTls); @@ -239,7 +235,6 @@ public class FragmentAccount extends FragmentBase { auth_type = Helper.AUTH_TYPE_PASSWORD; - swPop.setChecked(false); etHost.setText(provider.imap_host); etPort.setText(provider.imap_host == null ? null : Integer.toString(provider.imap_port)); cbStartTls.setChecked(provider.imap_starttls); @@ -285,33 +280,10 @@ public class FragmentAccount extends FragmentBase { } }); - swPop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - boolean starttls = cbStartTls.isChecked(); - if (isChecked) { - etHost.setHint("pop.domain.tld"); - etPort.setHint(starttls ? "110" : "995"); - etRealm.setText(null); - cbBrowse.setChecked(false); - etPrefix.setText(null); - } else { - etHost.setHint("imap.domain.tld"); - etPort.setHint(starttls ? "143" : "993"); - } - etRealm.setEnabled(!isChecked); - cbBrowse.setEnabled(!isChecked); - etPrefix.setEnabled(!isChecked); - } - }); - cbStartTls.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { - if (swPop.isChecked()) - etPort.setHint(checked ? "110" : "995"); - else - etPort.setHint(checked ? "143" : "993"); + etPort.setHint(checked ? "143" : "993"); } }); @@ -500,7 +472,6 @@ public class FragmentAccount extends FragmentBase { @Override protected void onExecuted(Bundle args, EmailProvider provider) { - swPop.setChecked(false); etHost.setText(provider.imap_host); etPort.setText(Integer.toString(provider.imap_port)); cbStartTls.setChecked(provider.imap_starttls); @@ -520,7 +491,6 @@ public class FragmentAccount extends FragmentBase { Bundle args = new Bundle(); args.putLong("id", id); args.putInt("auth_type", auth_type); - args.putBoolean("pop", swPop.isChecked()); args.putString("host", etHost.getText().toString()); args.putBoolean("starttls", cbStartTls.isChecked()); args.putBoolean("insecure", cbInsecure.isChecked()); @@ -553,7 +523,6 @@ public class FragmentAccount extends FragmentBase { protected CheckResult onExecute(Context context, Bundle args) throws Throwable { long id = args.getLong("id"); int auth_type = args.getInt("auth_type"); - boolean pop = args.getBoolean("pop"); String host = args.getString("host"); boolean starttls = args.getBoolean("starttls"); boolean insecure = args.getBoolean("insecure"); @@ -565,10 +534,7 @@ public class FragmentAccount extends FragmentBase { if (TextUtils.isEmpty(host)) throw new IllegalArgumentException(context.getString(R.string.title_no_host)); if (TextUtils.isEmpty(port)) - if (pop) - port = (starttls ? "110" : "995"); - else - port = (starttls ? "143" : "993"); + port = (starttls ? "143" : "993"); if (TextUtils.isEmpty(user)) throw new IllegalArgumentException(context.getString(R.string.title_no_user)); if (TextUtils.isEmpty(password) && !insecure) @@ -587,9 +553,9 @@ public class FragmentAccount extends FragmentBase { Properties props = MessageHelper.getSessionProperties(auth_type, realm, insecure); Session isession = Session.getInstance(props, null); isession.setDebug(true); - Store istore = null; + IMAPStore istore = null; try { - istore = isession.getStore((pop ? "pop3" : "imap") + (starttls ? "" : "s")); + istore = (IMAPStore) isession.getStore(starttls ? "imap" : "imaps"); try { istore.connect(host, Integer.parseInt(port), user, password); } catch (AuthenticationFailedException ex) { @@ -600,8 +566,7 @@ public class FragmentAccount extends FragmentBase { throw ex; } - if (istore instanceof IMAPStore) - result.idle = ((IMAPStore) istore).hasCapability("IDLE"); + result.idle = istore.hasCapability("IDLE"); boolean inbox = false; boolean archive = false; @@ -618,11 +583,7 @@ public class FragmentAccount extends FragmentBase { for (Folder ifolder : istore.getDefaultFolder().list("*")) { // Check folder attributes String fullName = ifolder.getFullName(); - String[] attrs; - if (ifolder instanceof IMAPFolder) - attrs = ((IMAPFolder) ifolder).getAttributes(); - else - attrs = new String[0]; + String[] attrs = ((IMAPFolder) ifolder).getAttributes(); Log.i(fullName + " attrs=" + TextUtils.join(" ", attrs)); String type = EntityFolder.getType(attrs, fullName); @@ -699,15 +660,9 @@ public class FragmentAccount extends FragmentBase { @Override protected void onExecuted(Bundle args, CheckResult result) { - boolean pop = args.getBoolean("pop"); + tvIdle.setVisibility(result.idle ? View.GONE : View.VISIBLE); - tvIdle.setVisibility(result.idle || pop ? View.GONE : View.VISIBLE); - - if (pop) { - grpFolders.setVisibility(View.GONE); - btnSave.setVisibility(View.VISIBLE); - } else - setFolders(result.folders, result.account); + setFolders(result.folders, result.account); new Handler().post(new Runnable() { @Override @@ -766,7 +721,6 @@ public class FragmentAccount extends FragmentBase { args.putLong("id", id); args.putInt("auth_type", auth_type); - args.putBoolean("pop", swPop.isChecked()); args.putString("host", etHost.getText().toString()); args.putBoolean("starttls", cbStartTls.isChecked()); args.putBoolean("insecure", cbInsecure.isChecked()); @@ -816,7 +770,6 @@ public class FragmentAccount extends FragmentBase { long id = args.getLong("id"); int auth_type = args.getInt("auth_type"); - boolean pop = args.getBoolean("pop"); String host = args.getString("host"); boolean starttls = args.getBoolean("starttls"); boolean insecure = args.getBoolean("insecure"); @@ -846,10 +799,7 @@ public class FragmentAccount extends FragmentBase { if (TextUtils.isEmpty(host)) throw new IllegalArgumentException(context.getString(R.string.title_no_host)); if (TextUtils.isEmpty(port)) - if (pop) - port = (starttls ? "110" : "995"); - else - port = (starttls ? "143" : "993"); + port = (starttls ? "143" : "993"); if (TextUtils.isEmpty(user)) throw new IllegalArgumentException(context.getString(R.string.title_no_user)); if (synchronize && TextUtils.isEmpty(password) && !insecure) @@ -875,7 +825,6 @@ public class FragmentAccount extends FragmentBase { boolean check = (synchronize && (account == null || auth_type != account.auth_type || - pop != account.pop || !host.equals(account.host) || Integer.parseInt(port) != account.port || !user.equals(account.user) || !password.equals(account.password) || (realm == null ? accountRealm != null : !realm.equals(accountRealm)))); @@ -895,9 +844,9 @@ public class FragmentAccount extends FragmentBase { Session isession = Session.getInstance(props, null); isession.setDebug(true); - Store istore = null; + IMAPStore istore = null; try { - istore = isession.getStore((pop ? "pop3" : "imap") + (starttls ? "" : "s")); + istore = (IMAPStore) isession.getStore(starttls ? "imap" : "imaps"); try { istore.connect(host, Integer.parseInt(port), user, password); } catch (AuthenticationFailedException ex) { @@ -912,11 +861,7 @@ public class FragmentAccount extends FragmentBase { for (Folder ifolder : istore.getDefaultFolder().list("*")) { // Check folder attributes String fullName = ifolder.getFullName(); - String[] attrs; - if (ifolder instanceof IMAPFolder) - attrs = ((IMAPFolder) ifolder).getAttributes(); - else - attrs = new String[0]; + String[] attrs = ((IMAPFolder) ifolder).getAttributes(); Log.i(fullName + " attrs=" + TextUtils.join(" ", attrs)); String type = EntityFolder.getType(attrs, fullName); @@ -949,7 +894,6 @@ public class FragmentAccount extends FragmentBase { account = new EntityAccount(); account.auth_type = auth_type; - account.pop = pop; account.host = host; account.starttls = starttls; account.insecure = insecure; @@ -1167,7 +1111,6 @@ public class FragmentAccount extends FragmentBase { spProvider.setTag(1); spProvider.setSelection(1); } - swPop.setChecked(account.pop); etHost.setText(account.host); etPort.setText(Long.toString(account.port)); } @@ -1230,15 +1173,6 @@ public class FragmentAccount extends FragmentBase { // Consider previous check/save/delete as cancelled pbWait.setVisibility(View.GONE); - if (account != null && account.pop) { - etRealm.setEnabled(false); - cbBrowse.setEnabled(false); - etPrefix.setEnabled(false); - grpFolders.setVisibility(View.GONE); - btnSave.setVisibility(View.VISIBLE); - return; - } - args.putLong("account", account == null ? -1 : account.id); new SimpleTask>() { diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index ce061d6dd2..586c69634b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -581,11 +581,11 @@ public class FragmentIdentity extends FragmentBase { // Check SMTP server if (check) { - String protocol = (starttls ? "smtp" : "smtps"); + String transportType = (starttls ? "smtp" : "smtps"); Properties props = MessageHelper.getSessionProperties(auth_type, realm, insecure); Session isession = Session.getInstance(props, null); isession.setDebug(true); - Transport itransport = isession.getTransport(protocol); + Transport itransport = isession.getTransport(transportType); try { try { itransport.connect(host, Integer.parseInt(port), user, password); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 086c6d5346..cb85e7676b 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -165,26 +165,6 @@ public class MessageHelper { props.put("mail.smtp.writetimeout", Integer.toString(NETWORK_TIMEOUT)); // one thread overhead props.put("mail.smtp.timeout", Integer.toString(NETWORK_TIMEOUT)); - // https://javaee.github.io/javamail/docs/api/com/sun/mail/pop3/package-summary.html - props.put("mail.pop3s.ssl.checkserveridentity", checkserveridentity); - props.put("mail.pop3s.ssl.trust", "*"); - props.put("mail.pop3s.starttls.enable", "false"); - props.put("mail.pop3s.starttls.required", "false"); - - props.put("mail.pop3s.connectiontimeout", Integer.toString(NETWORK_TIMEOUT)); - props.put("mail.pop3s.timeout", Integer.toString(NETWORK_TIMEOUT)); - props.put("mail.pop3s.writetimeout", Integer.toString(NETWORK_TIMEOUT)); // one thread overhead - - props.put("mail.pop3.ssl.checkserveridentity", checkserveridentity); - props.put("mail.pop3.ssl.trust", "*"); - props.put("mail.pop3.starttls.enable", "true"); - props.put("mail.pop3.starttls.required", "true"); - - props.put("mail.pop3.connectiontimeout", Integer.toString(NETWORK_TIMEOUT)); - props.put("mail.pop3.timeout", Integer.toString(NETWORK_TIMEOUT)); - props.put("mail.pop3.writetimeout", Integer.toString(NETWORK_TIMEOUT)); // one thread overhead - - // MIME props.put("mail.mime.allowutf8", "true"); // SMTPTransport, MimeMessage props.put("mail.mime.address.strict", "false"); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index f973778750..cea25fb602 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -817,7 +817,7 @@ public class ServiceSynchronize extends LifecycleService { isession.setDebug(debug); // adb -t 1 logcat | grep "fairemail\|System.out" - final IMAPStore istore = (IMAPStore) isession.getStore(account.getProtocol()); + final IMAPStore istore = (IMAPStore) isession.getStore(account.starttls ? "imap" : "imaps"); final Map folders = new HashMap<>(); List idlers = new ArrayList<>(); List handlers = new ArrayList<>(); @@ -1889,6 +1889,8 @@ public class ServiceSynchronize extends LifecycleService { db.message().setMessageLastAttempt(message.id, message.last_attempt); } + String transportType = (ident.starttls ? "smtp" : "smtps"); + // Get properties Properties props = MessageHelper.getSessionProperties(ident.auth_type, ident.realm, ident.insecure); props.put("mail.smtp.localhost", ident.host); @@ -1923,7 +1925,7 @@ public class ServiceSynchronize extends LifecycleService { // Create transport // TODO: cache transport? - Transport itransport = isession.getTransport(ident.getProtocol()); + Transport itransport = isession.getTransport(transportType); try { // Connect transport db.identity().setIdentityState(ident.id, "connecting"); diff --git a/app/src/main/java/eu/faircode/email/ViewModelBrowse.java b/app/src/main/java/eu/faircode/email/ViewModelBrowse.java index 72c76c85b9..d79f126aa4 100644 --- a/app/src/main/java/eu/faircode/email/ViewModelBrowse.java +++ b/app/src/main/java/eu/faircode/email/ViewModelBrowse.java @@ -158,7 +158,7 @@ public class ViewModelBrowse extends ViewModel { isession.setDebug(true); Log.i("Boundary connecting account=" + account.name); - state.istore = (IMAPStore) isession.getStore(account.getProtocol()); + state.istore = (IMAPStore) isession.getStore(account.starttls ? "imap" : "imaps"); Helper.connect(state.context, state.istore, account); Log.i("Boundary opening folder=" + folder.name); diff --git a/app/src/main/res/layout/fragment_account.xml b/app/src/main/res/layout/fragment_account.xml index 3b9a8a5490..f8d901e45b 100644 --- a/app/src/main/res/layout/fragment_account.xml +++ b/app/src/main/res/layout/fragment_account.xml @@ -75,37 +75,27 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/etDomain" /> - + - - + android:text="@string/title_pop" + android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textStyle="italic" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tvImap" /> @@ -117,7 +107,7 @@ android:text="@string/title_host" android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/swPop" /> + app:layout_constraintTop_toBottomOf="@id/tvPop" /> + app:constraint_referenced_ids="tvDomain,tvDomainHint,etDomain,btnAutoConfig,tvImap,tvPop,tvHost,etHost,cbStartTls,cbInsecure,tvPort,etPort" /> + app:constraint_referenced_ids="tvUser,etUser,tvPassword,tilPassword,tvRealm,etRealm,tvName,tvNameRemark,etName,btnColor,vwColor,ibColorDefault" /> + app:constraint_referenced_ids="tvPrefix,tvPrefixRemark,etPrefix,cbNotify,cbSynchronize,cbPrimary,cbBrowse,tvBrowseHint,tvInterval,etInterval" /> + app:constraint_referenced_ids="tvDrafts,spDrafts,tvDraftsRemark,tvSent,spSent,tvAll,spAll,tvTrash,spTrash,tvJunk,spJunk,vSeparatorSwipe,tvLeft,spLeft,tvRight,spRight" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 59a4e43006..fa365a439b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,7 +210,6 @@ Domain name Get settings IMAP - POP3 SMTP Provider Custom