aboutsummaryrefslogtreecommitdiff
path: root/plugins/omemo/src/database.vala
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/omemo/src/database.vala')
-rw-r--r--plugins/omemo/src/database.vala80
1 files changed, 80 insertions, 0 deletions
diff --git a/plugins/omemo/src/database.vala b/plugins/omemo/src/database.vala
new file mode 100644
index 00000000..1216ca84
--- /dev/null
+++ b/plugins/omemo/src/database.vala
@@ -0,0 +1,80 @@
+using Gee;
+using Sqlite;
+using Qlite;
+
+using Dino.Entities;
+
+namespace Dino.Omemo {
+
+public class Database : Qlite.Database {
+ private const int VERSION = 0;
+
+ public class IdentityTable : Table {
+ public Column<int> id = new Column.Integer("id") { primary_key = true, auto_increment = true };
+ public Column<int> account_id = new Column.Integer("account_id") { unique = true, not_null = true };
+ public Column<int> device_id = new Column.Integer("device_id") { not_null = true };
+ public Column<string> identity_key_private_base64 = new Column.Text("identity_key_private_base64") { not_null = true };
+ public Column<string> identity_key_public_base64 = new Column.Text("identity_key_public_base64") { not_null = true };
+
+ protected IdentityTable(Database db) {
+ base(db, "identity");
+ init({id, account_id, device_id, identity_key_private_base64, identity_key_public_base64});
+ }
+ }
+
+ public class SignedPreKeyTable : Table {
+ public Column<int> identity_id = new Column.Integer("identity_id") { not_null = true };
+ public Column<int> signed_pre_key_id = new Column.Integer("signed_pre_key_id") { not_null = true };
+ public Column<string> record_base64 = new Column.Text("record_base64") { not_null = true };
+
+ protected SignedPreKeyTable(Database db) {
+ base(db, "signed_pre_key");
+ init({identity_id, signed_pre_key_id, record_base64});
+ unique({identity_id, signed_pre_key_id});
+ }
+ }
+
+ public class PreKeyTable : Table {
+ public Column<int> identity_id = new Column.Integer("identity_id") { not_null = true };
+ public Column<int> pre_key_id = new Column.Integer("pre_key_id") { not_null = true };
+ public Column<string> record_base64 = new Column.Text("record_base64") { not_null = true };
+
+ protected PreKeyTable(Database db) {
+ base(db, "pre_key");
+ init({identity_id, pre_key_id, record_base64});
+ unique({identity_id, pre_key_id});
+ }
+ }
+
+ public class SessionTable : Table {
+ public Column<int> identity_id = new Column.Integer("identity_id") { not_null = true };
+ public Column<string> address_name = new Column.Text("name") { not_null = true };
+ public Column<int> device_id = new Column.Integer("device_id") { not_null = true };
+ public Column<string> record_base64 = new Column.Text("record_base64") { not_null = true };
+
+ protected SessionTable(Database db) {
+ base(db, "session");
+ init({identity_id, address_name, device_id, record_base64});
+ unique({identity_id, address_name, device_id});
+ }
+ }
+ public IdentityTable identity { get; private set; }
+ public SignedPreKeyTable signed_pre_key { get; private set; }
+ public PreKeyTable pre_key { get; private set; }
+ public SessionTable session { get; private set; }
+
+ public Database(string fileName) {
+ base(fileName, VERSION);
+ identity = new IdentityTable(this);
+ signed_pre_key = new SignedPreKeyTable(this);
+ pre_key = new PreKeyTable(this);
+ session = new SessionTable(this);
+ init({identity, signed_pre_key, pre_key, session});
+ }
+
+ public override void migrate(long oldVersion) {
+ // new table columns are added, outdated columns are still present
+ }
+}
+
+} \ No newline at end of file