mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 20:18:41 +00:00
91 lines
3.1 KiB
Dart
91 lines
3.1 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:drift_flutter/drift_flutter.dart'
|
|
show driftDatabase, DriftNativeOptions;
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:twonly/src/database/daos/contacts_dao.dart';
|
|
import 'package:twonly/src/database/daos/media_downloads_dao.dart';
|
|
import 'package:twonly/src/database/daos/media_uploads_dao.dart';
|
|
import 'package:twonly/src/database/daos/messages_dao.dart';
|
|
import 'package:twonly/src/database/tables/contacts_table.dart';
|
|
import 'package:twonly/src/database/tables/media_download_table.dart';
|
|
import 'package:twonly/src/database/tables/media_uploads_table.dart';
|
|
import 'package:twonly/src/database/tables/messages_table.dart';
|
|
import 'package:twonly/src/database/tables/signal_identity_key_store_table.dart';
|
|
import 'package:twonly/src/database/tables/signal_pre_key_store_table.dart';
|
|
import 'package:twonly/src/database/tables/signal_sender_key_store_table.dart';
|
|
import 'package:twonly/src/database/tables/signal_session_store_table.dart';
|
|
import 'package:twonly/src/database/twonly_database.steps.dart';
|
|
|
|
part 'twonly_database.g.dart';
|
|
|
|
// You can then create a database class that includes this table
|
|
@DriftDatabase(tables: [
|
|
Contacts,
|
|
Messages,
|
|
MediaUploads,
|
|
MediaDownloads,
|
|
SignalIdentityKeyStores,
|
|
SignalPreKeyStores,
|
|
SignalSenderKeyStores,
|
|
SignalSessionStores
|
|
], daos: [
|
|
MessagesDao,
|
|
ContactsDao,
|
|
MediaUploadsDao,
|
|
MediaDownloadsDao,
|
|
])
|
|
class TwonlyDatabase extends _$TwonlyDatabase {
|
|
TwonlyDatabase([QueryExecutor? e])
|
|
: super(
|
|
e ?? _openConnection(),
|
|
);
|
|
|
|
TwonlyDatabase.forTesting(DatabaseConnection super.connection);
|
|
|
|
@override
|
|
int get schemaVersion => 7;
|
|
|
|
static QueryExecutor _openConnection() {
|
|
return driftDatabase(
|
|
name: 'twonly_database',
|
|
native: const DriftNativeOptions(
|
|
databaseDirectory: getApplicationSupportDirectory,
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
MigrationStrategy get migration {
|
|
return MigrationStrategy(
|
|
onUpgrade: stepByStep(
|
|
from1To2: (m, schema) async {
|
|
m.addColumn(schema.messages, schema.messages.errorWhileSending);
|
|
},
|
|
from2To3: (m, schema) async {
|
|
m.addColumn(schema.contacts, schema.contacts.archived);
|
|
m.addColumn(
|
|
schema.contacts, schema.contacts.deleteMessagesAfterXMinutes);
|
|
},
|
|
from3To4: (m, schema) async {
|
|
m.createTable(mediaUploads);
|
|
},
|
|
from4To5: (m, schema) async {
|
|
m.createTable(mediaDownloads);
|
|
m.addColumn(schema.messages, schema.messages.mediaDownloadId);
|
|
m.addColumn(schema.messages, schema.messages.mediaUploadId);
|
|
},
|
|
from5To6: (m, schema) async {
|
|
m.addColumn(schema.messages, schema.messages.mediaStored);
|
|
},
|
|
from6To7: (m, schema) async {
|
|
m.addColumn(schema.contacts, schema.contacts.pinned);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
void markUpdated() {
|
|
notifyUpdates({TableUpdate.onTable(messages, kind: UpdateKind.update)});
|
|
notifyUpdates({TableUpdate.onTable(contacts, kind: UpdateKind.update)});
|
|
}
|
|
}
|