@ -0,0 +1,891 @@ | |||||
{ | |||||
"formatVersion": 1, | |||||
"database": { | |||||
"version": 7, | |||||
"identityHash": "78658430615109b7c163e62ed1ad0a48", | |||||
"entities": [ | |||||
{ | |||||
"tableName": "identity", | |||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT NOT NULL, `email` TEXT NOT NULL, `replyto` TEXT, `account` INTEGER NOT NULL, `host` TEXT NOT NULL, `port` INTEGER NOT NULL, `starttls` INTEGER NOT NULL, `user` TEXT NOT NULL, `password` TEXT NOT NULL, `auth_type` INTEGER NOT NULL, `primary` INTEGER NOT NULL, `synchronize` INTEGER NOT NULL, `store_sent` INTEGER NOT NULL, `state` TEXT, `error` TEXT, 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": "replyto", | |||||
"columnName": "replyto", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "account", | |||||
"columnName": "account", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "host", | |||||
"columnName": "host", | |||||
"affinity": "TEXT", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "port", | |||||
"columnName": "port", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "starttls", | |||||
"columnName": "starttls", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "user", | |||||
"columnName": "user", | |||||
"affinity": "TEXT", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "password", | |||||
"columnName": "password", | |||||
"affinity": "TEXT", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "auth_type", | |||||
"columnName": "auth_type", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "primary", | |||||
"columnName": "primary", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "synchronize", | |||||
"columnName": "synchronize", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "store_sent", | |||||
"columnName": "store_sent", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "state", | |||||
"columnName": "state", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "error", | |||||
"columnName": "error", | |||||
"affinity": "TEXT", | |||||
"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`)" | |||||
} | |||||
], | |||||
"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, `name` TEXT, `host` TEXT NOT NULL, `port` INTEGER NOT NULL, `user` TEXT NOT NULL, `password` TEXT NOT NULL, `auth_type` INTEGER NOT NULL, `primary` INTEGER NOT NULL, `synchronize` INTEGER NOT NULL, `store_sent` INTEGER NOT NULL, `poll_interval` INTEGER NOT NULL, `seen_until` INTEGER, `state` TEXT, `error` TEXT)", | |||||
"fields": [ | |||||
{ | |||||
"fieldPath": "id", | |||||
"columnName": "id", | |||||
"affinity": "INTEGER", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "name", | |||||
"columnName": "name", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "host", | |||||
"columnName": "host", | |||||
"affinity": "TEXT", | |||||
"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": "auth_type", | |||||
"columnName": "auth_type", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "primary", | |||||
"columnName": "primary", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "synchronize", | |||||
"columnName": "synchronize", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "store_sent", | |||||
"columnName": "store_sent", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "poll_interval", | |||||
"columnName": "poll_interval", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "seen_until", | |||||
"columnName": "seen_until", | |||||
"affinity": "INTEGER", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "state", | |||||
"columnName": "state", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "error", | |||||
"columnName": "error", | |||||
"affinity": "TEXT", | |||||
"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, `synchronize` INTEGER NOT NULL, `after` INTEGER NOT NULL, `state` TEXT, `error` TEXT, 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": "synchronize", | |||||
"columnName": "synchronize", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "after", | |||||
"columnName": "after", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "state", | |||||
"columnName": "state", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "error", | |||||
"columnName": "error", | |||||
"affinity": "TEXT", | |||||
"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`)" | |||||
} | |||||
], | |||||
"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, `folder` INTEGER NOT NULL, `identity` INTEGER, `replying` INTEGER, `uid` INTEGER, `msgid` TEXT, `references` TEXT, `inreplyto` TEXT, `thread` TEXT, `from` TEXT, `to` TEXT, `cc` TEXT, `bcc` TEXT, `reply` TEXT, `subject` TEXT, `sent` INTEGER, `received` INTEGER NOT NULL, `stored` INTEGER NOT NULL, `seen` INTEGER NOT NULL, `ui_seen` INTEGER NOT NULL, `ui_hide` INTEGER NOT NULL, `ui_found` INTEGER NOT NULL, `error` TEXT, 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 CASCADE , FOREIGN KEY(`replying`) REFERENCES `message`(`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": "folder", | |||||
"columnName": "folder", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "identity", | |||||
"columnName": "identity", | |||||
"affinity": "INTEGER", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "replying", | |||||
"columnName": "replying", | |||||
"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": "inreplyto", | |||||
"columnName": "inreplyto", | |||||
"affinity": "TEXT", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "thread", | |||||
"columnName": "thread", | |||||
"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": "subject", | |||||
"columnName": "subject", | |||||
"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": "ui_seen", | |||||
"columnName": "ui_seen", | |||||
"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": "error", | |||||
"columnName": "error", | |||||
"affinity": "TEXT", | |||||
"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_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_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_hide", | |||||
"unique": false, | |||||
"columnNames": [ | |||||
"ui_hide" | |||||
], | |||||
"createSql": "CREATE INDEX `index_message_ui_hide` ON `${TABLE_NAME}` (`ui_hide`)" | |||||
} | |||||
], | |||||
"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": "CASCADE", | |||||
"onUpdate": "NO ACTION", | |||||
"columns": [ | |||||
"identity" | |||||
], | |||||
"referencedColumns": [ | |||||
"id" | |||||
] | |||||
}, | |||||
{ | |||||
"table": "message", | |||||
"onDelete": "CASCADE", | |||||
"onUpdate": "NO ACTION", | |||||
"columns": [ | |||||
"replying" | |||||
], | |||||
"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, `size` INTEGER, `progress` INTEGER, `available` INTEGER NOT NULL, 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": "size", | |||||
"columnName": "size", | |||||
"affinity": "INTEGER", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "progress", | |||||
"columnName": "progress", | |||||
"affinity": "INTEGER", | |||||
"notNull": false | |||||
}, | |||||
{ | |||||
"fieldPath": "available", | |||||
"columnName": "available", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
} | |||||
], | |||||
"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`)" | |||||
} | |||||
], | |||||
"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 NOT NULL, `name` TEXT NOT NULL, `args` TEXT NOT NULL, `created` INTEGER NOT NULL, 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": true | |||||
}, | |||||
{ | |||||
"fieldPath": "name", | |||||
"columnName": "name", | |||||
"affinity": "TEXT", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "args", | |||||
"columnName": "args", | |||||
"affinity": "TEXT", | |||||
"notNull": true | |||||
}, | |||||
{ | |||||
"fieldPath": "created", | |||||
"columnName": "created", | |||||
"affinity": "INTEGER", | |||||
"notNull": true | |||||
} | |||||
], | |||||
"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": "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, \"78658430615109b7c163e62ed1ad0a48\")" | |||||
] | |||||
} | |||||
} |
@ -0,0 +1,162 @@ | |||||
package eu.faircode.email; | |||||
/* | |||||
This file is part of FairEmail. | |||||
FairEmail is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 3 of the License, or | |||||
(at your option) any later version. | |||||
NetGuard is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with NetGuard. If not, see <http://www.gnu.org/licenses/>. | |||||
Copyright 2018 by Marcel Bokhorst (M66B) | |||||
*/ | |||||
import android.content.Context; | |||||
import android.util.Log; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | |||||
import android.view.ViewGroup; | |||||
import android.widget.TextView; | |||||
import java.text.DateFormat; | |||||
import java.text.SimpleDateFormat; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import androidx.annotation.NonNull; | |||||
import androidx.recyclerview.widget.DiffUtil; | |||||
import androidx.recyclerview.widget.ListUpdateCallback; | |||||
import androidx.recyclerview.widget.RecyclerView; | |||||
public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> { | |||||
private Context context; | |||||
private List<EntityLog> all = new ArrayList<>(); | |||||
private List<EntityLog> filtered = new ArrayList<>(); | |||||
private static final DateFormat DF = SimpleDateFormat.getTimeInstance(); | |||||
public class ViewHolder extends RecyclerView.ViewHolder { | |||||
View itemView; | |||||
TextView tvTime; | |||||
TextView tvData; | |||||
ViewHolder(View itemView) { | |||||
super(itemView); | |||||
this.itemView = itemView; | |||||
tvTime = itemView.findViewById(R.id.tvTime); | |||||
tvData = itemView.findViewById(R.id.tvData); | |||||
} | |||||
private void bindTo(EntityLog log) { | |||||
tvTime.setText(DF.format(log.time)); | |||||
tvData.setText(log.data); | |||||
} | |||||
} | |||||
AdapterLog(Context context) { | |||||
this.context = context; | |||||
setHasStableIds(true); | |||||
} | |||||
public void set(@NonNull List<EntityLog> logs) { | |||||
Log.i(Helper.TAG, "Set logs=" + logs.size()); | |||||
all.clear(); | |||||
all.addAll(logs); | |||||
DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new MessageDiffCallback(filtered, all)); | |||||
filtered.clear(); | |||||
filtered.addAll(all); | |||||
diff.dispatchUpdatesTo(new ListUpdateCallback() { | |||||
@Override | |||||
public void onInserted(int position, int count) { | |||||
Log.i(Helper.TAG, "Inserted @" + position + " #" + count); | |||||
} | |||||
@Override | |||||
public void onRemoved(int position, int count) { | |||||
Log.i(Helper.TAG, "Removed @" + position + " #" + count); | |||||
} | |||||
@Override | |||||
public void onMoved(int fromPosition, int toPosition) { | |||||
Log.i(Helper.TAG, "Moved " + fromPosition + ">" + toPosition); | |||||
} | |||||
@Override | |||||
public void onChanged(int position, int count, Object payload) { | |||||
Log.i(Helper.TAG, "Changed @" + position + " #" + count); | |||||
} | |||||
}); | |||||
diff.dispatchUpdatesTo(this); | |||||
} | |||||
private class MessageDiffCallback extends DiffUtil.Callback { | |||||
private List<EntityLog> prev; | |||||
private List<EntityLog> next; | |||||
MessageDiffCallback(List<EntityLog> prev, List<EntityLog> next) { | |||||
this.prev = prev; | |||||
this.next = next; | |||||
} | |||||
@Override | |||||
public int getOldListSize() { | |||||
return prev.size(); | |||||
} | |||||
@Override | |||||
public int getNewListSize() { | |||||
return next.size(); | |||||
} | |||||
@Override | |||||
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { | |||||
EntityLog l1 = prev.get(oldItemPosition); | |||||
EntityLog l2 = next.get(newItemPosition); | |||||
return l1.id.equals(l2.id); | |||||
} | |||||
@Override | |||||
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { | |||||
EntityLog l1 = prev.get(oldItemPosition); | |||||
EntityLog l2 = next.get(newItemPosition); | |||||
return l1.equals(l2); | |||||
} | |||||
} | |||||
@Override | |||||
public long getItemId(int position) { | |||||
return filtered.get(position).id; | |||||
} | |||||
@Override | |||||
public int getItemCount() { | |||||
return filtered.size(); | |||||
} | |||||
@Override | |||||
@NonNull | |||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { | |||||
return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_log, parent, false)); | |||||
} | |||||
@Override | |||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { | |||||
EntityLog log = filtered.get(position); | |||||
holder.bindTo(log); | |||||
} | |||||
} |
@ -0,0 +1,36 @@ | |||||
package eu.faircode.email; | |||||
/* | |||||
This file is part of FairEmail. | |||||
FairEmail is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 3 of the License, or | |||||
(at your option) any later version. | |||||
NetGuard is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with NetGuard. If not, see <http://www.gnu.org/licenses/>. | |||||
Copyright 2018 by Marcel Bokhorst (M66B) | |||||
*/ | |||||
import java.util.List; | |||||
import androidx.lifecycle.LiveData; | |||||
import androidx.room.Dao; | |||||
import androidx.room.Insert; | |||||
import androidx.room.Query; | |||||
@Dao | |||||
public interface DaoLog { | |||||
@Query("SELECT * FROM log ORDER BY time DESC LIMIT 500") | |||||
LiveData<List<EntityLog>> liveLogs(); | |||||
@Insert | |||||
long insertLog(EntityLog log); | |||||
} |
@ -0,0 +1,64 @@ | |||||
package eu.faircode.email; | |||||
/* | |||||
This file is part of FairEmail. | |||||
FairEmail is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 3 of the License, or | |||||
(at your option) any later version. | |||||
NetGuard is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with NetGuard. If not, see <http://www.gnu.org/licenses/>. | |||||
Copyright 2018 by Marcel Bokhorst (M66B) | |||||
*/ | |||||
import android.content.Context; | |||||
import java.util.Date; | |||||
import androidx.annotation.NonNull; | |||||
import androidx.room.Entity; | |||||
import androidx.room.Index; | |||||
import androidx.room.PrimaryKey; | |||||
@Entity( | |||||
tableName = EntityLog.TABLE_NAME, | |||||
foreignKeys = { | |||||
}, | |||||
indices = { | |||||
@Index(value = {"time"}) | |||||
} | |||||
) | |||||
public class EntityLog { | |||||
static final String TABLE_NAME = "log"; | |||||
@PrimaryKey(autoGenerate = true) | |||||
public Long id; | |||||
@NonNull | |||||
public Long time; | |||||
@NonNull | |||||
public String data; | |||||
static void log(Context context, String data) { | |||||
EntityLog entry = new EntityLog(); | |||||
entry.time = new Date().getTime(); | |||||
entry.data = data; | |||||
DB.getInstance(context).log().insertLog(entry); | |||||
} | |||||
@Override | |||||
public boolean equals(Object obj) { | |||||
if (obj instanceof EntityLog) { | |||||
EntityLog other = (EntityLog) obj; | |||||
return (this.time.equals(other.time) && this.data.equals(other.data)); | |||||
} else | |||||
return false; | |||||
} | |||||
} |
@ -0,0 +1,91 @@ | |||||
package eu.faircode.email; | |||||
/* | |||||
This file is part of FairEmail. | |||||
FairEmail is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 3 of the License, or | |||||
(at your option) any later version. | |||||
NetGuard is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with NetGuard. If not, see <http://www.gnu.org/licenses/>. | |||||
Copyright 2018 by Marcel Bokhorst (M66B) | |||||
*/ | |||||
import android.os.Bundle; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | |||||
import android.view.ViewGroup; | |||||
import android.widget.ProgressBar; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import androidx.annotation.NonNull; | |||||
import androidx.annotation.Nullable; | |||||
import androidx.constraintlayout.widget.Group; | |||||
import androidx.lifecycle.Observer; | |||||
import androidx.recyclerview.widget.LinearLayoutManager; | |||||
import androidx.recyclerview.widget.RecyclerView; | |||||
public class FragmentLogs extends FragmentEx { | |||||
private RecyclerView rvLog; | |||||
private ProgressBar pbWait; | |||||
private Group grpReady; | |||||
private AdapterLog adapter; | |||||
@Override | |||||
@Nullable | |||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | |||||
setSubtitle(R.string.title_log); | |||||
View view = inflater.inflate(R.layout.fragment_logs, container, false); | |||||
// Get controls | |||||
rvLog = view.findViewById(R.id.rvLog); | |||||
pbWait = view.findViewById(R.id.pbWait); | |||||
grpReady = view.findViewById(R.id.grpReady); | |||||
// Wire controls | |||||
rvLog.setHasFixedSize(false); | |||||
LinearLayoutManager llm = new LinearLayoutManager(getContext()); | |||||
rvLog.setLayoutManager(llm); | |||||
adapter = new AdapterLog(getContext()); | |||||
rvLog.setAdapter(adapter); | |||||
// Initialize | |||||
grpReady.setVisibility(View.GONE); | |||||
pbWait.setVisibility(View.VISIBLE); | |||||
return view; | |||||
} | |||||
@Override | |||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) { | |||||
super.onActivityCreated(savedInstanceState); | |||||
DB db = DB.getInstance(getContext()); | |||||
db.log().liveLogs().observe(getViewLifecycleOwner(), new Observer<List<EntityLog>>() { | |||||
@Override | |||||
public void onChanged(List<EntityLog> logs) { | |||||
if (logs == null) | |||||
logs = new ArrayList<>(); | |||||
adapter.set(logs); | |||||
pbWait.setVisibility(View.GONE); | |||||
grpReady.setVisibility(View.VISIBLE); | |||||
} | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,36 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
xmlns:tools="http://schemas.android.com/tools" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
tools:context=".ActivityView"> | |||||
<androidx.recyclerview.widget.RecyclerView | |||||
android:id="@+id/rvLog" | |||||
android:layout_width="0dp" | |||||
android:layout_height="0dp" | |||||
android:scrollbarStyle="outsideOverlay" | |||||
android:scrollbars="vertical" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<ProgressBar | |||||
android:id="@+id/pbWait" | |||||
style="@style/Base.Widget.AppCompat.ProgressBar" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:indeterminate="true" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<androidx.constraintlayout.widget.Group | |||||
android:id="@+id/grpReady" | |||||
android:layout_width="0dp" | |||||
android:layout_height="0dp" | |||||
app:constraint_referenced_ids="rvLog" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> |
@ -0,0 +1,28 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content"> | |||||
<TextView | |||||
android:id="@+id/tvTime" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:ellipsize="start" | |||||
android:singleLine="true" | |||||
android:text="12:34:56" | |||||
android:textAppearance="@style/TextAppearance.AppCompat.Small" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="@+id/ivEdit" /> | |||||
<TextView | |||||
android:id="@+id/tvData" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="6dp" | |||||
android:text="log" | |||||
android:textAppearance="@android:style/TextAppearance.Small" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toEndOf="@id/tvTime" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> |
@ -1,179 +1,180 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<!--Generated by crowdin.com--> | <!--Generated by crowdin.com--> | ||||
<resources> | <resources> | ||||
<string name="app_copyright">Copyright Ⓒ 2018 by M. Bokhorst</string> | |||||
<string name="channel_service">Service</string> | |||||
<string name="channel_notification">Notifications</string> | |||||
<string name="channel_error">Errors</string> | |||||
<string name="app_copyright">Telif hakkı Ⓒ 2018 M. Bokhorst \'a aittir</string> | |||||
<string name="channel_service">Hizmet</string> | |||||
<string name="channel_notification">Bildirimler</string> | |||||
<string name="channel_error">Hatalar</string> | |||||
<plurals name="title_notification_synchronizing"> | <plurals name="title_notification_synchronizing"> | ||||
<item quantity="one">Synchronizing %1$d account</item> | |||||
<item quantity="other">Synchronizing %1$d accounts</item> | |||||
<item quantity="one">%1$d Hesap senkronize ediliyor</item> | |||||
<item quantity="other">%1$d Hesap senkronize ediliyor</item> | |||||
</plurals> | </plurals> | ||||
<plurals name="title_notification_operations"> | <plurals name="title_notification_operations"> | ||||
<item quantity="one">%1$d operation pending</item> | |||||
<item quantity="other">%1$d operations pending</item> | |||||
<item quantity="one">%1$d işlem beklemede</item> | |||||
<item quantity="other">%1$d işlem beklemede</item> | |||||
</plurals> | </plurals> | ||||
<plurals name="title_notification_unseen"> | <plurals name="title_notification_unseen"> | ||||
<item quantity="one">%1$d new message</item> | |||||
<item quantity="other">%1$d new messages</item> | |||||
<item quantity="one">%1$d yeni ileti</item> | |||||
<item quantity="other">%1$d yeni ileti</item> | |||||
</plurals> | </plurals> | ||||
<plurals name="title_notification_unsent"> | <plurals name="title_notification_unsent"> | ||||
<item quantity="one">%1$d unsent message</item> | |||||
<item quantity="other">%1$d unsent messages</item> | |||||
<item quantity="one">%1$d gönderilmemiş ileti</item> | |||||
<item quantity="other">%1$d gönderilmemiş ileti</item> | |||||
</plurals> | </plurals> | ||||
<string name="title_notification_failed">\'%1$s\' failed</string> | |||||
<string name="menu_setup">Setup</string> | |||||
<string name="menu_answers">Standard replies</string> | |||||
<string name="menu_operations">Operations</string> | |||||
<string name="menu_legend">Legend</string> | |||||
<string name="menu_faq">FAQ</string> | |||||
<string name="menu_pro">Pro features</string> | |||||
<string name="menu_privacy">Privacy</string> | |||||
<string name="menu_about">About</string> | |||||
<string name="menu_other">Other apps</string> | |||||
<string name="title_eula">End-user license agreement</string> | |||||
<string name="title_agree">I agree</string> | |||||
<string name="title_disagree">I disagree</string> | |||||
<string name="title_version">Version %1$s</string> | |||||
<string name="title_list_accounts">Accounts</string> | |||||
<string name="title_list_identities">Identities</string> | |||||
<string name="title_edit_account">Edit account</string> | |||||
<string name="title_edit_identity">Edit identity</string> | |||||
<string name="title_edit_folder">Edit folder</string> | |||||
<string name="title_setup">Setup</string> | |||||
<string name="title_setup_account">Manage accounts</string> | |||||
<string name="title_setup_account_remark">To receive email</string> | |||||
<string name="title_setup_identity">Manage identities</string> | |||||
<string name="title_setup_identity_remark">To send email</string> | |||||
<string name="title_setup_permissions">Grant permissions</string> | |||||
<string name="title_setup_permissions_remark">To autocomplete addresses (optional)</string> | |||||
<string name="title_setup_to_do">To do</string> | |||||
<string name="title_setup_done">Done</string> | |||||
<string name="title_setup_dark_theme">Dark theme</string> | |||||
<string name="title_advanced">Advanced options</string> | |||||
<string name="title_advanced_webview">Use WebView to show external links</string> | |||||
<string name="title_advanced_customtabs">Instead of <a href="https://developer.chrome.com/multidevice/android/customtabs">Chrome Custom Tabs</a></string> | |||||
<string name="title_advanced_sanitize">Remove HTML formatting from messages</string> | |||||
<string name="title_advanced_compress_imap">Compress IMAP data</string> | |||||
<string name="title_advanced_debug">Debug</string> | |||||
<string name="title_select">Select …</string> | |||||
<string name="title_identity_name">Your name</string> | |||||
<string name="title_identity_email">Your email address</string> | |||||
<string name="title_identity_reply_to">Reply to address</string> | |||||
<string name="title_optional">Optional</string> | |||||
<string name="title_account_linked">Linked account</string> | |||||
<string name="title_account_name">Account name</string> | |||||
<string name="title_account_name_hint">Used to differentiate folders</string> | |||||
<string name="title_notification_failed">\'%1$s\' başarısız oldu</string> | |||||
<string name="menu_setup">Kurulum</string> | |||||
<string name="menu_answers">Standart cevaplar</string> | |||||
<string name="menu_operations">İşlemler</string> | |||||
<string name="menu_legend">Açıklamalar</string> | |||||
<string name="menu_faq">SSS</string> | |||||
<string name="menu_pro">Pro özellikleri</string> | |||||
<string name="menu_privacy">Gizlilik</string> | |||||
<string name="menu_about">Hakkında</string> | |||||
<string name="menu_other">Diğer uygulamalar</string> | |||||
<string name="title_eula">Son Kullanıcı Lisans Sözleşmesi</string> | |||||
<string name="title_agree">Kabul ediyorum</string> | |||||
<string name="title_disagree">Kabul etmiyorum</string> | |||||
<string name="title_version">Sürüm %1$s</string> | |||||
<string name="title_list_accounts">Hesaplar</string> | |||||
<string name="title_list_identities">Kimlikler</string> | |||||
<string name="title_edit_account">Hesabı Düzenle</string> | |||||
<string name="title_edit_identity">Kimliği düzenle</string> | |||||
<string name="title_edit_folder">Klasörü düzenle</string> | |||||
<string name="title_setup">Kurulum</string> | |||||
<string name="title_setup_account">Hesapları Yönet</string> | |||||
<string name="title_setup_account_remark">E-posta almak için</string> | |||||
<string name="title_setup_identity">Kimlikleri Yönet</string> | |||||
<string name="title_setup_identity_remark">E-posta göndermek için</string> | |||||
<string name="title_setup_permissions">İzin Ver</string> | |||||
<string name="title_setup_permissions_remark">Adresleri otomatik tamamlamak için (isteğe bağlı)</string> | |||||
<string name="title_setup_to_do">Yapılacak</string> | |||||
<string name="title_setup_done">Bitti</string> | |||||
<string name="title_setup_dark_theme">Koyu Tema</string> | |||||
<string name="title_advanced">Gelişmiş ayarlar</string> | |||||
<string name="title_advanced_webview">Dış bağlantıları göstermek için WebView kullanın</string> | |||||
<string name="title_advanced_customtabs"><a href="https://developer.chrome.com/multidevice/android/customtabs">Chrome Özel Sekmeler</a> yerine</string> | |||||
<string name="title_advanced_sanitize">HTML biçimlendirmesini iletilerden kaldır</string> | |||||
<string name="title_advanced_compress_imap">IMAP verilerini sıkıştır</string> | |||||
<string name="title_advanced_debug">Hata ayıklama</string> | |||||
<string name="title_select">Seçin …</string> | |||||
<string name="title_identity_name">Adınız</string> | |||||
<string name="title_identity_email">E-posta adresiniz</string> | |||||
<string name="title_identity_reply_to">Yanıtlama adresi</string> | |||||
<string name="title_optional">İsteğe bağlı</string> | |||||
<string name="title_account_linked">Bağlı hesap</string> | |||||
<string name="title_account_name">Hesap adı</string> | |||||
<string name="title_account_name_hint">Klasörleri ayırt etmek için kullanılır</string> | |||||
<string name="title_imap">IMAP</string> | <string name="title_imap">IMAP</string> | ||||
<string name="title_smtp">SMTP</string> | <string name="title_smtp">SMTP</string> | ||||
<string name="title_provider">Provider</string> | |||||
<string name="title_custom">Custom</string> | |||||
<string name="title_host">Host name</string> | |||||
<string name="title_provider">Sağlayıcı</string> | |||||
<string name="title_custom">Özel</string> | |||||
<string name="title_host">Sunucu adı</string> | |||||
<string name="title_starttls">STARTTLS</string> | <string name="title_starttls">STARTTLS</string> | ||||
<string name="title_port">Port number</string> | |||||
<string name="title_user">User name</string> | |||||
<string name="title_password">Password</string> | |||||
<string name="title_authorize">Select account</string> | |||||
<string name="title_instructions">Instructions</string> | |||||
<string name="title_store_sent">Store sent messages (enable if needed only)</string> | |||||
<string name="title_interval">Keep-alive interval (minutes)</string> | |||||
<string name="title_synchronize_account">Synchronize (receive messages)</string> | |||||
<string name="title_synchronize_identity">Synchronize (send messages)</string> | |||||
<string name="title_primary_account">Primary (default account)</string> | |||||
<string name="title_primary_identity">Primary (default identity)</string> | |||||
<string name="title_check">Check</string> | |||||
<string name="title_no_name">Name missing</string> | |||||
<string name="title_no_email">Email address missing</string> | |||||
<string name="title_no_account">Account missing</string> | |||||
<string name="title_no_host">Host name missing</string> | |||||
<string name="title_no_port">Port number missing</string> | |||||
<string name="title_no_user">User name missing</string> | |||||
<string name="title_no_password">Password missing</string> | |||||
<string name="title_no_drafts">Drafts folder missing</string> | |||||
<string name="title_no_idle">IDLE not supported</string> | |||||
<string name="title_no_uidplus">UIDPLUS not supported</string> | |||||
<string name="title_account_delete">Delete this account permanently?</string> | |||||
<string name="title_identity_delete">Delete this identity permanently?</string> | |||||
<string name="title_synchronize_folder">Synchronize (receive messages)</string> | |||||
<string name="title_after">Synchronize (days)</string> | |||||
<string name="title_folder_unified">Unified inbox</string> | |||||
<string name="title_folder_inbox">Inbox</string> | |||||
<string name="title_folder_outbox">Outbox</string> | |||||
<string name="title_folder_all">Archive</string> | |||||
<string name="title_folder_drafts">Drafts</string> | |||||
<string name="title_folder_trash">Trash</string> | |||||
<string name="title_port">Port numarası</string> | |||||
<string name="title_user">Kullanıcı adı</string> | |||||
<string name="title_password">Şifre</string> | |||||
<string name="title_authorize">Hesap seç</string> | |||||
<string name="title_instructions">Talimatlar</string> | |||||
<string name="title_store_sent">Gönderilen iletileri kaydet (yalnızca gerekliyse etkinleştir)</string> | |||||
<string name="title_interval">Canlı tutma aralığı (dakika)</string> | |||||
<string name="title_synchronize_account">Senkronize et (iletileri al)</string> | |||||
<string name="title_synchronize_identity">Senkronize et (iletileri gönder)</string> | |||||
<string name="title_primary_account">Birincil (varsayılan hesap)</string> | |||||
<string name="title_primary_identity">Birincil (varsayılan kimlik)</string> | |||||
<string name="title_check">Kontrol et</string> | |||||
<string name="title_no_name">İsim eksik</string> | |||||
<string name="title_no_email">E-posta adresi eksik</string> | |||||
<string name="title_no_account">Hesap bilgisi eksik</string> | |||||
<string name="title_no_host">Sunucu adı eksik</string> | |||||
<string name="title_no_port">Port numarası eksik</string> | |||||
<string name="title_no_user">Kullanıcı adı eksik</string> | |||||
<string name="title_no_password">Parola Eksik</string> | |||||
<string name="title_no_drafts">Taslaklar klasörü eksik</string> | |||||
<string name="title_no_idle">IDLE desteklenmiyor</string> | |||||
<string name="title_no_uidplus">UIDPLUS desteklenmiyor</string> | |||||
<string name="title_account_delete">Bu hesabı kalıcı olarak sil?</string> | |||||
<string name="title_identity_delete">Bu kimliği kalıcı olarak sil?</string> | |||||
<string name="title_synchronize_folder">Senkronize et (iletileri al)</string> | |||||
<string name="title_after">Senkronize (günler)</string> | |||||
<string name="title_folder_unified">Birleştirilmiş gelen kutusu</string> | |||||
<string name="title_folder_inbox">Gelen kutusu</string> | |||||
<string name="title_folder_outbox">Giden Kutusu</string> | |||||
<string name="title_folder_all">Arşiv</string> | |||||
<string name="title_folder_drafts">Taslaklar</string> | |||||
<string name="title_folder_trash">Çöp Kutusu</string> | |||||
<string name="title_folder_junk">Spam</string> | <string name="title_folder_junk">Spam</string> | ||||
<string name="title_folder_sent">Sent</string> | |||||
<string name="title_folder_user">User</string> | |||||
<string name="title_folder_primary">Folders primary account</string> | |||||
<string name="title_folder_thread">Message thread</string> | |||||
<string name="title_no_messages">No messages</string> | |||||
<string name="title_link">link</string> | |||||
<string name="title_image">image</string> | |||||
<string name="title_show_images">Show images</string> | |||||
<string name="title_subject_reply">Re: %1$s</string> | |||||
<string name="title_subject_forward">Fwd: %1$s</string> | |||||
<string name="title_thread">Show thread</string> | |||||
<string name="title_seen">Mark read</string> | |||||
<string name="title_unseen">Mark unread</string> | |||||
<string name="title_forward">Forward</string> | |||||
<string name="title_reply_all">Reply to all</string> | |||||
<string name="title_trash">Trash</string> | |||||
<string name="title_folder_sent">Gönderilen</string> | |||||
<string name="title_folder_user">Kullanıcı</string> | |||||
<string name="title_folder_primary">Klasörler birincil hesap</string> | |||||
<string name="title_folder_thread">İleti dizisi</string> | |||||
<string name="title_no_messages">İleti yok</string> | |||||
<string name="title_link">bağlantı</string> | |||||
<string name="title_image">resim</string> | |||||
<string name="title_show_images">Resimleri göster</string> | |||||
<string name="title_subject_reply">Ynt: %1$s</string> | |||||
<string name="title_subject_forward">İlet: %1$s</string> | |||||
<string name="title_thread">Konuyu göster</string> | |||||
<string name="title_seen">Okundu olarak işaretle</string> | |||||
<string name="title_unseen">Okunmadı olarak işaretle</string> | |||||
<string name="title_forward">İlet</string> | |||||
<string name="title_reply_all">Tümünü yanıtla</string> | |||||
<string name="title_trash">Çöp Kutusu</string> | |||||
<string name="title_spam">Spam</string> | <string name="title_spam">Spam</string> | ||||
<string name="title_move">Move</string> | |||||
<string name="title_archive">Archive</string> | |||||
<string name="title_reply">Reply</string> | |||||
<string name="title_moving">Moving message to %1$s</string> | |||||
<string name="title_no_viewer">No viewer app available for %1$s</string> | |||||
<string name="title_attachment_saved">Attachment saved</string> | |||||
<string name="title_ask_delete">Delete message permanently?</string> | |||||
<string name="title_ask_spam">Report message as spam?</string> | |||||
<string name="title_compose">Compose</string> | |||||
<string name="title_from">From:</string> | |||||
<string name="title_to">To:</string> | |||||
<string name="title_reply_to">Reply to:</string> | |||||
<string name="title_move">Taşı</string> | |||||
<string name="title_archive">Arşivle</string> | |||||
<string name="title_reply">Yanıtla</string> | |||||
<string name="title_moving">İleti şuraya taşınıyor %1$s</string> | |||||
<string name="title_no_viewer">%1$s için kullanılabilir hiçbir görüntüleme uygulaması yok</string> | |||||
<string name="title_attachment_saved">Ek kaydedildi</string> | |||||
<string name="title_ask_delete">İletiyi kalıcı olarak sil?</string> | |||||
<string name="title_ask_spam">İletiyi spam olarak raporla?</string> | |||||
<string name="title_compose">Oluştur</string> | |||||
<string name="title_from">Gönderen:</string> | |||||
<string name="title_to">Alıcı:</string> | |||||
<string name="title_reply_to">Yanıt adresi:</string> | |||||
<string name="title_cc">CC:</string> | <string name="title_cc">CC:</string> | ||||
<string name="title_bcc">BCC:</string> | <string name="title_bcc">BCC:</string> | ||||
<string name="title_subject">Subject:</string> | |||||
<string name="title_body_hint">Your message</string> | |||||
<string name="title_save">Save</string> | |||||
<string name="title_send">Send</string> | |||||
<string name="title_show_addresses">Show CC/BCC</string> | |||||
<string name="title_add_attachment">Add attachment</string> | |||||
<string name="title_no_openpgp">OpenPGP not available</string> | |||||
<string name="title_not_encrypted">Encrypted message not found</string> | |||||
<string name="title_encrypt">Encrypt</string> | |||||
<string name="title_decrypt">Decrypt</string> | |||||
<string name="title_from_missing">Sender missing</string> | |||||
<string name="title_to_missing">Recipient missing</string> | |||||
<string name="title_attachments_missing">Attachments still loading</string> | |||||
<string name="title_draft_trashed">Draft trashed</string> | |||||
<string name="title_draft_saved">Draft saved</string> | |||||
<string name="title_queued">Sending message</string> | |||||
<string name="title_search">Search</string> | |||||
<string name="title_search_hint">Search sender/subject/text</string> | |||||
<string name="title_searching">Searching \'%1$s\'</string> | |||||
<string name="title_answer_reply">Standard reply</string> | |||||
<string name="title_answer_name">Answer name</string> | |||||
<string name="title_answer_text">Answer text</string> | |||||
<string name="title_subject">Konu:</string> | |||||
<string name="title_body_hint">Mesajınız</string> | |||||
<string name="title_save">Kaydet</string> | |||||
<string name="title_send">Gönder</string> | |||||
<string name="title_show_addresses">CC/BCC göster</string> | |||||
<string name="title_add_attachment">Ek ekle</string> | |||||
<string name="title_no_openpgp">OpenPGP mevcut değil</string> | |||||
<string name="title_not_encrypted">Şifreli ileti bulunamadı</string> | |||||
<string name="title_encrypt">Şifrele</string> | |||||
<string name="title_decrypt">Şifre çöz</string> | |||||
<string name="title_from_missing">Gönderici Eksik</string> | |||||
<string name="title_to_missing">Alıcı eksik</string> | |||||
<string name="title_attachments_missing">Ekler hala yükleniyor</string> | |||||
<string name="title_draft_trashed">Taslak çöp kutusuna atıldı</string> | |||||
<string name="title_draft_saved">Taslak kaydedildi</string> | |||||
<string name="title_queued">İleti gönderiliyor</string> | |||||
<string name="title_search">Ara</string> | |||||
<string name="title_search_hint">Gönderen/konu/metin ara</string> | |||||
<string name="title_searching">\'%1$s\' aranıyor</string> | |||||
<string name="title_answer_reply">Standart yanıt</string> | |||||
<string name="title_answer_name">Yanıt adı</string> | |||||
<string name="title_answer_text">Yanıt metni</string> | |||||
<string name="title_legend_cc">CC/BCC</string> | <string name="title_legend_cc">CC/BCC</string> | ||||
<string name="title_legend_attachment">Attachment</string> | |||||
<string name="title_legend_synchronize">Synchronize</string> | |||||
<string name="title_legend_primary">Primary</string> | |||||
<string name="title_legend_disconnected">Disconnected</string> | |||||
<string name="title_legend_connecting">Connecting</string> | |||||
<string name="title_legend_connected">Connected</string> | |||||
<string name="title_legend_synchronizing">Synchronizing</string> | |||||
<string name="title_legend_closing">Closing</string> | |||||
<string name="title_hint_actions">Swipe left to trash; swipe right to archive (if available); long press to mark read/unread</string> | |||||
<string name="title_understood">Understood</string> | |||||
<string name="title_pro_feature">This is a pro feature</string> | |||||
<string name="title_pro_list">List of pro features</string> | |||||
<string name="title_pro_purchase">Buy</string> | |||||
<string name="title_pro_hint">Buying pro features will allow you to use all current and future pro features and will keep this app maintained and supported</string> | |||||
<string name="title_pro_activated">All pro features are activated</string> | |||||
<string name="title_pro_valid">All pro features activated</string> | |||||
<string name="title_pro_invalid">Invalid response</string> | |||||
<string name="title_debug_info">Debug info</string> | |||||
<string name="title_debug_info_remark">Please describe the problem and indicate the time of the problem:</string> | |||||
<string name="title_legend_attachment">Ek</string> | |||||
<string name="title_legend_synchronize">Senkronize et</string> | |||||
<string name="title_legend_primary">Birincil</string> | |||||
<string name="title_legend_disconnected">Bağlantı kesildi</string> | |||||
<string name="title_legend_connecting">Bağlanıyor</string> | |||||
<string name="title_legend_connected">Bağlandı</string> | |||||
<string name="title_legend_synchronizing">Senkronize ediliyor</string> | |||||
<string name="title_legend_closing">Kapatılıyor</string> | |||||
<string name="title_hint_actions">Silmek için sola kaydırın; arşivlemek (mümkün ise) için sağa kaydırın; okundu/okunmadı işaretlemek için uzun basın</string> | |||||
<string name="title_understood">Anlaşıldı</string> | |||||
<string name="title_pro_feature">Bu Pro özelliğidir</string> | |||||
<string name="title_pro_list">Pro özelliklerin listesi</string> | |||||
<string name="title_pro_purchase">Satın al</string> | |||||
<string name="title_pro_hint">Pro özelliklerin satın alınması, mevcut ve gelecekteki tüm pro özelliklerin kullanılmasına izin verecek ve bu uygulamayı ayakta tutup destekleyecek</string> | |||||
<string name="title_pro_activated">Tüm pro özellikleri etkinleştirildi</string> | |||||
<string name="title_pro_valid">Tüm pro özellikleri etkinleştirildi</string> | |||||
<string name="title_pro_invalid">Geçersiz yanıt</string> | |||||
<string name="title_log">Log</string> | |||||
<string name="title_debug_info">Hata ayıklama bilgisi</string> | |||||
<string name="title_debug_info_remark">Lütfen sorunu açıklayın ve sorunun zamanını belirtin:</string> | |||||
</resources> | </resources> |