diff --git a/.gitmodules b/.gitmodules index a3642d1..41a0a1b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,3 @@ -[submodule "dependencies/flutter_secure_storage"] - path = dependencies/flutter_secure_storage - url = https://github.com/juliansteenbakker/flutter_secure_storage [submodule "dependencies/flutter_zxing"] path = dependencies/flutter_zxing url = https://github.com/khoren93/flutter_zxing.git -[submodule "dependencies/flutter-pie-menu"] - path = dependencies/flutter-pie-menu - url = https://github.com/otsmr/flutter-pie-menu.git diff --git a/build.yaml b/build.yaml index 71f1ccd..01b6605 100644 --- a/build.yaml +++ b/build.yaml @@ -10,4 +10,5 @@ targets: drift_dev: options: databases: - twonly_database: lib/src/database/twonly_database.dart \ No newline at end of file + twonly_db: lib/src/database/twonly.db.dart + twonly_database: lib/src/database/twonly_database_old.dart \ No newline at end of file diff --git a/dependencies/flutter-pie-menu b/dependencies/flutter-pie-menu deleted file mode 160000 index 22df3f2..0000000 --- a/dependencies/flutter-pie-menu +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 22df3f2ab9ad71db60526668578a5309b3cc84ef diff --git a/dependencies/flutter_secure_storage b/dependencies/flutter_secure_storage deleted file mode 160000 index 71b75a3..0000000 --- a/dependencies/flutter_secure_storage +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 71b75a36f35f2ce945998e20c6c6aa1820babfc6 diff --git a/ios/NotificationService/push_notification.pb.swift b/ios/NotificationService/push_notification.pb.swift index be89a9d..8bdc778 100644 --- a/ios/NotificationService/push_notification.pb.swift +++ b/ios/NotificationService/push_notification.pb.swift @@ -103,7 +103,7 @@ enum PushKind: SwiftProtobuf.Enum, Swift.CaseIterable { } -struct EncryptedPushNotification: @unchecked Sendable { +struct EncryptedPushNotification: Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. @@ -195,7 +195,7 @@ struct PushUser: Sendable { fileprivate var _lastMessageID: Int64? = nil } -struct PushKey: @unchecked Sendable { +struct PushKey: Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. @@ -214,32 +214,12 @@ struct PushKey: @unchecked Sendable { // MARK: - Code below here is support for the SwiftProtobuf runtime. extension PushKind: SwiftProtobuf._ProtoNameProviding { - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "reaction"), - 1: .same(proto: "response"), - 2: .same(proto: "text"), - 3: .same(proto: "video"), - 4: .same(proto: "twonly"), - 5: .same(proto: "image"), - 6: .same(proto: "contactRequest"), - 7: .same(proto: "acceptRequest"), - 8: .same(proto: "storedMediaFile"), - 9: .same(proto: "testNotification"), - 10: .same(proto: "reopenedMedia"), - 11: .same(proto: "reactionToVideo"), - 12: .same(proto: "reactionToText"), - 13: .same(proto: "reactionToImage"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0reaction\0\u{1}response\0\u{1}text\0\u{1}video\0\u{1}twonly\0\u{1}image\0\u{1}contactRequest\0\u{1}acceptRequest\0\u{1}storedMediaFile\0\u{1}testNotification\0\u{1}reopenedMedia\0\u{1}reactionToVideo\0\u{1}reactionToText\0\u{1}reactionToImage\0") } extension EncryptedPushNotification: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "EncryptedPushNotification" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "keyId"), - 2: .same(proto: "nonce"), - 3: .same(proto: "ciphertext"), - 4: .same(proto: "mac"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}keyId\0\u{1}nonce\0\u{1}ciphertext\0\u{1}mac\0") mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { @@ -284,11 +264,7 @@ extension EncryptedPushNotification: SwiftProtobuf.Message, SwiftProtobuf._Messa extension PushNotification: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "PushNotification" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "kind"), - 2: .same(proto: "messageId"), - 3: .same(proto: "reactionContent"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}kind\0\u{1}messageId\0\u{1}reactionContent\0") mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { @@ -332,9 +308,7 @@ extension PushNotification: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme extension PushUsers: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "PushUsers" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "users"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}users\0") mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { @@ -364,13 +338,7 @@ extension PushUsers: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation extension PushUser: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "PushUser" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "userId"), - 2: .same(proto: "displayName"), - 3: .same(proto: "blocked"), - 4: .same(proto: "lastMessageId"), - 5: .same(proto: "pushKeys"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}userId\0\u{1}displayName\0\u{1}blocked\0\u{1}lastMessageId\0\u{1}pushKeys\0") mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { @@ -424,11 +392,7 @@ extension PushUser: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB extension PushKey: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "PushKey" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "id"), - 2: .same(proto: "key"), - 3: .same(proto: "createdAtUnixTimestamp"), - ] + static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}id\0\u{1}key\0\u{1}createdAtUnixTimestamp\0") mutating func decodeMessage(decoder: inout D) throws { while let fieldNumber = try decoder.nextFieldNumber() { diff --git a/lib/globals.dart b/lib/globals.dart index b5c0a9c..809be94 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -1,11 +1,11 @@ import 'package:camera/camera.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/api.service.dart'; late ApiService apiService; // uses for background notification -late TwonlyDatabase twonlyDB; +late TwonlyDB twonlyDB; List gCameras = []; diff --git a/lib/main.dart b/lib/main.dart index f2fb4a4..1d1ba15 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/providers/connection.provider.dart'; import 'package:twonly/src/providers/image_editor.provider.dart'; import 'package:twonly/src/providers/settings.provider.dart'; @@ -43,18 +43,18 @@ void main() async { gCameras = await availableCameras(); apiService = ApiService(); - twonlyDB = TwonlyDatabase(); + twonlyDB = TwonlyDB(); - await twonlyDB.messagesDao.resetPendingDownloadState(); - await twonlyDB.messagesDao.handleMediaFilesOlderThan30Days(); - await twonlyDB.messageRetransmissionDao.purgeOldRetransmissions(); - await twonlyDB.signalDao.purgeOutDatedPreKeys(); + // await twonlyDB.messagesDao.resetPendingDownloadState(); + // await twonlyDB.messagesDao.handleMediaFilesOlderThan30Days(); + // await twonlyDB.messageRetransmissionDao.purgeOldRetransmissions(); + // await twonlyDB.signalDao.purgeOutDatedPreKeys(); // Purge media files in the background - unawaited(purgeReceivedMediaFiles()); - unawaited(purgeSendMediaFiles()); + // unawaited(purgeReceivedMediaFiles()); + // unawaited(purgeSendMediaFiles()); - unawaited(performTwonlySafeBackup()); + // unawaited(performTwonlySafeBackup()); await initFileDownloader(); diff --git a/lib/src/database/daos/contacts_dao.dart b/lib/src/database/daos/contacts.dao.dart similarity index 82% rename from lib/src/database/daos/contacts_dao.dart rename to lib/src/database/daos/contacts.dao.dart index f97918f..9050ee0 100644 --- a/lib/src/database/daos/contacts_dao.dart +++ b/lib/src/database/daos/contacts.dao.dart @@ -1,13 +1,12 @@ import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/contacts_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/notifications/pushkeys.notifications.dart'; -part 'contacts_dao.g.dart'; +part 'contacts.dao.g.dart'; @DriftAccessor(tables: [Contacts]) -class ContactsDao extends DatabaseAccessor - with _$ContactsDaoMixin { +class ContactsDao extends DatabaseAccessor with _$ContactsDaoMixin { // this constructor is required so that the main database can create an instance // of this object. // ignore: matching_super_parameters @@ -135,42 +134,39 @@ class ContactsDao extends DatabaseAccessor .watchSingleOrNull(); } - Stream> watchContactsForShareView() { - return (select(contacts) - ..where( - (t) => - t.accepted.equals(true) & - t.blocked.equals(false) & - t.deleted.equals(false), - ) - ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) - .watch(); - } + // Stream> watchContactsForShareView() { + // return (select(contacts) + // ..where( + // (t) => + // t.accepted.equals(true) & + // t.blocked.equals(false) & + // t.deleted.equals(false), + // ) + // ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) + // .watch(); + // } - Stream> watchContactsForStartNewChat() { - return (select(contacts) - ..where((t) => t.accepted.equals(true) & t.blocked.equals(false)) - ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) - .watch(); - } + // Stream> watchContactsForStartNewChat() { + // return (select(contacts) + // ..where((t) => t.accepted.equals(true) & t.blocked.equals(false)) + // ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) + // .watch(); + // } - Stream> watchContactsForChatList() { - return (select(contacts) - ..where( - (t) => - t.accepted.equals(true) & - t.blocked.equals(false) & - t.archived.equals(false), - ) - ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) - .watch(); - } + // Stream> watchContactsForChatList() { + // return (select(contacts) + // ..where( + // (t) => + // t.accepted.equals(true) & + // t.blocked.equals(false) & + // t.archived.equals(false), + // ) + // ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) + // .watch(); + // } Future> getAllNotBlockedContacts() { - return (select(contacts) - ..where((t) => t.blocked.equals(false)) - ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)])) - .get(); + return (select(contacts)..where((t) => t.blocked.equals(false))).get(); } Stream watchContactsBlocked() { diff --git a/lib/src/database/daos/contacts_dao.g.dart b/lib/src/database/daos/contacts.dao.g.dart similarity index 59% rename from lib/src/database/daos/contacts_dao.g.dart rename to lib/src/database/daos/contacts.dao.g.dart index 7f5fb6b..626cccb 100644 --- a/lib/src/database/daos/contacts_dao.g.dart +++ b/lib/src/database/daos/contacts.dao.g.dart @@ -1,8 +1,8 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'contacts_dao.dart'; +part of 'contacts.dao.dart'; // ignore_for_file: type=lint -mixin _$ContactsDaoMixin on DatabaseAccessor { +mixin _$ContactsDaoMixin on DatabaseAccessor { $ContactsTable get contacts => attachedDatabase.contacts; } diff --git a/lib/src/database/daos/groups.dao.dart b/lib/src/database/daos/groups.dao.dart new file mode 100644 index 0000000..6c9536a --- /dev/null +++ b/lib/src/database/daos/groups.dao.dart @@ -0,0 +1,21 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/groups.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; + +part 'groups.dao.g.dart'; + +@DriftAccessor(tables: [Groups, GroupMembers]) +class GroupsDao extends DatabaseAccessor with _$GroupsDaoMixin { + // this constructor is required so that the main database can create an instance + // of this object. + // ignore: matching_super_parameters + GroupsDao(super.db); + + Future isContactInGroup(int contactId, String groupId) async { + final entry = await (select(groupMembers) + ..where( + (t) => t.contactId.equals(contactId) & t.groupId.equals(groupId))) + .getSingleOrNull(); + return entry != null; + } +} diff --git a/lib/src/database/daos/groups.dao.g.dart b/lib/src/database/daos/groups.dao.g.dart new file mode 100644 index 0000000..3489f8c --- /dev/null +++ b/lib/src/database/daos/groups.dao.g.dart @@ -0,0 +1,10 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'groups.dao.dart'; + +// ignore_for_file: type=lint +mixin _$GroupsDaoMixin on DatabaseAccessor { + $GroupsTable get groups => attachedDatabase.groups; + $ContactsTable get contacts => attachedDatabase.contacts; + $GroupMembersTable get groupMembers => attachedDatabase.groupMembers; +} diff --git a/lib/src/database/daos/media_uploads_dao.dart b/lib/src/database/daos/media_uploads_dao.dart deleted file mode 100644 index 97135b3..0000000 --- a/lib/src/database/daos/media_uploads_dao.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/media_uploads_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/utils/log.dart'; - -part 'media_uploads_dao.g.dart'; - -@DriftAccessor(tables: [MediaUploads]) -class MediaUploadsDao extends DatabaseAccessor - with _$MediaUploadsDaoMixin { - // ignore: matching_super_parameters - MediaUploadsDao(super.db); - - Future> getMediaUploadsForRetry() { - return (select(mediaUploads) - ..where( - (t) => t.state.equals(UploadState.receiverNotified.name).not(), - )) - .get(); - } - - Future updateMediaUpload( - int mediaUploadId, - MediaUploadsCompanion updatedValues, - ) { - return (update(mediaUploads) - ..where((c) => c.mediaUploadId.equals(mediaUploadId))) - .write(updatedValues); - } - - Future insertMediaUpload(MediaUploadsCompanion values) async { - try { - return await into(mediaUploads).insert(values); - } catch (e) { - Log.error('Error while inserting media upload: $e'); - return null; - } - } - - Future deleteMediaUpload(int mediaUploadId) { - return (delete(mediaUploads) - ..where((t) => t.mediaUploadId.equals(mediaUploadId))) - .go(); - } - - SingleOrNullSelectable getMediaUploadById(int mediaUploadId) { - return select(mediaUploads) - ..where((t) => t.mediaUploadId.equals(mediaUploadId)); - } -} diff --git a/lib/src/database/daos/media_uploads_dao.g.dart b/lib/src/database/daos/media_uploads_dao.g.dart deleted file mode 100644 index c2aa995..0000000 --- a/lib/src/database/daos/media_uploads_dao.g.dart +++ /dev/null @@ -1,8 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'media_uploads_dao.dart'; - -// ignore_for_file: type=lint -mixin _$MediaUploadsDaoMixin on DatabaseAccessor { - $MediaUploadsTable get mediaUploads => attachedDatabase.mediaUploads; -} diff --git a/lib/src/database/daos/message_retransmissions.dao.dart b/lib/src/database/daos/message_retransmissions.dao.dart deleted file mode 100644 index b4a7934..0000000 --- a/lib/src/database/daos/message_retransmissions.dao.dart +++ /dev/null @@ -1,123 +0,0 @@ -import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/message_retransmissions.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/utils/log.dart'; - -part 'message_retransmissions.dao.g.dart'; - -@DriftAccessor(tables: [MessageRetransmissions]) -class MessageRetransmissionDao extends DatabaseAccessor - with _$MessageRetransmissionDaoMixin { - // this constructor is required so that the main database can create an instance - // of this object. - // ignore: matching_super_parameters - MessageRetransmissionDao(super.db); - - Future insertRetransmission( - MessageRetransmissionsCompanion message, - ) async { - try { - return await into(messageRetransmissions).insert(message); - } catch (e) { - Log.error('Error while inserting message for retransmission: $e'); - return null; - } - } - - Future purgeOldRetransmissions() async { - // delete entries older than two weeks - await (delete(messageRetransmissions) - ..where( - (t) => (t.acknowledgeByServerAt.isSmallerThanValue( - DateTime.now().subtract( - const Duration(days: 25), - ), - )), - )) - .go(); - } - - Future> getRetransmitAbleMessages() async { - final countDeleted = await (delete(messageRetransmissions) - ..where( - (t) => - t.encryptedHash.isNull() & t.acknowledgeByServerAt.isNotNull(), - )) - .go(); - - if (countDeleted > 0) { - Log.info('Deleted $countDeleted faulty retransmissions'); - } - - return (await (select(messageRetransmissions) - ..where((t) => t.acknowledgeByServerAt.isNull())) - .get()) - .map((msg) => msg.retransmissionId) - .toList(); - } - - SingleOrNullSelectable getRetransmissionById( - int retransmissionId, - ) { - return select(messageRetransmissions) - ..where((t) => t.retransmissionId.equals(retransmissionId)); - } - - Stream> watchAllMessages() { - return (select(messageRetransmissions) - ..orderBy([(t) => OrderingTerm.asc(t.retransmissionId)])) - .watch(); - } - - Future updateRetransmission( - int retransmissionId, - MessageRetransmissionsCompanion updatedValues, - ) { - return (update(messageRetransmissions) - ..where((c) => c.retransmissionId.equals(retransmissionId))) - .write(updatedValues); - } - - Future resetAckStatusFor(int fromUserId, Uint8List encryptedHash) async { - return ((update(messageRetransmissions)) - ..where( - (m) => - m.contactId.equals(fromUserId) & - m.encryptedHash.equals(encryptedHash), - )) - .write( - const MessageRetransmissionsCompanion( - acknowledgeByServerAt: Value(null), - ), - ); - } - - Future getRetransmissionFromHash( - int fromUserId, - Uint8List encryptedHash, - ) async { - return ((select(messageRetransmissions)) - ..where( - (m) => - m.contactId.equals(fromUserId) & - m.encryptedHash.equals(encryptedHash), - )) - .getSingleOrNull(); - } - - Future deleteRetransmissionById(int retransmissionId) { - return (delete(messageRetransmissions) - ..where((t) => t.retransmissionId.equals(retransmissionId))) - .go(); - } - - Future clearRetransmissionTable() { - return delete(messageRetransmissions).go(); - } - - Future deleteRetransmissionByMessageId(int messageId) { - return (delete(messageRetransmissions) - ..where((t) => t.messageId.equals(messageId))) - .go(); - } -} diff --git a/lib/src/database/daos/message_retransmissions.dao.g.dart b/lib/src/database/daos/message_retransmissions.dao.g.dart deleted file mode 100644 index cd7ca29..0000000 --- a/lib/src/database/daos/message_retransmissions.dao.g.dart +++ /dev/null @@ -1,11 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'message_retransmissions.dao.dart'; - -// ignore_for_file: type=lint -mixin _$MessageRetransmissionDaoMixin on DatabaseAccessor { - $ContactsTable get contacts => attachedDatabase.contacts; - $MessagesTable get messages => attachedDatabase.messages; - $MessageRetransmissionsTable get messageRetransmissions => - attachedDatabase.messageRetransmissions; -} diff --git a/lib/src/database/daos/messages.dao.dart b/lib/src/database/daos/messages.dao.dart new file mode 100644 index 0000000..1244086 --- /dev/null +++ b/lib/src/database/daos/messages.dao.dart @@ -0,0 +1,377 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/tables/mediafiles.table.dart'; +import 'package:twonly/src/database/tables/messages.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/services/mediafile.service.dart'; + +part 'messages.dao.g.dart'; + +@DriftAccessor(tables: [Messages, Contacts, MediaFiles, MessageHistories]) +class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { + // this constructor is required so that the main database can create an instance + // of this object. + // ignore: matching_super_parameters + MessagesDao(super.db); + + // Stream> watchMessageNotOpened(int contactId) { + // return (select(messages) + // ..where( + // (t) => + // t.openedAt.isNull() & + // t.contactId.equals(contactId) & + // t.errorWhileSending.equals(false), + // ) + // ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) + // .watch(); + // } + + // Stream> watchMediaMessageNotOpened(int contactId) { + // return (select(messages) + // ..where( + // (t) => + // t.openedAt.isNull() & + // t.contactId.equals(contactId) & + // t.errorWhileSending.equals(false) & + // t.messageOtherId.isNotNull() & + // t.kind.equals(MessageKind.media.name), + // ) + // ..orderBy([(t) => OrderingTerm.asc(t.sendAt)])) + // .watch(); + // } + + // Stream> watchLastMessage(int contactId) { + // return (select(messages) + // ..where((t) => t.contactId.equals(contactId)) + // ..orderBy([(t) => OrderingTerm.desc(t.sendAt)]) + // ..limit(1)) + // .watch(); + // } + + // Stream> watchAllMessagesFrom(int contactId) { + // return (select(messages) + // ..where( + // (t) => + // t.contactId.equals(contactId) & + // t.contentJson.isNotNull() & + // (t.openedAt.isNull() | + // t.mediaStored.equals(true) | + // t.openedAt.isBiggerThanValue( + // DateTime.now().subtract(const Duration(days: 1)), + // )), + // ) + // ..orderBy([(t) => OrderingTerm.asc(t.sendAt)])) + // .watch(); + // } + + // Future removeOldMessages() { + // return (update(messages) + // ..where( + // (t) => + // (t.openedAt.isSmallerThanValue( + // DateTime.now().subtract(const Duration(days: 1)), + // ) | + // (t.sendAt.isSmallerThanValue( + // DateTime.now().subtract(const Duration(days: 3)), + // ) & + // t.errorWhileSending.equals(true))) & + // t.kind.equals(MessageKind.textMessage.name), + // )) + // .write(const MessagesCompanion(contentJson: Value(null))); + // } + + // Future handleMediaFilesOlderThan30Days() { + // /// media files will be deleted by the server after 30 days, so delete them here also + // return (update(messages) + // ..where( + // (t) => (t.kind.equals(MessageKind.media.name) & + // t.openedAt.isNull() & + // t.messageOtherId.isNull() & + // (t.sendAt.isSmallerThanValue( + // DateTime.now().subtract( + // const Duration(days: 30), + // ), + // ))), + // )) + // .write(const MessagesCompanion(errorWhileSending: Value(true))); + // } + + // Future> getAllMessagesPendingDownloading() { + // return (select(messages) + // ..where( + // (t) => + // t.downloadState.equals(DownloadState.downloaded.index).not() & + // t.messageOtherId.isNotNull() & + // t.errorWhileSending.equals(false) & + // t.kind.equals(MessageKind.media.name), + // )) + // .get(); + // } + + // Future> getAllNonACKMessagesFromUser() { + // return (select(messages) + // ..where( + // (t) => + // t.acknowledgeByUser.equals(false) & + // t.messageOtherId.isNull() & + // t.errorWhileSending.equals(false) & + // t.sendAt.isBiggerThanValue( + // DateTime.now().subtract(const Duration(minutes: 10)), + // ), + // )) + // .get(); + // } + + // Stream> getAllStoredMediaFiles() { + // return (select(messages) + // ..where((t) => t.mediaStored.equals(true)) + // ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) + // .watch(); + // } + + // Future> getAllMessagesPendingUpload() { + // return (select(messages) + // ..where( + // (t) => + // t.acknowledgeByServer.equals(false) & + // t.messageOtherId.isNull() & + // t.mediaUploadId.isNotNull() & + // t.downloadState.equals(DownloadState.pending.index) & + // t.errorWhileSending.equals(false) & + // t.kind.equals(MessageKind.media.name), + // )) + // .get(); + // } + + // Future openedAllNonMediaMessages(int contactId) { + // final updates = MessagesCompanion(openedAt: Value(DateTime.now())); + // return (update(messages) + // ..where( + // (t) => + // t.contactId.equals(contactId) & + // t.messageOtherId.isNotNull() & + // t.openedAt.isNull() & + // t.kind.equals(MessageKind.media.name).not(), + // )) + // .write(updates); + // } + + // Future resetPendingDownloadState() { + // // All media files in the downloading state are reset to the pending state + // // When the app is used in mobile network, they will not be downloaded at the start + // // if they are not yet downloaded... + // const updates = + // MessagesCompanion(downloadState: Value(DownloadState.pending)); + // return (update(messages) + // ..where( + // (t) => + // t.messageOtherId.isNotNull() & + // t.downloadState.equals(DownloadState.downloading.index) & + // t.kind.equals(MessageKind.media.name), + // )) + // .write(updates); + // } + + Future handleMessageDeletion( + int contactId, + String messageId, + DateTime timestamp, + ) async { + final msg = await getMessageById(messageId).getSingleOrNull(); + if (msg == null || msg.senderId != contactId) return; + if (msg.mediaId != null) { + await (delete(mediaFiles)..where((t) => t.mediaId.equals(msg.mediaId!))) + .go(); + await removeMediaFile(msg.mediaId!); + } + await (delete(messageHistories) + ..where((t) => t.messageId.equals(messageId))) + .go(); + + await (update(messages) + ..where( + (t) => t.messageId.equals(messageId) & t.senderId.equals(contactId), + )) + .write( + MessagesCompanion( + isDeletedFromSender: const Value(true), + content: const Value(null), + modifiedAt: Value(timestamp), + mediaId: const Value(null), + ), + ); + } + + Future handleTextEdit( + int contactId, + String messageId, + String text, + DateTime timestamp, + ) async { + final msg = await getMessageById(messageId).getSingleOrNull(); + if (msg == null || msg.content == null || msg.senderId == contactId) { + return; + } + await into(messageHistories).insert( + MessageHistoriesCompanion( + messageId: Value(messageId), + content: Value(msg.content), + ), + ); + await (update(messages) + ..where( + (t) => t.messageId.equals(messageId) & t.senderId.equals(contactId), + )) + .write( + MessagesCompanion( + content: Value(text), + modifiedAt: Value(timestamp), + ), + ); + } + + Future handleMessageOpened( + String groupId, + String messageId, + DateTime timestamp, + ) async { + final msg = await getMessageById(messageId).getSingleOrNull(); + if (msg == null) return; + await (update(messages) + ..where( + (t) => + t.groupId.equals(groupId) & + t.messageId.equals(messageId) & + t.senderId.isNull(), + )) + .write( + MessagesCompanion( + openedAt: Value(timestamp), + openedByCounter: Value(msg.openedByCounter + 1), + ), + ); + } + + // Future updateMessageByOtherUser( + // int userId, + // int messageId, + // MessagesCompanion updatedValues, + // ) { + // return (update(messages) + // ..where( + // (c) => c.contactId.equals(userId) & c.messageId.equals(messageId), + // )) + // .write(updatedValues); + // } + + // Future updateMessageByOtherMessageId( + // int userId, + // int messageOtherId, + // MessagesCompanion updatedValues, + // ) { + // return (update(messages) + // ..where( + // (c) => + // c.contactId.equals(userId) & + // c.messageOtherId.equals(messageOtherId), + // )) + // .write(updatedValues); + // } + + // Future updateMessageByMessageId( + // int messageId, + // MessagesCompanion updatedValues, + // ) { + // return (update(messages)..where((c) => c.messageId.equals(messageId))) + // .write(updatedValues); + // } + + // Future insertMessage(MessagesCompanion message) async { + // try { + // await (update(contacts) + // ..where( + // (c) => c.userId.equals(message.contactId.value), + // )) + // .write(ContactsCompanion(lastMessageExchange: Value(DateTime.now()))); + + // return await into(messages).insert(message); + // } catch (e) { + // Log.error('Error while inserting message: $e'); + // return null; + // } + // } + + // Future deleteMessagesByContactId(int contactId) { + // return (delete(messages) + // ..where( + // (t) => t.contactId.equals(contactId) & t.mediaStored.equals(false), + // )) + // .go(); + // } + + // Future deleteMessagesByContactIdAndOtherMessageId( + // int contactId, + // int messageOtherId, + // ) { + // return (delete(messages) + // ..where( + // (t) => + // t.contactId.equals(contactId) & + // t.messageOtherId.equals(messageOtherId), + // )) + // .go(); + // } + + // Future deleteMessagesByMessageId(int messageId) { + // return (delete(messages)..where((t) => t.messageId.equals(messageId))).go(); + // } + + // Future deleteAllMessagesByContactId(int contactId) { + // return (delete(messages)..where((t) => t.contactId.equals(contactId))).go(); + // } + + // Future containsOtherMessageId( + // int fromUserId, + // int messageOtherId, + // ) async { + // final query = select(messages) + // ..where( + // (t) => + // t.messageOtherId.equals(messageOtherId) & + // t.contactId.equals(fromUserId), + // ); + // final entry = await query.get(); + // return entry.isNotEmpty; + // } + + SingleOrNullSelectable getMessageById(String messageId) { + return select(messages)..where((t) => t.messageId.equals(messageId)); + } + + // Future> getMessagesByMediaUploadId(int mediaUploadId) async { + // return (select(messages) + // ..where((t) => t.mediaUploadId.equals(mediaUploadId))) + // .get(); + // } + + // SingleOrNullSelectable getMessageByOtherMessageId( + // int fromUserId, + // int messageId, + // ) { + // return select(messages) + // ..where( + // (t) => + // t.messageOtherId.equals(messageId) & t.contactId.equals(fromUserId), + // ); + // } + + // SingleOrNullSelectable getMessageByIdAndContactId( + // int fromUserId, + // int messageId, + // ) { + // return select(messages) + // ..where( + // (t) => t.messageId.equals(messageId) & t.contactId.equals(fromUserId), + // ); + // } +} diff --git a/lib/src/database/daos/messages.dao.g.dart b/lib/src/database/daos/messages.dao.g.dart new file mode 100644 index 0000000..bad5c9e --- /dev/null +++ b/lib/src/database/daos/messages.dao.g.dart @@ -0,0 +1,12 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'messages.dao.dart'; + +// ignore_for_file: type=lint +mixin _$MessagesDaoMixin on DatabaseAccessor { + $ContactsTable get contacts => attachedDatabase.contacts; + $MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles; + $MessagesTable get messages => attachedDatabase.messages; + $MessageHistoriesTable get messageHistories => + attachedDatabase.messageHistories; +} diff --git a/lib/src/database/daos/messages_dao.dart b/lib/src/database/daos/messages_dao.dart deleted file mode 100644 index 7bb05e3..0000000 --- a/lib/src/database/daos/messages_dao.dart +++ /dev/null @@ -1,311 +0,0 @@ -import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/contacts_table.dart'; -import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/utils/log.dart'; - -part 'messages_dao.g.dart'; - -@DriftAccessor(tables: [Messages, Contacts]) -class MessagesDao extends DatabaseAccessor - with _$MessagesDaoMixin { - // this constructor is required so that the main database can create an instance - // of this object. - // ignore: matching_super_parameters - MessagesDao(super.db); - - Stream> watchMessageNotOpened(int contactId) { - return (select(messages) - ..where( - (t) => - t.openedAt.isNull() & - t.contactId.equals(contactId) & - t.errorWhileSending.equals(false), - ) - ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) - .watch(); - } - - Stream> watchMediaMessageNotOpened(int contactId) { - return (select(messages) - ..where( - (t) => - t.openedAt.isNull() & - t.contactId.equals(contactId) & - t.errorWhileSending.equals(false) & - t.messageOtherId.isNotNull() & - t.kind.equals(MessageKind.media.name), - ) - ..orderBy([(t) => OrderingTerm.asc(t.sendAt)])) - .watch(); - } - - Stream> watchLastMessage(int contactId) { - return (select(messages) - ..where((t) => t.contactId.equals(contactId)) - ..orderBy([(t) => OrderingTerm.desc(t.sendAt)]) - ..limit(1)) - .watch(); - } - - Stream> watchAllMessagesFrom(int contactId) { - return (select(messages) - ..where( - (t) => - t.contactId.equals(contactId) & - t.contentJson.isNotNull() & - (t.openedAt.isNull() | - t.mediaStored.equals(true) | - t.openedAt.isBiggerThanValue( - DateTime.now().subtract(const Duration(days: 1)), - )), - ) - ..orderBy([(t) => OrderingTerm.asc(t.sendAt)])) - .watch(); - } - - Future removeOldMessages() { - return (update(messages) - ..where( - (t) => - (t.openedAt.isSmallerThanValue( - DateTime.now().subtract(const Duration(days: 1)), - ) | - (t.sendAt.isSmallerThanValue( - DateTime.now().subtract(const Duration(days: 3)), - ) & - t.errorWhileSending.equals(true))) & - t.kind.equals(MessageKind.textMessage.name), - )) - .write(const MessagesCompanion(contentJson: Value(null))); - } - - Future handleMediaFilesOlderThan30Days() { - /// media files will be deleted by the server after 30 days, so delete them here also - return (update(messages) - ..where( - (t) => (t.kind.equals(MessageKind.media.name) & - t.openedAt.isNull() & - t.messageOtherId.isNull() & - (t.sendAt.isSmallerThanValue( - DateTime.now().subtract( - const Duration(days: 30), - ), - ))), - )) - .write(const MessagesCompanion(errorWhileSending: Value(true))); - } - - Future> getAllMessagesPendingDownloading() { - return (select(messages) - ..where( - (t) => - t.downloadState.equals(DownloadState.downloaded.index).not() & - t.messageOtherId.isNotNull() & - t.errorWhileSending.equals(false) & - t.kind.equals(MessageKind.media.name), - )) - .get(); - } - - Future> getAllNonACKMessagesFromUser() { - return (select(messages) - ..where( - (t) => - t.acknowledgeByUser.equals(false) & - t.messageOtherId.isNull() & - t.errorWhileSending.equals(false) & - t.sendAt.isBiggerThanValue( - DateTime.now().subtract(const Duration(minutes: 10)), - ), - )) - .get(); - } - - Stream> getAllStoredMediaFiles() { - return (select(messages) - ..where((t) => t.mediaStored.equals(true)) - ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) - .watch(); - } - - Future> getAllMessagesPendingUpload() { - return (select(messages) - ..where( - (t) => - t.acknowledgeByServer.equals(false) & - t.messageOtherId.isNull() & - t.mediaUploadId.isNotNull() & - t.downloadState.equals(DownloadState.pending.index) & - t.errorWhileSending.equals(false) & - t.kind.equals(MessageKind.media.name), - )) - .get(); - } - - Future openedAllNonMediaMessages(int contactId) { - final updates = MessagesCompanion(openedAt: Value(DateTime.now())); - return (update(messages) - ..where( - (t) => - t.contactId.equals(contactId) & - t.messageOtherId.isNotNull() & - t.openedAt.isNull() & - t.kind.equals(MessageKind.media.name).not(), - )) - .write(updates); - } - - Future resetPendingDownloadState() { - // All media files in the downloading state are reset to the pending state - // When the app is used in mobile network, they will not be downloaded at the start - // if they are not yet downloaded... - const updates = - MessagesCompanion(downloadState: Value(DownloadState.pending)); - return (update(messages) - ..where( - (t) => - t.messageOtherId.isNotNull() & - t.downloadState.equals(DownloadState.downloading.index) & - t.kind.equals(MessageKind.media.name), - )) - .write(updates); - } - - Future openedAllNonMediaMessagesFromOtherUser(int contactId) { - final updates = MessagesCompanion(openedAt: Value(DateTime.now())); - return (update(messages) - ..where( - (t) => - t.contactId.equals(contactId) & - t.messageOtherId - .isNull() & // only mark messages open that where send - t.openedAt.isNull() & - t.kind.equals(MessageKind.media.name).not(), - )) - .write(updates); - } - - Future updateMessageByOtherUser( - int userId, - int messageId, - MessagesCompanion updatedValues, - ) { - return (update(messages) - ..where( - (c) => c.contactId.equals(userId) & c.messageId.equals(messageId), - )) - .write(updatedValues); - } - - Future updateMessageByOtherMessageId( - int userId, - int messageOtherId, - MessagesCompanion updatedValues, - ) { - return (update(messages) - ..where( - (c) => - c.contactId.equals(userId) & - c.messageOtherId.equals(messageOtherId), - )) - .write(updatedValues); - } - - Future updateMessageByMessageId( - int messageId, - MessagesCompanion updatedValues, - ) { - return (update(messages)..where((c) => c.messageId.equals(messageId))) - .write(updatedValues); - } - - Future insertMessage(MessagesCompanion message) async { - try { - await (update(contacts) - ..where( - (c) => c.userId.equals(message.contactId.value), - )) - .write(ContactsCompanion(lastMessageExchange: Value(DateTime.now()))); - - return await into(messages).insert(message); - } catch (e) { - Log.error('Error while inserting message: $e'); - return null; - } - } - - Future deleteMessagesByContactId(int contactId) { - return (delete(messages) - ..where( - (t) => t.contactId.equals(contactId) & t.mediaStored.equals(false), - )) - .go(); - } - - Future deleteMessagesByContactIdAndOtherMessageId( - int contactId, - int messageOtherId, - ) { - return (delete(messages) - ..where( - (t) => - t.contactId.equals(contactId) & - t.messageOtherId.equals(messageOtherId), - )) - .go(); - } - - Future deleteMessagesByMessageId(int messageId) { - return (delete(messages)..where((t) => t.messageId.equals(messageId))).go(); - } - - Future deleteAllMessagesByContactId(int contactId) { - return (delete(messages)..where((t) => t.contactId.equals(contactId))).go(); - } - - Future containsOtherMessageId( - int fromUserId, - int messageOtherId, - ) async { - final query = select(messages) - ..where( - (t) => - t.messageOtherId.equals(messageOtherId) & - t.contactId.equals(fromUserId), - ); - final entry = await query.get(); - return entry.isNotEmpty; - } - - SingleOrNullSelectable getMessageByMessageId(int messageId) { - return select(messages)..where((t) => t.messageId.equals(messageId)); - } - - Future> getMessagesByMediaUploadId(int mediaUploadId) async { - return (select(messages) - ..where((t) => t.mediaUploadId.equals(mediaUploadId))) - .get(); - } - - SingleOrNullSelectable getMessageByOtherMessageId( - int fromUserId, - int messageId, - ) { - return select(messages) - ..where( - (t) => - t.messageOtherId.equals(messageId) & t.contactId.equals(fromUserId), - ); - } - - SingleOrNullSelectable getMessageByIdAndContactId( - int fromUserId, - int messageId, - ) { - return select(messages) - ..where( - (t) => t.messageId.equals(messageId) & t.contactId.equals(fromUserId), - ); - } -} diff --git a/lib/src/database/daos/messages_dao.g.dart b/lib/src/database/daos/messages_dao.g.dart deleted file mode 100644 index 1967aec..0000000 --- a/lib/src/database/daos/messages_dao.g.dart +++ /dev/null @@ -1,9 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'messages_dao.dart'; - -// ignore_for_file: type=lint -mixin _$MessagesDaoMixin on DatabaseAccessor { - $ContactsTable get contacts => attachedDatabase.contacts; - $MessagesTable get messages => attachedDatabase.messages; -} diff --git a/lib/src/database/daos/reactions.dao.dart b/lib/src/database/daos/reactions.dao.dart new file mode 100644 index 0000000..65eb24f --- /dev/null +++ b/lib/src/database/daos/reactions.dao.dart @@ -0,0 +1,44 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/globals.dart'; +import 'package:twonly/src/database/tables/reactions.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/utils/log.dart'; + +part 'reactions.dao.g.dart'; + +@DriftAccessor(tables: [Reactions]) +class ReactionsDao extends DatabaseAccessor with _$ReactionsDaoMixin { + // this constructor is required so that the main database can create an instance + // of this object. + // ignore: matching_super_parameters + ReactionsDao(super.db); + + Future updateReaction( + int contactId, + String messageId, + String groupId, + String? emoji, + ) async { + final msg = + await twonlyDB.messagesDao.getMessageById(messageId).getSingleOrNull(); + if (msg == null || msg.groupId != groupId) return; + + try { + await (delete(reactions) + ..where( + (t) => + t.senderId.equals(contactId) & t.messageId.equals(messageId), + )) + .go(); + if (emoji != null) { + await into(reactions).insert(ReactionsCompanion( + messageId: Value(messageId), + emoji: Value(emoji), + senderId: Value(contactId), + )); + } + } catch (e) { + Log.error(e); + } + } +} diff --git a/lib/src/database/daos/reactions.dao.g.dart b/lib/src/database/daos/reactions.dao.g.dart new file mode 100644 index 0000000..2fcd9af --- /dev/null +++ b/lib/src/database/daos/reactions.dao.g.dart @@ -0,0 +1,11 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'reactions.dao.dart'; + +// ignore_for_file: type=lint +mixin _$ReactionsDaoMixin on DatabaseAccessor { + $ContactsTable get contacts => attachedDatabase.contacts; + $MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles; + $MessagesTable get messages => attachedDatabase.messages; + $ReactionsTable get reactions => attachedDatabase.reactions; +} diff --git a/lib/src/database/daos/receipts.dao.dart b/lib/src/database/daos/receipts.dao.dart new file mode 100644 index 0000000..cf2193e --- /dev/null +++ b/lib/src/database/daos/receipts.dao.dart @@ -0,0 +1,52 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/messages.table.dart'; +import 'package:twonly/src/database/tables/receipts.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/utils/log.dart'; + +part 'receipts.dao.g.dart'; + +@DriftAccessor(tables: [Receipts, Messages]) +class ReceiptsDao extends DatabaseAccessor with _$ReceiptsDaoMixin { + // this constructor is required so that the main database can create an instance + // of this object. + // ignore: matching_super_parameters + ReceiptsDao(super.db); + + Future confirmReceipt(String receiptId, int fromUserId) async { + final receipt = await (select(receipts) + ..where((t) => + t.receiptId.equals(receiptId) & t.contactId.equals(fromUserId))) + .getSingleOrNull(); + + if (receipt == null) return; + + if (receipt.messageId != null) { + await (update(messages) + ..where((t) => t.messageId.equals(receipt.messageId!))) + .write( + const MessagesCompanion( + acknowledgeByUser: Value(true), + ), + ); + } + + await (delete(receipts) + ..where( + (t) => + t.receiptId.equals(receiptId) & t.contactId.equals(fromUserId), + )) + .go(); + } + + Future insertReceipt(ReceiptsCompanion entry) async { + try { + final id = await into(receipts).insert(entry); + return await (select(receipts)..where((t) => t.rowId.equals(id))) + .getSingle(); + } catch (e) { + Log.error(e); + return null; + } + } +} diff --git a/lib/src/database/daos/receipts.dao.g.dart b/lib/src/database/daos/receipts.dao.g.dart new file mode 100644 index 0000000..d0b9b41 --- /dev/null +++ b/lib/src/database/daos/receipts.dao.g.dart @@ -0,0 +1,11 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'receipts.dao.dart'; + +// ignore_for_file: type=lint +mixin _$ReceiptsDaoMixin on DatabaseAccessor { + $ContactsTable get contacts => attachedDatabase.contacts; + $MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles; + $MessagesTable get messages => attachedDatabase.messages; + $ReceiptsTable get receipts => attachedDatabase.receipts; +} diff --git a/lib/src/database/daos/signal_dao.dart b/lib/src/database/daos/signal.dao.dart similarity index 95% rename from lib/src/database/daos/signal_dao.dart rename to lib/src/database/daos/signal.dao.dart index e8f4732..4458f50 100644 --- a/lib/src/database/daos/signal_dao.dart +++ b/lib/src/database/daos/signal.dao.dart @@ -1,11 +1,11 @@ import 'package:drift/drift.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/tables/signal_contact_prekey_table.dart'; -import 'package:twonly/src/database/tables/signal_contact_signed_prekey_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/tables/signal_contact_prekey.table.dart'; +import 'package:twonly/src/database/tables/signal_contact_signed_prekey.table.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/log.dart'; -part 'signal_dao.g.dart'; +part 'signal.dao.g.dart'; @DriftAccessor( tables: [ @@ -13,7 +13,7 @@ part 'signal_dao.g.dart'; SignalContactSignedPreKeys, ], ) -class SignalDao extends DatabaseAccessor with _$SignalDaoMixin { +class SignalDao extends DatabaseAccessor with _$SignalDaoMixin { // this constructor is required so that the main database can create an instance // of this object. // ignore: matching_super_parameters diff --git a/lib/src/database/daos/signal_dao.g.dart b/lib/src/database/daos/signal.dao.g.dart similarity index 67% rename from lib/src/database/daos/signal_dao.g.dart rename to lib/src/database/daos/signal.dao.g.dart index a3b77d6..a9eea13 100644 --- a/lib/src/database/daos/signal_dao.g.dart +++ b/lib/src/database/daos/signal.dao.g.dart @@ -1,9 +1,10 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'signal_dao.dart'; +part of 'signal.dao.dart'; // ignore_for_file: type=lint -mixin _$SignalDaoMixin on DatabaseAccessor { +mixin _$SignalDaoMixin on DatabaseAccessor { + $ContactsTable get contacts => attachedDatabase.contacts; $SignalContactPreKeysTable get signalContactPreKeys => attachedDatabase.signalContactPreKeys; $SignalContactSignedPreKeysTable get signalContactSignedPreKeys => diff --git a/lib/src/database/signal/connect_identity_key_store.dart b/lib/src/database/signal/connect_identity_key_store.dart index 47d4d88..2b36b13 100644 --- a/lib/src/database/signal/connect_identity_key_store.dart +++ b/lib/src/database/signal/connect_identity_key_store.dart @@ -2,7 +2,7 @@ import 'package:collection/collection.dart'; import 'package:drift/drift.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; class ConnectIdentityKeyStore extends IdentityKeyStore { ConnectIdentityKeyStore(this.identityKeyPair, this.localRegistrationId); diff --git a/lib/src/database/signal/connect_pre_key_store.dart b/lib/src/database/signal/connect_pre_key_store.dart index 6fb193b..1c3da47 100644 --- a/lib/src/database/signal/connect_pre_key_store.dart +++ b/lib/src/database/signal/connect_pre_key_store.dart @@ -1,7 +1,7 @@ import 'package:drift/drift.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/log.dart'; class ConnectPreKeyStore extends PreKeyStore { diff --git a/lib/src/database/signal/connect_sender_key_store.dart b/lib/src/database/signal/connect_sender_key_store.dart index e9b0ee2..69b25c7 100644 --- a/lib/src/database/signal/connect_sender_key_store.dart +++ b/lib/src/database/signal/connect_sender_key_store.dart @@ -1,7 +1,7 @@ import 'package:drift/drift.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; class ConnectSenderKeyStore extends SenderKeyStore { @override diff --git a/lib/src/database/signal/connect_session_store.dart b/lib/src/database/signal/connect_session_store.dart index d851600..bb738c4 100644 --- a/lib/src/database/signal/connect_session_store.dart +++ b/lib/src/database/signal/connect_session_store.dart @@ -1,7 +1,7 @@ import 'package:drift/drift.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; class ConnectSessionStore extends SessionStore { @override diff --git a/lib/src/database/tables/contacts.table.dart b/lib/src/database/tables/contacts.table.dart new file mode 100644 index 0000000..0f9e2b0 --- /dev/null +++ b/lib/src/database/tables/contacts.table.dart @@ -0,0 +1,41 @@ +import 'package:drift/drift.dart'; + +class Contacts extends Table { + IntColumn get userId => integer()(); + + TextColumn get username => text()(); + TextColumn get displayName => text().nullable()(); + TextColumn get nickName => text().nullable()(); + TextColumn get avatarSvg => text().nullable()(); + + IntColumn get senderProfileCounter => + integer().withDefault(const Constant(0))(); + + BoolColumn get accepted => boolean().withDefault(const Constant(false))(); + BoolColumn get requested => boolean().withDefault(const Constant(false))(); + BoolColumn get hidden => boolean().withDefault(const Constant(false))(); + BoolColumn get blocked => boolean().withDefault(const Constant(false))(); + BoolColumn get verified => boolean().withDefault(const Constant(false))(); + BoolColumn get archived => boolean().withDefault(const Constant(false))(); + BoolColumn get deleted => boolean().withDefault(const Constant(false))(); + + BoolColumn get alsoBestFriend => + boolean().withDefault(const Constant(false))(); + + IntColumn get deleteMessagesAfterXMinutes => + integer().withDefault(const Constant(60 * 24))(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + IntColumn get totalMediaCounter => integer().withDefault(const Constant(0))(); + + DateTimeColumn get lastMessageSend => dateTime().nullable()(); + DateTimeColumn get lastMessageReceived => dateTime().nullable()(); + DateTimeColumn get lastFlameCounterChange => dateTime().nullable()(); + DateTimeColumn get lastFlameSync => dateTime().nullable()(); + + IntColumn get flameCounter => integer().withDefault(const Constant(0))(); + + @override + Set get primaryKey => {userId}; +} diff --git a/lib/src/database/tables/groups.table.dart b/lib/src/database/tables/groups.table.dart new file mode 100644 index 0000000..08148ae --- /dev/null +++ b/lib/src/database/tables/groups.table.dart @@ -0,0 +1,34 @@ +import 'package:drift/drift.dart'; +import 'package:hashlib/random.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; + +@DataClassName('Group') +class Groups extends Table { + TextColumn get groupId => text().clientDefault(() => uuid.v4())(); + + BoolColumn get isGroupAdmin => boolean()(); + BoolColumn get isGroupOfTwo => boolean()(); + BoolColumn get pinned => boolean().withDefault(const Constant(false))(); + + DateTimeColumn get lastMessageExchange => + dateTime().withDefault(currentDateAndTime)(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {groupId}; +} + +enum MemberState { invited, accepted, admin } + +@DataClassName('GroupMember') +class GroupMembers extends Table { + TextColumn get groupId => text()(); + + IntColumn get contactId => integer().references(Contacts, #userId)(); + TextColumn get memberState => textEnum().nullable()(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {groupId, contactId}; +} diff --git a/lib/src/database/tables/mediafiles.table.dart b/lib/src/database/tables/mediafiles.table.dart new file mode 100644 index 0000000..24edcd4 --- /dev/null +++ b/lib/src/database/tables/mediafiles.table.dart @@ -0,0 +1,48 @@ +import 'package:drift/drift.dart'; +import 'package:hashlib/random.dart'; + +enum MediaType { + image, + video, + gif, +} + +enum UploadState { + pending, + readyToUpload, + uploadTaskStarted, + receiverNotified, +} + +enum DownloadState { + pending, +} + +@DataClassName('MediaFile') +class MediaFiles extends Table { + TextColumn get mediaId => text().clientDefault(() => uuid.v4())(); + + TextColumn get type => textEnum()(); + + TextColumn get uploadState => textEnum().nullable()(); + TextColumn get downloadState => textEnum().nullable()(); + + BoolColumn get requiresAuthentication => boolean()(); + BoolColumn get reopenByContact => + boolean().withDefault(const Constant(false))(); + + BoolColumn get storedByContact => + boolean().withDefault(const Constant(false))(); + + IntColumn get displayLimitInMilliseconds => integer().nullable()(); + + BlobColumn get downloadToken => blob().nullable()(); + BlobColumn get encryptionKey => blob().nullable()(); + BlobColumn get encryptionMac => blob().nullable()(); + BlobColumn get encryptionNonce => blob().nullable()(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {mediaId}; +} diff --git a/lib/src/database/tables/messages.table.dart b/lib/src/database/tables/messages.table.dart new file mode 100644 index 0000000..2e33471 --- /dev/null +++ b/lib/src/database/tables/messages.table.dart @@ -0,0 +1,52 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/tables/mediafiles.table.dart'; + +@DataClassName('Message') +class Messages extends Table { + TextColumn get groupId => text()(); + TextColumn get messageId => text()(); + + // in case senderId is null, it was send by user itself + IntColumn get senderId => + integer().nullable().references(Contacts, #userId)(); + + TextColumn get content => text().nullable()(); + TextColumn get mediaId => + text().nullable().references(MediaFiles, #mediaId)(); + + TextColumn get quotesMessageId => + text().nullable().references(Messages, #messageId)(); + + BoolColumn get isDeletedFromSender => + boolean().withDefault(const Constant(false))(); + + BoolColumn get isEdited => boolean().withDefault(const Constant(false))(); + + BoolColumn get acknowledgeByUser => + boolean().withDefault(const Constant(false))(); + BoolColumn get acknowledgeByServer => + boolean().withDefault(const Constant(false))(); + + IntColumn get openedByCounter => integer().withDefault(const Constant(0))(); + DateTimeColumn get openedAt => dateTime().nullable()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + DateTimeColumn get modifiedAt => + dateTime().nullable().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {messageId}; +} + +@DataClassName('MessageHistory') +class MessageHistories extends Table { + TextColumn get messageId => + text().references(Messages, #messageId, onDelete: KeyAction.cascade)(); + + TextColumn get content => text().nullable()(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {messageId, createdAt}; +} diff --git a/lib/src/database/tables/reactions.table.dart b/lib/src/database/tables/reactions.table.dart new file mode 100644 index 0000000..1f29c06 --- /dev/null +++ b/lib/src/database/tables/reactions.table.dart @@ -0,0 +1,21 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/tables/messages.table.dart'; + +@DataClassName('Reaction') +class Reactions extends Table { + TextColumn get messageId => + text().references(Messages, #messageId, onDelete: KeyAction.cascade)(); + + TextColumn get emoji => text()(); + + // in case senderId is null, it was send by user itself + IntColumn get senderId => integer() + .nullable() + .references(Contacts, #userId, onDelete: KeyAction.cascade)(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {messageId, senderId, createdAt}; +} diff --git a/lib/src/database/tables/receipts.table.dart b/lib/src/database/tables/receipts.table.dart new file mode 100644 index 0000000..3ccf85e --- /dev/null +++ b/lib/src/database/tables/receipts.table.dart @@ -0,0 +1,30 @@ +import 'package:drift/drift.dart'; +import 'package:hashlib/random.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/tables/messages.table.dart'; + +@DataClassName('Receipt') +class Receipts extends Table { + TextColumn get receiptId => text().clientDefault(() => uuid.v4())(); + + IntColumn get contactId => + integer().references(Contacts, #userId, onDelete: KeyAction.cascade)(); + + // in case a message is deleted, it should be also deleted from the receipts table + TextColumn get messageId => text() + .nullable() + .references(Messages, #messageId, onDelete: KeyAction.cascade)(); + + BlobColumn get message => blob()(); + + BoolColumn get contactWillSendsReceipt => + boolean().withDefault(const Constant(true))(); + + IntColumn get retryCount => integer().withDefault(const Constant(0))(); + DateTimeColumn get lastRetry => dateTime().nullable()(); + + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {receiptId}; +} diff --git a/lib/src/database/tables/signal_contact_prekey.table.dart b/lib/src/database/tables/signal_contact_prekey.table.dart new file mode 100644 index 0000000..d14f522 --- /dev/null +++ b/lib/src/database/tables/signal_contact_prekey.table.dart @@ -0,0 +1,13 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; + +@DataClassName('SignalContactPreKey') +class SignalContactPreKeys extends Table { + IntColumn get contactId => + integer().references(Contacts, #userId, onDelete: KeyAction.cascade)(); + IntColumn get preKeyId => integer()(); + BlobColumn get preKey => blob()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + @override + Set get primaryKey => {contactId, preKeyId}; +} diff --git a/lib/src/database/tables/signal_contact_signed_prekey.table.dart b/lib/src/database/tables/signal_contact_signed_prekey.table.dart new file mode 100644 index 0000000..5888abe --- /dev/null +++ b/lib/src/database/tables/signal_contact_signed_prekey.table.dart @@ -0,0 +1,14 @@ +import 'package:drift/drift.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; + +@DataClassName('SignalContactSignedPreKey') +class SignalContactSignedPreKeys extends Table { + IntColumn get contactId => + integer().references(Contacts, #userId, onDelete: KeyAction.cascade)(); + IntColumn get signedPreKeyId => integer()(); + BlobColumn get signedPreKey => blob()(); + BlobColumn get signedPreKeySignature => blob()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + @override + Set get primaryKey => {contactId}; +} diff --git a/lib/src/database/tables/signal_identity_key_store_table.dart b/lib/src/database/tables/signal_identity_key_store.table.dart similarity index 100% rename from lib/src/database/tables/signal_identity_key_store_table.dart rename to lib/src/database/tables/signal_identity_key_store.table.dart diff --git a/lib/src/database/tables/signal_pre_key_store_table.dart b/lib/src/database/tables/signal_pre_key_store.table.dart similarity index 100% rename from lib/src/database/tables/signal_pre_key_store_table.dart rename to lib/src/database/tables/signal_pre_key_store.table.dart diff --git a/lib/src/database/tables/signal_sender_key_store_table.dart b/lib/src/database/tables/signal_sender_key_store.table.dart similarity index 100% rename from lib/src/database/tables/signal_sender_key_store_table.dart rename to lib/src/database/tables/signal_sender_key_store.table.dart diff --git a/lib/src/database/tables/signal_session_store_table.dart b/lib/src/database/tables/signal_session_store.table.dart similarity index 100% rename from lib/src/database/tables/signal_session_store_table.dart rename to lib/src/database/tables/signal_session_store.table.dart diff --git a/lib/src/database/tables/contacts_table.dart b/lib/src/database/tables_old/contacts_table.dart similarity index 100% rename from lib/src/database/tables/contacts_table.dart rename to lib/src/database/tables_old/contacts_table.dart diff --git a/lib/src/database/tables/media_uploads_table.dart b/lib/src/database/tables_old/media_uploads_table.dart similarity index 100% rename from lib/src/database/tables/media_uploads_table.dart rename to lib/src/database/tables_old/media_uploads_table.dart diff --git a/lib/src/database/tables/message_retransmissions.dart b/lib/src/database/tables_old/message_retransmissions.dart similarity index 85% rename from lib/src/database/tables/message_retransmissions.dart rename to lib/src/database/tables_old/message_retransmissions.dart index a746f98..113d775 100644 --- a/lib/src/database/tables/message_retransmissions.dart +++ b/lib/src/database/tables_old/message_retransmissions.dart @@ -1,6 +1,6 @@ import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/contacts_table.dart'; -import 'package:twonly/src/database/tables/messages_table.dart'; +import 'package:twonly/src/database/tables_old/contacts_table.dart'; +import 'package:twonly/src/database/tables_old/messages_table.dart'; @DataClassName('MessageRetransmission') class MessageRetransmissions extends Table { diff --git a/lib/src/database/tables/messages_table.dart b/lib/src/database/tables_old/messages_table.dart similarity index 96% rename from lib/src/database/tables/messages_table.dart rename to lib/src/database/tables_old/messages_table.dart index 6a2af91..547857e 100644 --- a/lib/src/database/tables/messages_table.dart +++ b/lib/src/database/tables_old/messages_table.dart @@ -1,5 +1,5 @@ import 'package:drift/drift.dart'; -import 'package:twonly/src/database/tables/contacts_table.dart'; +import 'package:twonly/src/database/tables_old/contacts_table.dart'; enum MessageKind { textMessage, diff --git a/lib/src/database/tables/signal_contact_prekey_table.dart b/lib/src/database/tables_old/signal_contact_prekey_table.dart similarity index 100% rename from lib/src/database/tables/signal_contact_prekey_table.dart rename to lib/src/database/tables_old/signal_contact_prekey_table.dart diff --git a/lib/src/database/tables/signal_contact_signed_prekey_table.dart b/lib/src/database/tables_old/signal_contact_signed_prekey_table.dart similarity index 100% rename from lib/src/database/tables/signal_contact_signed_prekey_table.dart rename to lib/src/database/tables_old/signal_contact_signed_prekey_table.dart diff --git a/lib/src/database/tables_old/signal_identity_key_store_table.dart b/lib/src/database/tables_old/signal_identity_key_store_table.dart new file mode 100644 index 0000000..1f7d380 --- /dev/null +++ b/lib/src/database/tables_old/signal_identity_key_store_table.dart @@ -0,0 +1,12 @@ +import 'package:drift/drift.dart'; + +@DataClassName('SignalIdentityKeyStore') +class SignalIdentityKeyStores extends Table { + IntColumn get deviceId => integer()(); + TextColumn get name => text()(); + BlobColumn get identityKey => blob()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {deviceId, name}; +} diff --git a/lib/src/database/tables_old/signal_pre_key_store_table.dart b/lib/src/database/tables_old/signal_pre_key_store_table.dart new file mode 100644 index 0000000..eb74263 --- /dev/null +++ b/lib/src/database/tables_old/signal_pre_key_store_table.dart @@ -0,0 +1,11 @@ +import 'package:drift/drift.dart'; + +@DataClassName('SignalPreKeyStore') +class SignalPreKeyStores extends Table { + IntColumn get preKeyId => integer()(); + BlobColumn get preKey => blob()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {preKeyId}; +} diff --git a/lib/src/database/tables_old/signal_sender_key_store_table.dart b/lib/src/database/tables_old/signal_sender_key_store_table.dart new file mode 100644 index 0000000..1c10183 --- /dev/null +++ b/lib/src/database/tables_old/signal_sender_key_store_table.dart @@ -0,0 +1,10 @@ +import 'package:drift/drift.dart'; + +@DataClassName('SignalSenderKeyStore') +class SignalSenderKeyStores extends Table { + TextColumn get senderKeyName => text()(); + BlobColumn get senderKey => blob()(); + + @override + Set get primaryKey => {senderKeyName}; +} diff --git a/lib/src/database/tables_old/signal_session_store_table.dart b/lib/src/database/tables_old/signal_session_store_table.dart new file mode 100644 index 0000000..e522700 --- /dev/null +++ b/lib/src/database/tables_old/signal_session_store_table.dart @@ -0,0 +1,12 @@ +import 'package:drift/drift.dart'; + +@DataClassName('SignalSessionStore') +class SignalSessionStores extends Table { + IntColumn get deviceId => integer()(); + TextColumn get name => text()(); + BlobColumn get sessionRecord => blob()(); + DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)(); + + @override + Set get primaryKey => {deviceId, name}; +} diff --git a/lib/src/database/twonly.db.dart b/lib/src/database/twonly.db.dart new file mode 100644 index 0000000..d4f21f0 --- /dev/null +++ b/lib/src/database/twonly.db.dart @@ -0,0 +1,124 @@ +import 'package:drift/drift.dart'; +import 'package:drift_flutter/drift_flutter.dart' + show DriftNativeOptions, driftDatabase; +import 'package:path_provider/path_provider.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/daos/groups.dao.dart'; +import 'package:twonly/src/database/daos/messages.dao.dart'; +import 'package:twonly/src/database/daos/reactions.dao.dart'; +import 'package:twonly/src/database/daos/receipts.dao.dart'; +import 'package:twonly/src/database/daos/signal.dao.dart'; +import 'package:twonly/src/database/tables/contacts.table.dart'; +import 'package:twonly/src/database/tables/groups.table.dart'; +import 'package:twonly/src/database/tables/mediafiles.table.dart'; +import 'package:twonly/src/database/tables/messages.table.dart'; +import 'package:twonly/src/database/tables/reactions.table.dart'; +import 'package:twonly/src/database/tables/receipts.table.dart'; +import 'package:twonly/src/database/tables/signal_contact_prekey.table.dart'; +import 'package:twonly/src/database/tables/signal_contact_signed_prekey.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/utils/log.dart'; + +part 'twonly.db.g.dart'; + +// You can then create a database class that includes this table +@DriftDatabase( + tables: [ + Contacts, + Messages, + MessageHistories, + MediaFiles, + Reactions, + Groups, + GroupMembers, + Receipts, + SignalIdentityKeyStores, + SignalPreKeyStores, + SignalSenderKeyStores, + SignalSessionStores, + SignalContactPreKeys, + SignalContactSignedPreKeys, + ], + daos: [ + MessagesDao, + ContactsDao, + SignalDao, + ReceiptsDao, + GroupsDao, + ReactionsDao + ], +) +class TwonlyDB extends _$TwonlyDB { + TwonlyDB([QueryExecutor? e]) + : super( + e ?? _openConnection(), + ); + + // ignore: matching_super_parameters + TwonlyDB.forTesting(DatabaseConnection super.connection); + + @override + int get schemaVersion => 1; + + static QueryExecutor _openConnection() { + return driftDatabase( + name: 'twonly', + native: const DriftNativeOptions( + databaseDirectory: getApplicationSupportDirectory, + ), + ); + } + + @override + MigrationStrategy get migration { + return MigrationStrategy( + beforeOpen: (details) async { + await customStatement('PRAGMA foreign_keys = ON'); + }, + // onUpgrade: stepByStep(), + ); + } + + void markUpdated() { + notifyUpdates({TableUpdate.onTable(messages, kind: UpdateKind.update)}); + notifyUpdates({TableUpdate.onTable(contacts, kind: UpdateKind.update)}); + } + + Future printTableSizes() async { + final result = await customSelect( + 'SELECT name, SUM(pgsize) as size FROM dbstat GROUP BY name', + ).get(); + + for (final row in result) { + final tableName = row.read('name'); + final tableSize = row.read('size'); + Log.info('Table: $tableName, Size: $tableSize bytes'); + } + } + + Future deleteDataForTwonlySafe() async { + // await delete(messages).go(); + // await delete(messageRetransmissions).go(); + // await delete(mediaUploads).go(); + // await update(contacts).write( + // const ContactsCompanion( + // avatarSvg: Value(null), + // myAvatarCounter: Value(0), + // ), + // ); + // await delete(signalContactPreKeys).go(); + // await delete(signalContactSignedPreKeys).go(); + // await (delete(signalPreKeyStores) + // ..where( + // (t) => (t.createdAt.isSmallerThanValue( + // DateTime.now().subtract( + // const Duration(days: 25), + // ), + // )), + // )) + // .go(); + } +} diff --git a/lib/src/database/twonly.db.g.dart b/lib/src/database/twonly.db.g.dart new file mode 100644 index 0000000..8238265 --- /dev/null +++ b/lib/src/database/twonly.db.g.dart @@ -0,0 +1,10544 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'twonly.db.dart'; + +// ignore_for_file: type=lint +class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ContactsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _usernameMeta = + const VerificationMeta('username'); + @override + late final GeneratedColumn username = GeneratedColumn( + 'username', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _displayNameMeta = + const VerificationMeta('displayName'); + @override + late final GeneratedColumn displayName = GeneratedColumn( + 'display_name', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _nickNameMeta = + const VerificationMeta('nickName'); + @override + late final GeneratedColumn nickName = GeneratedColumn( + 'nick_name', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _avatarSvgMeta = + const VerificationMeta('avatarSvg'); + @override + late final GeneratedColumn avatarSvg = GeneratedColumn( + 'avatar_svg', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _senderProfileCounterMeta = + const VerificationMeta('senderProfileCounter'); + @override + late final GeneratedColumn senderProfileCounter = GeneratedColumn( + 'sender_profile_counter', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _acceptedMeta = + const VerificationMeta('accepted'); + @override + late final GeneratedColumn accepted = GeneratedColumn( + 'accepted', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("accepted" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _requestedMeta = + const VerificationMeta('requested'); + @override + late final GeneratedColumn requested = GeneratedColumn( + 'requested', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("requested" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _hiddenMeta = const VerificationMeta('hidden'); + @override + late final GeneratedColumn hidden = GeneratedColumn( + 'hidden', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("hidden" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _blockedMeta = + const VerificationMeta('blocked'); + @override + late final GeneratedColumn blocked = GeneratedColumn( + 'blocked', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("blocked" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _verifiedMeta = + const VerificationMeta('verified'); + @override + late final GeneratedColumn verified = GeneratedColumn( + 'verified', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("verified" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _archivedMeta = + const VerificationMeta('archived'); + @override + late final GeneratedColumn archived = GeneratedColumn( + 'archived', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("archived" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _deletedMeta = + const VerificationMeta('deleted'); + @override + late final GeneratedColumn deleted = GeneratedColumn( + 'deleted', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("deleted" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _alsoBestFriendMeta = + const VerificationMeta('alsoBestFriend'); + @override + late final GeneratedColumn alsoBestFriend = GeneratedColumn( + 'also_best_friend', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("also_best_friend" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _deleteMessagesAfterXMinutesMeta = + const VerificationMeta('deleteMessagesAfterXMinutes'); + @override + late final GeneratedColumn deleteMessagesAfterXMinutes = + GeneratedColumn( + 'delete_messages_after_x_minutes', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(60 * 24)); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + static const VerificationMeta _totalMediaCounterMeta = + const VerificationMeta('totalMediaCounter'); + @override + late final GeneratedColumn totalMediaCounter = GeneratedColumn( + 'total_media_counter', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _lastMessageSendMeta = + const VerificationMeta('lastMessageSend'); + @override + late final GeneratedColumn lastMessageSend = + GeneratedColumn('last_message_send', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _lastMessageReceivedMeta = + const VerificationMeta('lastMessageReceived'); + @override + late final GeneratedColumn lastMessageReceived = + GeneratedColumn('last_message_received', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _lastFlameCounterChangeMeta = + const VerificationMeta('lastFlameCounterChange'); + @override + late final GeneratedColumn lastFlameCounterChange = + GeneratedColumn('last_flame_counter_change', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _lastFlameSyncMeta = + const VerificationMeta('lastFlameSync'); + @override + late final GeneratedColumn lastFlameSync = + GeneratedColumn('last_flame_sync', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _flameCounterMeta = + const VerificationMeta('flameCounter'); + @override + late final GeneratedColumn flameCounter = GeneratedColumn( + 'flame_counter', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + @override + List get $columns => [ + userId, + username, + displayName, + nickName, + avatarSvg, + senderProfileCounter, + accepted, + requested, + hidden, + blocked, + verified, + archived, + deleted, + alsoBestFriend, + deleteMessagesAfterXMinutes, + createdAt, + totalMediaCounter, + lastMessageSend, + lastMessageReceived, + lastFlameCounterChange, + lastFlameSync, + flameCounter + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'contacts'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('user_id')) { + context.handle(_userIdMeta, + userId.isAcceptableOrUnknown(data['user_id']!, _userIdMeta)); + } + if (data.containsKey('username')) { + context.handle(_usernameMeta, + username.isAcceptableOrUnknown(data['username']!, _usernameMeta)); + } else if (isInserting) { + context.missing(_usernameMeta); + } + if (data.containsKey('display_name')) { + context.handle( + _displayNameMeta, + displayName.isAcceptableOrUnknown( + data['display_name']!, _displayNameMeta)); + } + if (data.containsKey('nick_name')) { + context.handle(_nickNameMeta, + nickName.isAcceptableOrUnknown(data['nick_name']!, _nickNameMeta)); + } + if (data.containsKey('avatar_svg')) { + context.handle(_avatarSvgMeta, + avatarSvg.isAcceptableOrUnknown(data['avatar_svg']!, _avatarSvgMeta)); + } + if (data.containsKey('sender_profile_counter')) { + context.handle( + _senderProfileCounterMeta, + senderProfileCounter.isAcceptableOrUnknown( + data['sender_profile_counter']!, _senderProfileCounterMeta)); + } + if (data.containsKey('accepted')) { + context.handle(_acceptedMeta, + accepted.isAcceptableOrUnknown(data['accepted']!, _acceptedMeta)); + } + if (data.containsKey('requested')) { + context.handle(_requestedMeta, + requested.isAcceptableOrUnknown(data['requested']!, _requestedMeta)); + } + if (data.containsKey('hidden')) { + context.handle(_hiddenMeta, + hidden.isAcceptableOrUnknown(data['hidden']!, _hiddenMeta)); + } + if (data.containsKey('blocked')) { + context.handle(_blockedMeta, + blocked.isAcceptableOrUnknown(data['blocked']!, _blockedMeta)); + } + if (data.containsKey('verified')) { + context.handle(_verifiedMeta, + verified.isAcceptableOrUnknown(data['verified']!, _verifiedMeta)); + } + if (data.containsKey('archived')) { + context.handle(_archivedMeta, + archived.isAcceptableOrUnknown(data['archived']!, _archivedMeta)); + } + if (data.containsKey('deleted')) { + context.handle(_deletedMeta, + deleted.isAcceptableOrUnknown(data['deleted']!, _deletedMeta)); + } + if (data.containsKey('also_best_friend')) { + context.handle( + _alsoBestFriendMeta, + alsoBestFriend.isAcceptableOrUnknown( + data['also_best_friend']!, _alsoBestFriendMeta)); + } + if (data.containsKey('delete_messages_after_x_minutes')) { + context.handle( + _deleteMessagesAfterXMinutesMeta, + deleteMessagesAfterXMinutes.isAcceptableOrUnknown( + data['delete_messages_after_x_minutes']!, + _deleteMessagesAfterXMinutesMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + if (data.containsKey('total_media_counter')) { + context.handle( + _totalMediaCounterMeta, + totalMediaCounter.isAcceptableOrUnknown( + data['total_media_counter']!, _totalMediaCounterMeta)); + } + if (data.containsKey('last_message_send')) { + context.handle( + _lastMessageSendMeta, + lastMessageSend.isAcceptableOrUnknown( + data['last_message_send']!, _lastMessageSendMeta)); + } + if (data.containsKey('last_message_received')) { + context.handle( + _lastMessageReceivedMeta, + lastMessageReceived.isAcceptableOrUnknown( + data['last_message_received']!, _lastMessageReceivedMeta)); + } + if (data.containsKey('last_flame_counter_change')) { + context.handle( + _lastFlameCounterChangeMeta, + lastFlameCounterChange.isAcceptableOrUnknown( + data['last_flame_counter_change']!, _lastFlameCounterChangeMeta)); + } + if (data.containsKey('last_flame_sync')) { + context.handle( + _lastFlameSyncMeta, + lastFlameSync.isAcceptableOrUnknown( + data['last_flame_sync']!, _lastFlameSyncMeta)); + } + if (data.containsKey('flame_counter')) { + context.handle( + _flameCounterMeta, + flameCounter.isAcceptableOrUnknown( + data['flame_counter']!, _flameCounterMeta)); + } + return context; + } + + @override + Set get $primaryKey => {userId}; + @override + Contact map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Contact( + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id'])!, + username: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}username'])!, + displayName: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}display_name']), + nickName: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}nick_name']), + avatarSvg: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}avatar_svg']), + senderProfileCounter: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}sender_profile_counter'])!, + accepted: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}accepted'])!, + requested: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}requested'])!, + hidden: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}hidden'])!, + blocked: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}blocked'])!, + verified: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}verified'])!, + archived: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}archived'])!, + deleted: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}deleted'])!, + alsoBestFriend: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}also_best_friend'])!, + deleteMessagesAfterXMinutes: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}delete_messages_after_x_minutes'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + totalMediaCounter: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}total_media_counter'])!, + lastMessageSend: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_message_send']), + lastMessageReceived: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_message_received']), + lastFlameCounterChange: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_flame_counter_change']), + lastFlameSync: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_flame_sync']), + flameCounter: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}flame_counter'])!, + ); + } + + @override + $ContactsTable createAlias(String alias) { + return $ContactsTable(attachedDatabase, alias); + } +} + +class Contact extends DataClass implements Insertable { + final int userId; + final String username; + final String? displayName; + final String? nickName; + final String? avatarSvg; + final int senderProfileCounter; + final bool accepted; + final bool requested; + final bool hidden; + final bool blocked; + final bool verified; + final bool archived; + final bool deleted; + final bool alsoBestFriend; + final int deleteMessagesAfterXMinutes; + final DateTime createdAt; + final int totalMediaCounter; + final DateTime? lastMessageSend; + final DateTime? lastMessageReceived; + final DateTime? lastFlameCounterChange; + final DateTime? lastFlameSync; + final int flameCounter; + const Contact( + {required this.userId, + required this.username, + this.displayName, + this.nickName, + this.avatarSvg, + required this.senderProfileCounter, + required this.accepted, + required this.requested, + required this.hidden, + required this.blocked, + required this.verified, + required this.archived, + required this.deleted, + required this.alsoBestFriend, + required this.deleteMessagesAfterXMinutes, + required this.createdAt, + required this.totalMediaCounter, + this.lastMessageSend, + this.lastMessageReceived, + this.lastFlameCounterChange, + this.lastFlameSync, + required this.flameCounter}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['user_id'] = Variable(userId); + map['username'] = Variable(username); + if (!nullToAbsent || displayName != null) { + map['display_name'] = Variable(displayName); + } + if (!nullToAbsent || nickName != null) { + map['nick_name'] = Variable(nickName); + } + if (!nullToAbsent || avatarSvg != null) { + map['avatar_svg'] = Variable(avatarSvg); + } + map['sender_profile_counter'] = Variable(senderProfileCounter); + map['accepted'] = Variable(accepted); + map['requested'] = Variable(requested); + map['hidden'] = Variable(hidden); + map['blocked'] = Variable(blocked); + map['verified'] = Variable(verified); + map['archived'] = Variable(archived); + map['deleted'] = Variable(deleted); + map['also_best_friend'] = Variable(alsoBestFriend); + map['delete_messages_after_x_minutes'] = + Variable(deleteMessagesAfterXMinutes); + map['created_at'] = Variable(createdAt); + map['total_media_counter'] = Variable(totalMediaCounter); + if (!nullToAbsent || lastMessageSend != null) { + map['last_message_send'] = Variable(lastMessageSend); + } + if (!nullToAbsent || lastMessageReceived != null) { + map['last_message_received'] = Variable(lastMessageReceived); + } + if (!nullToAbsent || lastFlameCounterChange != null) { + map['last_flame_counter_change'] = + Variable(lastFlameCounterChange); + } + if (!nullToAbsent || lastFlameSync != null) { + map['last_flame_sync'] = Variable(lastFlameSync); + } + map['flame_counter'] = Variable(flameCounter); + return map; + } + + ContactsCompanion toCompanion(bool nullToAbsent) { + return ContactsCompanion( + userId: Value(userId), + username: Value(username), + displayName: displayName == null && nullToAbsent + ? const Value.absent() + : Value(displayName), + nickName: nickName == null && nullToAbsent + ? const Value.absent() + : Value(nickName), + avatarSvg: avatarSvg == null && nullToAbsent + ? const Value.absent() + : Value(avatarSvg), + senderProfileCounter: Value(senderProfileCounter), + accepted: Value(accepted), + requested: Value(requested), + hidden: Value(hidden), + blocked: Value(blocked), + verified: Value(verified), + archived: Value(archived), + deleted: Value(deleted), + alsoBestFriend: Value(alsoBestFriend), + deleteMessagesAfterXMinutes: Value(deleteMessagesAfterXMinutes), + createdAt: Value(createdAt), + totalMediaCounter: Value(totalMediaCounter), + lastMessageSend: lastMessageSend == null && nullToAbsent + ? const Value.absent() + : Value(lastMessageSend), + lastMessageReceived: lastMessageReceived == null && nullToAbsent + ? const Value.absent() + : Value(lastMessageReceived), + lastFlameCounterChange: lastFlameCounterChange == null && nullToAbsent + ? const Value.absent() + : Value(lastFlameCounterChange), + lastFlameSync: lastFlameSync == null && nullToAbsent + ? const Value.absent() + : Value(lastFlameSync), + flameCounter: Value(flameCounter), + ); + } + + factory Contact.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Contact( + userId: serializer.fromJson(json['userId']), + username: serializer.fromJson(json['username']), + displayName: serializer.fromJson(json['displayName']), + nickName: serializer.fromJson(json['nickName']), + avatarSvg: serializer.fromJson(json['avatarSvg']), + senderProfileCounter: + serializer.fromJson(json['senderProfileCounter']), + accepted: serializer.fromJson(json['accepted']), + requested: serializer.fromJson(json['requested']), + hidden: serializer.fromJson(json['hidden']), + blocked: serializer.fromJson(json['blocked']), + verified: serializer.fromJson(json['verified']), + archived: serializer.fromJson(json['archived']), + deleted: serializer.fromJson(json['deleted']), + alsoBestFriend: serializer.fromJson(json['alsoBestFriend']), + deleteMessagesAfterXMinutes: + serializer.fromJson(json['deleteMessagesAfterXMinutes']), + createdAt: serializer.fromJson(json['createdAt']), + totalMediaCounter: serializer.fromJson(json['totalMediaCounter']), + lastMessageSend: serializer.fromJson(json['lastMessageSend']), + lastMessageReceived: + serializer.fromJson(json['lastMessageReceived']), + lastFlameCounterChange: + serializer.fromJson(json['lastFlameCounterChange']), + lastFlameSync: serializer.fromJson(json['lastFlameSync']), + flameCounter: serializer.fromJson(json['flameCounter']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'userId': serializer.toJson(userId), + 'username': serializer.toJson(username), + 'displayName': serializer.toJson(displayName), + 'nickName': serializer.toJson(nickName), + 'avatarSvg': serializer.toJson(avatarSvg), + 'senderProfileCounter': serializer.toJson(senderProfileCounter), + 'accepted': serializer.toJson(accepted), + 'requested': serializer.toJson(requested), + 'hidden': serializer.toJson(hidden), + 'blocked': serializer.toJson(blocked), + 'verified': serializer.toJson(verified), + 'archived': serializer.toJson(archived), + 'deleted': serializer.toJson(deleted), + 'alsoBestFriend': serializer.toJson(alsoBestFriend), + 'deleteMessagesAfterXMinutes': + serializer.toJson(deleteMessagesAfterXMinutes), + 'createdAt': serializer.toJson(createdAt), + 'totalMediaCounter': serializer.toJson(totalMediaCounter), + 'lastMessageSend': serializer.toJson(lastMessageSend), + 'lastMessageReceived': serializer.toJson(lastMessageReceived), + 'lastFlameCounterChange': + serializer.toJson(lastFlameCounterChange), + 'lastFlameSync': serializer.toJson(lastFlameSync), + 'flameCounter': serializer.toJson(flameCounter), + }; + } + + Contact copyWith( + {int? userId, + String? username, + Value displayName = const Value.absent(), + Value nickName = const Value.absent(), + Value avatarSvg = const Value.absent(), + int? senderProfileCounter, + bool? accepted, + bool? requested, + bool? hidden, + bool? blocked, + bool? verified, + bool? archived, + bool? deleted, + bool? alsoBestFriend, + int? deleteMessagesAfterXMinutes, + DateTime? createdAt, + int? totalMediaCounter, + Value lastMessageSend = const Value.absent(), + Value lastMessageReceived = const Value.absent(), + Value lastFlameCounterChange = const Value.absent(), + Value lastFlameSync = const Value.absent(), + int? flameCounter}) => + Contact( + userId: userId ?? this.userId, + username: username ?? this.username, + displayName: displayName.present ? displayName.value : this.displayName, + nickName: nickName.present ? nickName.value : this.nickName, + avatarSvg: avatarSvg.present ? avatarSvg.value : this.avatarSvg, + senderProfileCounter: senderProfileCounter ?? this.senderProfileCounter, + accepted: accepted ?? this.accepted, + requested: requested ?? this.requested, + hidden: hidden ?? this.hidden, + blocked: blocked ?? this.blocked, + verified: verified ?? this.verified, + archived: archived ?? this.archived, + deleted: deleted ?? this.deleted, + alsoBestFriend: alsoBestFriend ?? this.alsoBestFriend, + deleteMessagesAfterXMinutes: + deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes, + createdAt: createdAt ?? this.createdAt, + totalMediaCounter: totalMediaCounter ?? this.totalMediaCounter, + lastMessageSend: lastMessageSend.present + ? lastMessageSend.value + : this.lastMessageSend, + lastMessageReceived: lastMessageReceived.present + ? lastMessageReceived.value + : this.lastMessageReceived, + lastFlameCounterChange: lastFlameCounterChange.present + ? lastFlameCounterChange.value + : this.lastFlameCounterChange, + lastFlameSync: + lastFlameSync.present ? lastFlameSync.value : this.lastFlameSync, + flameCounter: flameCounter ?? this.flameCounter, + ); + Contact copyWithCompanion(ContactsCompanion data) { + return Contact( + userId: data.userId.present ? data.userId.value : this.userId, + username: data.username.present ? data.username.value : this.username, + displayName: + data.displayName.present ? data.displayName.value : this.displayName, + nickName: data.nickName.present ? data.nickName.value : this.nickName, + avatarSvg: data.avatarSvg.present ? data.avatarSvg.value : this.avatarSvg, + senderProfileCounter: data.senderProfileCounter.present + ? data.senderProfileCounter.value + : this.senderProfileCounter, + accepted: data.accepted.present ? data.accepted.value : this.accepted, + requested: data.requested.present ? data.requested.value : this.requested, + hidden: data.hidden.present ? data.hidden.value : this.hidden, + blocked: data.blocked.present ? data.blocked.value : this.blocked, + verified: data.verified.present ? data.verified.value : this.verified, + archived: data.archived.present ? data.archived.value : this.archived, + deleted: data.deleted.present ? data.deleted.value : this.deleted, + alsoBestFriend: data.alsoBestFriend.present + ? data.alsoBestFriend.value + : this.alsoBestFriend, + deleteMessagesAfterXMinutes: data.deleteMessagesAfterXMinutes.present + ? data.deleteMessagesAfterXMinutes.value + : this.deleteMessagesAfterXMinutes, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + totalMediaCounter: data.totalMediaCounter.present + ? data.totalMediaCounter.value + : this.totalMediaCounter, + lastMessageSend: data.lastMessageSend.present + ? data.lastMessageSend.value + : this.lastMessageSend, + lastMessageReceived: data.lastMessageReceived.present + ? data.lastMessageReceived.value + : this.lastMessageReceived, + lastFlameCounterChange: data.lastFlameCounterChange.present + ? data.lastFlameCounterChange.value + : this.lastFlameCounterChange, + lastFlameSync: data.lastFlameSync.present + ? data.lastFlameSync.value + : this.lastFlameSync, + flameCounter: data.flameCounter.present + ? data.flameCounter.value + : this.flameCounter, + ); + } + + @override + String toString() { + return (StringBuffer('Contact(') + ..write('userId: $userId, ') + ..write('username: $username, ') + ..write('displayName: $displayName, ') + ..write('nickName: $nickName, ') + ..write('avatarSvg: $avatarSvg, ') + ..write('senderProfileCounter: $senderProfileCounter, ') + ..write('accepted: $accepted, ') + ..write('requested: $requested, ') + ..write('hidden: $hidden, ') + ..write('blocked: $blocked, ') + ..write('verified: $verified, ') + ..write('archived: $archived, ') + ..write('deleted: $deleted, ') + ..write('alsoBestFriend: $alsoBestFriend, ') + ..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ') + ..write('createdAt: $createdAt, ') + ..write('totalMediaCounter: $totalMediaCounter, ') + ..write('lastMessageSend: $lastMessageSend, ') + ..write('lastMessageReceived: $lastMessageReceived, ') + ..write('lastFlameCounterChange: $lastFlameCounterChange, ') + ..write('lastFlameSync: $lastFlameSync, ') + ..write('flameCounter: $flameCounter') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + userId, + username, + displayName, + nickName, + avatarSvg, + senderProfileCounter, + accepted, + requested, + hidden, + blocked, + verified, + archived, + deleted, + alsoBestFriend, + deleteMessagesAfterXMinutes, + createdAt, + totalMediaCounter, + lastMessageSend, + lastMessageReceived, + lastFlameCounterChange, + lastFlameSync, + flameCounter + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Contact && + other.userId == this.userId && + other.username == this.username && + other.displayName == this.displayName && + other.nickName == this.nickName && + other.avatarSvg == this.avatarSvg && + other.senderProfileCounter == this.senderProfileCounter && + other.accepted == this.accepted && + other.requested == this.requested && + other.hidden == this.hidden && + other.blocked == this.blocked && + other.verified == this.verified && + other.archived == this.archived && + other.deleted == this.deleted && + other.alsoBestFriend == this.alsoBestFriend && + other.deleteMessagesAfterXMinutes == + this.deleteMessagesAfterXMinutes && + other.createdAt == this.createdAt && + other.totalMediaCounter == this.totalMediaCounter && + other.lastMessageSend == this.lastMessageSend && + other.lastMessageReceived == this.lastMessageReceived && + other.lastFlameCounterChange == this.lastFlameCounterChange && + other.lastFlameSync == this.lastFlameSync && + other.flameCounter == this.flameCounter); +} + +class ContactsCompanion extends UpdateCompanion { + final Value userId; + final Value username; + final Value displayName; + final Value nickName; + final Value avatarSvg; + final Value senderProfileCounter; + final Value accepted; + final Value requested; + final Value hidden; + final Value blocked; + final Value verified; + final Value archived; + final Value deleted; + final Value alsoBestFriend; + final Value deleteMessagesAfterXMinutes; + final Value createdAt; + final Value totalMediaCounter; + final Value lastMessageSend; + final Value lastMessageReceived; + final Value lastFlameCounterChange; + final Value lastFlameSync; + final Value flameCounter; + const ContactsCompanion({ + this.userId = const Value.absent(), + this.username = const Value.absent(), + this.displayName = const Value.absent(), + this.nickName = const Value.absent(), + this.avatarSvg = const Value.absent(), + this.senderProfileCounter = const Value.absent(), + this.accepted = const Value.absent(), + this.requested = const Value.absent(), + this.hidden = const Value.absent(), + this.blocked = const Value.absent(), + this.verified = const Value.absent(), + this.archived = const Value.absent(), + this.deleted = const Value.absent(), + this.alsoBestFriend = const Value.absent(), + this.deleteMessagesAfterXMinutes = const Value.absent(), + this.createdAt = const Value.absent(), + this.totalMediaCounter = const Value.absent(), + this.lastMessageSend = const Value.absent(), + this.lastMessageReceived = const Value.absent(), + this.lastFlameCounterChange = const Value.absent(), + this.lastFlameSync = const Value.absent(), + this.flameCounter = const Value.absent(), + }); + ContactsCompanion.insert({ + this.userId = const Value.absent(), + required String username, + this.displayName = const Value.absent(), + this.nickName = const Value.absent(), + this.avatarSvg = const Value.absent(), + this.senderProfileCounter = const Value.absent(), + this.accepted = const Value.absent(), + this.requested = const Value.absent(), + this.hidden = const Value.absent(), + this.blocked = const Value.absent(), + this.verified = const Value.absent(), + this.archived = const Value.absent(), + this.deleted = const Value.absent(), + this.alsoBestFriend = const Value.absent(), + this.deleteMessagesAfterXMinutes = const Value.absent(), + this.createdAt = const Value.absent(), + this.totalMediaCounter = const Value.absent(), + this.lastMessageSend = const Value.absent(), + this.lastMessageReceived = const Value.absent(), + this.lastFlameCounterChange = const Value.absent(), + this.lastFlameSync = const Value.absent(), + this.flameCounter = const Value.absent(), + }) : username = Value(username); + static Insertable custom({ + Expression? userId, + Expression? username, + Expression? displayName, + Expression? nickName, + Expression? avatarSvg, + Expression? senderProfileCounter, + Expression? accepted, + Expression? requested, + Expression? hidden, + Expression? blocked, + Expression? verified, + Expression? archived, + Expression? deleted, + Expression? alsoBestFriend, + Expression? deleteMessagesAfterXMinutes, + Expression? createdAt, + Expression? totalMediaCounter, + Expression? lastMessageSend, + Expression? lastMessageReceived, + Expression? lastFlameCounterChange, + Expression? lastFlameSync, + Expression? flameCounter, + }) { + return RawValuesInsertable({ + if (userId != null) 'user_id': userId, + if (username != null) 'username': username, + if (displayName != null) 'display_name': displayName, + if (nickName != null) 'nick_name': nickName, + if (avatarSvg != null) 'avatar_svg': avatarSvg, + if (senderProfileCounter != null) + 'sender_profile_counter': senderProfileCounter, + if (accepted != null) 'accepted': accepted, + if (requested != null) 'requested': requested, + if (hidden != null) 'hidden': hidden, + if (blocked != null) 'blocked': blocked, + if (verified != null) 'verified': verified, + if (archived != null) 'archived': archived, + if (deleted != null) 'deleted': deleted, + if (alsoBestFriend != null) 'also_best_friend': alsoBestFriend, + if (deleteMessagesAfterXMinutes != null) + 'delete_messages_after_x_minutes': deleteMessagesAfterXMinutes, + if (createdAt != null) 'created_at': createdAt, + if (totalMediaCounter != null) 'total_media_counter': totalMediaCounter, + if (lastMessageSend != null) 'last_message_send': lastMessageSend, + if (lastMessageReceived != null) + 'last_message_received': lastMessageReceived, + if (lastFlameCounterChange != null) + 'last_flame_counter_change': lastFlameCounterChange, + if (lastFlameSync != null) 'last_flame_sync': lastFlameSync, + if (flameCounter != null) 'flame_counter': flameCounter, + }); + } + + ContactsCompanion copyWith( + {Value? userId, + Value? username, + Value? displayName, + Value? nickName, + Value? avatarSvg, + Value? senderProfileCounter, + Value? accepted, + Value? requested, + Value? hidden, + Value? blocked, + Value? verified, + Value? archived, + Value? deleted, + Value? alsoBestFriend, + Value? deleteMessagesAfterXMinutes, + Value? createdAt, + Value? totalMediaCounter, + Value? lastMessageSend, + Value? lastMessageReceived, + Value? lastFlameCounterChange, + Value? lastFlameSync, + Value? flameCounter}) { + return ContactsCompanion( + userId: userId ?? this.userId, + username: username ?? this.username, + displayName: displayName ?? this.displayName, + nickName: nickName ?? this.nickName, + avatarSvg: avatarSvg ?? this.avatarSvg, + senderProfileCounter: senderProfileCounter ?? this.senderProfileCounter, + accepted: accepted ?? this.accepted, + requested: requested ?? this.requested, + hidden: hidden ?? this.hidden, + blocked: blocked ?? this.blocked, + verified: verified ?? this.verified, + archived: archived ?? this.archived, + deleted: deleted ?? this.deleted, + alsoBestFriend: alsoBestFriend ?? this.alsoBestFriend, + deleteMessagesAfterXMinutes: + deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes, + createdAt: createdAt ?? this.createdAt, + totalMediaCounter: totalMediaCounter ?? this.totalMediaCounter, + lastMessageSend: lastMessageSend ?? this.lastMessageSend, + lastMessageReceived: lastMessageReceived ?? this.lastMessageReceived, + lastFlameCounterChange: + lastFlameCounterChange ?? this.lastFlameCounterChange, + lastFlameSync: lastFlameSync ?? this.lastFlameSync, + flameCounter: flameCounter ?? this.flameCounter, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (username.present) { + map['username'] = Variable(username.value); + } + if (displayName.present) { + map['display_name'] = Variable(displayName.value); + } + if (nickName.present) { + map['nick_name'] = Variable(nickName.value); + } + if (avatarSvg.present) { + map['avatar_svg'] = Variable(avatarSvg.value); + } + if (senderProfileCounter.present) { + map['sender_profile_counter'] = Variable(senderProfileCounter.value); + } + if (accepted.present) { + map['accepted'] = Variable(accepted.value); + } + if (requested.present) { + map['requested'] = Variable(requested.value); + } + if (hidden.present) { + map['hidden'] = Variable(hidden.value); + } + if (blocked.present) { + map['blocked'] = Variable(blocked.value); + } + if (verified.present) { + map['verified'] = Variable(verified.value); + } + if (archived.present) { + map['archived'] = Variable(archived.value); + } + if (deleted.present) { + map['deleted'] = Variable(deleted.value); + } + if (alsoBestFriend.present) { + map['also_best_friend'] = Variable(alsoBestFriend.value); + } + if (deleteMessagesAfterXMinutes.present) { + map['delete_messages_after_x_minutes'] = + Variable(deleteMessagesAfterXMinutes.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (totalMediaCounter.present) { + map['total_media_counter'] = Variable(totalMediaCounter.value); + } + if (lastMessageSend.present) { + map['last_message_send'] = Variable(lastMessageSend.value); + } + if (lastMessageReceived.present) { + map['last_message_received'] = + Variable(lastMessageReceived.value); + } + if (lastFlameCounterChange.present) { + map['last_flame_counter_change'] = + Variable(lastFlameCounterChange.value); + } + if (lastFlameSync.present) { + map['last_flame_sync'] = Variable(lastFlameSync.value); + } + if (flameCounter.present) { + map['flame_counter'] = Variable(flameCounter.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ContactsCompanion(') + ..write('userId: $userId, ') + ..write('username: $username, ') + ..write('displayName: $displayName, ') + ..write('nickName: $nickName, ') + ..write('avatarSvg: $avatarSvg, ') + ..write('senderProfileCounter: $senderProfileCounter, ') + ..write('accepted: $accepted, ') + ..write('requested: $requested, ') + ..write('hidden: $hidden, ') + ..write('blocked: $blocked, ') + ..write('verified: $verified, ') + ..write('archived: $archived, ') + ..write('deleted: $deleted, ') + ..write('alsoBestFriend: $alsoBestFriend, ') + ..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ') + ..write('createdAt: $createdAt, ') + ..write('totalMediaCounter: $totalMediaCounter, ') + ..write('lastMessageSend: $lastMessageSend, ') + ..write('lastMessageReceived: $lastMessageReceived, ') + ..write('lastFlameCounterChange: $lastFlameCounterChange, ') + ..write('lastFlameSync: $lastFlameSync, ') + ..write('flameCounter: $flameCounter') + ..write(')')) + .toString(); + } +} + +class $MediaFilesTable extends MediaFiles + with TableInfo<$MediaFilesTable, MediaFile> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $MediaFilesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _mediaIdMeta = + const VerificationMeta('mediaId'); + @override + late final GeneratedColumn mediaId = GeneratedColumn( + 'media_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + clientDefault: () => uuid.v4()); + @override + late final GeneratedColumnWithTypeConverter type = + GeneratedColumn('type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true) + .withConverter($MediaFilesTable.$convertertype); + @override + late final GeneratedColumnWithTypeConverter + uploadState = GeneratedColumn('upload_state', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter($MediaFilesTable.$converteruploadStaten); + @override + late final GeneratedColumnWithTypeConverter + downloadState = GeneratedColumn( + 'download_state', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $MediaFilesTable.$converterdownloadStaten); + static const VerificationMeta _requiresAuthenticationMeta = + const VerificationMeta('requiresAuthentication'); + @override + late final GeneratedColumn requiresAuthentication = + GeneratedColumn('requires_authentication', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("requires_authentication" IN (0, 1))')); + static const VerificationMeta _reopenByContactMeta = + const VerificationMeta('reopenByContact'); + @override + late final GeneratedColumn reopenByContact = GeneratedColumn( + 'reopen_by_contact', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("reopen_by_contact" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _storedByContactMeta = + const VerificationMeta('storedByContact'); + @override + late final GeneratedColumn storedByContact = GeneratedColumn( + 'stored_by_contact', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("stored_by_contact" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _displayLimitInMillisecondsMeta = + const VerificationMeta('displayLimitInMilliseconds'); + @override + late final GeneratedColumn displayLimitInMilliseconds = + GeneratedColumn('display_limit_in_milliseconds', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _downloadTokenMeta = + const VerificationMeta('downloadToken'); + @override + late final GeneratedColumn downloadToken = + GeneratedColumn('download_token', aliasedName, true, + type: DriftSqlType.blob, requiredDuringInsert: false); + static const VerificationMeta _encryptionKeyMeta = + const VerificationMeta('encryptionKey'); + @override + late final GeneratedColumn encryptionKey = + GeneratedColumn('encryption_key', aliasedName, true, + type: DriftSqlType.blob, requiredDuringInsert: false); + static const VerificationMeta _encryptionMacMeta = + const VerificationMeta('encryptionMac'); + @override + late final GeneratedColumn encryptionMac = + GeneratedColumn('encryption_mac', aliasedName, true, + type: DriftSqlType.blob, requiredDuringInsert: false); + static const VerificationMeta _encryptionNonceMeta = + const VerificationMeta('encryptionNonce'); + @override + late final GeneratedColumn encryptionNonce = + GeneratedColumn('encryption_nonce', aliasedName, true, + type: DriftSqlType.blob, requiredDuringInsert: false); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [ + mediaId, + type, + uploadState, + downloadState, + requiresAuthentication, + reopenByContact, + storedByContact, + displayLimitInMilliseconds, + downloadToken, + encryptionKey, + encryptionMac, + encryptionNonce, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'media_files'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('media_id')) { + context.handle(_mediaIdMeta, + mediaId.isAcceptableOrUnknown(data['media_id']!, _mediaIdMeta)); + } + if (data.containsKey('requires_authentication')) { + context.handle( + _requiresAuthenticationMeta, + requiresAuthentication.isAcceptableOrUnknown( + data['requires_authentication']!, _requiresAuthenticationMeta)); + } else if (isInserting) { + context.missing(_requiresAuthenticationMeta); + } + if (data.containsKey('reopen_by_contact')) { + context.handle( + _reopenByContactMeta, + reopenByContact.isAcceptableOrUnknown( + data['reopen_by_contact']!, _reopenByContactMeta)); + } + if (data.containsKey('stored_by_contact')) { + context.handle( + _storedByContactMeta, + storedByContact.isAcceptableOrUnknown( + data['stored_by_contact']!, _storedByContactMeta)); + } + if (data.containsKey('display_limit_in_milliseconds')) { + context.handle( + _displayLimitInMillisecondsMeta, + displayLimitInMilliseconds.isAcceptableOrUnknown( + data['display_limit_in_milliseconds']!, + _displayLimitInMillisecondsMeta)); + } + if (data.containsKey('download_token')) { + context.handle( + _downloadTokenMeta, + downloadToken.isAcceptableOrUnknown( + data['download_token']!, _downloadTokenMeta)); + } + if (data.containsKey('encryption_key')) { + context.handle( + _encryptionKeyMeta, + encryptionKey.isAcceptableOrUnknown( + data['encryption_key']!, _encryptionKeyMeta)); + } + if (data.containsKey('encryption_mac')) { + context.handle( + _encryptionMacMeta, + encryptionMac.isAcceptableOrUnknown( + data['encryption_mac']!, _encryptionMacMeta)); + } + if (data.containsKey('encryption_nonce')) { + context.handle( + _encryptionNonceMeta, + encryptionNonce.isAcceptableOrUnknown( + data['encryption_nonce']!, _encryptionNonceMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {mediaId}; + @override + MediaFile map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return MediaFile( + mediaId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}media_id'])!, + type: $MediaFilesTable.$convertertype.fromSql(attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!), + uploadState: $MediaFilesTable.$converteruploadStaten.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}upload_state'])), + downloadState: $MediaFilesTable.$converterdownloadStaten.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}download_state'])), + requiresAuthentication: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}requires_authentication'])!, + reopenByContact: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}reopen_by_contact'])!, + storedByContact: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}stored_by_contact'])!, + displayLimitInMilliseconds: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}display_limit_in_milliseconds']), + downloadToken: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}download_token']), + encryptionKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}encryption_key']), + encryptionMac: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}encryption_mac']), + encryptionNonce: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}encryption_nonce']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $MediaFilesTable createAlias(String alias) { + return $MediaFilesTable(attachedDatabase, alias); + } + + static JsonTypeConverter2 $convertertype = + const EnumNameConverter(MediaType.values); + static JsonTypeConverter2 $converteruploadState = + const EnumNameConverter(UploadState.values); + static JsonTypeConverter2 + $converteruploadStaten = + JsonTypeConverter2.asNullable($converteruploadState); + static JsonTypeConverter2 + $converterdownloadState = + const EnumNameConverter(DownloadState.values); + static JsonTypeConverter2 + $converterdownloadStaten = + JsonTypeConverter2.asNullable($converterdownloadState); +} + +class MediaFile extends DataClass implements Insertable { + final String mediaId; + final MediaType type; + final UploadState? uploadState; + final DownloadState? downloadState; + final bool requiresAuthentication; + final bool reopenByContact; + final bool storedByContact; + final int? displayLimitInMilliseconds; + final Uint8List? downloadToken; + final Uint8List? encryptionKey; + final Uint8List? encryptionMac; + final Uint8List? encryptionNonce; + final DateTime createdAt; + const MediaFile( + {required this.mediaId, + required this.type, + this.uploadState, + this.downloadState, + required this.requiresAuthentication, + required this.reopenByContact, + required this.storedByContact, + this.displayLimitInMilliseconds, + this.downloadToken, + this.encryptionKey, + this.encryptionMac, + this.encryptionNonce, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['media_id'] = Variable(mediaId); + { + map['type'] = + Variable($MediaFilesTable.$convertertype.toSql(type)); + } + if (!nullToAbsent || uploadState != null) { + map['upload_state'] = Variable( + $MediaFilesTable.$converteruploadStaten.toSql(uploadState)); + } + if (!nullToAbsent || downloadState != null) { + map['download_state'] = Variable( + $MediaFilesTable.$converterdownloadStaten.toSql(downloadState)); + } + map['requires_authentication'] = Variable(requiresAuthentication); + map['reopen_by_contact'] = Variable(reopenByContact); + map['stored_by_contact'] = Variable(storedByContact); + if (!nullToAbsent || displayLimitInMilliseconds != null) { + map['display_limit_in_milliseconds'] = + Variable(displayLimitInMilliseconds); + } + if (!nullToAbsent || downloadToken != null) { + map['download_token'] = Variable(downloadToken); + } + if (!nullToAbsent || encryptionKey != null) { + map['encryption_key'] = Variable(encryptionKey); + } + if (!nullToAbsent || encryptionMac != null) { + map['encryption_mac'] = Variable(encryptionMac); + } + if (!nullToAbsent || encryptionNonce != null) { + map['encryption_nonce'] = Variable(encryptionNonce); + } + map['created_at'] = Variable(createdAt); + return map; + } + + MediaFilesCompanion toCompanion(bool nullToAbsent) { + return MediaFilesCompanion( + mediaId: Value(mediaId), + type: Value(type), + uploadState: uploadState == null && nullToAbsent + ? const Value.absent() + : Value(uploadState), + downloadState: downloadState == null && nullToAbsent + ? const Value.absent() + : Value(downloadState), + requiresAuthentication: Value(requiresAuthentication), + reopenByContact: Value(reopenByContact), + storedByContact: Value(storedByContact), + displayLimitInMilliseconds: + displayLimitInMilliseconds == null && nullToAbsent + ? const Value.absent() + : Value(displayLimitInMilliseconds), + downloadToken: downloadToken == null && nullToAbsent + ? const Value.absent() + : Value(downloadToken), + encryptionKey: encryptionKey == null && nullToAbsent + ? const Value.absent() + : Value(encryptionKey), + encryptionMac: encryptionMac == null && nullToAbsent + ? const Value.absent() + : Value(encryptionMac), + encryptionNonce: encryptionNonce == null && nullToAbsent + ? const Value.absent() + : Value(encryptionNonce), + createdAt: Value(createdAt), + ); + } + + factory MediaFile.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return MediaFile( + mediaId: serializer.fromJson(json['mediaId']), + type: $MediaFilesTable.$convertertype + .fromJson(serializer.fromJson(json['type'])), + uploadState: $MediaFilesTable.$converteruploadStaten + .fromJson(serializer.fromJson(json['uploadState'])), + downloadState: $MediaFilesTable.$converterdownloadStaten + .fromJson(serializer.fromJson(json['downloadState'])), + requiresAuthentication: + serializer.fromJson(json['requiresAuthentication']), + reopenByContact: serializer.fromJson(json['reopenByContact']), + storedByContact: serializer.fromJson(json['storedByContact']), + displayLimitInMilliseconds: + serializer.fromJson(json['displayLimitInMilliseconds']), + downloadToken: serializer.fromJson(json['downloadToken']), + encryptionKey: serializer.fromJson(json['encryptionKey']), + encryptionMac: serializer.fromJson(json['encryptionMac']), + encryptionNonce: serializer.fromJson(json['encryptionNonce']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'mediaId': serializer.toJson(mediaId), + 'type': serializer + .toJson($MediaFilesTable.$convertertype.toJson(type)), + 'uploadState': serializer.toJson( + $MediaFilesTable.$converteruploadStaten.toJson(uploadState)), + 'downloadState': serializer.toJson( + $MediaFilesTable.$converterdownloadStaten.toJson(downloadState)), + 'requiresAuthentication': serializer.toJson(requiresAuthentication), + 'reopenByContact': serializer.toJson(reopenByContact), + 'storedByContact': serializer.toJson(storedByContact), + 'displayLimitInMilliseconds': + serializer.toJson(displayLimitInMilliseconds), + 'downloadToken': serializer.toJson(downloadToken), + 'encryptionKey': serializer.toJson(encryptionKey), + 'encryptionMac': serializer.toJson(encryptionMac), + 'encryptionNonce': serializer.toJson(encryptionNonce), + 'createdAt': serializer.toJson(createdAt), + }; + } + + MediaFile copyWith( + {String? mediaId, + MediaType? type, + Value uploadState = const Value.absent(), + Value downloadState = const Value.absent(), + bool? requiresAuthentication, + bool? reopenByContact, + bool? storedByContact, + Value displayLimitInMilliseconds = const Value.absent(), + Value downloadToken = const Value.absent(), + Value encryptionKey = const Value.absent(), + Value encryptionMac = const Value.absent(), + Value encryptionNonce = const Value.absent(), + DateTime? createdAt}) => + MediaFile( + mediaId: mediaId ?? this.mediaId, + type: type ?? this.type, + uploadState: uploadState.present ? uploadState.value : this.uploadState, + downloadState: + downloadState.present ? downloadState.value : this.downloadState, + requiresAuthentication: + requiresAuthentication ?? this.requiresAuthentication, + reopenByContact: reopenByContact ?? this.reopenByContact, + storedByContact: storedByContact ?? this.storedByContact, + displayLimitInMilliseconds: displayLimitInMilliseconds.present + ? displayLimitInMilliseconds.value + : this.displayLimitInMilliseconds, + downloadToken: + downloadToken.present ? downloadToken.value : this.downloadToken, + encryptionKey: + encryptionKey.present ? encryptionKey.value : this.encryptionKey, + encryptionMac: + encryptionMac.present ? encryptionMac.value : this.encryptionMac, + encryptionNonce: encryptionNonce.present + ? encryptionNonce.value + : this.encryptionNonce, + createdAt: createdAt ?? this.createdAt, + ); + MediaFile copyWithCompanion(MediaFilesCompanion data) { + return MediaFile( + mediaId: data.mediaId.present ? data.mediaId.value : this.mediaId, + type: data.type.present ? data.type.value : this.type, + uploadState: + data.uploadState.present ? data.uploadState.value : this.uploadState, + downloadState: data.downloadState.present + ? data.downloadState.value + : this.downloadState, + requiresAuthentication: data.requiresAuthentication.present + ? data.requiresAuthentication.value + : this.requiresAuthentication, + reopenByContact: data.reopenByContact.present + ? data.reopenByContact.value + : this.reopenByContact, + storedByContact: data.storedByContact.present + ? data.storedByContact.value + : this.storedByContact, + displayLimitInMilliseconds: data.displayLimitInMilliseconds.present + ? data.displayLimitInMilliseconds.value + : this.displayLimitInMilliseconds, + downloadToken: data.downloadToken.present + ? data.downloadToken.value + : this.downloadToken, + encryptionKey: data.encryptionKey.present + ? data.encryptionKey.value + : this.encryptionKey, + encryptionMac: data.encryptionMac.present + ? data.encryptionMac.value + : this.encryptionMac, + encryptionNonce: data.encryptionNonce.present + ? data.encryptionNonce.value + : this.encryptionNonce, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('MediaFile(') + ..write('mediaId: $mediaId, ') + ..write('type: $type, ') + ..write('uploadState: $uploadState, ') + ..write('downloadState: $downloadState, ') + ..write('requiresAuthentication: $requiresAuthentication, ') + ..write('reopenByContact: $reopenByContact, ') + ..write('storedByContact: $storedByContact, ') + ..write('displayLimitInMilliseconds: $displayLimitInMilliseconds, ') + ..write('downloadToken: $downloadToken, ') + ..write('encryptionKey: $encryptionKey, ') + ..write('encryptionMac: $encryptionMac, ') + ..write('encryptionNonce: $encryptionNonce, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + mediaId, + type, + uploadState, + downloadState, + requiresAuthentication, + reopenByContact, + storedByContact, + displayLimitInMilliseconds, + $driftBlobEquality.hash(downloadToken), + $driftBlobEquality.hash(encryptionKey), + $driftBlobEquality.hash(encryptionMac), + $driftBlobEquality.hash(encryptionNonce), + createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is MediaFile && + other.mediaId == this.mediaId && + other.type == this.type && + other.uploadState == this.uploadState && + other.downloadState == this.downloadState && + other.requiresAuthentication == this.requiresAuthentication && + other.reopenByContact == this.reopenByContact && + other.storedByContact == this.storedByContact && + other.displayLimitInMilliseconds == this.displayLimitInMilliseconds && + $driftBlobEquality.equals(other.downloadToken, this.downloadToken) && + $driftBlobEquality.equals(other.encryptionKey, this.encryptionKey) && + $driftBlobEquality.equals(other.encryptionMac, this.encryptionMac) && + $driftBlobEquality.equals( + other.encryptionNonce, this.encryptionNonce) && + other.createdAt == this.createdAt); +} + +class MediaFilesCompanion extends UpdateCompanion { + final Value mediaId; + final Value type; + final Value uploadState; + final Value downloadState; + final Value requiresAuthentication; + final Value reopenByContact; + final Value storedByContact; + final Value displayLimitInMilliseconds; + final Value downloadToken; + final Value encryptionKey; + final Value encryptionMac; + final Value encryptionNonce; + final Value createdAt; + final Value rowid; + const MediaFilesCompanion({ + this.mediaId = const Value.absent(), + this.type = const Value.absent(), + this.uploadState = const Value.absent(), + this.downloadState = const Value.absent(), + this.requiresAuthentication = const Value.absent(), + this.reopenByContact = const Value.absent(), + this.storedByContact = const Value.absent(), + this.displayLimitInMilliseconds = const Value.absent(), + this.downloadToken = const Value.absent(), + this.encryptionKey = const Value.absent(), + this.encryptionMac = const Value.absent(), + this.encryptionNonce = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + MediaFilesCompanion.insert({ + this.mediaId = const Value.absent(), + required MediaType type, + this.uploadState = const Value.absent(), + this.downloadState = const Value.absent(), + required bool requiresAuthentication, + this.reopenByContact = const Value.absent(), + this.storedByContact = const Value.absent(), + this.displayLimitInMilliseconds = const Value.absent(), + this.downloadToken = const Value.absent(), + this.encryptionKey = const Value.absent(), + this.encryptionMac = const Value.absent(), + this.encryptionNonce = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : type = Value(type), + requiresAuthentication = Value(requiresAuthentication); + static Insertable custom({ + Expression? mediaId, + Expression? type, + Expression? uploadState, + Expression? downloadState, + Expression? requiresAuthentication, + Expression? reopenByContact, + Expression? storedByContact, + Expression? displayLimitInMilliseconds, + Expression? downloadToken, + Expression? encryptionKey, + Expression? encryptionMac, + Expression? encryptionNonce, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (mediaId != null) 'media_id': mediaId, + if (type != null) 'type': type, + if (uploadState != null) 'upload_state': uploadState, + if (downloadState != null) 'download_state': downloadState, + if (requiresAuthentication != null) + 'requires_authentication': requiresAuthentication, + if (reopenByContact != null) 'reopen_by_contact': reopenByContact, + if (storedByContact != null) 'stored_by_contact': storedByContact, + if (displayLimitInMilliseconds != null) + 'display_limit_in_milliseconds': displayLimitInMilliseconds, + if (downloadToken != null) 'download_token': downloadToken, + if (encryptionKey != null) 'encryption_key': encryptionKey, + if (encryptionMac != null) 'encryption_mac': encryptionMac, + if (encryptionNonce != null) 'encryption_nonce': encryptionNonce, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + MediaFilesCompanion copyWith( + {Value? mediaId, + Value? type, + Value? uploadState, + Value? downloadState, + Value? requiresAuthentication, + Value? reopenByContact, + Value? storedByContact, + Value? displayLimitInMilliseconds, + Value? downloadToken, + Value? encryptionKey, + Value? encryptionMac, + Value? encryptionNonce, + Value? createdAt, + Value? rowid}) { + return MediaFilesCompanion( + mediaId: mediaId ?? this.mediaId, + type: type ?? this.type, + uploadState: uploadState ?? this.uploadState, + downloadState: downloadState ?? this.downloadState, + requiresAuthentication: + requiresAuthentication ?? this.requiresAuthentication, + reopenByContact: reopenByContact ?? this.reopenByContact, + storedByContact: storedByContact ?? this.storedByContact, + displayLimitInMilliseconds: + displayLimitInMilliseconds ?? this.displayLimitInMilliseconds, + downloadToken: downloadToken ?? this.downloadToken, + encryptionKey: encryptionKey ?? this.encryptionKey, + encryptionMac: encryptionMac ?? this.encryptionMac, + encryptionNonce: encryptionNonce ?? this.encryptionNonce, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (mediaId.present) { + map['media_id'] = Variable(mediaId.value); + } + if (type.present) { + map['type'] = + Variable($MediaFilesTable.$convertertype.toSql(type.value)); + } + if (uploadState.present) { + map['upload_state'] = Variable( + $MediaFilesTable.$converteruploadStaten.toSql(uploadState.value)); + } + if (downloadState.present) { + map['download_state'] = Variable( + $MediaFilesTable.$converterdownloadStaten.toSql(downloadState.value)); + } + if (requiresAuthentication.present) { + map['requires_authentication'] = + Variable(requiresAuthentication.value); + } + if (reopenByContact.present) { + map['reopen_by_contact'] = Variable(reopenByContact.value); + } + if (storedByContact.present) { + map['stored_by_contact'] = Variable(storedByContact.value); + } + if (displayLimitInMilliseconds.present) { + map['display_limit_in_milliseconds'] = + Variable(displayLimitInMilliseconds.value); + } + if (downloadToken.present) { + map['download_token'] = Variable(downloadToken.value); + } + if (encryptionKey.present) { + map['encryption_key'] = Variable(encryptionKey.value); + } + if (encryptionMac.present) { + map['encryption_mac'] = Variable(encryptionMac.value); + } + if (encryptionNonce.present) { + map['encryption_nonce'] = Variable(encryptionNonce.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('MediaFilesCompanion(') + ..write('mediaId: $mediaId, ') + ..write('type: $type, ') + ..write('uploadState: $uploadState, ') + ..write('downloadState: $downloadState, ') + ..write('requiresAuthentication: $requiresAuthentication, ') + ..write('reopenByContact: $reopenByContact, ') + ..write('storedByContact: $storedByContact, ') + ..write('displayLimitInMilliseconds: $displayLimitInMilliseconds, ') + ..write('downloadToken: $downloadToken, ') + ..write('encryptionKey: $encryptionKey, ') + ..write('encryptionMac: $encryptionMac, ') + ..write('encryptionNonce: $encryptionNonce, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $MessagesTable extends Messages with TableInfo<$MessagesTable, Message> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $MessagesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _groupIdMeta = + const VerificationMeta('groupId'); + @override + late final GeneratedColumn groupId = GeneratedColumn( + 'group_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _messageIdMeta = + const VerificationMeta('messageId'); + @override + late final GeneratedColumn messageId = GeneratedColumn( + 'message_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _senderIdMeta = + const VerificationMeta('senderId'); + @override + late final GeneratedColumn senderId = GeneratedColumn( + 'sender_id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES contacts (user_id)')); + static const VerificationMeta _contentMeta = + const VerificationMeta('content'); + @override + late final GeneratedColumn content = GeneratedColumn( + 'content', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _mediaIdMeta = + const VerificationMeta('mediaId'); + @override + late final GeneratedColumn mediaId = GeneratedColumn( + 'media_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES media_files (media_id)')); + static const VerificationMeta _quotesMessageIdMeta = + const VerificationMeta('quotesMessageId'); + @override + late final GeneratedColumn quotesMessageId = GeneratedColumn( + 'quotes_message_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES messages (message_id)')); + static const VerificationMeta _isDeletedFromSenderMeta = + const VerificationMeta('isDeletedFromSender'); + @override + late final GeneratedColumn isDeletedFromSender = GeneratedColumn( + 'is_deleted_from_sender', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted_from_sender" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _isEditedMeta = + const VerificationMeta('isEdited'); + @override + late final GeneratedColumn isEdited = GeneratedColumn( + 'is_edited', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_edited" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _acknowledgeByUserMeta = + const VerificationMeta('acknowledgeByUser'); + @override + late final GeneratedColumn acknowledgeByUser = GeneratedColumn( + 'acknowledge_by_user', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("acknowledge_by_user" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _acknowledgeByServerMeta = + const VerificationMeta('acknowledgeByServer'); + @override + late final GeneratedColumn acknowledgeByServer = GeneratedColumn( + 'acknowledge_by_server', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("acknowledge_by_server" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _openedByCounterMeta = + const VerificationMeta('openedByCounter'); + @override + late final GeneratedColumn openedByCounter = GeneratedColumn( + 'opened_by_counter', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _openedAtMeta = + const VerificationMeta('openedAt'); + @override + late final GeneratedColumn openedAt = GeneratedColumn( + 'opened_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + static const VerificationMeta _modifiedAtMeta = + const VerificationMeta('modifiedAt'); + @override + late final GeneratedColumn modifiedAt = GeneratedColumn( + 'modified_at', aliasedName, true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [ + groupId, + messageId, + senderId, + content, + mediaId, + quotesMessageId, + isDeletedFromSender, + isEdited, + acknowledgeByUser, + acknowledgeByServer, + openedByCounter, + openedAt, + createdAt, + modifiedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'messages'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('group_id')) { + context.handle(_groupIdMeta, + groupId.isAcceptableOrUnknown(data['group_id']!, _groupIdMeta)); + } else if (isInserting) { + context.missing(_groupIdMeta); + } + if (data.containsKey('message_id')) { + context.handle(_messageIdMeta, + messageId.isAcceptableOrUnknown(data['message_id']!, _messageIdMeta)); + } else if (isInserting) { + context.missing(_messageIdMeta); + } + if (data.containsKey('sender_id')) { + context.handle(_senderIdMeta, + senderId.isAcceptableOrUnknown(data['sender_id']!, _senderIdMeta)); + } + if (data.containsKey('content')) { + context.handle(_contentMeta, + content.isAcceptableOrUnknown(data['content']!, _contentMeta)); + } + if (data.containsKey('media_id')) { + context.handle(_mediaIdMeta, + mediaId.isAcceptableOrUnknown(data['media_id']!, _mediaIdMeta)); + } + if (data.containsKey('quotes_message_id')) { + context.handle( + _quotesMessageIdMeta, + quotesMessageId.isAcceptableOrUnknown( + data['quotes_message_id']!, _quotesMessageIdMeta)); + } + if (data.containsKey('is_deleted_from_sender')) { + context.handle( + _isDeletedFromSenderMeta, + isDeletedFromSender.isAcceptableOrUnknown( + data['is_deleted_from_sender']!, _isDeletedFromSenderMeta)); + } + if (data.containsKey('is_edited')) { + context.handle(_isEditedMeta, + isEdited.isAcceptableOrUnknown(data['is_edited']!, _isEditedMeta)); + } + if (data.containsKey('acknowledge_by_user')) { + context.handle( + _acknowledgeByUserMeta, + acknowledgeByUser.isAcceptableOrUnknown( + data['acknowledge_by_user']!, _acknowledgeByUserMeta)); + } + if (data.containsKey('acknowledge_by_server')) { + context.handle( + _acknowledgeByServerMeta, + acknowledgeByServer.isAcceptableOrUnknown( + data['acknowledge_by_server']!, _acknowledgeByServerMeta)); + } + if (data.containsKey('opened_by_counter')) { + context.handle( + _openedByCounterMeta, + openedByCounter.isAcceptableOrUnknown( + data['opened_by_counter']!, _openedByCounterMeta)); + } + if (data.containsKey('opened_at')) { + context.handle(_openedAtMeta, + openedAt.isAcceptableOrUnknown(data['opened_at']!, _openedAtMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + if (data.containsKey('modified_at')) { + context.handle( + _modifiedAtMeta, + modifiedAt.isAcceptableOrUnknown( + data['modified_at']!, _modifiedAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {messageId}; + @override + Message map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Message( + groupId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}group_id'])!, + messageId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message_id'])!, + senderId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}sender_id']), + content: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}content']), + mediaId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}media_id']), + quotesMessageId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}quotes_message_id']), + isDeletedFromSender: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}is_deleted_from_sender'])!, + isEdited: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_edited'])!, + acknowledgeByUser: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}acknowledge_by_user'])!, + acknowledgeByServer: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}acknowledge_by_server'])!, + openedByCounter: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}opened_by_counter'])!, + openedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}opened_at']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + modifiedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}modified_at']), + ); + } + + @override + $MessagesTable createAlias(String alias) { + return $MessagesTable(attachedDatabase, alias); + } +} + +class Message extends DataClass implements Insertable { + final String groupId; + final String messageId; + final int? senderId; + final String? content; + final String? mediaId; + final String? quotesMessageId; + final bool isDeletedFromSender; + final bool isEdited; + final bool acknowledgeByUser; + final bool acknowledgeByServer; + final int openedByCounter; + final DateTime? openedAt; + final DateTime createdAt; + final DateTime? modifiedAt; + const Message( + {required this.groupId, + required this.messageId, + this.senderId, + this.content, + this.mediaId, + this.quotesMessageId, + required this.isDeletedFromSender, + required this.isEdited, + required this.acknowledgeByUser, + required this.acknowledgeByServer, + required this.openedByCounter, + this.openedAt, + required this.createdAt, + this.modifiedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['group_id'] = Variable(groupId); + map['message_id'] = Variable(messageId); + if (!nullToAbsent || senderId != null) { + map['sender_id'] = Variable(senderId); + } + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + if (!nullToAbsent || mediaId != null) { + map['media_id'] = Variable(mediaId); + } + if (!nullToAbsent || quotesMessageId != null) { + map['quotes_message_id'] = Variable(quotesMessageId); + } + map['is_deleted_from_sender'] = Variable(isDeletedFromSender); + map['is_edited'] = Variable(isEdited); + map['acknowledge_by_user'] = Variable(acknowledgeByUser); + map['acknowledge_by_server'] = Variable(acknowledgeByServer); + map['opened_by_counter'] = Variable(openedByCounter); + if (!nullToAbsent || openedAt != null) { + map['opened_at'] = Variable(openedAt); + } + map['created_at'] = Variable(createdAt); + if (!nullToAbsent || modifiedAt != null) { + map['modified_at'] = Variable(modifiedAt); + } + return map; + } + + MessagesCompanion toCompanion(bool nullToAbsent) { + return MessagesCompanion( + groupId: Value(groupId), + messageId: Value(messageId), + senderId: senderId == null && nullToAbsent + ? const Value.absent() + : Value(senderId), + content: content == null && nullToAbsent + ? const Value.absent() + : Value(content), + mediaId: mediaId == null && nullToAbsent + ? const Value.absent() + : Value(mediaId), + quotesMessageId: quotesMessageId == null && nullToAbsent + ? const Value.absent() + : Value(quotesMessageId), + isDeletedFromSender: Value(isDeletedFromSender), + isEdited: Value(isEdited), + acknowledgeByUser: Value(acknowledgeByUser), + acknowledgeByServer: Value(acknowledgeByServer), + openedByCounter: Value(openedByCounter), + openedAt: openedAt == null && nullToAbsent + ? const Value.absent() + : Value(openedAt), + createdAt: Value(createdAt), + modifiedAt: modifiedAt == null && nullToAbsent + ? const Value.absent() + : Value(modifiedAt), + ); + } + + factory Message.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Message( + groupId: serializer.fromJson(json['groupId']), + messageId: serializer.fromJson(json['messageId']), + senderId: serializer.fromJson(json['senderId']), + content: serializer.fromJson(json['content']), + mediaId: serializer.fromJson(json['mediaId']), + quotesMessageId: serializer.fromJson(json['quotesMessageId']), + isDeletedFromSender: + serializer.fromJson(json['isDeletedFromSender']), + isEdited: serializer.fromJson(json['isEdited']), + acknowledgeByUser: serializer.fromJson(json['acknowledgeByUser']), + acknowledgeByServer: + serializer.fromJson(json['acknowledgeByServer']), + openedByCounter: serializer.fromJson(json['openedByCounter']), + openedAt: serializer.fromJson(json['openedAt']), + createdAt: serializer.fromJson(json['createdAt']), + modifiedAt: serializer.fromJson(json['modifiedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'groupId': serializer.toJson(groupId), + 'messageId': serializer.toJson(messageId), + 'senderId': serializer.toJson(senderId), + 'content': serializer.toJson(content), + 'mediaId': serializer.toJson(mediaId), + 'quotesMessageId': serializer.toJson(quotesMessageId), + 'isDeletedFromSender': serializer.toJson(isDeletedFromSender), + 'isEdited': serializer.toJson(isEdited), + 'acknowledgeByUser': serializer.toJson(acknowledgeByUser), + 'acknowledgeByServer': serializer.toJson(acknowledgeByServer), + 'openedByCounter': serializer.toJson(openedByCounter), + 'openedAt': serializer.toJson(openedAt), + 'createdAt': serializer.toJson(createdAt), + 'modifiedAt': serializer.toJson(modifiedAt), + }; + } + + Message copyWith( + {String? groupId, + String? messageId, + Value senderId = const Value.absent(), + Value content = const Value.absent(), + Value mediaId = const Value.absent(), + Value quotesMessageId = const Value.absent(), + bool? isDeletedFromSender, + bool? isEdited, + bool? acknowledgeByUser, + bool? acknowledgeByServer, + int? openedByCounter, + Value openedAt = const Value.absent(), + DateTime? createdAt, + Value modifiedAt = const Value.absent()}) => + Message( + groupId: groupId ?? this.groupId, + messageId: messageId ?? this.messageId, + senderId: senderId.present ? senderId.value : this.senderId, + content: content.present ? content.value : this.content, + mediaId: mediaId.present ? mediaId.value : this.mediaId, + quotesMessageId: quotesMessageId.present + ? quotesMessageId.value + : this.quotesMessageId, + isDeletedFromSender: isDeletedFromSender ?? this.isDeletedFromSender, + isEdited: isEdited ?? this.isEdited, + acknowledgeByUser: acknowledgeByUser ?? this.acknowledgeByUser, + acknowledgeByServer: acknowledgeByServer ?? this.acknowledgeByServer, + openedByCounter: openedByCounter ?? this.openedByCounter, + openedAt: openedAt.present ? openedAt.value : this.openedAt, + createdAt: createdAt ?? this.createdAt, + modifiedAt: modifiedAt.present ? modifiedAt.value : this.modifiedAt, + ); + Message copyWithCompanion(MessagesCompanion data) { + return Message( + groupId: data.groupId.present ? data.groupId.value : this.groupId, + messageId: data.messageId.present ? data.messageId.value : this.messageId, + senderId: data.senderId.present ? data.senderId.value : this.senderId, + content: data.content.present ? data.content.value : this.content, + mediaId: data.mediaId.present ? data.mediaId.value : this.mediaId, + quotesMessageId: data.quotesMessageId.present + ? data.quotesMessageId.value + : this.quotesMessageId, + isDeletedFromSender: data.isDeletedFromSender.present + ? data.isDeletedFromSender.value + : this.isDeletedFromSender, + isEdited: data.isEdited.present ? data.isEdited.value : this.isEdited, + acknowledgeByUser: data.acknowledgeByUser.present + ? data.acknowledgeByUser.value + : this.acknowledgeByUser, + acknowledgeByServer: data.acknowledgeByServer.present + ? data.acknowledgeByServer.value + : this.acknowledgeByServer, + openedByCounter: data.openedByCounter.present + ? data.openedByCounter.value + : this.openedByCounter, + openedAt: data.openedAt.present ? data.openedAt.value : this.openedAt, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + modifiedAt: + data.modifiedAt.present ? data.modifiedAt.value : this.modifiedAt, + ); + } + + @override + String toString() { + return (StringBuffer('Message(') + ..write('groupId: $groupId, ') + ..write('messageId: $messageId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('mediaId: $mediaId, ') + ..write('quotesMessageId: $quotesMessageId, ') + ..write('isDeletedFromSender: $isDeletedFromSender, ') + ..write('isEdited: $isEdited, ') + ..write('acknowledgeByUser: $acknowledgeByUser, ') + ..write('acknowledgeByServer: $acknowledgeByServer, ') + ..write('openedByCounter: $openedByCounter, ') + ..write('openedAt: $openedAt, ') + ..write('createdAt: $createdAt, ') + ..write('modifiedAt: $modifiedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + groupId, + messageId, + senderId, + content, + mediaId, + quotesMessageId, + isDeletedFromSender, + isEdited, + acknowledgeByUser, + acknowledgeByServer, + openedByCounter, + openedAt, + createdAt, + modifiedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Message && + other.groupId == this.groupId && + other.messageId == this.messageId && + other.senderId == this.senderId && + other.content == this.content && + other.mediaId == this.mediaId && + other.quotesMessageId == this.quotesMessageId && + other.isDeletedFromSender == this.isDeletedFromSender && + other.isEdited == this.isEdited && + other.acknowledgeByUser == this.acknowledgeByUser && + other.acknowledgeByServer == this.acknowledgeByServer && + other.openedByCounter == this.openedByCounter && + other.openedAt == this.openedAt && + other.createdAt == this.createdAt && + other.modifiedAt == this.modifiedAt); +} + +class MessagesCompanion extends UpdateCompanion { + final Value groupId; + final Value messageId; + final Value senderId; + final Value content; + final Value mediaId; + final Value quotesMessageId; + final Value isDeletedFromSender; + final Value isEdited; + final Value acknowledgeByUser; + final Value acknowledgeByServer; + final Value openedByCounter; + final Value openedAt; + final Value createdAt; + final Value modifiedAt; + final Value rowid; + const MessagesCompanion({ + this.groupId = const Value.absent(), + this.messageId = const Value.absent(), + this.senderId = const Value.absent(), + this.content = const Value.absent(), + this.mediaId = const Value.absent(), + this.quotesMessageId = const Value.absent(), + this.isDeletedFromSender = const Value.absent(), + this.isEdited = const Value.absent(), + this.acknowledgeByUser = const Value.absent(), + this.acknowledgeByServer = const Value.absent(), + this.openedByCounter = const Value.absent(), + this.openedAt = const Value.absent(), + this.createdAt = const Value.absent(), + this.modifiedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + MessagesCompanion.insert({ + required String groupId, + required String messageId, + this.senderId = const Value.absent(), + this.content = const Value.absent(), + this.mediaId = const Value.absent(), + this.quotesMessageId = const Value.absent(), + this.isDeletedFromSender = const Value.absent(), + this.isEdited = const Value.absent(), + this.acknowledgeByUser = const Value.absent(), + this.acknowledgeByServer = const Value.absent(), + this.openedByCounter = const Value.absent(), + this.openedAt = const Value.absent(), + this.createdAt = const Value.absent(), + this.modifiedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : groupId = Value(groupId), + messageId = Value(messageId); + static Insertable custom({ + Expression? groupId, + Expression? messageId, + Expression? senderId, + Expression? content, + Expression? mediaId, + Expression? quotesMessageId, + Expression? isDeletedFromSender, + Expression? isEdited, + Expression? acknowledgeByUser, + Expression? acknowledgeByServer, + Expression? openedByCounter, + Expression? openedAt, + Expression? createdAt, + Expression? modifiedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (groupId != null) 'group_id': groupId, + if (messageId != null) 'message_id': messageId, + if (senderId != null) 'sender_id': senderId, + if (content != null) 'content': content, + if (mediaId != null) 'media_id': mediaId, + if (quotesMessageId != null) 'quotes_message_id': quotesMessageId, + if (isDeletedFromSender != null) + 'is_deleted_from_sender': isDeletedFromSender, + if (isEdited != null) 'is_edited': isEdited, + if (acknowledgeByUser != null) 'acknowledge_by_user': acknowledgeByUser, + if (acknowledgeByServer != null) + 'acknowledge_by_server': acknowledgeByServer, + if (openedByCounter != null) 'opened_by_counter': openedByCounter, + if (openedAt != null) 'opened_at': openedAt, + if (createdAt != null) 'created_at': createdAt, + if (modifiedAt != null) 'modified_at': modifiedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + MessagesCompanion copyWith( + {Value? groupId, + Value? messageId, + Value? senderId, + Value? content, + Value? mediaId, + Value? quotesMessageId, + Value? isDeletedFromSender, + Value? isEdited, + Value? acknowledgeByUser, + Value? acknowledgeByServer, + Value? openedByCounter, + Value? openedAt, + Value? createdAt, + Value? modifiedAt, + Value? rowid}) { + return MessagesCompanion( + groupId: groupId ?? this.groupId, + messageId: messageId ?? this.messageId, + senderId: senderId ?? this.senderId, + content: content ?? this.content, + mediaId: mediaId ?? this.mediaId, + quotesMessageId: quotesMessageId ?? this.quotesMessageId, + isDeletedFromSender: isDeletedFromSender ?? this.isDeletedFromSender, + isEdited: isEdited ?? this.isEdited, + acknowledgeByUser: acknowledgeByUser ?? this.acknowledgeByUser, + acknowledgeByServer: acknowledgeByServer ?? this.acknowledgeByServer, + openedByCounter: openedByCounter ?? this.openedByCounter, + openedAt: openedAt ?? this.openedAt, + createdAt: createdAt ?? this.createdAt, + modifiedAt: modifiedAt ?? this.modifiedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (groupId.present) { + map['group_id'] = Variable(groupId.value); + } + if (messageId.present) { + map['message_id'] = Variable(messageId.value); + } + if (senderId.present) { + map['sender_id'] = Variable(senderId.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (mediaId.present) { + map['media_id'] = Variable(mediaId.value); + } + if (quotesMessageId.present) { + map['quotes_message_id'] = Variable(quotesMessageId.value); + } + if (isDeletedFromSender.present) { + map['is_deleted_from_sender'] = Variable(isDeletedFromSender.value); + } + if (isEdited.present) { + map['is_edited'] = Variable(isEdited.value); + } + if (acknowledgeByUser.present) { + map['acknowledge_by_user'] = Variable(acknowledgeByUser.value); + } + if (acknowledgeByServer.present) { + map['acknowledge_by_server'] = Variable(acknowledgeByServer.value); + } + if (openedByCounter.present) { + map['opened_by_counter'] = Variable(openedByCounter.value); + } + if (openedAt.present) { + map['opened_at'] = Variable(openedAt.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (modifiedAt.present) { + map['modified_at'] = Variable(modifiedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('MessagesCompanion(') + ..write('groupId: $groupId, ') + ..write('messageId: $messageId, ') + ..write('senderId: $senderId, ') + ..write('content: $content, ') + ..write('mediaId: $mediaId, ') + ..write('quotesMessageId: $quotesMessageId, ') + ..write('isDeletedFromSender: $isDeletedFromSender, ') + ..write('isEdited: $isEdited, ') + ..write('acknowledgeByUser: $acknowledgeByUser, ') + ..write('acknowledgeByServer: $acknowledgeByServer, ') + ..write('openedByCounter: $openedByCounter, ') + ..write('openedAt: $openedAt, ') + ..write('createdAt: $createdAt, ') + ..write('modifiedAt: $modifiedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $MessageHistoriesTable extends MessageHistories + with TableInfo<$MessageHistoriesTable, MessageHistory> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $MessageHistoriesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _messageIdMeta = + const VerificationMeta('messageId'); + @override + late final GeneratedColumn messageId = GeneratedColumn( + 'message_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES messages (message_id) ON DELETE CASCADE')); + static const VerificationMeta _contentMeta = + const VerificationMeta('content'); + @override + late final GeneratedColumn content = GeneratedColumn( + 'content', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [messageId, content, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'message_histories'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('message_id')) { + context.handle(_messageIdMeta, + messageId.isAcceptableOrUnknown(data['message_id']!, _messageIdMeta)); + } else if (isInserting) { + context.missing(_messageIdMeta); + } + if (data.containsKey('content')) { + context.handle(_contentMeta, + content.isAcceptableOrUnknown(data['content']!, _contentMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {messageId, createdAt}; + @override + MessageHistory map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return MessageHistory( + messageId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message_id'])!, + content: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}content']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $MessageHistoriesTable createAlias(String alias) { + return $MessageHistoriesTable(attachedDatabase, alias); + } +} + +class MessageHistory extends DataClass implements Insertable { + final String messageId; + final String? content; + final DateTime createdAt; + const MessageHistory( + {required this.messageId, this.content, required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['message_id'] = Variable(messageId); + if (!nullToAbsent || content != null) { + map['content'] = Variable(content); + } + map['created_at'] = Variable(createdAt); + return map; + } + + MessageHistoriesCompanion toCompanion(bool nullToAbsent) { + return MessageHistoriesCompanion( + messageId: Value(messageId), + content: content == null && nullToAbsent + ? const Value.absent() + : Value(content), + createdAt: Value(createdAt), + ); + } + + factory MessageHistory.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return MessageHistory( + messageId: serializer.fromJson(json['messageId']), + content: serializer.fromJson(json['content']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'messageId': serializer.toJson(messageId), + 'content': serializer.toJson(content), + 'createdAt': serializer.toJson(createdAt), + }; + } + + MessageHistory copyWith( + {String? messageId, + Value content = const Value.absent(), + DateTime? createdAt}) => + MessageHistory( + messageId: messageId ?? this.messageId, + content: content.present ? content.value : this.content, + createdAt: createdAt ?? this.createdAt, + ); + MessageHistory copyWithCompanion(MessageHistoriesCompanion data) { + return MessageHistory( + messageId: data.messageId.present ? data.messageId.value : this.messageId, + content: data.content.present ? data.content.value : this.content, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('MessageHistory(') + ..write('messageId: $messageId, ') + ..write('content: $content, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(messageId, content, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is MessageHistory && + other.messageId == this.messageId && + other.content == this.content && + other.createdAt == this.createdAt); +} + +class MessageHistoriesCompanion extends UpdateCompanion { + final Value messageId; + final Value content; + final Value createdAt; + final Value rowid; + const MessageHistoriesCompanion({ + this.messageId = const Value.absent(), + this.content = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + MessageHistoriesCompanion.insert({ + required String messageId, + this.content = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : messageId = Value(messageId); + static Insertable custom({ + Expression? messageId, + Expression? content, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (messageId != null) 'message_id': messageId, + if (content != null) 'content': content, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + MessageHistoriesCompanion copyWith( + {Value? messageId, + Value? content, + Value? createdAt, + Value? rowid}) { + return MessageHistoriesCompanion( + messageId: messageId ?? this.messageId, + content: content ?? this.content, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (messageId.present) { + map['message_id'] = Variable(messageId.value); + } + if (content.present) { + map['content'] = Variable(content.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('MessageHistoriesCompanion(') + ..write('messageId: $messageId, ') + ..write('content: $content, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ReactionsTable extends Reactions + with TableInfo<$ReactionsTable, Reaction> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ReactionsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _messageIdMeta = + const VerificationMeta('messageId'); + @override + late final GeneratedColumn messageId = GeneratedColumn( + 'message_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES messages (message_id) ON DELETE CASCADE')); + static const VerificationMeta _emojiMeta = const VerificationMeta('emoji'); + @override + late final GeneratedColumn emoji = GeneratedColumn( + 'emoji', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _senderIdMeta = + const VerificationMeta('senderId'); + @override + late final GeneratedColumn senderId = GeneratedColumn( + 'sender_id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES contacts (user_id) ON DELETE CASCADE')); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [messageId, emoji, senderId, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'reactions'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('message_id')) { + context.handle(_messageIdMeta, + messageId.isAcceptableOrUnknown(data['message_id']!, _messageIdMeta)); + } else if (isInserting) { + context.missing(_messageIdMeta); + } + if (data.containsKey('emoji')) { + context.handle( + _emojiMeta, emoji.isAcceptableOrUnknown(data['emoji']!, _emojiMeta)); + } else if (isInserting) { + context.missing(_emojiMeta); + } + if (data.containsKey('sender_id')) { + context.handle(_senderIdMeta, + senderId.isAcceptableOrUnknown(data['sender_id']!, _senderIdMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {messageId, senderId, createdAt}; + @override + Reaction map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Reaction( + messageId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message_id'])!, + emoji: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}emoji'])!, + senderId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}sender_id']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $ReactionsTable createAlias(String alias) { + return $ReactionsTable(attachedDatabase, alias); + } +} + +class Reaction extends DataClass implements Insertable { + final String messageId; + final String emoji; + final int? senderId; + final DateTime createdAt; + const Reaction( + {required this.messageId, + required this.emoji, + this.senderId, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['message_id'] = Variable(messageId); + map['emoji'] = Variable(emoji); + if (!nullToAbsent || senderId != null) { + map['sender_id'] = Variable(senderId); + } + map['created_at'] = Variable(createdAt); + return map; + } + + ReactionsCompanion toCompanion(bool nullToAbsent) { + return ReactionsCompanion( + messageId: Value(messageId), + emoji: Value(emoji), + senderId: senderId == null && nullToAbsent + ? const Value.absent() + : Value(senderId), + createdAt: Value(createdAt), + ); + } + + factory Reaction.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Reaction( + messageId: serializer.fromJson(json['messageId']), + emoji: serializer.fromJson(json['emoji']), + senderId: serializer.fromJson(json['senderId']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'messageId': serializer.toJson(messageId), + 'emoji': serializer.toJson(emoji), + 'senderId': serializer.toJson(senderId), + 'createdAt': serializer.toJson(createdAt), + }; + } + + Reaction copyWith( + {String? messageId, + String? emoji, + Value senderId = const Value.absent(), + DateTime? createdAt}) => + Reaction( + messageId: messageId ?? this.messageId, + emoji: emoji ?? this.emoji, + senderId: senderId.present ? senderId.value : this.senderId, + createdAt: createdAt ?? this.createdAt, + ); + Reaction copyWithCompanion(ReactionsCompanion data) { + return Reaction( + messageId: data.messageId.present ? data.messageId.value : this.messageId, + emoji: data.emoji.present ? data.emoji.value : this.emoji, + senderId: data.senderId.present ? data.senderId.value : this.senderId, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('Reaction(') + ..write('messageId: $messageId, ') + ..write('emoji: $emoji, ') + ..write('senderId: $senderId, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(messageId, emoji, senderId, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Reaction && + other.messageId == this.messageId && + other.emoji == this.emoji && + other.senderId == this.senderId && + other.createdAt == this.createdAt); +} + +class ReactionsCompanion extends UpdateCompanion { + final Value messageId; + final Value emoji; + final Value senderId; + final Value createdAt; + final Value rowid; + const ReactionsCompanion({ + this.messageId = const Value.absent(), + this.emoji = const Value.absent(), + this.senderId = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ReactionsCompanion.insert({ + required String messageId, + required String emoji, + this.senderId = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : messageId = Value(messageId), + emoji = Value(emoji); + static Insertable custom({ + Expression? messageId, + Expression? emoji, + Expression? senderId, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (messageId != null) 'message_id': messageId, + if (emoji != null) 'emoji': emoji, + if (senderId != null) 'sender_id': senderId, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ReactionsCompanion copyWith( + {Value? messageId, + Value? emoji, + Value? senderId, + Value? createdAt, + Value? rowid}) { + return ReactionsCompanion( + messageId: messageId ?? this.messageId, + emoji: emoji ?? this.emoji, + senderId: senderId ?? this.senderId, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (messageId.present) { + map['message_id'] = Variable(messageId.value); + } + if (emoji.present) { + map['emoji'] = Variable(emoji.value); + } + if (senderId.present) { + map['sender_id'] = Variable(senderId.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ReactionsCompanion(') + ..write('messageId: $messageId, ') + ..write('emoji: $emoji, ') + ..write('senderId: $senderId, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $GroupsTable extends Groups with TableInfo<$GroupsTable, Group> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $GroupsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _groupIdMeta = + const VerificationMeta('groupId'); + @override + late final GeneratedColumn groupId = GeneratedColumn( + 'group_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + clientDefault: () => uuid.v4()); + static const VerificationMeta _isGroupAdminMeta = + const VerificationMeta('isGroupAdmin'); + @override + late final GeneratedColumn isGroupAdmin = GeneratedColumn( + 'is_group_admin', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_group_admin" IN (0, 1))')); + static const VerificationMeta _isGroupOfTwoMeta = + const VerificationMeta('isGroupOfTwo'); + @override + late final GeneratedColumn isGroupOfTwo = GeneratedColumn( + 'is_group_of_two', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_group_of_two" IN (0, 1))')); + static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); + @override + late final GeneratedColumn pinned = GeneratedColumn( + 'pinned', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _lastMessageExchangeMeta = + const VerificationMeta('lastMessageExchange'); + @override + late final GeneratedColumn lastMessageExchange = + GeneratedColumn('last_message_exchange', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [ + groupId, + isGroupAdmin, + isGroupOfTwo, + pinned, + lastMessageExchange, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'groups'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('group_id')) { + context.handle(_groupIdMeta, + groupId.isAcceptableOrUnknown(data['group_id']!, _groupIdMeta)); + } + if (data.containsKey('is_group_admin')) { + context.handle( + _isGroupAdminMeta, + isGroupAdmin.isAcceptableOrUnknown( + data['is_group_admin']!, _isGroupAdminMeta)); + } else if (isInserting) { + context.missing(_isGroupAdminMeta); + } + if (data.containsKey('is_group_of_two')) { + context.handle( + _isGroupOfTwoMeta, + isGroupOfTwo.isAcceptableOrUnknown( + data['is_group_of_two']!, _isGroupOfTwoMeta)); + } else if (isInserting) { + context.missing(_isGroupOfTwoMeta); + } + if (data.containsKey('pinned')) { + context.handle(_pinnedMeta, + pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta)); + } + if (data.containsKey('last_message_exchange')) { + context.handle( + _lastMessageExchangeMeta, + lastMessageExchange.isAcceptableOrUnknown( + data['last_message_exchange']!, _lastMessageExchangeMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {groupId}; + @override + Group map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Group( + groupId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}group_id'])!, + isGroupAdmin: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_group_admin'])!, + isGroupOfTwo: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_group_of_two'])!, + pinned: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!, + lastMessageExchange: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_message_exchange'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $GroupsTable createAlias(String alias) { + return $GroupsTable(attachedDatabase, alias); + } +} + +class Group extends DataClass implements Insertable { + final String groupId; + final bool isGroupAdmin; + final bool isGroupOfTwo; + final bool pinned; + final DateTime lastMessageExchange; + final DateTime createdAt; + const Group( + {required this.groupId, + required this.isGroupAdmin, + required this.isGroupOfTwo, + required this.pinned, + required this.lastMessageExchange, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['group_id'] = Variable(groupId); + map['is_group_admin'] = Variable(isGroupAdmin); + map['is_group_of_two'] = Variable(isGroupOfTwo); + map['pinned'] = Variable(pinned); + map['last_message_exchange'] = Variable(lastMessageExchange); + map['created_at'] = Variable(createdAt); + return map; + } + + GroupsCompanion toCompanion(bool nullToAbsent) { + return GroupsCompanion( + groupId: Value(groupId), + isGroupAdmin: Value(isGroupAdmin), + isGroupOfTwo: Value(isGroupOfTwo), + pinned: Value(pinned), + lastMessageExchange: Value(lastMessageExchange), + createdAt: Value(createdAt), + ); + } + + factory Group.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Group( + groupId: serializer.fromJson(json['groupId']), + isGroupAdmin: serializer.fromJson(json['isGroupAdmin']), + isGroupOfTwo: serializer.fromJson(json['isGroupOfTwo']), + pinned: serializer.fromJson(json['pinned']), + lastMessageExchange: + serializer.fromJson(json['lastMessageExchange']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'groupId': serializer.toJson(groupId), + 'isGroupAdmin': serializer.toJson(isGroupAdmin), + 'isGroupOfTwo': serializer.toJson(isGroupOfTwo), + 'pinned': serializer.toJson(pinned), + 'lastMessageExchange': serializer.toJson(lastMessageExchange), + 'createdAt': serializer.toJson(createdAt), + }; + } + + Group copyWith( + {String? groupId, + bool? isGroupAdmin, + bool? isGroupOfTwo, + bool? pinned, + DateTime? lastMessageExchange, + DateTime? createdAt}) => + Group( + groupId: groupId ?? this.groupId, + isGroupAdmin: isGroupAdmin ?? this.isGroupAdmin, + isGroupOfTwo: isGroupOfTwo ?? this.isGroupOfTwo, + pinned: pinned ?? this.pinned, + lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange, + createdAt: createdAt ?? this.createdAt, + ); + Group copyWithCompanion(GroupsCompanion data) { + return Group( + groupId: data.groupId.present ? data.groupId.value : this.groupId, + isGroupAdmin: data.isGroupAdmin.present + ? data.isGroupAdmin.value + : this.isGroupAdmin, + isGroupOfTwo: data.isGroupOfTwo.present + ? data.isGroupOfTwo.value + : this.isGroupOfTwo, + pinned: data.pinned.present ? data.pinned.value : this.pinned, + lastMessageExchange: data.lastMessageExchange.present + ? data.lastMessageExchange.value + : this.lastMessageExchange, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('Group(') + ..write('groupId: $groupId, ') + ..write('isGroupAdmin: $isGroupAdmin, ') + ..write('isGroupOfTwo: $isGroupOfTwo, ') + ..write('pinned: $pinned, ') + ..write('lastMessageExchange: $lastMessageExchange, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(groupId, isGroupAdmin, isGroupOfTwo, pinned, + lastMessageExchange, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Group && + other.groupId == this.groupId && + other.isGroupAdmin == this.isGroupAdmin && + other.isGroupOfTwo == this.isGroupOfTwo && + other.pinned == this.pinned && + other.lastMessageExchange == this.lastMessageExchange && + other.createdAt == this.createdAt); +} + +class GroupsCompanion extends UpdateCompanion { + final Value groupId; + final Value isGroupAdmin; + final Value isGroupOfTwo; + final Value pinned; + final Value lastMessageExchange; + final Value createdAt; + final Value rowid; + const GroupsCompanion({ + this.groupId = const Value.absent(), + this.isGroupAdmin = const Value.absent(), + this.isGroupOfTwo = const Value.absent(), + this.pinned = const Value.absent(), + this.lastMessageExchange = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + GroupsCompanion.insert({ + this.groupId = const Value.absent(), + required bool isGroupAdmin, + required bool isGroupOfTwo, + this.pinned = const Value.absent(), + this.lastMessageExchange = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : isGroupAdmin = Value(isGroupAdmin), + isGroupOfTwo = Value(isGroupOfTwo); + static Insertable custom({ + Expression? groupId, + Expression? isGroupAdmin, + Expression? isGroupOfTwo, + Expression? pinned, + Expression? lastMessageExchange, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (groupId != null) 'group_id': groupId, + if (isGroupAdmin != null) 'is_group_admin': isGroupAdmin, + if (isGroupOfTwo != null) 'is_group_of_two': isGroupOfTwo, + if (pinned != null) 'pinned': pinned, + if (lastMessageExchange != null) + 'last_message_exchange': lastMessageExchange, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + GroupsCompanion copyWith( + {Value? groupId, + Value? isGroupAdmin, + Value? isGroupOfTwo, + Value? pinned, + Value? lastMessageExchange, + Value? createdAt, + Value? rowid}) { + return GroupsCompanion( + groupId: groupId ?? this.groupId, + isGroupAdmin: isGroupAdmin ?? this.isGroupAdmin, + isGroupOfTwo: isGroupOfTwo ?? this.isGroupOfTwo, + pinned: pinned ?? this.pinned, + lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (groupId.present) { + map['group_id'] = Variable(groupId.value); + } + if (isGroupAdmin.present) { + map['is_group_admin'] = Variable(isGroupAdmin.value); + } + if (isGroupOfTwo.present) { + map['is_group_of_two'] = Variable(isGroupOfTwo.value); + } + if (pinned.present) { + map['pinned'] = Variable(pinned.value); + } + if (lastMessageExchange.present) { + map['last_message_exchange'] = + Variable(lastMessageExchange.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('GroupsCompanion(') + ..write('groupId: $groupId, ') + ..write('isGroupAdmin: $isGroupAdmin, ') + ..write('isGroupOfTwo: $isGroupOfTwo, ') + ..write('pinned: $pinned, ') + ..write('lastMessageExchange: $lastMessageExchange, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $GroupMembersTable extends GroupMembers + with TableInfo<$GroupMembersTable, GroupMember> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $GroupMembersTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _groupIdMeta = + const VerificationMeta('groupId'); + @override + late final GeneratedColumn groupId = GeneratedColumn( + 'group_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _contactIdMeta = + const VerificationMeta('contactId'); + @override + late final GeneratedColumn contactId = GeneratedColumn( + 'contact_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES contacts (user_id)')); + @override + late final GeneratedColumnWithTypeConverter + memberState = GeneratedColumn('member_state', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $GroupMembersTable.$convertermemberStaten); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => + [groupId, contactId, memberState, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'group_members'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('group_id')) { + context.handle(_groupIdMeta, + groupId.isAcceptableOrUnknown(data['group_id']!, _groupIdMeta)); + } else if (isInserting) { + context.missing(_groupIdMeta); + } + if (data.containsKey('contact_id')) { + context.handle(_contactIdMeta, + contactId.isAcceptableOrUnknown(data['contact_id']!, _contactIdMeta)); + } else if (isInserting) { + context.missing(_contactIdMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {groupId, contactId}; + @override + GroupMember map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return GroupMember( + groupId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}group_id'])!, + contactId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}contact_id'])!, + memberState: $GroupMembersTable.$convertermemberStaten.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}member_state'])), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $GroupMembersTable createAlias(String alias) { + return $GroupMembersTable(attachedDatabase, alias); + } + + static JsonTypeConverter2 $convertermemberState = + const EnumNameConverter(MemberState.values); + static JsonTypeConverter2 + $convertermemberStaten = + JsonTypeConverter2.asNullable($convertermemberState); +} + +class GroupMember extends DataClass implements Insertable { + final String groupId; + final int contactId; + final MemberState? memberState; + final DateTime createdAt; + const GroupMember( + {required this.groupId, + required this.contactId, + this.memberState, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['group_id'] = Variable(groupId); + map['contact_id'] = Variable(contactId); + if (!nullToAbsent || memberState != null) { + map['member_state'] = Variable( + $GroupMembersTable.$convertermemberStaten.toSql(memberState)); + } + map['created_at'] = Variable(createdAt); + return map; + } + + GroupMembersCompanion toCompanion(bool nullToAbsent) { + return GroupMembersCompanion( + groupId: Value(groupId), + contactId: Value(contactId), + memberState: memberState == null && nullToAbsent + ? const Value.absent() + : Value(memberState), + createdAt: Value(createdAt), + ); + } + + factory GroupMember.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return GroupMember( + groupId: serializer.fromJson(json['groupId']), + contactId: serializer.fromJson(json['contactId']), + memberState: $GroupMembersTable.$convertermemberStaten + .fromJson(serializer.fromJson(json['memberState'])), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'groupId': serializer.toJson(groupId), + 'contactId': serializer.toJson(contactId), + 'memberState': serializer.toJson( + $GroupMembersTable.$convertermemberStaten.toJson(memberState)), + 'createdAt': serializer.toJson(createdAt), + }; + } + + GroupMember copyWith( + {String? groupId, + int? contactId, + Value memberState = const Value.absent(), + DateTime? createdAt}) => + GroupMember( + groupId: groupId ?? this.groupId, + contactId: contactId ?? this.contactId, + memberState: memberState.present ? memberState.value : this.memberState, + createdAt: createdAt ?? this.createdAt, + ); + GroupMember copyWithCompanion(GroupMembersCompanion data) { + return GroupMember( + groupId: data.groupId.present ? data.groupId.value : this.groupId, + contactId: data.contactId.present ? data.contactId.value : this.contactId, + memberState: + data.memberState.present ? data.memberState.value : this.memberState, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('GroupMember(') + ..write('groupId: $groupId, ') + ..write('contactId: $contactId, ') + ..write('memberState: $memberState, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(groupId, contactId, memberState, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is GroupMember && + other.groupId == this.groupId && + other.contactId == this.contactId && + other.memberState == this.memberState && + other.createdAt == this.createdAt); +} + +class GroupMembersCompanion extends UpdateCompanion { + final Value groupId; + final Value contactId; + final Value memberState; + final Value createdAt; + final Value rowid; + const GroupMembersCompanion({ + this.groupId = const Value.absent(), + this.contactId = const Value.absent(), + this.memberState = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + GroupMembersCompanion.insert({ + required String groupId, + required int contactId, + this.memberState = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : groupId = Value(groupId), + contactId = Value(contactId); + static Insertable custom({ + Expression? groupId, + Expression? contactId, + Expression? memberState, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (groupId != null) 'group_id': groupId, + if (contactId != null) 'contact_id': contactId, + if (memberState != null) 'member_state': memberState, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + GroupMembersCompanion copyWith( + {Value? groupId, + Value? contactId, + Value? memberState, + Value? createdAt, + Value? rowid}) { + return GroupMembersCompanion( + groupId: groupId ?? this.groupId, + contactId: contactId ?? this.contactId, + memberState: memberState ?? this.memberState, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (groupId.present) { + map['group_id'] = Variable(groupId.value); + } + if (contactId.present) { + map['contact_id'] = Variable(contactId.value); + } + if (memberState.present) { + map['member_state'] = Variable( + $GroupMembersTable.$convertermemberStaten.toSql(memberState.value)); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('GroupMembersCompanion(') + ..write('groupId: $groupId, ') + ..write('contactId: $contactId, ') + ..write('memberState: $memberState, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ReceiptsTable extends Receipts with TableInfo<$ReceiptsTable, Receipt> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ReceiptsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _receiptIdMeta = + const VerificationMeta('receiptId'); + @override + late final GeneratedColumn receiptId = GeneratedColumn( + 'receipt_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + clientDefault: () => uuid.v4()); + static const VerificationMeta _contactIdMeta = + const VerificationMeta('contactId'); + @override + late final GeneratedColumn contactId = GeneratedColumn( + 'contact_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES contacts (user_id) ON DELETE CASCADE')); + static const VerificationMeta _messageIdMeta = + const VerificationMeta('messageId'); + @override + late final GeneratedColumn messageId = GeneratedColumn( + 'message_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES messages (message_id) ON DELETE CASCADE')); + static const VerificationMeta _messageMeta = + const VerificationMeta('message'); + @override + late final GeneratedColumn message = GeneratedColumn( + 'message', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _contactWillSendsReceiptMeta = + const VerificationMeta('contactWillSendsReceipt'); + @override + late final GeneratedColumn contactWillSendsReceipt = + GeneratedColumn('contact_will_sends_receipt', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("contact_will_sends_receipt" IN (0, 1))'), + defaultValue: const Constant(true)); + static const VerificationMeta _retryCountMeta = + const VerificationMeta('retryCount'); + @override + late final GeneratedColumn retryCount = GeneratedColumn( + 'retry_count', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(0)); + static const VerificationMeta _lastRetryMeta = + const VerificationMeta('lastRetry'); + @override + late final GeneratedColumn lastRetry = GeneratedColumn( + 'last_retry', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [ + receiptId, + contactId, + messageId, + message, + contactWillSendsReceipt, + retryCount, + lastRetry, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'receipts'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('receipt_id')) { + context.handle(_receiptIdMeta, + receiptId.isAcceptableOrUnknown(data['receipt_id']!, _receiptIdMeta)); + } + if (data.containsKey('contact_id')) { + context.handle(_contactIdMeta, + contactId.isAcceptableOrUnknown(data['contact_id']!, _contactIdMeta)); + } else if (isInserting) { + context.missing(_contactIdMeta); + } + if (data.containsKey('message_id')) { + context.handle(_messageIdMeta, + messageId.isAcceptableOrUnknown(data['message_id']!, _messageIdMeta)); + } + if (data.containsKey('message')) { + context.handle(_messageMeta, + message.isAcceptableOrUnknown(data['message']!, _messageMeta)); + } else if (isInserting) { + context.missing(_messageMeta); + } + if (data.containsKey('contact_will_sends_receipt')) { + context.handle( + _contactWillSendsReceiptMeta, + contactWillSendsReceipt.isAcceptableOrUnknown( + data['contact_will_sends_receipt']!, + _contactWillSendsReceiptMeta)); + } + if (data.containsKey('retry_count')) { + context.handle( + _retryCountMeta, + retryCount.isAcceptableOrUnknown( + data['retry_count']!, _retryCountMeta)); + } + if (data.containsKey('last_retry')) { + context.handle(_lastRetryMeta, + lastRetry.isAcceptableOrUnknown(data['last_retry']!, _lastRetryMeta)); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {receiptId}; + @override + Receipt map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return Receipt( + receiptId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}receipt_id'])!, + contactId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}contact_id'])!, + messageId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message_id']), + message: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}message'])!, + contactWillSendsReceipt: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}contact_will_sends_receipt'])!, + retryCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}retry_count'])!, + lastRetry: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}last_retry']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $ReceiptsTable createAlias(String alias) { + return $ReceiptsTable(attachedDatabase, alias); + } +} + +class Receipt extends DataClass implements Insertable { + final String receiptId; + final int contactId; + final String? messageId; + final Uint8List message; + final bool contactWillSendsReceipt; + final int retryCount; + final DateTime? lastRetry; + final DateTime createdAt; + const Receipt( + {required this.receiptId, + required this.contactId, + this.messageId, + required this.message, + required this.contactWillSendsReceipt, + required this.retryCount, + this.lastRetry, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['receipt_id'] = Variable(receiptId); + map['contact_id'] = Variable(contactId); + if (!nullToAbsent || messageId != null) { + map['message_id'] = Variable(messageId); + } + map['message'] = Variable(message); + map['contact_will_sends_receipt'] = Variable(contactWillSendsReceipt); + map['retry_count'] = Variable(retryCount); + if (!nullToAbsent || lastRetry != null) { + map['last_retry'] = Variable(lastRetry); + } + map['created_at'] = Variable(createdAt); + return map; + } + + ReceiptsCompanion toCompanion(bool nullToAbsent) { + return ReceiptsCompanion( + receiptId: Value(receiptId), + contactId: Value(contactId), + messageId: messageId == null && nullToAbsent + ? const Value.absent() + : Value(messageId), + message: Value(message), + contactWillSendsReceipt: Value(contactWillSendsReceipt), + retryCount: Value(retryCount), + lastRetry: lastRetry == null && nullToAbsent + ? const Value.absent() + : Value(lastRetry), + createdAt: Value(createdAt), + ); + } + + factory Receipt.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Receipt( + receiptId: serializer.fromJson(json['receiptId']), + contactId: serializer.fromJson(json['contactId']), + messageId: serializer.fromJson(json['messageId']), + message: serializer.fromJson(json['message']), + contactWillSendsReceipt: + serializer.fromJson(json['contactWillSendsReceipt']), + retryCount: serializer.fromJson(json['retryCount']), + lastRetry: serializer.fromJson(json['lastRetry']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'receiptId': serializer.toJson(receiptId), + 'contactId': serializer.toJson(contactId), + 'messageId': serializer.toJson(messageId), + 'message': serializer.toJson(message), + 'contactWillSendsReceipt': + serializer.toJson(contactWillSendsReceipt), + 'retryCount': serializer.toJson(retryCount), + 'lastRetry': serializer.toJson(lastRetry), + 'createdAt': serializer.toJson(createdAt), + }; + } + + Receipt copyWith( + {String? receiptId, + int? contactId, + Value messageId = const Value.absent(), + Uint8List? message, + bool? contactWillSendsReceipt, + int? retryCount, + Value lastRetry = const Value.absent(), + DateTime? createdAt}) => + Receipt( + receiptId: receiptId ?? this.receiptId, + contactId: contactId ?? this.contactId, + messageId: messageId.present ? messageId.value : this.messageId, + message: message ?? this.message, + contactWillSendsReceipt: + contactWillSendsReceipt ?? this.contactWillSendsReceipt, + retryCount: retryCount ?? this.retryCount, + lastRetry: lastRetry.present ? lastRetry.value : this.lastRetry, + createdAt: createdAt ?? this.createdAt, + ); + Receipt copyWithCompanion(ReceiptsCompanion data) { + return Receipt( + receiptId: data.receiptId.present ? data.receiptId.value : this.receiptId, + contactId: data.contactId.present ? data.contactId.value : this.contactId, + messageId: data.messageId.present ? data.messageId.value : this.messageId, + message: data.message.present ? data.message.value : this.message, + contactWillSendsReceipt: data.contactWillSendsReceipt.present + ? data.contactWillSendsReceipt.value + : this.contactWillSendsReceipt, + retryCount: + data.retryCount.present ? data.retryCount.value : this.retryCount, + lastRetry: data.lastRetry.present ? data.lastRetry.value : this.lastRetry, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('Receipt(') + ..write('receiptId: $receiptId, ') + ..write('contactId: $contactId, ') + ..write('messageId: $messageId, ') + ..write('message: $message, ') + ..write('contactWillSendsReceipt: $contactWillSendsReceipt, ') + ..write('retryCount: $retryCount, ') + ..write('lastRetry: $lastRetry, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + receiptId, + contactId, + messageId, + $driftBlobEquality.hash(message), + contactWillSendsReceipt, + retryCount, + lastRetry, + createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Receipt && + other.receiptId == this.receiptId && + other.contactId == this.contactId && + other.messageId == this.messageId && + $driftBlobEquality.equals(other.message, this.message) && + other.contactWillSendsReceipt == this.contactWillSendsReceipt && + other.retryCount == this.retryCount && + other.lastRetry == this.lastRetry && + other.createdAt == this.createdAt); +} + +class ReceiptsCompanion extends UpdateCompanion { + final Value receiptId; + final Value contactId; + final Value messageId; + final Value message; + final Value contactWillSendsReceipt; + final Value retryCount; + final Value lastRetry; + final Value createdAt; + final Value rowid; + const ReceiptsCompanion({ + this.receiptId = const Value.absent(), + this.contactId = const Value.absent(), + this.messageId = const Value.absent(), + this.message = const Value.absent(), + this.contactWillSendsReceipt = const Value.absent(), + this.retryCount = const Value.absent(), + this.lastRetry = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ReceiptsCompanion.insert({ + this.receiptId = const Value.absent(), + required int contactId, + this.messageId = const Value.absent(), + required Uint8List message, + this.contactWillSendsReceipt = const Value.absent(), + this.retryCount = const Value.absent(), + this.lastRetry = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : contactId = Value(contactId), + message = Value(message); + static Insertable custom({ + Expression? receiptId, + Expression? contactId, + Expression? messageId, + Expression? message, + Expression? contactWillSendsReceipt, + Expression? retryCount, + Expression? lastRetry, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (receiptId != null) 'receipt_id': receiptId, + if (contactId != null) 'contact_id': contactId, + if (messageId != null) 'message_id': messageId, + if (message != null) 'message': message, + if (contactWillSendsReceipt != null) + 'contact_will_sends_receipt': contactWillSendsReceipt, + if (retryCount != null) 'retry_count': retryCount, + if (lastRetry != null) 'last_retry': lastRetry, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ReceiptsCompanion copyWith( + {Value? receiptId, + Value? contactId, + Value? messageId, + Value? message, + Value? contactWillSendsReceipt, + Value? retryCount, + Value? lastRetry, + Value? createdAt, + Value? rowid}) { + return ReceiptsCompanion( + receiptId: receiptId ?? this.receiptId, + contactId: contactId ?? this.contactId, + messageId: messageId ?? this.messageId, + message: message ?? this.message, + contactWillSendsReceipt: + contactWillSendsReceipt ?? this.contactWillSendsReceipt, + retryCount: retryCount ?? this.retryCount, + lastRetry: lastRetry ?? this.lastRetry, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (receiptId.present) { + map['receipt_id'] = Variable(receiptId.value); + } + if (contactId.present) { + map['contact_id'] = Variable(contactId.value); + } + if (messageId.present) { + map['message_id'] = Variable(messageId.value); + } + if (message.present) { + map['message'] = Variable(message.value); + } + if (contactWillSendsReceipt.present) { + map['contact_will_sends_receipt'] = + Variable(contactWillSendsReceipt.value); + } + if (retryCount.present) { + map['retry_count'] = Variable(retryCount.value); + } + if (lastRetry.present) { + map['last_retry'] = Variable(lastRetry.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ReceiptsCompanion(') + ..write('receiptId: $receiptId, ') + ..write('contactId: $contactId, ') + ..write('messageId: $messageId, ') + ..write('message: $message, ') + ..write('contactWillSendsReceipt: $contactWillSendsReceipt, ') + ..write('retryCount: $retryCount, ') + ..write('lastRetry: $lastRetry, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SignalIdentityKeyStoresTable extends SignalIdentityKeyStores + with TableInfo<$SignalIdentityKeyStoresTable, SignalIdentityKeyStore> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalIdentityKeyStoresTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _deviceIdMeta = + const VerificationMeta('deviceId'); + @override + late final GeneratedColumn deviceId = GeneratedColumn( + 'device_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _identityKeyMeta = + const VerificationMeta('identityKey'); + @override + late final GeneratedColumn identityKey = + GeneratedColumn('identity_key', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => + [deviceId, name, identityKey, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_identity_key_stores'; + @override + VerificationContext validateIntegrity( + Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('device_id')) { + context.handle(_deviceIdMeta, + deviceId.isAcceptableOrUnknown(data['device_id']!, _deviceIdMeta)); + } else if (isInserting) { + context.missing(_deviceIdMeta); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta)); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('identity_key')) { + context.handle( + _identityKeyMeta, + identityKey.isAcceptableOrUnknown( + data['identity_key']!, _identityKeyMeta)); + } else if (isInserting) { + context.missing(_identityKeyMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {deviceId, name}; + @override + SignalIdentityKeyStore map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalIdentityKeyStore( + deviceId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}device_id'])!, + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + identityKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}identity_key'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $SignalIdentityKeyStoresTable createAlias(String alias) { + return $SignalIdentityKeyStoresTable(attachedDatabase, alias); + } +} + +class SignalIdentityKeyStore extends DataClass + implements Insertable { + final int deviceId; + final String name; + final Uint8List identityKey; + final DateTime createdAt; + const SignalIdentityKeyStore( + {required this.deviceId, + required this.name, + required this.identityKey, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['device_id'] = Variable(deviceId); + map['name'] = Variable(name); + map['identity_key'] = Variable(identityKey); + map['created_at'] = Variable(createdAt); + return map; + } + + SignalIdentityKeyStoresCompanion toCompanion(bool nullToAbsent) { + return SignalIdentityKeyStoresCompanion( + deviceId: Value(deviceId), + name: Value(name), + identityKey: Value(identityKey), + createdAt: Value(createdAt), + ); + } + + factory SignalIdentityKeyStore.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalIdentityKeyStore( + deviceId: serializer.fromJson(json['deviceId']), + name: serializer.fromJson(json['name']), + identityKey: serializer.fromJson(json['identityKey']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'deviceId': serializer.toJson(deviceId), + 'name': serializer.toJson(name), + 'identityKey': serializer.toJson(identityKey), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SignalIdentityKeyStore copyWith( + {int? deviceId, + String? name, + Uint8List? identityKey, + DateTime? createdAt}) => + SignalIdentityKeyStore( + deviceId: deviceId ?? this.deviceId, + name: name ?? this.name, + identityKey: identityKey ?? this.identityKey, + createdAt: createdAt ?? this.createdAt, + ); + SignalIdentityKeyStore copyWithCompanion( + SignalIdentityKeyStoresCompanion data) { + return SignalIdentityKeyStore( + deviceId: data.deviceId.present ? data.deviceId.value : this.deviceId, + name: data.name.present ? data.name.value : this.name, + identityKey: + data.identityKey.present ? data.identityKey.value : this.identityKey, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SignalIdentityKeyStore(') + ..write('deviceId: $deviceId, ') + ..write('name: $name, ') + ..write('identityKey: $identityKey, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + deviceId, name, $driftBlobEquality.hash(identityKey), createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalIdentityKeyStore && + other.deviceId == this.deviceId && + other.name == this.name && + $driftBlobEquality.equals(other.identityKey, this.identityKey) && + other.createdAt == this.createdAt); +} + +class SignalIdentityKeyStoresCompanion + extends UpdateCompanion { + final Value deviceId; + final Value name; + final Value identityKey; + final Value createdAt; + final Value rowid; + const SignalIdentityKeyStoresCompanion({ + this.deviceId = const Value.absent(), + this.name = const Value.absent(), + this.identityKey = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + SignalIdentityKeyStoresCompanion.insert({ + required int deviceId, + required String name, + required Uint8List identityKey, + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : deviceId = Value(deviceId), + name = Value(name), + identityKey = Value(identityKey); + static Insertable custom({ + Expression? deviceId, + Expression? name, + Expression? identityKey, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (deviceId != null) 'device_id': deviceId, + if (name != null) 'name': name, + if (identityKey != null) 'identity_key': identityKey, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + SignalIdentityKeyStoresCompanion copyWith( + {Value? deviceId, + Value? name, + Value? identityKey, + Value? createdAt, + Value? rowid}) { + return SignalIdentityKeyStoresCompanion( + deviceId: deviceId ?? this.deviceId, + name: name ?? this.name, + identityKey: identityKey ?? this.identityKey, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (deviceId.present) { + map['device_id'] = Variable(deviceId.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (identityKey.present) { + map['identity_key'] = Variable(identityKey.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalIdentityKeyStoresCompanion(') + ..write('deviceId: $deviceId, ') + ..write('name: $name, ') + ..write('identityKey: $identityKey, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SignalPreKeyStoresTable extends SignalPreKeyStores + with TableInfo<$SignalPreKeyStoresTable, SignalPreKeyStore> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalPreKeyStoresTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _preKeyIdMeta = + const VerificationMeta('preKeyId'); + @override + late final GeneratedColumn preKeyId = GeneratedColumn( + 'pre_key_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _preKeyMeta = const VerificationMeta('preKey'); + @override + late final GeneratedColumn preKey = GeneratedColumn( + 'pre_key', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [preKeyId, preKey, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_pre_key_stores'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('pre_key_id')) { + context.handle(_preKeyIdMeta, + preKeyId.isAcceptableOrUnknown(data['pre_key_id']!, _preKeyIdMeta)); + } + if (data.containsKey('pre_key')) { + context.handle(_preKeyMeta, + preKey.isAcceptableOrUnknown(data['pre_key']!, _preKeyMeta)); + } else if (isInserting) { + context.missing(_preKeyMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {preKeyId}; + @override + SignalPreKeyStore map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalPreKeyStore( + preKeyId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}pre_key_id'])!, + preKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}pre_key'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $SignalPreKeyStoresTable createAlias(String alias) { + return $SignalPreKeyStoresTable(attachedDatabase, alias); + } +} + +class SignalPreKeyStore extends DataClass + implements Insertable { + final int preKeyId; + final Uint8List preKey; + final DateTime createdAt; + const SignalPreKeyStore( + {required this.preKeyId, required this.preKey, required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['pre_key_id'] = Variable(preKeyId); + map['pre_key'] = Variable(preKey); + map['created_at'] = Variable(createdAt); + return map; + } + + SignalPreKeyStoresCompanion toCompanion(bool nullToAbsent) { + return SignalPreKeyStoresCompanion( + preKeyId: Value(preKeyId), + preKey: Value(preKey), + createdAt: Value(createdAt), + ); + } + + factory SignalPreKeyStore.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalPreKeyStore( + preKeyId: serializer.fromJson(json['preKeyId']), + preKey: serializer.fromJson(json['preKey']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'preKeyId': serializer.toJson(preKeyId), + 'preKey': serializer.toJson(preKey), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SignalPreKeyStore copyWith( + {int? preKeyId, Uint8List? preKey, DateTime? createdAt}) => + SignalPreKeyStore( + preKeyId: preKeyId ?? this.preKeyId, + preKey: preKey ?? this.preKey, + createdAt: createdAt ?? this.createdAt, + ); + SignalPreKeyStore copyWithCompanion(SignalPreKeyStoresCompanion data) { + return SignalPreKeyStore( + preKeyId: data.preKeyId.present ? data.preKeyId.value : this.preKeyId, + preKey: data.preKey.present ? data.preKey.value : this.preKey, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SignalPreKeyStore(') + ..write('preKeyId: $preKeyId, ') + ..write('preKey: $preKey, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(preKeyId, $driftBlobEquality.hash(preKey), createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalPreKeyStore && + other.preKeyId == this.preKeyId && + $driftBlobEquality.equals(other.preKey, this.preKey) && + other.createdAt == this.createdAt); +} + +class SignalPreKeyStoresCompanion extends UpdateCompanion { + final Value preKeyId; + final Value preKey; + final Value createdAt; + const SignalPreKeyStoresCompanion({ + this.preKeyId = const Value.absent(), + this.preKey = const Value.absent(), + this.createdAt = const Value.absent(), + }); + SignalPreKeyStoresCompanion.insert({ + this.preKeyId = const Value.absent(), + required Uint8List preKey, + this.createdAt = const Value.absent(), + }) : preKey = Value(preKey); + static Insertable custom({ + Expression? preKeyId, + Expression? preKey, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (preKeyId != null) 'pre_key_id': preKeyId, + if (preKey != null) 'pre_key': preKey, + if (createdAt != null) 'created_at': createdAt, + }); + } + + SignalPreKeyStoresCompanion copyWith( + {Value? preKeyId, + Value? preKey, + Value? createdAt}) { + return SignalPreKeyStoresCompanion( + preKeyId: preKeyId ?? this.preKeyId, + preKey: preKey ?? this.preKey, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (preKeyId.present) { + map['pre_key_id'] = Variable(preKeyId.value); + } + if (preKey.present) { + map['pre_key'] = Variable(preKey.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalPreKeyStoresCompanion(') + ..write('preKeyId: $preKeyId, ') + ..write('preKey: $preKey, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class $SignalSenderKeyStoresTable extends SignalSenderKeyStores + with TableInfo<$SignalSenderKeyStoresTable, SignalSenderKeyStore> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalSenderKeyStoresTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _senderKeyNameMeta = + const VerificationMeta('senderKeyName'); + @override + late final GeneratedColumn senderKeyName = GeneratedColumn( + 'sender_key_name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _senderKeyMeta = + const VerificationMeta('senderKey'); + @override + late final GeneratedColumn senderKey = GeneratedColumn( + 'sender_key', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + @override + List get $columns => [senderKeyName, senderKey]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_sender_key_stores'; + @override + VerificationContext validateIntegrity( + Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('sender_key_name')) { + context.handle( + _senderKeyNameMeta, + senderKeyName.isAcceptableOrUnknown( + data['sender_key_name']!, _senderKeyNameMeta)); + } else if (isInserting) { + context.missing(_senderKeyNameMeta); + } + if (data.containsKey('sender_key')) { + context.handle(_senderKeyMeta, + senderKey.isAcceptableOrUnknown(data['sender_key']!, _senderKeyMeta)); + } else if (isInserting) { + context.missing(_senderKeyMeta); + } + return context; + } + + @override + Set get $primaryKey => {senderKeyName}; + @override + SignalSenderKeyStore map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalSenderKeyStore( + senderKeyName: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}sender_key_name'])!, + senderKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}sender_key'])!, + ); + } + + @override + $SignalSenderKeyStoresTable createAlias(String alias) { + return $SignalSenderKeyStoresTable(attachedDatabase, alias); + } +} + +class SignalSenderKeyStore extends DataClass + implements Insertable { + final String senderKeyName; + final Uint8List senderKey; + const SignalSenderKeyStore( + {required this.senderKeyName, required this.senderKey}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['sender_key_name'] = Variable(senderKeyName); + map['sender_key'] = Variable(senderKey); + return map; + } + + SignalSenderKeyStoresCompanion toCompanion(bool nullToAbsent) { + return SignalSenderKeyStoresCompanion( + senderKeyName: Value(senderKeyName), + senderKey: Value(senderKey), + ); + } + + factory SignalSenderKeyStore.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalSenderKeyStore( + senderKeyName: serializer.fromJson(json['senderKeyName']), + senderKey: serializer.fromJson(json['senderKey']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'senderKeyName': serializer.toJson(senderKeyName), + 'senderKey': serializer.toJson(senderKey), + }; + } + + SignalSenderKeyStore copyWith( + {String? senderKeyName, Uint8List? senderKey}) => + SignalSenderKeyStore( + senderKeyName: senderKeyName ?? this.senderKeyName, + senderKey: senderKey ?? this.senderKey, + ); + SignalSenderKeyStore copyWithCompanion(SignalSenderKeyStoresCompanion data) { + return SignalSenderKeyStore( + senderKeyName: data.senderKeyName.present + ? data.senderKeyName.value + : this.senderKeyName, + senderKey: data.senderKey.present ? data.senderKey.value : this.senderKey, + ); + } + + @override + String toString() { + return (StringBuffer('SignalSenderKeyStore(') + ..write('senderKeyName: $senderKeyName, ') + ..write('senderKey: $senderKey') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(senderKeyName, $driftBlobEquality.hash(senderKey)); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalSenderKeyStore && + other.senderKeyName == this.senderKeyName && + $driftBlobEquality.equals(other.senderKey, this.senderKey)); +} + +class SignalSenderKeyStoresCompanion + extends UpdateCompanion { + final Value senderKeyName; + final Value senderKey; + final Value rowid; + const SignalSenderKeyStoresCompanion({ + this.senderKeyName = const Value.absent(), + this.senderKey = const Value.absent(), + this.rowid = const Value.absent(), + }); + SignalSenderKeyStoresCompanion.insert({ + required String senderKeyName, + required Uint8List senderKey, + this.rowid = const Value.absent(), + }) : senderKeyName = Value(senderKeyName), + senderKey = Value(senderKey); + static Insertable custom({ + Expression? senderKeyName, + Expression? senderKey, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (senderKeyName != null) 'sender_key_name': senderKeyName, + if (senderKey != null) 'sender_key': senderKey, + if (rowid != null) 'rowid': rowid, + }); + } + + SignalSenderKeyStoresCompanion copyWith( + {Value? senderKeyName, + Value? senderKey, + Value? rowid}) { + return SignalSenderKeyStoresCompanion( + senderKeyName: senderKeyName ?? this.senderKeyName, + senderKey: senderKey ?? this.senderKey, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (senderKeyName.present) { + map['sender_key_name'] = Variable(senderKeyName.value); + } + if (senderKey.present) { + map['sender_key'] = Variable(senderKey.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalSenderKeyStoresCompanion(') + ..write('senderKeyName: $senderKeyName, ') + ..write('senderKey: $senderKey, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SignalSessionStoresTable extends SignalSessionStores + with TableInfo<$SignalSessionStoresTable, SignalSessionStore> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalSessionStoresTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _deviceIdMeta = + const VerificationMeta('deviceId'); + @override + late final GeneratedColumn deviceId = GeneratedColumn( + 'device_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _sessionRecordMeta = + const VerificationMeta('sessionRecord'); + @override + late final GeneratedColumn sessionRecord = + GeneratedColumn('session_record', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => + [deviceId, name, sessionRecord, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_session_stores'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('device_id')) { + context.handle(_deviceIdMeta, + deviceId.isAcceptableOrUnknown(data['device_id']!, _deviceIdMeta)); + } else if (isInserting) { + context.missing(_deviceIdMeta); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta)); + } else if (isInserting) { + context.missing(_nameMeta); + } + if (data.containsKey('session_record')) { + context.handle( + _sessionRecordMeta, + sessionRecord.isAcceptableOrUnknown( + data['session_record']!, _sessionRecordMeta)); + } else if (isInserting) { + context.missing(_sessionRecordMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {deviceId, name}; + @override + SignalSessionStore map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalSessionStore( + deviceId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}device_id'])!, + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + sessionRecord: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}session_record'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $SignalSessionStoresTable createAlias(String alias) { + return $SignalSessionStoresTable(attachedDatabase, alias); + } +} + +class SignalSessionStore extends DataClass + implements Insertable { + final int deviceId; + final String name; + final Uint8List sessionRecord; + final DateTime createdAt; + const SignalSessionStore( + {required this.deviceId, + required this.name, + required this.sessionRecord, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['device_id'] = Variable(deviceId); + map['name'] = Variable(name); + map['session_record'] = Variable(sessionRecord); + map['created_at'] = Variable(createdAt); + return map; + } + + SignalSessionStoresCompanion toCompanion(bool nullToAbsent) { + return SignalSessionStoresCompanion( + deviceId: Value(deviceId), + name: Value(name), + sessionRecord: Value(sessionRecord), + createdAt: Value(createdAt), + ); + } + + factory SignalSessionStore.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalSessionStore( + deviceId: serializer.fromJson(json['deviceId']), + name: serializer.fromJson(json['name']), + sessionRecord: serializer.fromJson(json['sessionRecord']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'deviceId': serializer.toJson(deviceId), + 'name': serializer.toJson(name), + 'sessionRecord': serializer.toJson(sessionRecord), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SignalSessionStore copyWith( + {int? deviceId, + String? name, + Uint8List? sessionRecord, + DateTime? createdAt}) => + SignalSessionStore( + deviceId: deviceId ?? this.deviceId, + name: name ?? this.name, + sessionRecord: sessionRecord ?? this.sessionRecord, + createdAt: createdAt ?? this.createdAt, + ); + SignalSessionStore copyWithCompanion(SignalSessionStoresCompanion data) { + return SignalSessionStore( + deviceId: data.deviceId.present ? data.deviceId.value : this.deviceId, + name: data.name.present ? data.name.value : this.name, + sessionRecord: data.sessionRecord.present + ? data.sessionRecord.value + : this.sessionRecord, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SignalSessionStore(') + ..write('deviceId: $deviceId, ') + ..write('name: $name, ') + ..write('sessionRecord: $sessionRecord, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + deviceId, name, $driftBlobEquality.hash(sessionRecord), createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalSessionStore && + other.deviceId == this.deviceId && + other.name == this.name && + $driftBlobEquality.equals(other.sessionRecord, this.sessionRecord) && + other.createdAt == this.createdAt); +} + +class SignalSessionStoresCompanion extends UpdateCompanion { + final Value deviceId; + final Value name; + final Value sessionRecord; + final Value createdAt; + final Value rowid; + const SignalSessionStoresCompanion({ + this.deviceId = const Value.absent(), + this.name = const Value.absent(), + this.sessionRecord = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + SignalSessionStoresCompanion.insert({ + required int deviceId, + required String name, + required Uint8List sessionRecord, + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : deviceId = Value(deviceId), + name = Value(name), + sessionRecord = Value(sessionRecord); + static Insertable custom({ + Expression? deviceId, + Expression? name, + Expression? sessionRecord, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (deviceId != null) 'device_id': deviceId, + if (name != null) 'name': name, + if (sessionRecord != null) 'session_record': sessionRecord, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + SignalSessionStoresCompanion copyWith( + {Value? deviceId, + Value? name, + Value? sessionRecord, + Value? createdAt, + Value? rowid}) { + return SignalSessionStoresCompanion( + deviceId: deviceId ?? this.deviceId, + name: name ?? this.name, + sessionRecord: sessionRecord ?? this.sessionRecord, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (deviceId.present) { + map['device_id'] = Variable(deviceId.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (sessionRecord.present) { + map['session_record'] = Variable(sessionRecord.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalSessionStoresCompanion(') + ..write('deviceId: $deviceId, ') + ..write('name: $name, ') + ..write('sessionRecord: $sessionRecord, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SignalContactPreKeysTable extends SignalContactPreKeys + with TableInfo<$SignalContactPreKeysTable, SignalContactPreKey> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalContactPreKeysTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _contactIdMeta = + const VerificationMeta('contactId'); + @override + late final GeneratedColumn contactId = GeneratedColumn( + 'contact_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES contacts (user_id) ON DELETE CASCADE')); + static const VerificationMeta _preKeyIdMeta = + const VerificationMeta('preKeyId'); + @override + late final GeneratedColumn preKeyId = GeneratedColumn( + 'pre_key_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _preKeyMeta = const VerificationMeta('preKey'); + @override + late final GeneratedColumn preKey = GeneratedColumn( + 'pre_key', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => + [contactId, preKeyId, preKey, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_contact_pre_keys'; + @override + VerificationContext validateIntegrity( + Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('contact_id')) { + context.handle(_contactIdMeta, + contactId.isAcceptableOrUnknown(data['contact_id']!, _contactIdMeta)); + } else if (isInserting) { + context.missing(_contactIdMeta); + } + if (data.containsKey('pre_key_id')) { + context.handle(_preKeyIdMeta, + preKeyId.isAcceptableOrUnknown(data['pre_key_id']!, _preKeyIdMeta)); + } else if (isInserting) { + context.missing(_preKeyIdMeta); + } + if (data.containsKey('pre_key')) { + context.handle(_preKeyMeta, + preKey.isAcceptableOrUnknown(data['pre_key']!, _preKeyMeta)); + } else if (isInserting) { + context.missing(_preKeyMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {contactId, preKeyId}; + @override + SignalContactPreKey map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalContactPreKey( + contactId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}contact_id'])!, + preKeyId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}pre_key_id'])!, + preKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}pre_key'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $SignalContactPreKeysTable createAlias(String alias) { + return $SignalContactPreKeysTable(attachedDatabase, alias); + } +} + +class SignalContactPreKey extends DataClass + implements Insertable { + final int contactId; + final int preKeyId; + final Uint8List preKey; + final DateTime createdAt; + const SignalContactPreKey( + {required this.contactId, + required this.preKeyId, + required this.preKey, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['contact_id'] = Variable(contactId); + map['pre_key_id'] = Variable(preKeyId); + map['pre_key'] = Variable(preKey); + map['created_at'] = Variable(createdAt); + return map; + } + + SignalContactPreKeysCompanion toCompanion(bool nullToAbsent) { + return SignalContactPreKeysCompanion( + contactId: Value(contactId), + preKeyId: Value(preKeyId), + preKey: Value(preKey), + createdAt: Value(createdAt), + ); + } + + factory SignalContactPreKey.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalContactPreKey( + contactId: serializer.fromJson(json['contactId']), + preKeyId: serializer.fromJson(json['preKeyId']), + preKey: serializer.fromJson(json['preKey']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'contactId': serializer.toJson(contactId), + 'preKeyId': serializer.toJson(preKeyId), + 'preKey': serializer.toJson(preKey), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SignalContactPreKey copyWith( + {int? contactId, + int? preKeyId, + Uint8List? preKey, + DateTime? createdAt}) => + SignalContactPreKey( + contactId: contactId ?? this.contactId, + preKeyId: preKeyId ?? this.preKeyId, + preKey: preKey ?? this.preKey, + createdAt: createdAt ?? this.createdAt, + ); + SignalContactPreKey copyWithCompanion(SignalContactPreKeysCompanion data) { + return SignalContactPreKey( + contactId: data.contactId.present ? data.contactId.value : this.contactId, + preKeyId: data.preKeyId.present ? data.preKeyId.value : this.preKeyId, + preKey: data.preKey.present ? data.preKey.value : this.preKey, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SignalContactPreKey(') + ..write('contactId: $contactId, ') + ..write('preKeyId: $preKeyId, ') + ..write('preKey: $preKey, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + contactId, preKeyId, $driftBlobEquality.hash(preKey), createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalContactPreKey && + other.contactId == this.contactId && + other.preKeyId == this.preKeyId && + $driftBlobEquality.equals(other.preKey, this.preKey) && + other.createdAt == this.createdAt); +} + +class SignalContactPreKeysCompanion + extends UpdateCompanion { + final Value contactId; + final Value preKeyId; + final Value preKey; + final Value createdAt; + final Value rowid; + const SignalContactPreKeysCompanion({ + this.contactId = const Value.absent(), + this.preKeyId = const Value.absent(), + this.preKey = const Value.absent(), + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + SignalContactPreKeysCompanion.insert({ + required int contactId, + required int preKeyId, + required Uint8List preKey, + this.createdAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : contactId = Value(contactId), + preKeyId = Value(preKeyId), + preKey = Value(preKey); + static Insertable custom({ + Expression? contactId, + Expression? preKeyId, + Expression? preKey, + Expression? createdAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (contactId != null) 'contact_id': contactId, + if (preKeyId != null) 'pre_key_id': preKeyId, + if (preKey != null) 'pre_key': preKey, + if (createdAt != null) 'created_at': createdAt, + if (rowid != null) 'rowid': rowid, + }); + } + + SignalContactPreKeysCompanion copyWith( + {Value? contactId, + Value? preKeyId, + Value? preKey, + Value? createdAt, + Value? rowid}) { + return SignalContactPreKeysCompanion( + contactId: contactId ?? this.contactId, + preKeyId: preKeyId ?? this.preKeyId, + preKey: preKey ?? this.preKey, + createdAt: createdAt ?? this.createdAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (contactId.present) { + map['contact_id'] = Variable(contactId.value); + } + if (preKeyId.present) { + map['pre_key_id'] = Variable(preKeyId.value); + } + if (preKey.present) { + map['pre_key'] = Variable(preKey.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalContactPreKeysCompanion(') + ..write('contactId: $contactId, ') + ..write('preKeyId: $preKeyId, ') + ..write('preKey: $preKey, ') + ..write('createdAt: $createdAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $SignalContactSignedPreKeysTable extends SignalContactSignedPreKeys + with + TableInfo<$SignalContactSignedPreKeysTable, SignalContactSignedPreKey> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $SignalContactSignedPreKeysTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _contactIdMeta = + const VerificationMeta('contactId'); + @override + late final GeneratedColumn contactId = GeneratedColumn( + 'contact_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES contacts (user_id) ON DELETE CASCADE')); + static const VerificationMeta _signedPreKeyIdMeta = + const VerificationMeta('signedPreKeyId'); + @override + late final GeneratedColumn signedPreKeyId = GeneratedColumn( + 'signed_pre_key_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + static const VerificationMeta _signedPreKeyMeta = + const VerificationMeta('signedPreKey'); + @override + late final GeneratedColumn signedPreKey = + GeneratedColumn('signed_pre_key', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _signedPreKeySignatureMeta = + const VerificationMeta('signedPreKeySignature'); + @override + late final GeneratedColumn signedPreKeySignature = + GeneratedColumn('signed_pre_key_signature', aliasedName, false, + type: DriftSqlType.blob, requiredDuringInsert: true); + static const VerificationMeta _createdAtMeta = + const VerificationMeta('createdAt'); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: currentDateAndTime); + @override + List get $columns => [ + contactId, + signedPreKeyId, + signedPreKey, + signedPreKeySignature, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'signal_contact_signed_pre_keys'; + @override + VerificationContext validateIntegrity( + Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('contact_id')) { + context.handle(_contactIdMeta, + contactId.isAcceptableOrUnknown(data['contact_id']!, _contactIdMeta)); + } + if (data.containsKey('signed_pre_key_id')) { + context.handle( + _signedPreKeyIdMeta, + signedPreKeyId.isAcceptableOrUnknown( + data['signed_pre_key_id']!, _signedPreKeyIdMeta)); + } else if (isInserting) { + context.missing(_signedPreKeyIdMeta); + } + if (data.containsKey('signed_pre_key')) { + context.handle( + _signedPreKeyMeta, + signedPreKey.isAcceptableOrUnknown( + data['signed_pre_key']!, _signedPreKeyMeta)); + } else if (isInserting) { + context.missing(_signedPreKeyMeta); + } + if (data.containsKey('signed_pre_key_signature')) { + context.handle( + _signedPreKeySignatureMeta, + signedPreKeySignature.isAcceptableOrUnknown( + data['signed_pre_key_signature']!, _signedPreKeySignatureMeta)); + } else if (isInserting) { + context.missing(_signedPreKeySignatureMeta); + } + if (data.containsKey('created_at')) { + context.handle(_createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); + } + return context; + } + + @override + Set get $primaryKey => {contactId}; + @override + SignalContactSignedPreKey map(Map data, + {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SignalContactSignedPreKey( + contactId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}contact_id'])!, + signedPreKeyId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}signed_pre_key_id'])!, + signedPreKey: attachedDatabase.typeMapping + .read(DriftSqlType.blob, data['${effectivePrefix}signed_pre_key'])!, + signedPreKeySignature: attachedDatabase.typeMapping.read( + DriftSqlType.blob, + data['${effectivePrefix}signed_pre_key_signature'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + $SignalContactSignedPreKeysTable createAlias(String alias) { + return $SignalContactSignedPreKeysTable(attachedDatabase, alias); + } +} + +class SignalContactSignedPreKey extends DataClass + implements Insertable { + final int contactId; + final int signedPreKeyId; + final Uint8List signedPreKey; + final Uint8List signedPreKeySignature; + final DateTime createdAt; + const SignalContactSignedPreKey( + {required this.contactId, + required this.signedPreKeyId, + required this.signedPreKey, + required this.signedPreKeySignature, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['contact_id'] = Variable(contactId); + map['signed_pre_key_id'] = Variable(signedPreKeyId); + map['signed_pre_key'] = Variable(signedPreKey); + map['signed_pre_key_signature'] = + Variable(signedPreKeySignature); + map['created_at'] = Variable(createdAt); + return map; + } + + SignalContactSignedPreKeysCompanion toCompanion(bool nullToAbsent) { + return SignalContactSignedPreKeysCompanion( + contactId: Value(contactId), + signedPreKeyId: Value(signedPreKeyId), + signedPreKey: Value(signedPreKey), + signedPreKeySignature: Value(signedPreKeySignature), + createdAt: Value(createdAt), + ); + } + + factory SignalContactSignedPreKey.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SignalContactSignedPreKey( + contactId: serializer.fromJson(json['contactId']), + signedPreKeyId: serializer.fromJson(json['signedPreKeyId']), + signedPreKey: serializer.fromJson(json['signedPreKey']), + signedPreKeySignature: + serializer.fromJson(json['signedPreKeySignature']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'contactId': serializer.toJson(contactId), + 'signedPreKeyId': serializer.toJson(signedPreKeyId), + 'signedPreKey': serializer.toJson(signedPreKey), + 'signedPreKeySignature': + serializer.toJson(signedPreKeySignature), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SignalContactSignedPreKey copyWith( + {int? contactId, + int? signedPreKeyId, + Uint8List? signedPreKey, + Uint8List? signedPreKeySignature, + DateTime? createdAt}) => + SignalContactSignedPreKey( + contactId: contactId ?? this.contactId, + signedPreKeyId: signedPreKeyId ?? this.signedPreKeyId, + signedPreKey: signedPreKey ?? this.signedPreKey, + signedPreKeySignature: + signedPreKeySignature ?? this.signedPreKeySignature, + createdAt: createdAt ?? this.createdAt, + ); + SignalContactSignedPreKey copyWithCompanion( + SignalContactSignedPreKeysCompanion data) { + return SignalContactSignedPreKey( + contactId: data.contactId.present ? data.contactId.value : this.contactId, + signedPreKeyId: data.signedPreKeyId.present + ? data.signedPreKeyId.value + : this.signedPreKeyId, + signedPreKey: data.signedPreKey.present + ? data.signedPreKey.value + : this.signedPreKey, + signedPreKeySignature: data.signedPreKeySignature.present + ? data.signedPreKeySignature.value + : this.signedPreKeySignature, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SignalContactSignedPreKey(') + ..write('contactId: $contactId, ') + ..write('signedPreKeyId: $signedPreKeyId, ') + ..write('signedPreKey: $signedPreKey, ') + ..write('signedPreKeySignature: $signedPreKeySignature, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + contactId, + signedPreKeyId, + $driftBlobEquality.hash(signedPreKey), + $driftBlobEquality.hash(signedPreKeySignature), + createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SignalContactSignedPreKey && + other.contactId == this.contactId && + other.signedPreKeyId == this.signedPreKeyId && + $driftBlobEquality.equals(other.signedPreKey, this.signedPreKey) && + $driftBlobEquality.equals( + other.signedPreKeySignature, this.signedPreKeySignature) && + other.createdAt == this.createdAt); +} + +class SignalContactSignedPreKeysCompanion + extends UpdateCompanion { + final Value contactId; + final Value signedPreKeyId; + final Value signedPreKey; + final Value signedPreKeySignature; + final Value createdAt; + const SignalContactSignedPreKeysCompanion({ + this.contactId = const Value.absent(), + this.signedPreKeyId = const Value.absent(), + this.signedPreKey = const Value.absent(), + this.signedPreKeySignature = const Value.absent(), + this.createdAt = const Value.absent(), + }); + SignalContactSignedPreKeysCompanion.insert({ + this.contactId = const Value.absent(), + required int signedPreKeyId, + required Uint8List signedPreKey, + required Uint8List signedPreKeySignature, + this.createdAt = const Value.absent(), + }) : signedPreKeyId = Value(signedPreKeyId), + signedPreKey = Value(signedPreKey), + signedPreKeySignature = Value(signedPreKeySignature); + static Insertable custom({ + Expression? contactId, + Expression? signedPreKeyId, + Expression? signedPreKey, + Expression? signedPreKeySignature, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (contactId != null) 'contact_id': contactId, + if (signedPreKeyId != null) 'signed_pre_key_id': signedPreKeyId, + if (signedPreKey != null) 'signed_pre_key': signedPreKey, + if (signedPreKeySignature != null) + 'signed_pre_key_signature': signedPreKeySignature, + if (createdAt != null) 'created_at': createdAt, + }); + } + + SignalContactSignedPreKeysCompanion copyWith( + {Value? contactId, + Value? signedPreKeyId, + Value? signedPreKey, + Value? signedPreKeySignature, + Value? createdAt}) { + return SignalContactSignedPreKeysCompanion( + contactId: contactId ?? this.contactId, + signedPreKeyId: signedPreKeyId ?? this.signedPreKeyId, + signedPreKey: signedPreKey ?? this.signedPreKey, + signedPreKeySignature: + signedPreKeySignature ?? this.signedPreKeySignature, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (contactId.present) { + map['contact_id'] = Variable(contactId.value); + } + if (signedPreKeyId.present) { + map['signed_pre_key_id'] = Variable(signedPreKeyId.value); + } + if (signedPreKey.present) { + map['signed_pre_key'] = Variable(signedPreKey.value); + } + if (signedPreKeySignature.present) { + map['signed_pre_key_signature'] = + Variable(signedPreKeySignature.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SignalContactSignedPreKeysCompanion(') + ..write('contactId: $contactId, ') + ..write('signedPreKeyId: $signedPreKeyId, ') + ..write('signedPreKey: $signedPreKey, ') + ..write('signedPreKeySignature: $signedPreKeySignature, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +abstract class _$TwonlyDB extends GeneratedDatabase { + _$TwonlyDB(QueryExecutor e) : super(e); + $TwonlyDBManager get managers => $TwonlyDBManager(this); + late final $ContactsTable contacts = $ContactsTable(this); + late final $MediaFilesTable mediaFiles = $MediaFilesTable(this); + late final $MessagesTable messages = $MessagesTable(this); + late final $MessageHistoriesTable messageHistories = + $MessageHistoriesTable(this); + late final $ReactionsTable reactions = $ReactionsTable(this); + late final $GroupsTable groups = $GroupsTable(this); + late final $GroupMembersTable groupMembers = $GroupMembersTable(this); + late final $ReceiptsTable receipts = $ReceiptsTable(this); + late final $SignalIdentityKeyStoresTable signalIdentityKeyStores = + $SignalIdentityKeyStoresTable(this); + late final $SignalPreKeyStoresTable signalPreKeyStores = + $SignalPreKeyStoresTable(this); + late final $SignalSenderKeyStoresTable signalSenderKeyStores = + $SignalSenderKeyStoresTable(this); + late final $SignalSessionStoresTable signalSessionStores = + $SignalSessionStoresTable(this); + late final $SignalContactPreKeysTable signalContactPreKeys = + $SignalContactPreKeysTable(this); + late final $SignalContactSignedPreKeysTable signalContactSignedPreKeys = + $SignalContactSignedPreKeysTable(this); + late final MessagesDao messagesDao = MessagesDao(this as TwonlyDB); + late final ContactsDao contactsDao = ContactsDao(this as TwonlyDB); + late final SignalDao signalDao = SignalDao(this as TwonlyDB); + late final ReceiptsDao receiptsDao = ReceiptsDao(this as TwonlyDB); + late final GroupsDao groupsDao = GroupsDao(this as TwonlyDB); + late final ReactionsDao reactionsDao = ReactionsDao(this as TwonlyDB); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + contacts, + mediaFiles, + messages, + messageHistories, + reactions, + groups, + groupMembers, + receipts, + signalIdentityKeyStores, + signalPreKeyStores, + signalSenderKeyStores, + signalSessionStores, + signalContactPreKeys, + signalContactSignedPreKeys + ]; + @override + StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( + [ + WritePropagation( + on: TableUpdateQuery.onTableName('messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('message_histories', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('reactions', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('contacts', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('reactions', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('contacts', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('receipts', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('messages', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('receipts', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('contacts', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('signal_contact_pre_keys', kind: UpdateKind.delete), + ], + ), + WritePropagation( + on: TableUpdateQuery.onTableName('contacts', + limitUpdateKind: UpdateKind.delete), + result: [ + TableUpdate('signal_contact_signed_pre_keys', + kind: UpdateKind.delete), + ], + ), + ], + ); +} + +typedef $$ContactsTableCreateCompanionBuilder = ContactsCompanion Function({ + Value userId, + required String username, + Value displayName, + Value nickName, + Value avatarSvg, + Value senderProfileCounter, + Value accepted, + Value requested, + Value hidden, + Value blocked, + Value verified, + Value archived, + Value deleted, + Value alsoBestFriend, + Value deleteMessagesAfterXMinutes, + Value createdAt, + Value totalMediaCounter, + Value lastMessageSend, + Value lastMessageReceived, + Value lastFlameCounterChange, + Value lastFlameSync, + Value flameCounter, +}); +typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({ + Value userId, + Value username, + Value displayName, + Value nickName, + Value avatarSvg, + Value senderProfileCounter, + Value accepted, + Value requested, + Value hidden, + Value blocked, + Value verified, + Value archived, + Value deleted, + Value alsoBestFriend, + Value deleteMessagesAfterXMinutes, + Value createdAt, + Value totalMediaCounter, + Value lastMessageSend, + Value lastMessageReceived, + Value lastFlameCounterChange, + Value lastFlameSync, + Value flameCounter, +}); + +final class $$ContactsTableReferences + extends BaseReferences<_$TwonlyDB, $ContactsTable, Contact> { + $$ContactsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static MultiTypedResultKey<$MessagesTable, List> _messagesRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.messages, + aliasName: + $_aliasNameGenerator(db.contacts.userId, db.messages.senderId)); + + $$MessagesTableProcessedTableManager get messagesRefs { + final manager = $$MessagesTableTableManager($_db, $_db.messages).filter( + (f) => f.senderId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = $_typedResult.readTableOrNull(_messagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReactionsTable, List> + _reactionsRefsTable(_$TwonlyDB db) => MultiTypedResultKey.fromTable( + db.reactions, + aliasName: + $_aliasNameGenerator(db.contacts.userId, db.reactions.senderId)); + + $$ReactionsTableProcessedTableManager get reactionsRefs { + final manager = $$ReactionsTableTableManager($_db, $_db.reactions).filter( + (f) => f.senderId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = $_typedResult.readTableOrNull(_reactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$GroupMembersTable, List> + _groupMembersRefsTable(_$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.groupMembers, + aliasName: $_aliasNameGenerator( + db.contacts.userId, db.groupMembers.contactId)); + + $$GroupMembersTableProcessedTableManager get groupMembersRefs { + final manager = $$GroupMembersTableTableManager($_db, $_db.groupMembers) + .filter( + (f) => f.contactId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = $_typedResult.readTableOrNull(_groupMembersRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReceiptsTable, List> _receiptsRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.receipts, + aliasName: + $_aliasNameGenerator(db.contacts.userId, db.receipts.contactId)); + + $$ReceiptsTableProcessedTableManager get receiptsRefs { + final manager = $$ReceiptsTableTableManager($_db, $_db.receipts).filter( + (f) => f.contactId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = $_typedResult.readTableOrNull(_receiptsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$SignalContactPreKeysTable, + List> _signalContactPreKeysRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.signalContactPreKeys, + aliasName: $_aliasNameGenerator( + db.contacts.userId, db.signalContactPreKeys.contactId)); + + $$SignalContactPreKeysTableProcessedTableManager + get signalContactPreKeysRefs { + final manager = $$SignalContactPreKeysTableTableManager( + $_db, $_db.signalContactPreKeys) + .filter( + (f) => f.contactId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = + $_typedResult.readTableOrNull(_signalContactPreKeysRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$SignalContactSignedPreKeysTable, + List> _signalContactSignedPreKeysRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.signalContactSignedPreKeys, + aliasName: $_aliasNameGenerator( + db.contacts.userId, db.signalContactSignedPreKeys.contactId)); + + $$SignalContactSignedPreKeysTableProcessedTableManager + get signalContactSignedPreKeysRefs { + final manager = $$SignalContactSignedPreKeysTableTableManager( + $_db, $_db.signalContactSignedPreKeys) + .filter( + (f) => f.contactId.userId.sqlEquals($_itemColumn('user_id')!)); + + final cache = $_typedResult + .readTableOrNull(_signalContactSignedPreKeysRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } +} + +class $$ContactsTableFilterComposer + extends Composer<_$TwonlyDB, $ContactsTable> { + $$ContactsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get userId => $composableBuilder( + column: $table.userId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get username => $composableBuilder( + column: $table.username, builder: (column) => ColumnFilters(column)); + + ColumnFilters get displayName => $composableBuilder( + column: $table.displayName, builder: (column) => ColumnFilters(column)); + + ColumnFilters get nickName => $composableBuilder( + column: $table.nickName, builder: (column) => ColumnFilters(column)); + + ColumnFilters get avatarSvg => $composableBuilder( + column: $table.avatarSvg, builder: (column) => ColumnFilters(column)); + + ColumnFilters get senderProfileCounter => $composableBuilder( + column: $table.senderProfileCounter, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get accepted => $composableBuilder( + column: $table.accepted, builder: (column) => ColumnFilters(column)); + + ColumnFilters get requested => $composableBuilder( + column: $table.requested, builder: (column) => ColumnFilters(column)); + + ColumnFilters get hidden => $composableBuilder( + column: $table.hidden, builder: (column) => ColumnFilters(column)); + + ColumnFilters get blocked => $composableBuilder( + column: $table.blocked, builder: (column) => ColumnFilters(column)); + + ColumnFilters get verified => $composableBuilder( + column: $table.verified, builder: (column) => ColumnFilters(column)); + + ColumnFilters get archived => $composableBuilder( + column: $table.archived, builder: (column) => ColumnFilters(column)); + + ColumnFilters get deleted => $composableBuilder( + column: $table.deleted, builder: (column) => ColumnFilters(column)); + + ColumnFilters get alsoBestFriend => $composableBuilder( + column: $table.alsoBestFriend, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get deleteMessagesAfterXMinutes => $composableBuilder( + column: $table.deleteMessagesAfterXMinutes, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get totalMediaCounter => $composableBuilder( + column: $table.totalMediaCounter, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastMessageSend => $composableBuilder( + column: $table.lastMessageSend, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastMessageReceived => $composableBuilder( + column: $table.lastMessageReceived, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastFlameCounterChange => $composableBuilder( + column: $table.lastFlameCounterChange, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastFlameSync => $composableBuilder( + column: $table.lastFlameSync, builder: (column) => ColumnFilters(column)); + + ColumnFilters get flameCounter => $composableBuilder( + column: $table.flameCounter, builder: (column) => ColumnFilters(column)); + + Expression messagesRefs( + Expression Function($$MessagesTableFilterComposer f) f) { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.senderId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression reactionsRefs( + Expression Function($$ReactionsTableFilterComposer f) f) { + final $$ReactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.senderId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReactionsTableFilterComposer( + $db: $db, + $table: $db.reactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression groupMembersRefs( + Expression Function($$GroupMembersTableFilterComposer f) f) { + final $$GroupMembersTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.groupMembers, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$GroupMembersTableFilterComposer( + $db: $db, + $table: $db.groupMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression receiptsRefs( + Expression Function($$ReceiptsTableFilterComposer f) f) { + final $$ReceiptsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.receipts, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReceiptsTableFilterComposer( + $db: $db, + $table: $db.receipts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression signalContactPreKeysRefs( + Expression Function($$SignalContactPreKeysTableFilterComposer f) + f) { + final $$SignalContactPreKeysTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.signalContactPreKeys, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$SignalContactPreKeysTableFilterComposer( + $db: $db, + $table: $db.signalContactPreKeys, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression signalContactSignedPreKeysRefs( + Expression Function( + $$SignalContactSignedPreKeysTableFilterComposer f) + f) { + final $$SignalContactSignedPreKeysTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.signalContactSignedPreKeys, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$SignalContactSignedPreKeysTableFilterComposer( + $db: $db, + $table: $db.signalContactSignedPreKeys, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$ContactsTableOrderingComposer + extends Composer<_$TwonlyDB, $ContactsTable> { + $$ContactsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get userId => $composableBuilder( + column: $table.userId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get username => $composableBuilder( + column: $table.username, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get displayName => $composableBuilder( + column: $table.displayName, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get nickName => $composableBuilder( + column: $table.nickName, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get avatarSvg => $composableBuilder( + column: $table.avatarSvg, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get senderProfileCounter => $composableBuilder( + column: $table.senderProfileCounter, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get accepted => $composableBuilder( + column: $table.accepted, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get requested => $composableBuilder( + column: $table.requested, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get hidden => $composableBuilder( + column: $table.hidden, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get blocked => $composableBuilder( + column: $table.blocked, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get verified => $composableBuilder( + column: $table.verified, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get archived => $composableBuilder( + column: $table.archived, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get deleted => $composableBuilder( + column: $table.deleted, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get alsoBestFriend => $composableBuilder( + column: $table.alsoBestFriend, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get deleteMessagesAfterXMinutes => $composableBuilder( + column: $table.deleteMessagesAfterXMinutes, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get totalMediaCounter => $composableBuilder( + column: $table.totalMediaCounter, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastMessageSend => $composableBuilder( + column: $table.lastMessageSend, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastMessageReceived => $composableBuilder( + column: $table.lastMessageReceived, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastFlameCounterChange => $composableBuilder( + column: $table.lastFlameCounterChange, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastFlameSync => $composableBuilder( + column: $table.lastFlameSync, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get flameCounter => $composableBuilder( + column: $table.flameCounter, + builder: (column) => ColumnOrderings(column)); +} + +class $$ContactsTableAnnotationComposer + extends Composer<_$TwonlyDB, $ContactsTable> { + $$ContactsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get userId => + $composableBuilder(column: $table.userId, builder: (column) => column); + + GeneratedColumn get username => + $composableBuilder(column: $table.username, builder: (column) => column); + + GeneratedColumn get displayName => $composableBuilder( + column: $table.displayName, builder: (column) => column); + + GeneratedColumn get nickName => + $composableBuilder(column: $table.nickName, builder: (column) => column); + + GeneratedColumn get avatarSvg => + $composableBuilder(column: $table.avatarSvg, builder: (column) => column); + + GeneratedColumn get senderProfileCounter => $composableBuilder( + column: $table.senderProfileCounter, builder: (column) => column); + + GeneratedColumn get accepted => + $composableBuilder(column: $table.accepted, builder: (column) => column); + + GeneratedColumn get requested => + $composableBuilder(column: $table.requested, builder: (column) => column); + + GeneratedColumn get hidden => + $composableBuilder(column: $table.hidden, builder: (column) => column); + + GeneratedColumn get blocked => + $composableBuilder(column: $table.blocked, builder: (column) => column); + + GeneratedColumn get verified => + $composableBuilder(column: $table.verified, builder: (column) => column); + + GeneratedColumn get archived => + $composableBuilder(column: $table.archived, builder: (column) => column); + + GeneratedColumn get deleted => + $composableBuilder(column: $table.deleted, builder: (column) => column); + + GeneratedColumn get alsoBestFriend => $composableBuilder( + column: $table.alsoBestFriend, builder: (column) => column); + + GeneratedColumn get deleteMessagesAfterXMinutes => $composableBuilder( + column: $table.deleteMessagesAfterXMinutes, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get totalMediaCounter => $composableBuilder( + column: $table.totalMediaCounter, builder: (column) => column); + + GeneratedColumn get lastMessageSend => $composableBuilder( + column: $table.lastMessageSend, builder: (column) => column); + + GeneratedColumn get lastMessageReceived => $composableBuilder( + column: $table.lastMessageReceived, builder: (column) => column); + + GeneratedColumn get lastFlameCounterChange => $composableBuilder( + column: $table.lastFlameCounterChange, builder: (column) => column); + + GeneratedColumn get lastFlameSync => $composableBuilder( + column: $table.lastFlameSync, builder: (column) => column); + + GeneratedColumn get flameCounter => $composableBuilder( + column: $table.flameCounter, builder: (column) => column); + + Expression messagesRefs( + Expression Function($$MessagesTableAnnotationComposer a) f) { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.senderId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression reactionsRefs( + Expression Function($$ReactionsTableAnnotationComposer a) f) { + final $$ReactionsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.senderId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReactionsTableAnnotationComposer( + $db: $db, + $table: $db.reactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression groupMembersRefs( + Expression Function($$GroupMembersTableAnnotationComposer a) f) { + final $$GroupMembersTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.groupMembers, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$GroupMembersTableAnnotationComposer( + $db: $db, + $table: $db.groupMembers, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression receiptsRefs( + Expression Function($$ReceiptsTableAnnotationComposer a) f) { + final $$ReceiptsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.receipts, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReceiptsTableAnnotationComposer( + $db: $db, + $table: $db.receipts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression signalContactPreKeysRefs( + Expression Function($$SignalContactPreKeysTableAnnotationComposer a) + f) { + final $$SignalContactPreKeysTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.signalContactPreKeys, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$SignalContactPreKeysTableAnnotationComposer( + $db: $db, + $table: $db.signalContactPreKeys, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression signalContactSignedPreKeysRefs( + Expression Function( + $$SignalContactSignedPreKeysTableAnnotationComposer a) + f) { + final $$SignalContactSignedPreKeysTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.userId, + referencedTable: $db.signalContactSignedPreKeys, + getReferencedColumn: (t) => t.contactId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$SignalContactSignedPreKeysTableAnnotationComposer( + $db: $db, + $table: $db.signalContactSignedPreKeys, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$ContactsTableTableManager extends RootTableManager< + _$TwonlyDB, + $ContactsTable, + Contact, + $$ContactsTableFilterComposer, + $$ContactsTableOrderingComposer, + $$ContactsTableAnnotationComposer, + $$ContactsTableCreateCompanionBuilder, + $$ContactsTableUpdateCompanionBuilder, + (Contact, $$ContactsTableReferences), + Contact, + PrefetchHooks Function( + {bool messagesRefs, + bool reactionsRefs, + bool groupMembersRefs, + bool receiptsRefs, + bool signalContactPreKeysRefs, + bool signalContactSignedPreKeysRefs})> { + $$ContactsTableTableManager(_$TwonlyDB db, $ContactsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ContactsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$ContactsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$ContactsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value userId = const Value.absent(), + Value username = const Value.absent(), + Value displayName = const Value.absent(), + Value nickName = const Value.absent(), + Value avatarSvg = const Value.absent(), + Value senderProfileCounter = const Value.absent(), + Value accepted = const Value.absent(), + Value requested = const Value.absent(), + Value hidden = const Value.absent(), + Value blocked = const Value.absent(), + Value verified = const Value.absent(), + Value archived = const Value.absent(), + Value deleted = const Value.absent(), + Value alsoBestFriend = const Value.absent(), + Value deleteMessagesAfterXMinutes = const Value.absent(), + Value createdAt = const Value.absent(), + Value totalMediaCounter = const Value.absent(), + Value lastMessageSend = const Value.absent(), + Value lastMessageReceived = const Value.absent(), + Value lastFlameCounterChange = const Value.absent(), + Value lastFlameSync = const Value.absent(), + Value flameCounter = const Value.absent(), + }) => + ContactsCompanion( + userId: userId, + username: username, + displayName: displayName, + nickName: nickName, + avatarSvg: avatarSvg, + senderProfileCounter: senderProfileCounter, + accepted: accepted, + requested: requested, + hidden: hidden, + blocked: blocked, + verified: verified, + archived: archived, + deleted: deleted, + alsoBestFriend: alsoBestFriend, + deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes, + createdAt: createdAt, + totalMediaCounter: totalMediaCounter, + lastMessageSend: lastMessageSend, + lastMessageReceived: lastMessageReceived, + lastFlameCounterChange: lastFlameCounterChange, + lastFlameSync: lastFlameSync, + flameCounter: flameCounter, + ), + createCompanionCallback: ({ + Value userId = const Value.absent(), + required String username, + Value displayName = const Value.absent(), + Value nickName = const Value.absent(), + Value avatarSvg = const Value.absent(), + Value senderProfileCounter = const Value.absent(), + Value accepted = const Value.absent(), + Value requested = const Value.absent(), + Value hidden = const Value.absent(), + Value blocked = const Value.absent(), + Value verified = const Value.absent(), + Value archived = const Value.absent(), + Value deleted = const Value.absent(), + Value alsoBestFriend = const Value.absent(), + Value deleteMessagesAfterXMinutes = const Value.absent(), + Value createdAt = const Value.absent(), + Value totalMediaCounter = const Value.absent(), + Value lastMessageSend = const Value.absent(), + Value lastMessageReceived = const Value.absent(), + Value lastFlameCounterChange = const Value.absent(), + Value lastFlameSync = const Value.absent(), + Value flameCounter = const Value.absent(), + }) => + ContactsCompanion.insert( + userId: userId, + username: username, + displayName: displayName, + nickName: nickName, + avatarSvg: avatarSvg, + senderProfileCounter: senderProfileCounter, + accepted: accepted, + requested: requested, + hidden: hidden, + blocked: blocked, + verified: verified, + archived: archived, + deleted: deleted, + alsoBestFriend: alsoBestFriend, + deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes, + createdAt: createdAt, + totalMediaCounter: totalMediaCounter, + lastMessageSend: lastMessageSend, + lastMessageReceived: lastMessageReceived, + lastFlameCounterChange: lastFlameCounterChange, + lastFlameSync: lastFlameSync, + flameCounter: flameCounter, + ), + withReferenceMapper: (p0) => p0 + .map((e) => + (e.readTable(table), $$ContactsTableReferences(db, table, e))) + .toList(), + prefetchHooksCallback: ( + {messagesRefs = false, + reactionsRefs = false, + groupMembersRefs = false, + receiptsRefs = false, + signalContactPreKeysRefs = false, + signalContactSignedPreKeysRefs = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (messagesRefs) db.messages, + if (reactionsRefs) db.reactions, + if (groupMembersRefs) db.groupMembers, + if (receiptsRefs) db.receipts, + if (signalContactPreKeysRefs) db.signalContactPreKeys, + if (signalContactSignedPreKeysRefs) + db.signalContactSignedPreKeys + ], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (messagesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ContactsTableReferences._messagesRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .messagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.senderId == item.userId), + typedResults: items), + if (reactionsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ContactsTableReferences._reactionsRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .reactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.senderId == item.userId), + typedResults: items), + if (groupMembersRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$ContactsTableReferences + ._groupMembersRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .groupMembersRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.contactId == item.userId), + typedResults: items), + if (receiptsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$ContactsTableReferences._receiptsRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .receiptsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.contactId == item.userId), + typedResults: items), + if (signalContactPreKeysRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$ContactsTableReferences + ._signalContactPreKeysRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .signalContactPreKeysRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.contactId == item.userId), + typedResults: items), + if (signalContactSignedPreKeysRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$ContactsTableReferences + ._signalContactSignedPreKeysRefsTable(db), + managerFromTypedResult: (p0) => + $$ContactsTableReferences(db, table, p0) + .signalContactSignedPreKeysRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.contactId == item.userId), + typedResults: items) + ]; + }, + ); + }, + )); +} + +typedef $$ContactsTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $ContactsTable, + Contact, + $$ContactsTableFilterComposer, + $$ContactsTableOrderingComposer, + $$ContactsTableAnnotationComposer, + $$ContactsTableCreateCompanionBuilder, + $$ContactsTableUpdateCompanionBuilder, + (Contact, $$ContactsTableReferences), + Contact, + PrefetchHooks Function( + {bool messagesRefs, + bool reactionsRefs, + bool groupMembersRefs, + bool receiptsRefs, + bool signalContactPreKeysRefs, + bool signalContactSignedPreKeysRefs})>; +typedef $$MediaFilesTableCreateCompanionBuilder = MediaFilesCompanion Function({ + Value mediaId, + required MediaType type, + Value uploadState, + Value downloadState, + required bool requiresAuthentication, + Value reopenByContact, + Value storedByContact, + Value displayLimitInMilliseconds, + Value downloadToken, + Value encryptionKey, + Value encryptionMac, + Value encryptionNonce, + Value createdAt, + Value rowid, +}); +typedef $$MediaFilesTableUpdateCompanionBuilder = MediaFilesCompanion Function({ + Value mediaId, + Value type, + Value uploadState, + Value downloadState, + Value requiresAuthentication, + Value reopenByContact, + Value storedByContact, + Value displayLimitInMilliseconds, + Value downloadToken, + Value encryptionKey, + Value encryptionMac, + Value encryptionNonce, + Value createdAt, + Value rowid, +}); + +final class $$MediaFilesTableReferences + extends BaseReferences<_$TwonlyDB, $MediaFilesTable, MediaFile> { + $$MediaFilesTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static MultiTypedResultKey<$MessagesTable, List> _messagesRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.messages, + aliasName: + $_aliasNameGenerator(db.mediaFiles.mediaId, db.messages.mediaId)); + + $$MessagesTableProcessedTableManager get messagesRefs { + final manager = $$MessagesTableTableManager($_db, $_db.messages).filter( + (f) => f.mediaId.mediaId.sqlEquals($_itemColumn('media_id')!)); + + final cache = $_typedResult.readTableOrNull(_messagesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } +} + +class $$MediaFilesTableFilterComposer + extends Composer<_$TwonlyDB, $MediaFilesTable> { + $$MediaFilesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get mediaId => $composableBuilder( + column: $table.mediaId, builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters get type => + $composableBuilder( + column: $table.type, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnWithTypeConverterFilters + get uploadState => $composableBuilder( + column: $table.uploadState, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnWithTypeConverterFilters + get downloadState => $composableBuilder( + column: $table.downloadState, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnFilters get requiresAuthentication => $composableBuilder( + column: $table.requiresAuthentication, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get reopenByContact => $composableBuilder( + column: $table.reopenByContact, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get storedByContact => $composableBuilder( + column: $table.storedByContact, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get displayLimitInMilliseconds => $composableBuilder( + column: $table.displayLimitInMilliseconds, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get downloadToken => $composableBuilder( + column: $table.downloadToken, builder: (column) => ColumnFilters(column)); + + ColumnFilters get encryptionKey => $composableBuilder( + column: $table.encryptionKey, builder: (column) => ColumnFilters(column)); + + ColumnFilters get encryptionMac => $composableBuilder( + column: $table.encryptionMac, builder: (column) => ColumnFilters(column)); + + ColumnFilters get encryptionNonce => $composableBuilder( + column: $table.encryptionNonce, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + Expression messagesRefs( + Expression Function($$MessagesTableFilterComposer f) f) { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.mediaId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.mediaId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$MediaFilesTableOrderingComposer + extends Composer<_$TwonlyDB, $MediaFilesTable> { + $$MediaFilesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get mediaId => $composableBuilder( + column: $table.mediaId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get type => $composableBuilder( + column: $table.type, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get uploadState => $composableBuilder( + column: $table.uploadState, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get downloadState => $composableBuilder( + column: $table.downloadState, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get requiresAuthentication => $composableBuilder( + column: $table.requiresAuthentication, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get reopenByContact => $composableBuilder( + column: $table.reopenByContact, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get storedByContact => $composableBuilder( + column: $table.storedByContact, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get displayLimitInMilliseconds => $composableBuilder( + column: $table.displayLimitInMilliseconds, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get downloadToken => $composableBuilder( + column: $table.downloadToken, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get encryptionKey => $composableBuilder( + column: $table.encryptionKey, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get encryptionMac => $composableBuilder( + column: $table.encryptionMac, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get encryptionNonce => $composableBuilder( + column: $table.encryptionNonce, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$MediaFilesTableAnnotationComposer + extends Composer<_$TwonlyDB, $MediaFilesTable> { + $$MediaFilesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get mediaId => + $composableBuilder(column: $table.mediaId, builder: (column) => column); + + GeneratedColumnWithTypeConverter get type => + $composableBuilder(column: $table.type, builder: (column) => column); + + GeneratedColumnWithTypeConverter get uploadState => + $composableBuilder( + column: $table.uploadState, builder: (column) => column); + + GeneratedColumnWithTypeConverter get downloadState => + $composableBuilder( + column: $table.downloadState, builder: (column) => column); + + GeneratedColumn get requiresAuthentication => $composableBuilder( + column: $table.requiresAuthentication, builder: (column) => column); + + GeneratedColumn get reopenByContact => $composableBuilder( + column: $table.reopenByContact, builder: (column) => column); + + GeneratedColumn get storedByContact => $composableBuilder( + column: $table.storedByContact, builder: (column) => column); + + GeneratedColumn get displayLimitInMilliseconds => $composableBuilder( + column: $table.displayLimitInMilliseconds, builder: (column) => column); + + GeneratedColumn get downloadToken => $composableBuilder( + column: $table.downloadToken, builder: (column) => column); + + GeneratedColumn get encryptionKey => $composableBuilder( + column: $table.encryptionKey, builder: (column) => column); + + GeneratedColumn get encryptionMac => $composableBuilder( + column: $table.encryptionMac, builder: (column) => column); + + GeneratedColumn get encryptionNonce => $composableBuilder( + column: $table.encryptionNonce, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + Expression messagesRefs( + Expression Function($$MessagesTableAnnotationComposer a) f) { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.mediaId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.mediaId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$MediaFilesTableTableManager extends RootTableManager< + _$TwonlyDB, + $MediaFilesTable, + MediaFile, + $$MediaFilesTableFilterComposer, + $$MediaFilesTableOrderingComposer, + $$MediaFilesTableAnnotationComposer, + $$MediaFilesTableCreateCompanionBuilder, + $$MediaFilesTableUpdateCompanionBuilder, + (MediaFile, $$MediaFilesTableReferences), + MediaFile, + PrefetchHooks Function({bool messagesRefs})> { + $$MediaFilesTableTableManager(_$TwonlyDB db, $MediaFilesTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$MediaFilesTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$MediaFilesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$MediaFilesTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value mediaId = const Value.absent(), + Value type = const Value.absent(), + Value uploadState = const Value.absent(), + Value downloadState = const Value.absent(), + Value requiresAuthentication = const Value.absent(), + Value reopenByContact = const Value.absent(), + Value storedByContact = const Value.absent(), + Value displayLimitInMilliseconds = const Value.absent(), + Value downloadToken = const Value.absent(), + Value encryptionKey = const Value.absent(), + Value encryptionMac = const Value.absent(), + Value encryptionNonce = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MediaFilesCompanion( + mediaId: mediaId, + type: type, + uploadState: uploadState, + downloadState: downloadState, + requiresAuthentication: requiresAuthentication, + reopenByContact: reopenByContact, + storedByContact: storedByContact, + displayLimitInMilliseconds: displayLimitInMilliseconds, + downloadToken: downloadToken, + encryptionKey: encryptionKey, + encryptionMac: encryptionMac, + encryptionNonce: encryptionNonce, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + Value mediaId = const Value.absent(), + required MediaType type, + Value uploadState = const Value.absent(), + Value downloadState = const Value.absent(), + required bool requiresAuthentication, + Value reopenByContact = const Value.absent(), + Value storedByContact = const Value.absent(), + Value displayLimitInMilliseconds = const Value.absent(), + Value downloadToken = const Value.absent(), + Value encryptionKey = const Value.absent(), + Value encryptionMac = const Value.absent(), + Value encryptionNonce = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MediaFilesCompanion.insert( + mediaId: mediaId, + type: type, + uploadState: uploadState, + downloadState: downloadState, + requiresAuthentication: requiresAuthentication, + reopenByContact: reopenByContact, + storedByContact: storedByContact, + displayLimitInMilliseconds: displayLimitInMilliseconds, + downloadToken: downloadToken, + encryptionKey: encryptionKey, + encryptionMac: encryptionMac, + encryptionNonce: encryptionNonce, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$MediaFilesTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({messagesRefs = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [if (messagesRefs) db.messages], + addJoins: null, + getPrefetchedDataCallback: (items) async { + return [ + if (messagesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$MediaFilesTableReferences._messagesRefsTable(db), + managerFromTypedResult: (p0) => + $$MediaFilesTableReferences(db, table, p0) + .messagesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.mediaId == item.mediaId), + typedResults: items) + ]; + }, + ); + }, + )); +} + +typedef $$MediaFilesTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $MediaFilesTable, + MediaFile, + $$MediaFilesTableFilterComposer, + $$MediaFilesTableOrderingComposer, + $$MediaFilesTableAnnotationComposer, + $$MediaFilesTableCreateCompanionBuilder, + $$MediaFilesTableUpdateCompanionBuilder, + (MediaFile, $$MediaFilesTableReferences), + MediaFile, + PrefetchHooks Function({bool messagesRefs})>; +typedef $$MessagesTableCreateCompanionBuilder = MessagesCompanion Function({ + required String groupId, + required String messageId, + Value senderId, + Value content, + Value mediaId, + Value quotesMessageId, + Value isDeletedFromSender, + Value isEdited, + Value acknowledgeByUser, + Value acknowledgeByServer, + Value openedByCounter, + Value openedAt, + Value createdAt, + Value modifiedAt, + Value rowid, +}); +typedef $$MessagesTableUpdateCompanionBuilder = MessagesCompanion Function({ + Value groupId, + Value messageId, + Value senderId, + Value content, + Value mediaId, + Value quotesMessageId, + Value isDeletedFromSender, + Value isEdited, + Value acknowledgeByUser, + Value acknowledgeByServer, + Value openedByCounter, + Value openedAt, + Value createdAt, + Value modifiedAt, + Value rowid, +}); + +final class $$MessagesTableReferences + extends BaseReferences<_$TwonlyDB, $MessagesTable, Message> { + $$MessagesTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ContactsTable _senderIdTable(_$TwonlyDB db) => + db.contacts.createAlias( + $_aliasNameGenerator(db.messages.senderId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager? get senderId { + final $_column = $_itemColumn('sender_id'); + if ($_column == null) return null; + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_senderIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static $MediaFilesTable _mediaIdTable(_$TwonlyDB db) => + db.mediaFiles.createAlias( + $_aliasNameGenerator(db.messages.mediaId, db.mediaFiles.mediaId)); + + $$MediaFilesTableProcessedTableManager? get mediaId { + final $_column = $_itemColumn('media_id'); + if ($_column == null) return null; + final manager = $$MediaFilesTableTableManager($_db, $_db.mediaFiles) + .filter((f) => f.mediaId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_mediaIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static $MessagesTable _quotesMessageIdTable(_$TwonlyDB db) => + db.messages.createAlias($_aliasNameGenerator( + db.messages.quotesMessageId, db.messages.messageId)); + + $$MessagesTableProcessedTableManager? get quotesMessageId { + final $_column = $_itemColumn('quotes_message_id'); + if ($_column == null) return null; + final manager = $$MessagesTableTableManager($_db, $_db.messages) + .filter((f) => f.messageId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_quotesMessageIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static MultiTypedResultKey<$MessageHistoriesTable, List> + _messageHistoriesRefsTable(_$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.messageHistories, + aliasName: $_aliasNameGenerator( + db.messages.messageId, db.messageHistories.messageId)); + + $$MessageHistoriesTableProcessedTableManager get messageHistoriesRefs { + final manager = + $$MessageHistoriesTableTableManager($_db, $_db.messageHistories).filter( + (f) => f.messageId.messageId + .sqlEquals($_itemColumn('message_id')!)); + + final cache = + $_typedResult.readTableOrNull(_messageHistoriesRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReactionsTable, List> + _reactionsRefsTable(_$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.reactions, + aliasName: $_aliasNameGenerator( + db.messages.messageId, db.reactions.messageId)); + + $$ReactionsTableProcessedTableManager get reactionsRefs { + final manager = $$ReactionsTableTableManager($_db, $_db.reactions).filter( + (f) => f.messageId.messageId + .sqlEquals($_itemColumn('message_id')!)); + + final cache = $_typedResult.readTableOrNull(_reactionsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } + + static MultiTypedResultKey<$ReceiptsTable, List> _receiptsRefsTable( + _$TwonlyDB db) => + MultiTypedResultKey.fromTable(db.receipts, + aliasName: $_aliasNameGenerator( + db.messages.messageId, db.receipts.messageId)); + + $$ReceiptsTableProcessedTableManager get receiptsRefs { + final manager = $$ReceiptsTableTableManager($_db, $_db.receipts).filter( + (f) => f.messageId.messageId + .sqlEquals($_itemColumn('message_id')!)); + + final cache = $_typedResult.readTableOrNull(_receiptsRefsTable($_db)); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache)); + } +} + +class $$MessagesTableFilterComposer + extends Composer<_$TwonlyDB, $MessagesTable> { + $$MessagesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get messageId => $composableBuilder( + column: $table.messageId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnFilters(column)); + + ColumnFilters get isDeletedFromSender => $composableBuilder( + column: $table.isDeletedFromSender, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get isEdited => $composableBuilder( + column: $table.isEdited, builder: (column) => ColumnFilters(column)); + + ColumnFilters get acknowledgeByUser => $composableBuilder( + column: $table.acknowledgeByUser, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get acknowledgeByServer => $composableBuilder( + column: $table.acknowledgeByServer, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get openedByCounter => $composableBuilder( + column: $table.openedByCounter, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get openedAt => $composableBuilder( + column: $table.openedAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get modifiedAt => $composableBuilder( + column: $table.modifiedAt, builder: (column) => ColumnFilters(column)); + + $$ContactsTableFilterComposer get senderId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MediaFilesTableFilterComposer get mediaId { + final $$MediaFilesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.mediaId, + referencedTable: $db.mediaFiles, + getReferencedColumn: (t) => t.mediaId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MediaFilesTableFilterComposer( + $db: $db, + $table: $db.mediaFiles, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableFilterComposer get quotesMessageId { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.quotesMessageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + Expression messageHistoriesRefs( + Expression Function($$MessageHistoriesTableFilterComposer f) f) { + final $$MessageHistoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messageHistories, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessageHistoriesTableFilterComposer( + $db: $db, + $table: $db.messageHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression reactionsRefs( + Expression Function($$ReactionsTableFilterComposer f) f) { + final $$ReactionsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReactionsTableFilterComposer( + $db: $db, + $table: $db.reactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression receiptsRefs( + Expression Function($$ReceiptsTableFilterComposer f) f) { + final $$ReceiptsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.receipts, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReceiptsTableFilterComposer( + $db: $db, + $table: $db.receipts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$MessagesTableOrderingComposer + extends Composer<_$TwonlyDB, $MessagesTable> { + $$MessagesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get messageId => $composableBuilder( + column: $table.messageId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isDeletedFromSender => $composableBuilder( + column: $table.isDeletedFromSender, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isEdited => $composableBuilder( + column: $table.isEdited, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get acknowledgeByUser => $composableBuilder( + column: $table.acknowledgeByUser, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get acknowledgeByServer => $composableBuilder( + column: $table.acknowledgeByServer, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get openedByCounter => $composableBuilder( + column: $table.openedByCounter, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get openedAt => $composableBuilder( + column: $table.openedAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get modifiedAt => $composableBuilder( + column: $table.modifiedAt, builder: (column) => ColumnOrderings(column)); + + $$ContactsTableOrderingComposer get senderId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MediaFilesTableOrderingComposer get mediaId { + final $$MediaFilesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.mediaId, + referencedTable: $db.mediaFiles, + getReferencedColumn: (t) => t.mediaId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MediaFilesTableOrderingComposer( + $db: $db, + $table: $db.mediaFiles, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableOrderingComposer get quotesMessageId { + final $$MessagesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.quotesMessageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableOrderingComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$MessagesTableAnnotationComposer + extends Composer<_$TwonlyDB, $MessagesTable> { + $$MessagesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get groupId => + $composableBuilder(column: $table.groupId, builder: (column) => column); + + GeneratedColumn get messageId => + $composableBuilder(column: $table.messageId, builder: (column) => column); + + GeneratedColumn get content => + $composableBuilder(column: $table.content, builder: (column) => column); + + GeneratedColumn get isDeletedFromSender => $composableBuilder( + column: $table.isDeletedFromSender, builder: (column) => column); + + GeneratedColumn get isEdited => + $composableBuilder(column: $table.isEdited, builder: (column) => column); + + GeneratedColumn get acknowledgeByUser => $composableBuilder( + column: $table.acknowledgeByUser, builder: (column) => column); + + GeneratedColumn get acknowledgeByServer => $composableBuilder( + column: $table.acknowledgeByServer, builder: (column) => column); + + GeneratedColumn get openedByCounter => $composableBuilder( + column: $table.openedByCounter, builder: (column) => column); + + GeneratedColumn get openedAt => + $composableBuilder(column: $table.openedAt, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get modifiedAt => $composableBuilder( + column: $table.modifiedAt, builder: (column) => column); + + $$ContactsTableAnnotationComposer get senderId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MediaFilesTableAnnotationComposer get mediaId { + final $$MediaFilesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.mediaId, + referencedTable: $db.mediaFiles, + getReferencedColumn: (t) => t.mediaId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MediaFilesTableAnnotationComposer( + $db: $db, + $table: $db.mediaFiles, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableAnnotationComposer get quotesMessageId { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.quotesMessageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + Expression messageHistoriesRefs( + Expression Function($$MessageHistoriesTableAnnotationComposer a) f) { + final $$MessageHistoriesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messageHistories, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessageHistoriesTableAnnotationComposer( + $db: $db, + $table: $db.messageHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression reactionsRefs( + Expression Function($$ReactionsTableAnnotationComposer a) f) { + final $$ReactionsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.reactions, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReactionsTableAnnotationComposer( + $db: $db, + $table: $db.reactions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } + + Expression receiptsRefs( + Expression Function($$ReceiptsTableAnnotationComposer a) f) { + final $$ReceiptsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.receipts, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ReceiptsTableAnnotationComposer( + $db: $db, + $table: $db.receipts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return f(composer); + } +} + +class $$MessagesTableTableManager extends RootTableManager< + _$TwonlyDB, + $MessagesTable, + Message, + $$MessagesTableFilterComposer, + $$MessagesTableOrderingComposer, + $$MessagesTableAnnotationComposer, + $$MessagesTableCreateCompanionBuilder, + $$MessagesTableUpdateCompanionBuilder, + (Message, $$MessagesTableReferences), + Message, + PrefetchHooks Function( + {bool senderId, + bool mediaId, + bool quotesMessageId, + bool messageHistoriesRefs, + bool reactionsRefs, + bool receiptsRefs})> { + $$MessagesTableTableManager(_$TwonlyDB db, $MessagesTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$MessagesTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$MessagesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$MessagesTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value groupId = const Value.absent(), + Value messageId = const Value.absent(), + Value senderId = const Value.absent(), + Value content = const Value.absent(), + Value mediaId = const Value.absent(), + Value quotesMessageId = const Value.absent(), + Value isDeletedFromSender = const Value.absent(), + Value isEdited = const Value.absent(), + Value acknowledgeByUser = const Value.absent(), + Value acknowledgeByServer = const Value.absent(), + Value openedByCounter = const Value.absent(), + Value openedAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value modifiedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MessagesCompanion( + groupId: groupId, + messageId: messageId, + senderId: senderId, + content: content, + mediaId: mediaId, + quotesMessageId: quotesMessageId, + isDeletedFromSender: isDeletedFromSender, + isEdited: isEdited, + acknowledgeByUser: acknowledgeByUser, + acknowledgeByServer: acknowledgeByServer, + openedByCounter: openedByCounter, + openedAt: openedAt, + createdAt: createdAt, + modifiedAt: modifiedAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required String groupId, + required String messageId, + Value senderId = const Value.absent(), + Value content = const Value.absent(), + Value mediaId = const Value.absent(), + Value quotesMessageId = const Value.absent(), + Value isDeletedFromSender = const Value.absent(), + Value isEdited = const Value.absent(), + Value acknowledgeByUser = const Value.absent(), + Value acknowledgeByServer = const Value.absent(), + Value openedByCounter = const Value.absent(), + Value openedAt = const Value.absent(), + Value createdAt = const Value.absent(), + Value modifiedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MessagesCompanion.insert( + groupId: groupId, + messageId: messageId, + senderId: senderId, + content: content, + mediaId: mediaId, + quotesMessageId: quotesMessageId, + isDeletedFromSender: isDeletedFromSender, + isEdited: isEdited, + acknowledgeByUser: acknowledgeByUser, + acknowledgeByServer: acknowledgeByServer, + openedByCounter: openedByCounter, + openedAt: openedAt, + createdAt: createdAt, + modifiedAt: modifiedAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => + (e.readTable(table), $$MessagesTableReferences(db, table, e))) + .toList(), + prefetchHooksCallback: ( + {senderId = false, + mediaId = false, + quotesMessageId = false, + messageHistoriesRefs = false, + reactionsRefs = false, + receiptsRefs = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [ + if (messageHistoriesRefs) db.messageHistories, + if (reactionsRefs) db.reactions, + if (receiptsRefs) db.receipts + ], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (senderId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.senderId, + referencedTable: + $$MessagesTableReferences._senderIdTable(db), + referencedColumn: + $$MessagesTableReferences._senderIdTable(db).userId, + ) as T; + } + if (mediaId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.mediaId, + referencedTable: + $$MessagesTableReferences._mediaIdTable(db), + referencedColumn: + $$MessagesTableReferences._mediaIdTable(db).mediaId, + ) as T; + } + if (quotesMessageId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.quotesMessageId, + referencedTable: + $$MessagesTableReferences._quotesMessageIdTable(db), + referencedColumn: $$MessagesTableReferences + ._quotesMessageIdTable(db) + .messageId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return [ + if (messageHistoriesRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: $$MessagesTableReferences + ._messageHistoriesRefsTable(db), + managerFromTypedResult: (p0) => + $$MessagesTableReferences(db, table, p0) + .messageHistoriesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.messageId == item.messageId), + typedResults: items), + if (reactionsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$MessagesTableReferences._reactionsRefsTable(db), + managerFromTypedResult: (p0) => + $$MessagesTableReferences(db, table, p0) + .reactionsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.messageId == item.messageId), + typedResults: items), + if (receiptsRefs) + await $_getPrefetchedData( + currentTable: table, + referencedTable: + $$MessagesTableReferences._receiptsRefsTable(db), + managerFromTypedResult: (p0) => + $$MessagesTableReferences(db, table, p0) + .receiptsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems + .where((e) => e.messageId == item.messageId), + typedResults: items) + ]; + }, + ); + }, + )); +} + +typedef $$MessagesTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $MessagesTable, + Message, + $$MessagesTableFilterComposer, + $$MessagesTableOrderingComposer, + $$MessagesTableAnnotationComposer, + $$MessagesTableCreateCompanionBuilder, + $$MessagesTableUpdateCompanionBuilder, + (Message, $$MessagesTableReferences), + Message, + PrefetchHooks Function( + {bool senderId, + bool mediaId, + bool quotesMessageId, + bool messageHistoriesRefs, + bool reactionsRefs, + bool receiptsRefs})>; +typedef $$MessageHistoriesTableCreateCompanionBuilder + = MessageHistoriesCompanion Function({ + required String messageId, + Value content, + Value createdAt, + Value rowid, +}); +typedef $$MessageHistoriesTableUpdateCompanionBuilder + = MessageHistoriesCompanion Function({ + Value messageId, + Value content, + Value createdAt, + Value rowid, +}); + +final class $$MessageHistoriesTableReferences + extends BaseReferences<_$TwonlyDB, $MessageHistoriesTable, MessageHistory> { + $$MessageHistoriesTableReferences( + super.$_db, super.$_table, super.$_typedResult); + + static $MessagesTable _messageIdTable(_$TwonlyDB db) => + db.messages.createAlias($_aliasNameGenerator( + db.messageHistories.messageId, db.messages.messageId)); + + $$MessagesTableProcessedTableManager get messageId { + final $_column = $_itemColumn('message_id')!; + + final manager = $$MessagesTableTableManager($_db, $_db.messages) + .filter((f) => f.messageId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_messageIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$MessageHistoriesTableFilterComposer + extends Composer<_$TwonlyDB, $MessageHistoriesTable> { + $$MessageHistoriesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$MessagesTableFilterComposer get messageId { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$MessageHistoriesTableOrderingComposer + extends Composer<_$TwonlyDB, $MessageHistoriesTable> { + $$MessageHistoriesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get content => $composableBuilder( + column: $table.content, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$MessagesTableOrderingComposer get messageId { + final $$MessagesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableOrderingComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$MessageHistoriesTableAnnotationComposer + extends Composer<_$TwonlyDB, $MessageHistoriesTable> { + $$MessageHistoriesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get content => + $composableBuilder(column: $table.content, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$MessagesTableAnnotationComposer get messageId { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$MessageHistoriesTableTableManager extends RootTableManager< + _$TwonlyDB, + $MessageHistoriesTable, + MessageHistory, + $$MessageHistoriesTableFilterComposer, + $$MessageHistoriesTableOrderingComposer, + $$MessageHistoriesTableAnnotationComposer, + $$MessageHistoriesTableCreateCompanionBuilder, + $$MessageHistoriesTableUpdateCompanionBuilder, + (MessageHistory, $$MessageHistoriesTableReferences), + MessageHistory, + PrefetchHooks Function({bool messageId})> { + $$MessageHistoriesTableTableManager( + _$TwonlyDB db, $MessageHistoriesTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$MessageHistoriesTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$MessageHistoriesTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$MessageHistoriesTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value messageId = const Value.absent(), + Value content = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MessageHistoriesCompanion( + messageId: messageId, + content: content, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required String messageId, + Value content = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + MessageHistoriesCompanion.insert( + messageId: messageId, + content: content, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$MessageHistoriesTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({messageId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (messageId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.messageId, + referencedTable: + $$MessageHistoriesTableReferences._messageIdTable(db), + referencedColumn: $$MessageHistoriesTableReferences + ._messageIdTable(db) + .messageId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$MessageHistoriesTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $MessageHistoriesTable, + MessageHistory, + $$MessageHistoriesTableFilterComposer, + $$MessageHistoriesTableOrderingComposer, + $$MessageHistoriesTableAnnotationComposer, + $$MessageHistoriesTableCreateCompanionBuilder, + $$MessageHistoriesTableUpdateCompanionBuilder, + (MessageHistory, $$MessageHistoriesTableReferences), + MessageHistory, + PrefetchHooks Function({bool messageId})>; +typedef $$ReactionsTableCreateCompanionBuilder = ReactionsCompanion Function({ + required String messageId, + required String emoji, + Value senderId, + Value createdAt, + Value rowid, +}); +typedef $$ReactionsTableUpdateCompanionBuilder = ReactionsCompanion Function({ + Value messageId, + Value emoji, + Value senderId, + Value createdAt, + Value rowid, +}); + +final class $$ReactionsTableReferences + extends BaseReferences<_$TwonlyDB, $ReactionsTable, Reaction> { + $$ReactionsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $MessagesTable _messageIdTable(_$TwonlyDB db) => + db.messages.createAlias( + $_aliasNameGenerator(db.reactions.messageId, db.messages.messageId)); + + $$MessagesTableProcessedTableManager get messageId { + final $_column = $_itemColumn('message_id')!; + + final manager = $$MessagesTableTableManager($_db, $_db.messages) + .filter((f) => f.messageId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_messageIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static $ContactsTable _senderIdTable(_$TwonlyDB db) => + db.contacts.createAlias( + $_aliasNameGenerator(db.reactions.senderId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager? get senderId { + final $_column = $_itemColumn('sender_id'); + if ($_column == null) return null; + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_senderIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$ReactionsTableFilterComposer + extends Composer<_$TwonlyDB, $ReactionsTable> { + $$ReactionsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get emoji => $composableBuilder( + column: $table.emoji, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$MessagesTableFilterComposer get messageId { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$ContactsTableFilterComposer get senderId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReactionsTableOrderingComposer + extends Composer<_$TwonlyDB, $ReactionsTable> { + $$ReactionsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get emoji => $composableBuilder( + column: $table.emoji, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$MessagesTableOrderingComposer get messageId { + final $$MessagesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableOrderingComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$ContactsTableOrderingComposer get senderId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReactionsTableAnnotationComposer + extends Composer<_$TwonlyDB, $ReactionsTable> { + $$ReactionsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get emoji => + $composableBuilder(column: $table.emoji, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$MessagesTableAnnotationComposer get messageId { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$ContactsTableAnnotationComposer get senderId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.senderId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReactionsTableTableManager extends RootTableManager< + _$TwonlyDB, + $ReactionsTable, + Reaction, + $$ReactionsTableFilterComposer, + $$ReactionsTableOrderingComposer, + $$ReactionsTableAnnotationComposer, + $$ReactionsTableCreateCompanionBuilder, + $$ReactionsTableUpdateCompanionBuilder, + (Reaction, $$ReactionsTableReferences), + Reaction, + PrefetchHooks Function({bool messageId, bool senderId})> { + $$ReactionsTableTableManager(_$TwonlyDB db, $ReactionsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ReactionsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$ReactionsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$ReactionsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value messageId = const Value.absent(), + Value emoji = const Value.absent(), + Value senderId = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReactionsCompanion( + messageId: messageId, + emoji: emoji, + senderId: senderId, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required String messageId, + required String emoji, + Value senderId = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReactionsCompanion.insert( + messageId: messageId, + emoji: emoji, + senderId: senderId, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$ReactionsTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({messageId = false, senderId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (messageId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.messageId, + referencedTable: + $$ReactionsTableReferences._messageIdTable(db), + referencedColumn: $$ReactionsTableReferences + ._messageIdTable(db) + .messageId, + ) as T; + } + if (senderId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.senderId, + referencedTable: + $$ReactionsTableReferences._senderIdTable(db), + referencedColumn: + $$ReactionsTableReferences._senderIdTable(db).userId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$ReactionsTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $ReactionsTable, + Reaction, + $$ReactionsTableFilterComposer, + $$ReactionsTableOrderingComposer, + $$ReactionsTableAnnotationComposer, + $$ReactionsTableCreateCompanionBuilder, + $$ReactionsTableUpdateCompanionBuilder, + (Reaction, $$ReactionsTableReferences), + Reaction, + PrefetchHooks Function({bool messageId, bool senderId})>; +typedef $$GroupsTableCreateCompanionBuilder = GroupsCompanion Function({ + Value groupId, + required bool isGroupAdmin, + required bool isGroupOfTwo, + Value pinned, + Value lastMessageExchange, + Value createdAt, + Value rowid, +}); +typedef $$GroupsTableUpdateCompanionBuilder = GroupsCompanion Function({ + Value groupId, + Value isGroupAdmin, + Value isGroupOfTwo, + Value pinned, + Value lastMessageExchange, + Value createdAt, + Value rowid, +}); + +class $$GroupsTableFilterComposer extends Composer<_$TwonlyDB, $GroupsTable> { + $$GroupsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get isGroupAdmin => $composableBuilder( + column: $table.isGroupAdmin, builder: (column) => ColumnFilters(column)); + + ColumnFilters get isGroupOfTwo => $composableBuilder( + column: $table.isGroupOfTwo, builder: (column) => ColumnFilters(column)); + + ColumnFilters get pinned => $composableBuilder( + column: $table.pinned, builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastMessageExchange => $composableBuilder( + column: $table.lastMessageExchange, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); +} + +class $$GroupsTableOrderingComposer extends Composer<_$TwonlyDB, $GroupsTable> { + $$GroupsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isGroupAdmin => $composableBuilder( + column: $table.isGroupAdmin, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get isGroupOfTwo => $composableBuilder( + column: $table.isGroupOfTwo, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get pinned => $composableBuilder( + column: $table.pinned, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastMessageExchange => $composableBuilder( + column: $table.lastMessageExchange, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$GroupsTableAnnotationComposer + extends Composer<_$TwonlyDB, $GroupsTable> { + $$GroupsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get groupId => + $composableBuilder(column: $table.groupId, builder: (column) => column); + + GeneratedColumn get isGroupAdmin => $composableBuilder( + column: $table.isGroupAdmin, builder: (column) => column); + + GeneratedColumn get isGroupOfTwo => $composableBuilder( + column: $table.isGroupOfTwo, builder: (column) => column); + + GeneratedColumn get pinned => + $composableBuilder(column: $table.pinned, builder: (column) => column); + + GeneratedColumn get lastMessageExchange => $composableBuilder( + column: $table.lastMessageExchange, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); +} + +class $$GroupsTableTableManager extends RootTableManager< + _$TwonlyDB, + $GroupsTable, + Group, + $$GroupsTableFilterComposer, + $$GroupsTableOrderingComposer, + $$GroupsTableAnnotationComposer, + $$GroupsTableCreateCompanionBuilder, + $$GroupsTableUpdateCompanionBuilder, + (Group, BaseReferences<_$TwonlyDB, $GroupsTable, Group>), + Group, + PrefetchHooks Function()> { + $$GroupsTableTableManager(_$TwonlyDB db, $GroupsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$GroupsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$GroupsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$GroupsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value groupId = const Value.absent(), + Value isGroupAdmin = const Value.absent(), + Value isGroupOfTwo = const Value.absent(), + Value pinned = const Value.absent(), + Value lastMessageExchange = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + GroupsCompanion( + groupId: groupId, + isGroupAdmin: isGroupAdmin, + isGroupOfTwo: isGroupOfTwo, + pinned: pinned, + lastMessageExchange: lastMessageExchange, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + Value groupId = const Value.absent(), + required bool isGroupAdmin, + required bool isGroupOfTwo, + Value pinned = const Value.absent(), + Value lastMessageExchange = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + GroupsCompanion.insert( + groupId: groupId, + isGroupAdmin: isGroupAdmin, + isGroupOfTwo: isGroupOfTwo, + pinned: pinned, + lastMessageExchange: lastMessageExchange, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$GroupsTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $GroupsTable, + Group, + $$GroupsTableFilterComposer, + $$GroupsTableOrderingComposer, + $$GroupsTableAnnotationComposer, + $$GroupsTableCreateCompanionBuilder, + $$GroupsTableUpdateCompanionBuilder, + (Group, BaseReferences<_$TwonlyDB, $GroupsTable, Group>), + Group, + PrefetchHooks Function()>; +typedef $$GroupMembersTableCreateCompanionBuilder = GroupMembersCompanion + Function({ + required String groupId, + required int contactId, + Value memberState, + Value createdAt, + Value rowid, +}); +typedef $$GroupMembersTableUpdateCompanionBuilder = GroupMembersCompanion + Function({ + Value groupId, + Value contactId, + Value memberState, + Value createdAt, + Value rowid, +}); + +final class $$GroupMembersTableReferences + extends BaseReferences<_$TwonlyDB, $GroupMembersTable, GroupMember> { + $$GroupMembersTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ContactsTable _contactIdTable(_$TwonlyDB db) => + db.contacts.createAlias( + $_aliasNameGenerator(db.groupMembers.contactId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager get contactId { + final $_column = $_itemColumn('contact_id')!; + + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_contactIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$GroupMembersTableFilterComposer + extends Composer<_$TwonlyDB, $GroupMembersTable> { + $$GroupMembersTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnFilters(column)); + + ColumnWithTypeConverterFilters + get memberState => $composableBuilder( + column: $table.memberState, + builder: (column) => ColumnWithTypeConverterFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$ContactsTableFilterComposer get contactId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$GroupMembersTableOrderingComposer + extends Composer<_$TwonlyDB, $GroupMembersTable> { + $$GroupMembersTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get groupId => $composableBuilder( + column: $table.groupId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get memberState => $composableBuilder( + column: $table.memberState, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$ContactsTableOrderingComposer get contactId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$GroupMembersTableAnnotationComposer + extends Composer<_$TwonlyDB, $GroupMembersTable> { + $$GroupMembersTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get groupId => + $composableBuilder(column: $table.groupId, builder: (column) => column); + + GeneratedColumnWithTypeConverter get memberState => + $composableBuilder( + column: $table.memberState, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$ContactsTableAnnotationComposer get contactId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$GroupMembersTableTableManager extends RootTableManager< + _$TwonlyDB, + $GroupMembersTable, + GroupMember, + $$GroupMembersTableFilterComposer, + $$GroupMembersTableOrderingComposer, + $$GroupMembersTableAnnotationComposer, + $$GroupMembersTableCreateCompanionBuilder, + $$GroupMembersTableUpdateCompanionBuilder, + (GroupMember, $$GroupMembersTableReferences), + GroupMember, + PrefetchHooks Function({bool contactId})> { + $$GroupMembersTableTableManager(_$TwonlyDB db, $GroupMembersTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$GroupMembersTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$GroupMembersTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$GroupMembersTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value groupId = const Value.absent(), + Value contactId = const Value.absent(), + Value memberState = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + GroupMembersCompanion( + groupId: groupId, + contactId: contactId, + memberState: memberState, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required String groupId, + required int contactId, + Value memberState = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + GroupMembersCompanion.insert( + groupId: groupId, + contactId: contactId, + memberState: memberState, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$GroupMembersTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({contactId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (contactId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.contactId, + referencedTable: + $$GroupMembersTableReferences._contactIdTable(db), + referencedColumn: $$GroupMembersTableReferences + ._contactIdTable(db) + .userId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$GroupMembersTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $GroupMembersTable, + GroupMember, + $$GroupMembersTableFilterComposer, + $$GroupMembersTableOrderingComposer, + $$GroupMembersTableAnnotationComposer, + $$GroupMembersTableCreateCompanionBuilder, + $$GroupMembersTableUpdateCompanionBuilder, + (GroupMember, $$GroupMembersTableReferences), + GroupMember, + PrefetchHooks Function({bool contactId})>; +typedef $$ReceiptsTableCreateCompanionBuilder = ReceiptsCompanion Function({ + Value receiptId, + required int contactId, + Value messageId, + required Uint8List message, + Value contactWillSendsReceipt, + Value retryCount, + Value lastRetry, + Value createdAt, + Value rowid, +}); +typedef $$ReceiptsTableUpdateCompanionBuilder = ReceiptsCompanion Function({ + Value receiptId, + Value contactId, + Value messageId, + Value message, + Value contactWillSendsReceipt, + Value retryCount, + Value lastRetry, + Value createdAt, + Value rowid, +}); + +final class $$ReceiptsTableReferences + extends BaseReferences<_$TwonlyDB, $ReceiptsTable, Receipt> { + $$ReceiptsTableReferences(super.$_db, super.$_table, super.$_typedResult); + + static $ContactsTable _contactIdTable(_$TwonlyDB db) => + db.contacts.createAlias( + $_aliasNameGenerator(db.receipts.contactId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager get contactId { + final $_column = $_itemColumn('contact_id')!; + + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_contactIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } + + static $MessagesTable _messageIdTable(_$TwonlyDB db) => + db.messages.createAlias( + $_aliasNameGenerator(db.receipts.messageId, db.messages.messageId)); + + $$MessagesTableProcessedTableManager? get messageId { + final $_column = $_itemColumn('message_id'); + if ($_column == null) return null; + final manager = $$MessagesTableTableManager($_db, $_db.messages) + .filter((f) => f.messageId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_messageIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$ReceiptsTableFilterComposer + extends Composer<_$TwonlyDB, $ReceiptsTable> { + $$ReceiptsTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get receiptId => $composableBuilder( + column: $table.receiptId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get message => $composableBuilder( + column: $table.message, builder: (column) => ColumnFilters(column)); + + ColumnFilters get contactWillSendsReceipt => $composableBuilder( + column: $table.contactWillSendsReceipt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get retryCount => $composableBuilder( + column: $table.retryCount, builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastRetry => $composableBuilder( + column: $table.lastRetry, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$ContactsTableFilterComposer get contactId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableFilterComposer get messageId { + final $$MessagesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableFilterComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReceiptsTableOrderingComposer + extends Composer<_$TwonlyDB, $ReceiptsTable> { + $$ReceiptsTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get receiptId => $composableBuilder( + column: $table.receiptId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get message => $composableBuilder( + column: $table.message, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get contactWillSendsReceipt => $composableBuilder( + column: $table.contactWillSendsReceipt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get retryCount => $composableBuilder( + column: $table.retryCount, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastRetry => $composableBuilder( + column: $table.lastRetry, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$ContactsTableOrderingComposer get contactId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableOrderingComposer get messageId { + final $$MessagesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableOrderingComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReceiptsTableAnnotationComposer + extends Composer<_$TwonlyDB, $ReceiptsTable> { + $$ReceiptsTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get receiptId => + $composableBuilder(column: $table.receiptId, builder: (column) => column); + + GeneratedColumn get message => + $composableBuilder(column: $table.message, builder: (column) => column); + + GeneratedColumn get contactWillSendsReceipt => $composableBuilder( + column: $table.contactWillSendsReceipt, builder: (column) => column); + + GeneratedColumn get retryCount => $composableBuilder( + column: $table.retryCount, builder: (column) => column); + + GeneratedColumn get lastRetry => + $composableBuilder(column: $table.lastRetry, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$ContactsTableAnnotationComposer get contactId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } + + $$MessagesTableAnnotationComposer get messageId { + final $$MessagesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.messageId, + referencedTable: $db.messages, + getReferencedColumn: (t) => t.messageId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$MessagesTableAnnotationComposer( + $db: $db, + $table: $db.messages, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$ReceiptsTableTableManager extends RootTableManager< + _$TwonlyDB, + $ReceiptsTable, + Receipt, + $$ReceiptsTableFilterComposer, + $$ReceiptsTableOrderingComposer, + $$ReceiptsTableAnnotationComposer, + $$ReceiptsTableCreateCompanionBuilder, + $$ReceiptsTableUpdateCompanionBuilder, + (Receipt, $$ReceiptsTableReferences), + Receipt, + PrefetchHooks Function({bool contactId, bool messageId})> { + $$ReceiptsTableTableManager(_$TwonlyDB db, $ReceiptsTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ReceiptsTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$ReceiptsTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$ReceiptsTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: ({ + Value receiptId = const Value.absent(), + Value contactId = const Value.absent(), + Value messageId = const Value.absent(), + Value message = const Value.absent(), + Value contactWillSendsReceipt = const Value.absent(), + Value retryCount = const Value.absent(), + Value lastRetry = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReceiptsCompanion( + receiptId: receiptId, + contactId: contactId, + messageId: messageId, + message: message, + contactWillSendsReceipt: contactWillSendsReceipt, + retryCount: retryCount, + lastRetry: lastRetry, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + Value receiptId = const Value.absent(), + required int contactId, + Value messageId = const Value.absent(), + required Uint8List message, + Value contactWillSendsReceipt = const Value.absent(), + Value retryCount = const Value.absent(), + Value lastRetry = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReceiptsCompanion.insert( + receiptId: receiptId, + contactId: contactId, + messageId: messageId, + message: message, + contactWillSendsReceipt: contactWillSendsReceipt, + retryCount: retryCount, + lastRetry: lastRetry, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => + (e.readTable(table), $$ReceiptsTableReferences(db, table, e))) + .toList(), + prefetchHooksCallback: ({contactId = false, messageId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (contactId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.contactId, + referencedTable: + $$ReceiptsTableReferences._contactIdTable(db), + referencedColumn: + $$ReceiptsTableReferences._contactIdTable(db).userId, + ) as T; + } + if (messageId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.messageId, + referencedTable: + $$ReceiptsTableReferences._messageIdTable(db), + referencedColumn: + $$ReceiptsTableReferences._messageIdTable(db).messageId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$ReceiptsTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $ReceiptsTable, + Receipt, + $$ReceiptsTableFilterComposer, + $$ReceiptsTableOrderingComposer, + $$ReceiptsTableAnnotationComposer, + $$ReceiptsTableCreateCompanionBuilder, + $$ReceiptsTableUpdateCompanionBuilder, + (Receipt, $$ReceiptsTableReferences), + Receipt, + PrefetchHooks Function({bool contactId, bool messageId})>; +typedef $$SignalIdentityKeyStoresTableCreateCompanionBuilder + = SignalIdentityKeyStoresCompanion Function({ + required int deviceId, + required String name, + required Uint8List identityKey, + Value createdAt, + Value rowid, +}); +typedef $$SignalIdentityKeyStoresTableUpdateCompanionBuilder + = SignalIdentityKeyStoresCompanion Function({ + Value deviceId, + Value name, + Value identityKey, + Value createdAt, + Value rowid, +}); + +class $$SignalIdentityKeyStoresTableFilterComposer + extends Composer<_$TwonlyDB, $SignalIdentityKeyStoresTable> { + $$SignalIdentityKeyStoresTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get deviceId => $composableBuilder( + column: $table.deviceId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get name => $composableBuilder( + column: $table.name, builder: (column) => ColumnFilters(column)); + + ColumnFilters get identityKey => $composableBuilder( + column: $table.identityKey, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); +} + +class $$SignalIdentityKeyStoresTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalIdentityKeyStoresTable> { + $$SignalIdentityKeyStoresTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get deviceId => $composableBuilder( + column: $table.deviceId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get identityKey => $composableBuilder( + column: $table.identityKey, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$SignalIdentityKeyStoresTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalIdentityKeyStoresTable> { + $$SignalIdentityKeyStoresTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get deviceId => + $composableBuilder(column: $table.deviceId, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumn get identityKey => $composableBuilder( + column: $table.identityKey, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); +} + +class $$SignalIdentityKeyStoresTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalIdentityKeyStoresTable, + SignalIdentityKeyStore, + $$SignalIdentityKeyStoresTableFilterComposer, + $$SignalIdentityKeyStoresTableOrderingComposer, + $$SignalIdentityKeyStoresTableAnnotationComposer, + $$SignalIdentityKeyStoresTableCreateCompanionBuilder, + $$SignalIdentityKeyStoresTableUpdateCompanionBuilder, + ( + SignalIdentityKeyStore, + BaseReferences<_$TwonlyDB, $SignalIdentityKeyStoresTable, + SignalIdentityKeyStore> + ), + SignalIdentityKeyStore, + PrefetchHooks Function()> { + $$SignalIdentityKeyStoresTableTableManager( + _$TwonlyDB db, $SignalIdentityKeyStoresTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalIdentityKeyStoresTableFilterComposer( + $db: db, $table: table), + createOrderingComposer: () => + $$SignalIdentityKeyStoresTableOrderingComposer( + $db: db, $table: table), + createComputedFieldComposer: () => + $$SignalIdentityKeyStoresTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value deviceId = const Value.absent(), + Value name = const Value.absent(), + Value identityKey = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalIdentityKeyStoresCompanion( + deviceId: deviceId, + name: name, + identityKey: identityKey, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required int deviceId, + required String name, + required Uint8List identityKey, + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalIdentityKeyStoresCompanion.insert( + deviceId: deviceId, + name: name, + identityKey: identityKey, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$SignalIdentityKeyStoresTableProcessedTableManager + = ProcessedTableManager< + _$TwonlyDB, + $SignalIdentityKeyStoresTable, + SignalIdentityKeyStore, + $$SignalIdentityKeyStoresTableFilterComposer, + $$SignalIdentityKeyStoresTableOrderingComposer, + $$SignalIdentityKeyStoresTableAnnotationComposer, + $$SignalIdentityKeyStoresTableCreateCompanionBuilder, + $$SignalIdentityKeyStoresTableUpdateCompanionBuilder, + ( + SignalIdentityKeyStore, + BaseReferences<_$TwonlyDB, $SignalIdentityKeyStoresTable, + SignalIdentityKeyStore> + ), + SignalIdentityKeyStore, + PrefetchHooks Function()>; +typedef $$SignalPreKeyStoresTableCreateCompanionBuilder + = SignalPreKeyStoresCompanion Function({ + Value preKeyId, + required Uint8List preKey, + Value createdAt, +}); +typedef $$SignalPreKeyStoresTableUpdateCompanionBuilder + = SignalPreKeyStoresCompanion Function({ + Value preKeyId, + Value preKey, + Value createdAt, +}); + +class $$SignalPreKeyStoresTableFilterComposer + extends Composer<_$TwonlyDB, $SignalPreKeyStoresTable> { + $$SignalPreKeyStoresTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get preKeyId => $composableBuilder( + column: $table.preKeyId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get preKey => $composableBuilder( + column: $table.preKey, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); +} + +class $$SignalPreKeyStoresTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalPreKeyStoresTable> { + $$SignalPreKeyStoresTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get preKeyId => $composableBuilder( + column: $table.preKeyId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get preKey => $composableBuilder( + column: $table.preKey, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$SignalPreKeyStoresTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalPreKeyStoresTable> { + $$SignalPreKeyStoresTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get preKeyId => + $composableBuilder(column: $table.preKeyId, builder: (column) => column); + + GeneratedColumn get preKey => + $composableBuilder(column: $table.preKey, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); +} + +class $$SignalPreKeyStoresTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalPreKeyStoresTable, + SignalPreKeyStore, + $$SignalPreKeyStoresTableFilterComposer, + $$SignalPreKeyStoresTableOrderingComposer, + $$SignalPreKeyStoresTableAnnotationComposer, + $$SignalPreKeyStoresTableCreateCompanionBuilder, + $$SignalPreKeyStoresTableUpdateCompanionBuilder, + ( + SignalPreKeyStore, + BaseReferences<_$TwonlyDB, $SignalPreKeyStoresTable, SignalPreKeyStore> + ), + SignalPreKeyStore, + PrefetchHooks Function()> { + $$SignalPreKeyStoresTableTableManager( + _$TwonlyDB db, $SignalPreKeyStoresTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalPreKeyStoresTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$SignalPreKeyStoresTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: () => + $$SignalPreKeyStoresTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value preKeyId = const Value.absent(), + Value preKey = const Value.absent(), + Value createdAt = const Value.absent(), + }) => + SignalPreKeyStoresCompanion( + preKeyId: preKeyId, + preKey: preKey, + createdAt: createdAt, + ), + createCompanionCallback: ({ + Value preKeyId = const Value.absent(), + required Uint8List preKey, + Value createdAt = const Value.absent(), + }) => + SignalPreKeyStoresCompanion.insert( + preKeyId: preKeyId, + preKey: preKey, + createdAt: createdAt, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$SignalPreKeyStoresTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $SignalPreKeyStoresTable, + SignalPreKeyStore, + $$SignalPreKeyStoresTableFilterComposer, + $$SignalPreKeyStoresTableOrderingComposer, + $$SignalPreKeyStoresTableAnnotationComposer, + $$SignalPreKeyStoresTableCreateCompanionBuilder, + $$SignalPreKeyStoresTableUpdateCompanionBuilder, + ( + SignalPreKeyStore, + BaseReferences<_$TwonlyDB, $SignalPreKeyStoresTable, SignalPreKeyStore> + ), + SignalPreKeyStore, + PrefetchHooks Function()>; +typedef $$SignalSenderKeyStoresTableCreateCompanionBuilder + = SignalSenderKeyStoresCompanion Function({ + required String senderKeyName, + required Uint8List senderKey, + Value rowid, +}); +typedef $$SignalSenderKeyStoresTableUpdateCompanionBuilder + = SignalSenderKeyStoresCompanion Function({ + Value senderKeyName, + Value senderKey, + Value rowid, +}); + +class $$SignalSenderKeyStoresTableFilterComposer + extends Composer<_$TwonlyDB, $SignalSenderKeyStoresTable> { + $$SignalSenderKeyStoresTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get senderKeyName => $composableBuilder( + column: $table.senderKeyName, builder: (column) => ColumnFilters(column)); + + ColumnFilters get senderKey => $composableBuilder( + column: $table.senderKey, builder: (column) => ColumnFilters(column)); +} + +class $$SignalSenderKeyStoresTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalSenderKeyStoresTable> { + $$SignalSenderKeyStoresTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get senderKeyName => $composableBuilder( + column: $table.senderKeyName, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get senderKey => $composableBuilder( + column: $table.senderKey, builder: (column) => ColumnOrderings(column)); +} + +class $$SignalSenderKeyStoresTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalSenderKeyStoresTable> { + $$SignalSenderKeyStoresTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get senderKeyName => $composableBuilder( + column: $table.senderKeyName, builder: (column) => column); + + GeneratedColumn get senderKey => + $composableBuilder(column: $table.senderKey, builder: (column) => column); +} + +class $$SignalSenderKeyStoresTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalSenderKeyStoresTable, + SignalSenderKeyStore, + $$SignalSenderKeyStoresTableFilterComposer, + $$SignalSenderKeyStoresTableOrderingComposer, + $$SignalSenderKeyStoresTableAnnotationComposer, + $$SignalSenderKeyStoresTableCreateCompanionBuilder, + $$SignalSenderKeyStoresTableUpdateCompanionBuilder, + ( + SignalSenderKeyStore, + BaseReferences<_$TwonlyDB, $SignalSenderKeyStoresTable, + SignalSenderKeyStore> + ), + SignalSenderKeyStore, + PrefetchHooks Function()> { + $$SignalSenderKeyStoresTableTableManager( + _$TwonlyDB db, $SignalSenderKeyStoresTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalSenderKeyStoresTableFilterComposer( + $db: db, $table: table), + createOrderingComposer: () => + $$SignalSenderKeyStoresTableOrderingComposer( + $db: db, $table: table), + createComputedFieldComposer: () => + $$SignalSenderKeyStoresTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value senderKeyName = const Value.absent(), + Value senderKey = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalSenderKeyStoresCompanion( + senderKeyName: senderKeyName, + senderKey: senderKey, + rowid: rowid, + ), + createCompanionCallback: ({ + required String senderKeyName, + required Uint8List senderKey, + Value rowid = const Value.absent(), + }) => + SignalSenderKeyStoresCompanion.insert( + senderKeyName: senderKeyName, + senderKey: senderKey, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$SignalSenderKeyStoresTableProcessedTableManager + = ProcessedTableManager< + _$TwonlyDB, + $SignalSenderKeyStoresTable, + SignalSenderKeyStore, + $$SignalSenderKeyStoresTableFilterComposer, + $$SignalSenderKeyStoresTableOrderingComposer, + $$SignalSenderKeyStoresTableAnnotationComposer, + $$SignalSenderKeyStoresTableCreateCompanionBuilder, + $$SignalSenderKeyStoresTableUpdateCompanionBuilder, + ( + SignalSenderKeyStore, + BaseReferences<_$TwonlyDB, $SignalSenderKeyStoresTable, + SignalSenderKeyStore> + ), + SignalSenderKeyStore, + PrefetchHooks Function()>; +typedef $$SignalSessionStoresTableCreateCompanionBuilder + = SignalSessionStoresCompanion Function({ + required int deviceId, + required String name, + required Uint8List sessionRecord, + Value createdAt, + Value rowid, +}); +typedef $$SignalSessionStoresTableUpdateCompanionBuilder + = SignalSessionStoresCompanion Function({ + Value deviceId, + Value name, + Value sessionRecord, + Value createdAt, + Value rowid, +}); + +class $$SignalSessionStoresTableFilterComposer + extends Composer<_$TwonlyDB, $SignalSessionStoresTable> { + $$SignalSessionStoresTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get deviceId => $composableBuilder( + column: $table.deviceId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get name => $composableBuilder( + column: $table.name, builder: (column) => ColumnFilters(column)); + + ColumnFilters get sessionRecord => $composableBuilder( + column: $table.sessionRecord, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); +} + +class $$SignalSessionStoresTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalSessionStoresTable> { + $$SignalSessionStoresTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get deviceId => $composableBuilder( + column: $table.deviceId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get name => $composableBuilder( + column: $table.name, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get sessionRecord => $composableBuilder( + column: $table.sessionRecord, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); +} + +class $$SignalSessionStoresTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalSessionStoresTable> { + $$SignalSessionStoresTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get deviceId => + $composableBuilder(column: $table.deviceId, builder: (column) => column); + + GeneratedColumn get name => + $composableBuilder(column: $table.name, builder: (column) => column); + + GeneratedColumn get sessionRecord => $composableBuilder( + column: $table.sessionRecord, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); +} + +class $$SignalSessionStoresTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalSessionStoresTable, + SignalSessionStore, + $$SignalSessionStoresTableFilterComposer, + $$SignalSessionStoresTableOrderingComposer, + $$SignalSessionStoresTableAnnotationComposer, + $$SignalSessionStoresTableCreateCompanionBuilder, + $$SignalSessionStoresTableUpdateCompanionBuilder, + ( + SignalSessionStore, + BaseReferences<_$TwonlyDB, $SignalSessionStoresTable, SignalSessionStore> + ), + SignalSessionStore, + PrefetchHooks Function()> { + $$SignalSessionStoresTableTableManager( + _$TwonlyDB db, $SignalSessionStoresTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalSessionStoresTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$SignalSessionStoresTableOrderingComposer( + $db: db, $table: table), + createComputedFieldComposer: () => + $$SignalSessionStoresTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value deviceId = const Value.absent(), + Value name = const Value.absent(), + Value sessionRecord = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalSessionStoresCompanion( + deviceId: deviceId, + name: name, + sessionRecord: sessionRecord, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required int deviceId, + required String name, + required Uint8List sessionRecord, + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalSessionStoresCompanion.insert( + deviceId: deviceId, + name: name, + sessionRecord: sessionRecord, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$SignalSessionStoresTableProcessedTableManager = ProcessedTableManager< + _$TwonlyDB, + $SignalSessionStoresTable, + SignalSessionStore, + $$SignalSessionStoresTableFilterComposer, + $$SignalSessionStoresTableOrderingComposer, + $$SignalSessionStoresTableAnnotationComposer, + $$SignalSessionStoresTableCreateCompanionBuilder, + $$SignalSessionStoresTableUpdateCompanionBuilder, + ( + SignalSessionStore, + BaseReferences<_$TwonlyDB, $SignalSessionStoresTable, SignalSessionStore> + ), + SignalSessionStore, + PrefetchHooks Function()>; +typedef $$SignalContactPreKeysTableCreateCompanionBuilder + = SignalContactPreKeysCompanion Function({ + required int contactId, + required int preKeyId, + required Uint8List preKey, + Value createdAt, + Value rowid, +}); +typedef $$SignalContactPreKeysTableUpdateCompanionBuilder + = SignalContactPreKeysCompanion Function({ + Value contactId, + Value preKeyId, + Value preKey, + Value createdAt, + Value rowid, +}); + +final class $$SignalContactPreKeysTableReferences extends BaseReferences< + _$TwonlyDB, $SignalContactPreKeysTable, SignalContactPreKey> { + $$SignalContactPreKeysTableReferences( + super.$_db, super.$_table, super.$_typedResult); + + static $ContactsTable _contactIdTable(_$TwonlyDB db) => + db.contacts.createAlias($_aliasNameGenerator( + db.signalContactPreKeys.contactId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager get contactId { + final $_column = $_itemColumn('contact_id')!; + + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_contactIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$SignalContactPreKeysTableFilterComposer + extends Composer<_$TwonlyDB, $SignalContactPreKeysTable> { + $$SignalContactPreKeysTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get preKeyId => $composableBuilder( + column: $table.preKeyId, builder: (column) => ColumnFilters(column)); + + ColumnFilters get preKey => $composableBuilder( + column: $table.preKey, builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$ContactsTableFilterComposer get contactId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactPreKeysTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalContactPreKeysTable> { + $$SignalContactPreKeysTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get preKeyId => $composableBuilder( + column: $table.preKeyId, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get preKey => $composableBuilder( + column: $table.preKey, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$ContactsTableOrderingComposer get contactId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactPreKeysTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalContactPreKeysTable> { + $$SignalContactPreKeysTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get preKeyId => + $composableBuilder(column: $table.preKeyId, builder: (column) => column); + + GeneratedColumn get preKey => + $composableBuilder(column: $table.preKey, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$ContactsTableAnnotationComposer get contactId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactPreKeysTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalContactPreKeysTable, + SignalContactPreKey, + $$SignalContactPreKeysTableFilterComposer, + $$SignalContactPreKeysTableOrderingComposer, + $$SignalContactPreKeysTableAnnotationComposer, + $$SignalContactPreKeysTableCreateCompanionBuilder, + $$SignalContactPreKeysTableUpdateCompanionBuilder, + (SignalContactPreKey, $$SignalContactPreKeysTableReferences), + SignalContactPreKey, + PrefetchHooks Function({bool contactId})> { + $$SignalContactPreKeysTableTableManager( + _$TwonlyDB db, $SignalContactPreKeysTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalContactPreKeysTableFilterComposer($db: db, $table: table), + createOrderingComposer: () => + $$SignalContactPreKeysTableOrderingComposer( + $db: db, $table: table), + createComputedFieldComposer: () => + $$SignalContactPreKeysTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value contactId = const Value.absent(), + Value preKeyId = const Value.absent(), + Value preKey = const Value.absent(), + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalContactPreKeysCompanion( + contactId: contactId, + preKeyId: preKeyId, + preKey: preKey, + createdAt: createdAt, + rowid: rowid, + ), + createCompanionCallback: ({ + required int contactId, + required int preKeyId, + required Uint8List preKey, + Value createdAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SignalContactPreKeysCompanion.insert( + contactId: contactId, + preKeyId: preKeyId, + preKey: preKey, + createdAt: createdAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$SignalContactPreKeysTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({contactId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (contactId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.contactId, + referencedTable: $$SignalContactPreKeysTableReferences + ._contactIdTable(db), + referencedColumn: $$SignalContactPreKeysTableReferences + ._contactIdTable(db) + .userId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$SignalContactPreKeysTableProcessedTableManager + = ProcessedTableManager< + _$TwonlyDB, + $SignalContactPreKeysTable, + SignalContactPreKey, + $$SignalContactPreKeysTableFilterComposer, + $$SignalContactPreKeysTableOrderingComposer, + $$SignalContactPreKeysTableAnnotationComposer, + $$SignalContactPreKeysTableCreateCompanionBuilder, + $$SignalContactPreKeysTableUpdateCompanionBuilder, + (SignalContactPreKey, $$SignalContactPreKeysTableReferences), + SignalContactPreKey, + PrefetchHooks Function({bool contactId})>; +typedef $$SignalContactSignedPreKeysTableCreateCompanionBuilder + = SignalContactSignedPreKeysCompanion Function({ + Value contactId, + required int signedPreKeyId, + required Uint8List signedPreKey, + required Uint8List signedPreKeySignature, + Value createdAt, +}); +typedef $$SignalContactSignedPreKeysTableUpdateCompanionBuilder + = SignalContactSignedPreKeysCompanion Function({ + Value contactId, + Value signedPreKeyId, + Value signedPreKey, + Value signedPreKeySignature, + Value createdAt, +}); + +final class $$SignalContactSignedPreKeysTableReferences extends BaseReferences< + _$TwonlyDB, $SignalContactSignedPreKeysTable, SignalContactSignedPreKey> { + $$SignalContactSignedPreKeysTableReferences( + super.$_db, super.$_table, super.$_typedResult); + + static $ContactsTable _contactIdTable(_$TwonlyDB db) => + db.contacts.createAlias($_aliasNameGenerator( + db.signalContactSignedPreKeys.contactId, db.contacts.userId)); + + $$ContactsTableProcessedTableManager get contactId { + final $_column = $_itemColumn('contact_id')!; + + final manager = $$ContactsTableTableManager($_db, $_db.contacts) + .filter((f) => f.userId.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_contactIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item])); + } +} + +class $$SignalContactSignedPreKeysTableFilterComposer + extends Composer<_$TwonlyDB, $SignalContactSignedPreKeysTable> { + $$SignalContactSignedPreKeysTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get signedPreKeyId => $composableBuilder( + column: $table.signedPreKeyId, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get signedPreKey => $composableBuilder( + column: $table.signedPreKey, builder: (column) => ColumnFilters(column)); + + ColumnFilters get signedPreKeySignature => $composableBuilder( + column: $table.signedPreKeySignature, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnFilters(column)); + + $$ContactsTableFilterComposer get contactId { + final $$ContactsTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableFilterComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactSignedPreKeysTableOrderingComposer + extends Composer<_$TwonlyDB, $SignalContactSignedPreKeysTable> { + $$SignalContactSignedPreKeysTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get signedPreKeyId => $composableBuilder( + column: $table.signedPreKeyId, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get signedPreKey => $composableBuilder( + column: $table.signedPreKey, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get signedPreKeySignature => $composableBuilder( + column: $table.signedPreKeySignature, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, builder: (column) => ColumnOrderings(column)); + + $$ContactsTableOrderingComposer get contactId { + final $$ContactsTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableOrderingComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactSignedPreKeysTableAnnotationComposer + extends Composer<_$TwonlyDB, $SignalContactSignedPreKeysTable> { + $$SignalContactSignedPreKeysTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get signedPreKeyId => $composableBuilder( + column: $table.signedPreKeyId, builder: (column) => column); + + GeneratedColumn get signedPreKey => $composableBuilder( + column: $table.signedPreKey, builder: (column) => column); + + GeneratedColumn get signedPreKeySignature => $composableBuilder( + column: $table.signedPreKeySignature, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + $$ContactsTableAnnotationComposer get contactId { + final $$ContactsTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.contactId, + referencedTable: $db.contacts, + getReferencedColumn: (t) => t.userId, + builder: (joinBuilder, + {$addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer}) => + $$ContactsTableAnnotationComposer( + $db: $db, + $table: $db.contacts, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + )); + return composer; + } +} + +class $$SignalContactSignedPreKeysTableTableManager extends RootTableManager< + _$TwonlyDB, + $SignalContactSignedPreKeysTable, + SignalContactSignedPreKey, + $$SignalContactSignedPreKeysTableFilterComposer, + $$SignalContactSignedPreKeysTableOrderingComposer, + $$SignalContactSignedPreKeysTableAnnotationComposer, + $$SignalContactSignedPreKeysTableCreateCompanionBuilder, + $$SignalContactSignedPreKeysTableUpdateCompanionBuilder, + (SignalContactSignedPreKey, $$SignalContactSignedPreKeysTableReferences), + SignalContactSignedPreKey, + PrefetchHooks Function({bool contactId})> { + $$SignalContactSignedPreKeysTableTableManager( + _$TwonlyDB db, $SignalContactSignedPreKeysTable table) + : super(TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$SignalContactSignedPreKeysTableFilterComposer( + $db: db, $table: table), + createOrderingComposer: () => + $$SignalContactSignedPreKeysTableOrderingComposer( + $db: db, $table: table), + createComputedFieldComposer: () => + $$SignalContactSignedPreKeysTableAnnotationComposer( + $db: db, $table: table), + updateCompanionCallback: ({ + Value contactId = const Value.absent(), + Value signedPreKeyId = const Value.absent(), + Value signedPreKey = const Value.absent(), + Value signedPreKeySignature = const Value.absent(), + Value createdAt = const Value.absent(), + }) => + SignalContactSignedPreKeysCompanion( + contactId: contactId, + signedPreKeyId: signedPreKeyId, + signedPreKey: signedPreKey, + signedPreKeySignature: signedPreKeySignature, + createdAt: createdAt, + ), + createCompanionCallback: ({ + Value contactId = const Value.absent(), + required int signedPreKeyId, + required Uint8List signedPreKey, + required Uint8List signedPreKeySignature, + Value createdAt = const Value.absent(), + }) => + SignalContactSignedPreKeysCompanion.insert( + contactId: contactId, + signedPreKeyId: signedPreKeyId, + signedPreKey: signedPreKey, + signedPreKeySignature: signedPreKeySignature, + createdAt: createdAt, + ), + withReferenceMapper: (p0) => p0 + .map((e) => ( + e.readTable(table), + $$SignalContactSignedPreKeysTableReferences(db, table, e) + )) + .toList(), + prefetchHooksCallback: ({contactId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic>>(state) { + if (contactId) { + state = state.withJoin( + currentTable: table, + currentColumn: table.contactId, + referencedTable: $$SignalContactSignedPreKeysTableReferences + ._contactIdTable(db), + referencedColumn: + $$SignalContactSignedPreKeysTableReferences + ._contactIdTable(db) + .userId, + ) as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + )); +} + +typedef $$SignalContactSignedPreKeysTableProcessedTableManager + = ProcessedTableManager< + _$TwonlyDB, + $SignalContactSignedPreKeysTable, + SignalContactSignedPreKey, + $$SignalContactSignedPreKeysTableFilterComposer, + $$SignalContactSignedPreKeysTableOrderingComposer, + $$SignalContactSignedPreKeysTableAnnotationComposer, + $$SignalContactSignedPreKeysTableCreateCompanionBuilder, + $$SignalContactSignedPreKeysTableUpdateCompanionBuilder, + ( + SignalContactSignedPreKey, + $$SignalContactSignedPreKeysTableReferences + ), + SignalContactSignedPreKey, + PrefetchHooks Function({bool contactId})>; + +class $TwonlyDBManager { + final _$TwonlyDB _db; + $TwonlyDBManager(this._db); + $$ContactsTableTableManager get contacts => + $$ContactsTableTableManager(_db, _db.contacts); + $$MediaFilesTableTableManager get mediaFiles => + $$MediaFilesTableTableManager(_db, _db.mediaFiles); + $$MessagesTableTableManager get messages => + $$MessagesTableTableManager(_db, _db.messages); + $$MessageHistoriesTableTableManager get messageHistories => + $$MessageHistoriesTableTableManager(_db, _db.messageHistories); + $$ReactionsTableTableManager get reactions => + $$ReactionsTableTableManager(_db, _db.reactions); + $$GroupsTableTableManager get groups => + $$GroupsTableTableManager(_db, _db.groups); + $$GroupMembersTableTableManager get groupMembers => + $$GroupMembersTableTableManager(_db, _db.groupMembers); + $$ReceiptsTableTableManager get receipts => + $$ReceiptsTableTableManager(_db, _db.receipts); + $$SignalIdentityKeyStoresTableTableManager get signalIdentityKeyStores => + $$SignalIdentityKeyStoresTableTableManager( + _db, _db.signalIdentityKeyStores); + $$SignalPreKeyStoresTableTableManager get signalPreKeyStores => + $$SignalPreKeyStoresTableTableManager(_db, _db.signalPreKeyStores); + $$SignalSenderKeyStoresTableTableManager get signalSenderKeyStores => + $$SignalSenderKeyStoresTableTableManager(_db, _db.signalSenderKeyStores); + $$SignalSessionStoresTableTableManager get signalSessionStores => + $$SignalSessionStoresTableTableManager(_db, _db.signalSessionStores); + $$SignalContactPreKeysTableTableManager get signalContactPreKeys => + $$SignalContactPreKeysTableTableManager(_db, _db.signalContactPreKeys); + $$SignalContactSignedPreKeysTableTableManager + get signalContactSignedPreKeys => + $$SignalContactSignedPreKeysTableTableManager( + _db, _db.signalContactSignedPreKeys); +} diff --git a/lib/src/database/twonly_database.dart b/lib/src/database/twonly_database_old.dart similarity index 80% rename from lib/src/database/twonly_database.dart rename to lib/src/database/twonly_database_old.dart index 65a88ec..1125a21 100644 --- a/lib/src/database/twonly_database.dart +++ b/lib/src/database/twonly_database_old.dart @@ -2,25 +2,20 @@ import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart' show DriftNativeOptions, driftDatabase; import 'package:path_provider/path_provider.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/daos/media_uploads_dao.dart'; -import 'package:twonly/src/database/daos/message_retransmissions.dao.dart'; -import 'package:twonly/src/database/daos/messages_dao.dart'; -import 'package:twonly/src/database/daos/signal_dao.dart'; -import 'package:twonly/src/database/tables/contacts_table.dart'; -import 'package:twonly/src/database/tables/media_uploads_table.dart'; -import 'package:twonly/src/database/tables/message_retransmissions.dart'; -import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/tables/signal_contact_prekey_table.dart'; -import 'package:twonly/src/database/tables/signal_contact_signed_prekey_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'; +import 'package:twonly/src/database/tables_old/contacts_table.dart'; +import 'package:twonly/src/database/tables_old/media_uploads_table.dart'; +import 'package:twonly/src/database/tables_old/message_retransmissions.dart'; +import 'package:twonly/src/database/tables_old/messages_table.dart'; +import 'package:twonly/src/database/tables_old/signal_contact_prekey_table.dart'; +import 'package:twonly/src/database/tables_old/signal_contact_signed_prekey_table.dart'; +import 'package:twonly/src/database/tables_old/signal_identity_key_store_table.dart'; +import 'package:twonly/src/database/tables_old/signal_pre_key_store_table.dart'; +import 'package:twonly/src/database/tables_old/signal_sender_key_store_table.dart'; +import 'package:twonly/src/database/tables_old/signal_session_store_table.dart'; +import 'package:twonly/src/database/twonly_database_old.steps.dart'; import 'package:twonly/src/utils/log.dart'; -part 'twonly_database.g.dart'; +part 'twonly_database_old.g.dart'; // You can then create a database class that includes this table @DriftDatabase( @@ -36,22 +31,16 @@ part 'twonly_database.g.dart'; SignalContactSignedPreKeys, MessageRetransmissions, ], - daos: [ - MessagesDao, - ContactsDao, - MediaUploadsDao, - SignalDao, - MessageRetransmissionDao, - ], + daos: [], ) -class TwonlyDatabase extends _$TwonlyDatabase { - TwonlyDatabase([QueryExecutor? e]) +class TwonlyDatabaseOld extends _$TwonlyDatabaseOld { + TwonlyDatabaseOld([QueryExecutor? e]) : super( e ?? _openConnection(), ); // ignore: matching_super_parameters - TwonlyDatabase.forTesting(DatabaseConnection super.connection); + TwonlyDatabaseOld.forTesting(DatabaseConnection super.connection); @override int get schemaVersion => 17; diff --git a/lib/src/database/twonly_database.g.dart b/lib/src/database/twonly_database_old.g.dart similarity index 98% rename from lib/src/database/twonly_database.g.dart rename to lib/src/database/twonly_database_old.g.dart index bef787d..ed59521 100644 --- a/lib/src/database/twonly_database.g.dart +++ b/lib/src/database/twonly_database_old.g.dart @@ -1,6 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'twonly_database.dart'; +part of 'twonly_database_old.dart'; // ignore_for_file: type=lint class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> { @@ -4443,9 +4443,9 @@ class MessageRetransmissionsCompanion } } -abstract class _$TwonlyDatabase extends GeneratedDatabase { - _$TwonlyDatabase(QueryExecutor e) : super(e); - $TwonlyDatabaseManager get managers => $TwonlyDatabaseManager(this); +abstract class _$TwonlyDatabaseOld extends GeneratedDatabase { + _$TwonlyDatabaseOld(QueryExecutor e) : super(e); + $TwonlyDatabaseOldManager get managers => $TwonlyDatabaseOldManager(this); late final $ContactsTable contacts = $ContactsTable(this); late final $MessagesTable messages = $MessagesTable(this); late final $MediaUploadsTable mediaUploads = $MediaUploadsTable(this); @@ -4463,13 +4463,6 @@ abstract class _$TwonlyDatabase extends GeneratedDatabase { $SignalContactSignedPreKeysTable(this); late final $MessageRetransmissionsTable messageRetransmissions = $MessageRetransmissionsTable(this); - late final MessagesDao messagesDao = MessagesDao(this as TwonlyDatabase); - late final ContactsDao contactsDao = ContactsDao(this as TwonlyDatabase); - late final MediaUploadsDao mediaUploadsDao = - MediaUploadsDao(this as TwonlyDatabase); - late final SignalDao signalDao = SignalDao(this as TwonlyDatabase); - late final MessageRetransmissionDao messageRetransmissionDao = - MessageRetransmissionDao(this as TwonlyDatabase); @override Iterable> get allTables => allSchemaEntities.whereType>(); @@ -4559,11 +4552,11 @@ typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({ }); final class $$ContactsTableReferences - extends BaseReferences<_$TwonlyDatabase, $ContactsTable, Contact> { + extends BaseReferences<_$TwonlyDatabaseOld, $ContactsTable, Contact> { $$ContactsTableReferences(super.$_db, super.$_table, super.$_typedResult); static MultiTypedResultKey<$MessagesTable, List> _messagesRefsTable( - _$TwonlyDatabase db) => + _$TwonlyDatabaseOld db) => MultiTypedResultKey.fromTable(db.messages, aliasName: $_aliasNameGenerator(db.contacts.userId, db.messages.contactId)); @@ -4579,7 +4572,7 @@ final class $$ContactsTableReferences static MultiTypedResultKey<$MessageRetransmissionsTable, List> _messageRetransmissionsRefsTable( - _$TwonlyDatabase db) => + _$TwonlyDatabaseOld db) => MultiTypedResultKey.fromTable(db.messageRetransmissions, aliasName: $_aliasNameGenerator( db.contacts.userId, db.messageRetransmissions.contactId)); @@ -4599,7 +4592,7 @@ final class $$ContactsTableReferences } class $$ContactsTableFilterComposer - extends Composer<_$TwonlyDatabase, $ContactsTable> { + extends Composer<_$TwonlyDatabaseOld, $ContactsTable> { $$ContactsTableFilterComposer({ required super.$db, required super.$table, @@ -4730,7 +4723,7 @@ class $$ContactsTableFilterComposer } class $$ContactsTableOrderingComposer - extends Composer<_$TwonlyDatabase, $ContactsTable> { + extends Composer<_$TwonlyDatabaseOld, $ContactsTable> { $$ContactsTableOrderingComposer({ required super.$db, required super.$table, @@ -4819,7 +4812,7 @@ class $$ContactsTableOrderingComposer } class $$ContactsTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $ContactsTable> { + extends Composer<_$TwonlyDatabaseOld, $ContactsTable> { $$ContactsTableAnnotationComposer({ required super.$db, required super.$table, @@ -4942,7 +4935,7 @@ class $$ContactsTableAnnotationComposer } class $$ContactsTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $ContactsTable, Contact, $$ContactsTableFilterComposer, @@ -4954,7 +4947,7 @@ class $$ContactsTableTableManager extends RootTableManager< Contact, PrefetchHooks Function( {bool messagesRefs, bool messageRetransmissionsRefs})> { - $$ContactsTableTableManager(_$TwonlyDatabase db, $ContactsTable table) + $$ContactsTableTableManager(_$TwonlyDatabaseOld db, $ContactsTable table) : super(TableManagerState( db: db, table: table, @@ -5112,7 +5105,7 @@ class $$ContactsTableTableManager extends RootTableManager< } typedef $$ContactsTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $ContactsTable, Contact, $$ContactsTableFilterComposer, @@ -5166,10 +5159,10 @@ typedef $$MessagesTableUpdateCompanionBuilder = MessagesCompanion Function({ }); final class $$MessagesTableReferences - extends BaseReferences<_$TwonlyDatabase, $MessagesTable, Message> { + extends BaseReferences<_$TwonlyDatabaseOld, $MessagesTable, Message> { $$MessagesTableReferences(super.$_db, super.$_table, super.$_typedResult); - static $ContactsTable _contactIdTable(_$TwonlyDatabase db) => + static $ContactsTable _contactIdTable(_$TwonlyDatabaseOld db) => db.contacts.createAlias( $_aliasNameGenerator(db.messages.contactId, db.contacts.userId)); @@ -5186,7 +5179,7 @@ final class $$MessagesTableReferences static MultiTypedResultKey<$MessageRetransmissionsTable, List> _messageRetransmissionsRefsTable( - _$TwonlyDatabase db) => + _$TwonlyDatabaseOld db) => MultiTypedResultKey.fromTable(db.messageRetransmissions, aliasName: $_aliasNameGenerator( db.messages.messageId, db.messageRetransmissions.messageId)); @@ -5206,7 +5199,7 @@ final class $$MessagesTableReferences } class $$MessagesTableFilterComposer - extends Composer<_$TwonlyDatabase, $MessagesTable> { + extends Composer<_$TwonlyDatabaseOld, $MessagesTable> { $$MessagesTableFilterComposer({ required super.$db, required super.$table, @@ -5324,7 +5317,7 @@ class $$MessagesTableFilterComposer } class $$MessagesTableOrderingComposer - extends Composer<_$TwonlyDatabase, $MessagesTable> { + extends Composer<_$TwonlyDatabaseOld, $MessagesTable> { $$MessagesTableOrderingComposer({ required super.$db, required super.$table, @@ -5415,7 +5408,7 @@ class $$MessagesTableOrderingComposer } class $$MessagesTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $MessagesTable> { + extends Composer<_$TwonlyDatabaseOld, $MessagesTable> { $$MessagesTableAnnotationComposer({ required super.$db, required super.$table, @@ -5521,7 +5514,7 @@ class $$MessagesTableAnnotationComposer } class $$MessagesTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MessagesTable, Message, $$MessagesTableFilterComposer, @@ -5532,7 +5525,7 @@ class $$MessagesTableTableManager extends RootTableManager< (Message, $$MessagesTableReferences), Message, PrefetchHooks Function({bool contactId, bool messageRetransmissionsRefs})> { - $$MessagesTableTableManager(_$TwonlyDatabase db, $MessagesTable table) + $$MessagesTableTableManager(_$TwonlyDatabaseOld db, $MessagesTable table) : super(TableManagerState( db: db, table: table, @@ -5684,7 +5677,7 @@ class $$MessagesTableTableManager extends RootTableManager< } typedef $$MessagesTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MessagesTable, Message, $$MessagesTableFilterComposer, @@ -5713,7 +5706,7 @@ typedef $$MediaUploadsTableUpdateCompanionBuilder = MediaUploadsCompanion }); class $$MediaUploadsTableFilterComposer - extends Composer<_$TwonlyDatabase, $MediaUploadsTable> { + extends Composer<_$TwonlyDatabaseOld, $MediaUploadsTable> { $$MediaUploadsTableFilterComposer({ required super.$db, required super.$table, @@ -5748,7 +5741,7 @@ class $$MediaUploadsTableFilterComposer } class $$MediaUploadsTableOrderingComposer - extends Composer<_$TwonlyDatabase, $MediaUploadsTable> { + extends Composer<_$TwonlyDatabaseOld, $MediaUploadsTable> { $$MediaUploadsTableOrderingComposer({ required super.$db, required super.$table, @@ -5775,7 +5768,7 @@ class $$MediaUploadsTableOrderingComposer } class $$MediaUploadsTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $MediaUploadsTable> { + extends Composer<_$TwonlyDatabaseOld, $MediaUploadsTable> { $$MediaUploadsTableAnnotationComposer({ required super.$db, required super.$table, @@ -5802,7 +5795,7 @@ class $$MediaUploadsTableAnnotationComposer } class $$MediaUploadsTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MediaUploadsTable, MediaUpload, $$MediaUploadsTableFilterComposer, @@ -5812,11 +5805,12 @@ class $$MediaUploadsTableTableManager extends RootTableManager< $$MediaUploadsTableUpdateCompanionBuilder, ( MediaUpload, - BaseReferences<_$TwonlyDatabase, $MediaUploadsTable, MediaUpload> + BaseReferences<_$TwonlyDatabaseOld, $MediaUploadsTable, MediaUpload> ), MediaUpload, PrefetchHooks Function()> { - $$MediaUploadsTableTableManager(_$TwonlyDatabase db, $MediaUploadsTable table) + $$MediaUploadsTableTableManager( + _$TwonlyDatabaseOld db, $MediaUploadsTable table) : super(TableManagerState( db: db, table: table, @@ -5862,7 +5856,7 @@ class $$MediaUploadsTableTableManager extends RootTableManager< } typedef $$MediaUploadsTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MediaUploadsTable, MediaUpload, $$MediaUploadsTableFilterComposer, @@ -5872,7 +5866,7 @@ typedef $$MediaUploadsTableProcessedTableManager = ProcessedTableManager< $$MediaUploadsTableUpdateCompanionBuilder, ( MediaUpload, - BaseReferences<_$TwonlyDatabase, $MediaUploadsTable, MediaUpload> + BaseReferences<_$TwonlyDatabaseOld, $MediaUploadsTable, MediaUpload> ), MediaUpload, PrefetchHooks Function()>; @@ -5894,7 +5888,7 @@ typedef $$SignalIdentityKeyStoresTableUpdateCompanionBuilder }); class $$SignalIdentityKeyStoresTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalIdentityKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable> { $$SignalIdentityKeyStoresTableFilterComposer({ required super.$db, required super.$table, @@ -5916,7 +5910,7 @@ class $$SignalIdentityKeyStoresTableFilterComposer } class $$SignalIdentityKeyStoresTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalIdentityKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable> { $$SignalIdentityKeyStoresTableOrderingComposer({ required super.$db, required super.$table, @@ -5938,7 +5932,7 @@ class $$SignalIdentityKeyStoresTableOrderingComposer } class $$SignalIdentityKeyStoresTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalIdentityKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable> { $$SignalIdentityKeyStoresTableAnnotationComposer({ required super.$db, required super.$table, @@ -5960,7 +5954,7 @@ class $$SignalIdentityKeyStoresTableAnnotationComposer } class $$SignalIdentityKeyStoresTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable, SignalIdentityKeyStore, $$SignalIdentityKeyStoresTableFilterComposer, @@ -5970,13 +5964,13 @@ class $$SignalIdentityKeyStoresTableTableManager extends RootTableManager< $$SignalIdentityKeyStoresTableUpdateCompanionBuilder, ( SignalIdentityKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalIdentityKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable, SignalIdentityKeyStore> ), SignalIdentityKeyStore, PrefetchHooks Function()> { $$SignalIdentityKeyStoresTableTableManager( - _$TwonlyDatabase db, $SignalIdentityKeyStoresTable table) + _$TwonlyDatabaseOld db, $SignalIdentityKeyStoresTable table) : super(TableManagerState( db: db, table: table, @@ -6026,7 +6020,7 @@ class $$SignalIdentityKeyStoresTableTableManager extends RootTableManager< typedef $$SignalIdentityKeyStoresTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable, SignalIdentityKeyStore, $$SignalIdentityKeyStoresTableFilterComposer, @@ -6036,7 +6030,7 @@ typedef $$SignalIdentityKeyStoresTableProcessedTableManager $$SignalIdentityKeyStoresTableUpdateCompanionBuilder, ( SignalIdentityKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalIdentityKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalIdentityKeyStoresTable, SignalIdentityKeyStore> ), SignalIdentityKeyStore, @@ -6055,7 +6049,7 @@ typedef $$SignalPreKeyStoresTableUpdateCompanionBuilder }); class $$SignalPreKeyStoresTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalPreKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalPreKeyStoresTable> { $$SignalPreKeyStoresTableFilterComposer({ required super.$db, required super.$table, @@ -6074,7 +6068,7 @@ class $$SignalPreKeyStoresTableFilterComposer } class $$SignalPreKeyStoresTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalPreKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalPreKeyStoresTable> { $$SignalPreKeyStoresTableOrderingComposer({ required super.$db, required super.$table, @@ -6093,7 +6087,7 @@ class $$SignalPreKeyStoresTableOrderingComposer } class $$SignalPreKeyStoresTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalPreKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalPreKeyStoresTable> { $$SignalPreKeyStoresTableAnnotationComposer({ required super.$db, required super.$table, @@ -6112,7 +6106,7 @@ class $$SignalPreKeyStoresTableAnnotationComposer } class $$SignalPreKeyStoresTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalPreKeyStoresTable, SignalPreKeyStore, $$SignalPreKeyStoresTableFilterComposer, @@ -6122,13 +6116,13 @@ class $$SignalPreKeyStoresTableTableManager extends RootTableManager< $$SignalPreKeyStoresTableUpdateCompanionBuilder, ( SignalPreKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalPreKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalPreKeyStoresTable, SignalPreKeyStore> ), SignalPreKeyStore, PrefetchHooks Function()> { $$SignalPreKeyStoresTableTableManager( - _$TwonlyDatabase db, $SignalPreKeyStoresTable table) + _$TwonlyDatabaseOld db, $SignalPreKeyStoresTable table) : super(TableManagerState( db: db, table: table, @@ -6167,7 +6161,7 @@ class $$SignalPreKeyStoresTableTableManager extends RootTableManager< } typedef $$SignalPreKeyStoresTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalPreKeyStoresTable, SignalPreKeyStore, $$SignalPreKeyStoresTableFilterComposer, @@ -6177,7 +6171,7 @@ typedef $$SignalPreKeyStoresTableProcessedTableManager = ProcessedTableManager< $$SignalPreKeyStoresTableUpdateCompanionBuilder, ( SignalPreKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalPreKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalPreKeyStoresTable, SignalPreKeyStore> ), SignalPreKeyStore, @@ -6196,7 +6190,7 @@ typedef $$SignalSenderKeyStoresTableUpdateCompanionBuilder }); class $$SignalSenderKeyStoresTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalSenderKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSenderKeyStoresTable> { $$SignalSenderKeyStoresTableFilterComposer({ required super.$db, required super.$table, @@ -6212,7 +6206,7 @@ class $$SignalSenderKeyStoresTableFilterComposer } class $$SignalSenderKeyStoresTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalSenderKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSenderKeyStoresTable> { $$SignalSenderKeyStoresTableOrderingComposer({ required super.$db, required super.$table, @@ -6229,7 +6223,7 @@ class $$SignalSenderKeyStoresTableOrderingComposer } class $$SignalSenderKeyStoresTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalSenderKeyStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSenderKeyStoresTable> { $$SignalSenderKeyStoresTableAnnotationComposer({ required super.$db, required super.$table, @@ -6245,7 +6239,7 @@ class $$SignalSenderKeyStoresTableAnnotationComposer } class $$SignalSenderKeyStoresTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalSenderKeyStoresTable, SignalSenderKeyStore, $$SignalSenderKeyStoresTableFilterComposer, @@ -6255,13 +6249,13 @@ class $$SignalSenderKeyStoresTableTableManager extends RootTableManager< $$SignalSenderKeyStoresTableUpdateCompanionBuilder, ( SignalSenderKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalSenderKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalSenderKeyStoresTable, SignalSenderKeyStore> ), SignalSenderKeyStore, PrefetchHooks Function()> { $$SignalSenderKeyStoresTableTableManager( - _$TwonlyDatabase db, $SignalSenderKeyStoresTable table) + _$TwonlyDatabaseOld db, $SignalSenderKeyStoresTable table) : super(TableManagerState( db: db, table: table, @@ -6303,7 +6297,7 @@ class $$SignalSenderKeyStoresTableTableManager extends RootTableManager< typedef $$SignalSenderKeyStoresTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalSenderKeyStoresTable, SignalSenderKeyStore, $$SignalSenderKeyStoresTableFilterComposer, @@ -6313,7 +6307,7 @@ typedef $$SignalSenderKeyStoresTableProcessedTableManager $$SignalSenderKeyStoresTableUpdateCompanionBuilder, ( SignalSenderKeyStore, - BaseReferences<_$TwonlyDatabase, $SignalSenderKeyStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalSenderKeyStoresTable, SignalSenderKeyStore> ), SignalSenderKeyStore, @@ -6336,7 +6330,7 @@ typedef $$SignalSessionStoresTableUpdateCompanionBuilder }); class $$SignalSessionStoresTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalSessionStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSessionStoresTable> { $$SignalSessionStoresTableFilterComposer({ required super.$db, required super.$table, @@ -6358,7 +6352,7 @@ class $$SignalSessionStoresTableFilterComposer } class $$SignalSessionStoresTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalSessionStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSessionStoresTable> { $$SignalSessionStoresTableOrderingComposer({ required super.$db, required super.$table, @@ -6381,7 +6375,7 @@ class $$SignalSessionStoresTableOrderingComposer } class $$SignalSessionStoresTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalSessionStoresTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalSessionStoresTable> { $$SignalSessionStoresTableAnnotationComposer({ required super.$db, required super.$table, @@ -6403,7 +6397,7 @@ class $$SignalSessionStoresTableAnnotationComposer } class $$SignalSessionStoresTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalSessionStoresTable, SignalSessionStore, $$SignalSessionStoresTableFilterComposer, @@ -6413,13 +6407,13 @@ class $$SignalSessionStoresTableTableManager extends RootTableManager< $$SignalSessionStoresTableUpdateCompanionBuilder, ( SignalSessionStore, - BaseReferences<_$TwonlyDatabase, $SignalSessionStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalSessionStoresTable, SignalSessionStore> ), SignalSessionStore, PrefetchHooks Function()> { $$SignalSessionStoresTableTableManager( - _$TwonlyDatabase db, $SignalSessionStoresTable table) + _$TwonlyDatabaseOld db, $SignalSessionStoresTable table) : super(TableManagerState( db: db, table: table, @@ -6467,7 +6461,7 @@ class $$SignalSessionStoresTableTableManager extends RootTableManager< } typedef $$SignalSessionStoresTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalSessionStoresTable, SignalSessionStore, $$SignalSessionStoresTableFilterComposer, @@ -6477,7 +6471,7 @@ typedef $$SignalSessionStoresTableProcessedTableManager = ProcessedTableManager< $$SignalSessionStoresTableUpdateCompanionBuilder, ( SignalSessionStore, - BaseReferences<_$TwonlyDatabase, $SignalSessionStoresTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalSessionStoresTable, SignalSessionStore> ), SignalSessionStore, @@ -6500,7 +6494,7 @@ typedef $$SignalContactPreKeysTableUpdateCompanionBuilder }); class $$SignalContactPreKeysTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalContactPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactPreKeysTable> { $$SignalContactPreKeysTableFilterComposer({ required super.$db, required super.$table, @@ -6522,7 +6516,7 @@ class $$SignalContactPreKeysTableFilterComposer } class $$SignalContactPreKeysTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalContactPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactPreKeysTable> { $$SignalContactPreKeysTableOrderingComposer({ required super.$db, required super.$table, @@ -6544,7 +6538,7 @@ class $$SignalContactPreKeysTableOrderingComposer } class $$SignalContactPreKeysTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalContactPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactPreKeysTable> { $$SignalContactPreKeysTableAnnotationComposer({ required super.$db, required super.$table, @@ -6566,7 +6560,7 @@ class $$SignalContactPreKeysTableAnnotationComposer } class $$SignalContactPreKeysTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalContactPreKeysTable, SignalContactPreKey, $$SignalContactPreKeysTableFilterComposer, @@ -6576,13 +6570,13 @@ class $$SignalContactPreKeysTableTableManager extends RootTableManager< $$SignalContactPreKeysTableUpdateCompanionBuilder, ( SignalContactPreKey, - BaseReferences<_$TwonlyDatabase, $SignalContactPreKeysTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalContactPreKeysTable, SignalContactPreKey> ), SignalContactPreKey, PrefetchHooks Function()> { $$SignalContactPreKeysTableTableManager( - _$TwonlyDatabase db, $SignalContactPreKeysTable table) + _$TwonlyDatabaseOld db, $SignalContactPreKeysTable table) : super(TableManagerState( db: db, table: table, @@ -6631,7 +6625,7 @@ class $$SignalContactPreKeysTableTableManager extends RootTableManager< typedef $$SignalContactPreKeysTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalContactPreKeysTable, SignalContactPreKey, $$SignalContactPreKeysTableFilterComposer, @@ -6641,7 +6635,7 @@ typedef $$SignalContactPreKeysTableProcessedTableManager $$SignalContactPreKeysTableUpdateCompanionBuilder, ( SignalContactPreKey, - BaseReferences<_$TwonlyDatabase, $SignalContactPreKeysTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalContactPreKeysTable, SignalContactPreKey> ), SignalContactPreKey, @@ -6664,7 +6658,7 @@ typedef $$SignalContactSignedPreKeysTableUpdateCompanionBuilder }); class $$SignalContactSignedPreKeysTableFilterComposer - extends Composer<_$TwonlyDatabase, $SignalContactSignedPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable> { $$SignalContactSignedPreKeysTableFilterComposer({ required super.$db, required super.$table, @@ -6691,7 +6685,7 @@ class $$SignalContactSignedPreKeysTableFilterComposer } class $$SignalContactSignedPreKeysTableOrderingComposer - extends Composer<_$TwonlyDatabase, $SignalContactSignedPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable> { $$SignalContactSignedPreKeysTableOrderingComposer({ required super.$db, required super.$table, @@ -6719,7 +6713,7 @@ class $$SignalContactSignedPreKeysTableOrderingComposer } class $$SignalContactSignedPreKeysTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $SignalContactSignedPreKeysTable> { + extends Composer<_$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable> { $$SignalContactSignedPreKeysTableAnnotationComposer({ required super.$db, required super.$table, @@ -6744,7 +6738,7 @@ class $$SignalContactSignedPreKeysTableAnnotationComposer } class $$SignalContactSignedPreKeysTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable, SignalContactSignedPreKey, $$SignalContactSignedPreKeysTableFilterComposer, @@ -6754,13 +6748,13 @@ class $$SignalContactSignedPreKeysTableTableManager extends RootTableManager< $$SignalContactSignedPreKeysTableUpdateCompanionBuilder, ( SignalContactSignedPreKey, - BaseReferences<_$TwonlyDatabase, $SignalContactSignedPreKeysTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable, SignalContactSignedPreKey> ), SignalContactSignedPreKey, PrefetchHooks Function()> { $$SignalContactSignedPreKeysTableTableManager( - _$TwonlyDatabase db, $SignalContactSignedPreKeysTable table) + _$TwonlyDatabaseOld db, $SignalContactSignedPreKeysTable table) : super(TableManagerState( db: db, table: table, @@ -6810,7 +6804,7 @@ class $$SignalContactSignedPreKeysTableTableManager extends RootTableManager< typedef $$SignalContactSignedPreKeysTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable, SignalContactSignedPreKey, $$SignalContactSignedPreKeysTableFilterComposer, @@ -6820,7 +6814,7 @@ typedef $$SignalContactSignedPreKeysTableProcessedTableManager $$SignalContactSignedPreKeysTableUpdateCompanionBuilder, ( SignalContactSignedPreKey, - BaseReferences<_$TwonlyDatabase, $SignalContactSignedPreKeysTable, + BaseReferences<_$TwonlyDatabaseOld, $SignalContactSignedPreKeysTable, SignalContactSignedPreKey> ), SignalContactSignedPreKey, @@ -6851,11 +6845,11 @@ typedef $$MessageRetransmissionsTableUpdateCompanionBuilder }); final class $$MessageRetransmissionsTableReferences extends BaseReferences< - _$TwonlyDatabase, $MessageRetransmissionsTable, MessageRetransmission> { + _$TwonlyDatabaseOld, $MessageRetransmissionsTable, MessageRetransmission> { $$MessageRetransmissionsTableReferences( super.$_db, super.$_table, super.$_typedResult); - static $ContactsTable _contactIdTable(_$TwonlyDatabase db) => + static $ContactsTable _contactIdTable(_$TwonlyDatabaseOld db) => db.contacts.createAlias($_aliasNameGenerator( db.messageRetransmissions.contactId, db.contacts.userId)); @@ -6870,7 +6864,7 @@ final class $$MessageRetransmissionsTableReferences extends BaseReferences< manager.$state.copyWith(prefetchedData: [item])); } - static $MessagesTable _messageIdTable(_$TwonlyDatabase db) => + static $MessagesTable _messageIdTable(_$TwonlyDatabaseOld db) => db.messages.createAlias($_aliasNameGenerator( db.messageRetransmissions.messageId, db.messages.messageId)); @@ -6887,7 +6881,7 @@ final class $$MessageRetransmissionsTableReferences extends BaseReferences< } class $$MessageRetransmissionsTableFilterComposer - extends Composer<_$TwonlyDatabase, $MessageRetransmissionsTable> { + extends Composer<_$TwonlyDatabaseOld, $MessageRetransmissionsTable> { $$MessageRetransmissionsTableFilterComposer({ required super.$db, required super.$table, @@ -6961,7 +6955,7 @@ class $$MessageRetransmissionsTableFilterComposer } class $$MessageRetransmissionsTableOrderingComposer - extends Composer<_$TwonlyDatabase, $MessageRetransmissionsTable> { + extends Composer<_$TwonlyDatabaseOld, $MessageRetransmissionsTable> { $$MessageRetransmissionsTableOrderingComposer({ required super.$db, required super.$table, @@ -7036,7 +7030,7 @@ class $$MessageRetransmissionsTableOrderingComposer } class $$MessageRetransmissionsTableAnnotationComposer - extends Composer<_$TwonlyDatabase, $MessageRetransmissionsTable> { + extends Composer<_$TwonlyDatabaseOld, $MessageRetransmissionsTable> { $$MessageRetransmissionsTableAnnotationComposer({ required super.$db, required super.$table, @@ -7107,7 +7101,7 @@ class $$MessageRetransmissionsTableAnnotationComposer } class $$MessageRetransmissionsTableTableManager extends RootTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MessageRetransmissionsTable, MessageRetransmission, $$MessageRetransmissionsTableFilterComposer, @@ -7119,7 +7113,7 @@ class $$MessageRetransmissionsTableTableManager extends RootTableManager< MessageRetransmission, PrefetchHooks Function({bool contactId, bool messageId})> { $$MessageRetransmissionsTableTableManager( - _$TwonlyDatabase db, $MessageRetransmissionsTable table) + _$TwonlyDatabaseOld db, $MessageRetransmissionsTable table) : super(TableManagerState( db: db, table: table, @@ -7234,7 +7228,7 @@ class $$MessageRetransmissionsTableTableManager extends RootTableManager< typedef $$MessageRetransmissionsTableProcessedTableManager = ProcessedTableManager< - _$TwonlyDatabase, + _$TwonlyDatabaseOld, $MessageRetransmissionsTable, MessageRetransmission, $$MessageRetransmissionsTableFilterComposer, @@ -7246,9 +7240,9 @@ typedef $$MessageRetransmissionsTableProcessedTableManager MessageRetransmission, PrefetchHooks Function({bool contactId, bool messageId})>; -class $TwonlyDatabaseManager { - final _$TwonlyDatabase _db; - $TwonlyDatabaseManager(this._db); +class $TwonlyDatabaseOldManager { + final _$TwonlyDatabaseOld _db; + $TwonlyDatabaseOldManager(this._db); $$ContactsTableTableManager get contacts => $$ContactsTableTableManager(_db, _db.contacts); $$MessagesTableTableManager get messages => diff --git a/lib/src/database/twonly_database.steps.dart b/lib/src/database/twonly_database_old.steps.dart similarity index 100% rename from lib/src/database/twonly_database.steps.dart rename to lib/src/database/twonly_database_old.steps.dart diff --git a/lib/src/model/json/message.dart b/lib/src/model/json/message_old.dart similarity index 99% rename from lib/src/model/json/message.dart rename to lib/src/model/json/message_old.dart index 7a115fb..d783fc6 100644 --- a/lib/src/model/json/message.dart +++ b/lib/src/model/json/message_old.dart @@ -1,7 +1,7 @@ // ignore_for_file: strict_raw_type, prefer_constructors_over_static_methods import 'package:flutter/material.dart'; -import 'package:twonly/src/database/tables/messages_table.dart'; +import 'package:twonly/src/database/tables_old/messages_table.dart'; import 'package:twonly/src/utils/misc.dart'; Color getMessageColorFromType(MessageContent content, BuildContext context) { diff --git a/lib/src/model/memory_item.model.dart b/lib/src/model/memory_item.model.dart index 8e57d55..eafe7a8 100644 --- a/lib/src/model/memory_item.model.dart +++ b/lib/src/model/memory_item.model.dart @@ -3,8 +3,8 @@ import 'dart:io'; import 'package:drift/drift.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/services/api/media_upload.dart' as send; import 'package:twonly/src/services/thumbnail.service.dart'; diff --git a/lib/src/model/protobuf/backup/backup.proto b/lib/src/model/protobuf/client/backup.proto similarity index 100% rename from lib/src/model/protobuf/backup/backup.proto rename to lib/src/model/protobuf/client/backup.proto diff --git a/lib/src/model/protobuf/backup/backup.pb.dart b/lib/src/model/protobuf/client/generated/backup.pb.dart similarity index 100% rename from lib/src/model/protobuf/backup/backup.pb.dart rename to lib/src/model/protobuf/client/generated/backup.pb.dart diff --git a/lib/src/model/protobuf/backup/backup.pbenum.dart b/lib/src/model/protobuf/client/generated/backup.pbenum.dart similarity index 100% rename from lib/src/model/protobuf/backup/backup.pbenum.dart rename to lib/src/model/protobuf/client/generated/backup.pbenum.dart diff --git a/lib/src/model/protobuf/backup/backup.pbjson.dart b/lib/src/model/protobuf/client/generated/backup.pbjson.dart similarity index 100% rename from lib/src/model/protobuf/backup/backup.pbjson.dart rename to lib/src/model/protobuf/client/generated/backup.pbjson.dart diff --git a/lib/src/model/protobuf/backup/backup.pbserver.dart b/lib/src/model/protobuf/client/generated/backup.pbserver.dart similarity index 100% rename from lib/src/model/protobuf/backup/backup.pbserver.dart rename to lib/src/model/protobuf/client/generated/backup.pbserver.dart diff --git a/lib/src/model/protobuf/client/generated/messages.pb.dart b/lib/src/model/protobuf/client/generated/messages.pb.dart new file mode 100644 index 0000000..bc9d4bd --- /dev/null +++ b/lib/src/model/protobuf/client/generated/messages.pb.dart @@ -0,0 +1,1172 @@ +// +// Generated code. Do not modify. +// source: messages.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'messages.pbenum.dart'; + +export 'messages.pbenum.dart'; + +class Message extends $pb.GeneratedMessage { + factory Message({ + Message_Type? type, + $core.String? receiptId, + $core.List<$core.int>? encryptedContent, + PlaintextContent? plaintextContent, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + if (receiptId != null) { + $result.receiptId = receiptId; + } + if (encryptedContent != null) { + $result.encryptedContent = encryptedContent; + } + if (plaintextContent != null) { + $result.plaintextContent = plaintextContent; + } + return $result; + } + Message._() : super(); + factory Message.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory Message.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Message', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: Message_Type.SENDER_DELIVERY_RECEIPT, valueOf: Message_Type.valueOf, enumValues: Message_Type.values) + ..aOS(2, _omitFieldNames ? '' : 'receiptId', protoName: 'receiptId') + ..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'encryptedContent', $pb.PbFieldType.OY, protoName: 'encryptedContent') + ..aOM(4, _omitFieldNames ? '' : 'plaintextContent', protoName: 'plaintextContent', subBuilder: PlaintextContent.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + Message clone() => Message()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + Message copyWith(void Function(Message) updates) => super.copyWith((message) => updates(message as Message)) as Message; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static Message create() => Message._(); + Message createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Message getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Message? _defaultInstance; + + @$pb.TagNumber(1) + Message_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(Message_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get receiptId => $_getSZ(1); + @$pb.TagNumber(2) + set receiptId($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasReceiptId() => $_has(1); + @$pb.TagNumber(2) + void clearReceiptId() => clearField(2); + + @$pb.TagNumber(3) + $core.List<$core.int> get encryptedContent => $_getN(2); + @$pb.TagNumber(3) + set encryptedContent($core.List<$core.int> v) { $_setBytes(2, v); } + @$pb.TagNumber(3) + $core.bool hasEncryptedContent() => $_has(2); + @$pb.TagNumber(3) + void clearEncryptedContent() => clearField(3); + + @$pb.TagNumber(4) + PlaintextContent get plaintextContent => $_getN(3); + @$pb.TagNumber(4) + set plaintextContent(PlaintextContent v) { setField(4, v); } + @$pb.TagNumber(4) + $core.bool hasPlaintextContent() => $_has(3); + @$pb.TagNumber(4) + void clearPlaintextContent() => clearField(4); + @$pb.TagNumber(4) + PlaintextContent ensurePlaintextContent() => $_ensure(3); +} + +class PlaintextContent_DecryptionErrorMessage extends $pb.GeneratedMessage { + factory PlaintextContent_DecryptionErrorMessage({ + PlaintextContent_DecryptionErrorMessage_Type? type, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + return $result; + } + PlaintextContent_DecryptionErrorMessage._() : super(); + factory PlaintextContent_DecryptionErrorMessage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory PlaintextContent_DecryptionErrorMessage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PlaintextContent.DecryptionErrorMessage', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: PlaintextContent_DecryptionErrorMessage_Type.UNKNOWN, valueOf: PlaintextContent_DecryptionErrorMessage_Type.valueOf, enumValues: PlaintextContent_DecryptionErrorMessage_Type.values) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + PlaintextContent_DecryptionErrorMessage clone() => PlaintextContent_DecryptionErrorMessage()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + PlaintextContent_DecryptionErrorMessage copyWith(void Function(PlaintextContent_DecryptionErrorMessage) updates) => super.copyWith((message) => updates(message as PlaintextContent_DecryptionErrorMessage)) as PlaintextContent_DecryptionErrorMessage; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static PlaintextContent_DecryptionErrorMessage create() => PlaintextContent_DecryptionErrorMessage._(); + PlaintextContent_DecryptionErrorMessage createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static PlaintextContent_DecryptionErrorMessage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static PlaintextContent_DecryptionErrorMessage? _defaultInstance; + + @$pb.TagNumber(1) + PlaintextContent_DecryptionErrorMessage_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(PlaintextContent_DecryptionErrorMessage_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); +} + +class PlaintextContent extends $pb.GeneratedMessage { + factory PlaintextContent({ + PlaintextContent_DecryptionErrorMessage? decryptionErrorMessage, + }) { + final $result = create(); + if (decryptionErrorMessage != null) { + $result.decryptionErrorMessage = decryptionErrorMessage; + } + return $result; + } + PlaintextContent._() : super(); + factory PlaintextContent.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory PlaintextContent.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PlaintextContent', createEmptyInstance: create) + ..aOM(1, _omitFieldNames ? '' : 'decryptionErrorMessage', protoName: 'decryptionErrorMessage', subBuilder: PlaintextContent_DecryptionErrorMessage.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + PlaintextContent clone() => PlaintextContent()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + PlaintextContent copyWith(void Function(PlaintextContent) updates) => super.copyWith((message) => updates(message as PlaintextContent)) as PlaintextContent; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static PlaintextContent create() => PlaintextContent._(); + PlaintextContent createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static PlaintextContent getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static PlaintextContent? _defaultInstance; + + @$pb.TagNumber(1) + PlaintextContent_DecryptionErrorMessage get decryptionErrorMessage => $_getN(0); + @$pb.TagNumber(1) + set decryptionErrorMessage(PlaintextContent_DecryptionErrorMessage v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasDecryptionErrorMessage() => $_has(0); + @$pb.TagNumber(1) + void clearDecryptionErrorMessage() => clearField(1); + @$pb.TagNumber(1) + PlaintextContent_DecryptionErrorMessage ensureDecryptionErrorMessage() => $_ensure(0); +} + +class EncryptedContent_TextMessage extends $pb.GeneratedMessage { + factory EncryptedContent_TextMessage({ + $core.String? senderMessageId, + $core.String? text, + $core.String? quoteMessageId, + }) { + final $result = create(); + if (senderMessageId != null) { + $result.senderMessageId = senderMessageId; + } + if (text != null) { + $result.text = text; + } + if (quoteMessageId != null) { + $result.quoteMessageId = quoteMessageId; + } + return $result; + } + EncryptedContent_TextMessage._() : super(); + factory EncryptedContent_TextMessage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_TextMessage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.TextMessage', createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'senderMessageId', protoName: 'senderMessageId') + ..aOS(2, _omitFieldNames ? '' : 'text') + ..aOS(3, _omitFieldNames ? '' : 'quoteMessageId', protoName: 'quoteMessageId') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_TextMessage clone() => EncryptedContent_TextMessage()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_TextMessage copyWith(void Function(EncryptedContent_TextMessage) updates) => super.copyWith((message) => updates(message as EncryptedContent_TextMessage)) as EncryptedContent_TextMessage; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_TextMessage create() => EncryptedContent_TextMessage._(); + EncryptedContent_TextMessage createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_TextMessage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_TextMessage? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get senderMessageId => $_getSZ(0); + @$pb.TagNumber(1) + set senderMessageId($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasSenderMessageId() => $_has(0); + @$pb.TagNumber(1) + void clearSenderMessageId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get text => $_getSZ(1); + @$pb.TagNumber(2) + set text($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasText() => $_has(1); + @$pb.TagNumber(2) + void clearText() => clearField(2); + + @$pb.TagNumber(3) + $core.String get quoteMessageId => $_getSZ(2); + @$pb.TagNumber(3) + set quoteMessageId($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasQuoteMessageId() => $_has(2); + @$pb.TagNumber(3) + void clearQuoteMessageId() => clearField(3); +} + +class EncryptedContent_Reaction extends $pb.GeneratedMessage { + factory EncryptedContent_Reaction({ + $core.String? targetMessageId, + $core.String? emoji, + $core.bool? remove, + }) { + final $result = create(); + if (targetMessageId != null) { + $result.targetMessageId = targetMessageId; + } + if (emoji != null) { + $result.emoji = emoji; + } + if (remove != null) { + $result.remove = remove; + } + return $result; + } + EncryptedContent_Reaction._() : super(); + factory EncryptedContent_Reaction.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_Reaction.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.Reaction', createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'targetMessageId', protoName: 'targetMessageId') + ..aOS(2, _omitFieldNames ? '' : 'emoji') + ..aOB(3, _omitFieldNames ? '' : 'remove') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_Reaction clone() => EncryptedContent_Reaction()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_Reaction copyWith(void Function(EncryptedContent_Reaction) updates) => super.copyWith((message) => updates(message as EncryptedContent_Reaction)) as EncryptedContent_Reaction; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_Reaction create() => EncryptedContent_Reaction._(); + EncryptedContent_Reaction createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_Reaction getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_Reaction? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get targetMessageId => $_getSZ(0); + @$pb.TagNumber(1) + set targetMessageId($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasTargetMessageId() => $_has(0); + @$pb.TagNumber(1) + void clearTargetMessageId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get emoji => $_getSZ(1); + @$pb.TagNumber(2) + set emoji($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasEmoji() => $_has(1); + @$pb.TagNumber(2) + void clearEmoji() => clearField(2); + + @$pb.TagNumber(3) + $core.bool get remove => $_getBF(2); + @$pb.TagNumber(3) + set remove($core.bool v) { $_setBool(2, v); } + @$pb.TagNumber(3) + $core.bool hasRemove() => $_has(2); + @$pb.TagNumber(3) + void clearRemove() => clearField(3); +} + +class EncryptedContent_MessageUpdate extends $pb.GeneratedMessage { + factory EncryptedContent_MessageUpdate({ + EncryptedContent_MessageUpdate_Type? type, + $core.String? senderMessageId, + $core.String? text, + $fixnum.Int64? timestamp, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + if (senderMessageId != null) { + $result.senderMessageId = senderMessageId; + } + if (text != null) { + $result.text = text; + } + if (timestamp != null) { + $result.timestamp = timestamp; + } + return $result; + } + EncryptedContent_MessageUpdate._() : super(); + factory EncryptedContent_MessageUpdate.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_MessageUpdate.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.MessageUpdate', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_MessageUpdate_Type.DELETE, valueOf: EncryptedContent_MessageUpdate_Type.valueOf, enumValues: EncryptedContent_MessageUpdate_Type.values) + ..aOS(2, _omitFieldNames ? '' : 'senderMessageId', protoName: 'senderMessageId') + ..aOS(3, _omitFieldNames ? '' : 'text') + ..aInt64(4, _omitFieldNames ? '' : 'timestamp') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_MessageUpdate clone() => EncryptedContent_MessageUpdate()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_MessageUpdate copyWith(void Function(EncryptedContent_MessageUpdate) updates) => super.copyWith((message) => updates(message as EncryptedContent_MessageUpdate)) as EncryptedContent_MessageUpdate; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_MessageUpdate create() => EncryptedContent_MessageUpdate._(); + EncryptedContent_MessageUpdate createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_MessageUpdate getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_MessageUpdate? _defaultInstance; + + @$pb.TagNumber(1) + EncryptedContent_MessageUpdate_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(EncryptedContent_MessageUpdate_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get senderMessageId => $_getSZ(1); + @$pb.TagNumber(2) + set senderMessageId($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasSenderMessageId() => $_has(1); + @$pb.TagNumber(2) + void clearSenderMessageId() => clearField(2); + + @$pb.TagNumber(3) + $core.String get text => $_getSZ(2); + @$pb.TagNumber(3) + set text($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasText() => $_has(2); + @$pb.TagNumber(3) + void clearText() => clearField(3); + + @$pb.TagNumber(4) + $fixnum.Int64 get timestamp => $_getI64(3); + @$pb.TagNumber(4) + set timestamp($fixnum.Int64 v) { $_setInt64(3, v); } + @$pb.TagNumber(4) + $core.bool hasTimestamp() => $_has(3); + @$pb.TagNumber(4) + void clearTimestamp() => clearField(4); +} + +class EncryptedContent_Media extends $pb.GeneratedMessage { + factory EncryptedContent_Media({ + $core.String? senderMessageId, + EncryptedContent_Media_Type? type, + $fixnum.Int64? displayLimitInMilliseconds, + $core.bool? requiresAuthentication, + $core.List<$core.int>? downloadToken, + $core.List<$core.int>? encryptionKey, + $core.List<$core.int>? encryptionMac, + $core.List<$core.int>? encryptionNonce, + }) { + final $result = create(); + if (senderMessageId != null) { + $result.senderMessageId = senderMessageId; + } + if (type != null) { + $result.type = type; + } + if (displayLimitInMilliseconds != null) { + $result.displayLimitInMilliseconds = displayLimitInMilliseconds; + } + if (requiresAuthentication != null) { + $result.requiresAuthentication = requiresAuthentication; + } + if (downloadToken != null) { + $result.downloadToken = downloadToken; + } + if (encryptionKey != null) { + $result.encryptionKey = encryptionKey; + } + if (encryptionMac != null) { + $result.encryptionMac = encryptionMac; + } + if (encryptionNonce != null) { + $result.encryptionNonce = encryptionNonce; + } + return $result; + } + EncryptedContent_Media._() : super(); + factory EncryptedContent_Media.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_Media.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.Media', createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'senderMessageId', protoName: 'senderMessageId') + ..e(2, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_Media_Type.IMAGE, valueOf: EncryptedContent_Media_Type.valueOf, enumValues: EncryptedContent_Media_Type.values) + ..aInt64(3, _omitFieldNames ? '' : 'displayLimitInMilliseconds', protoName: 'displayLimitInMilliseconds') + ..aOB(4, _omitFieldNames ? '' : 'requiresAuthentication', protoName: 'requiresAuthentication') + ..a<$core.List<$core.int>>(5, _omitFieldNames ? '' : 'downloadToken', $pb.PbFieldType.OY, protoName: 'downloadToken') + ..a<$core.List<$core.int>>(6, _omitFieldNames ? '' : 'encryptionKey', $pb.PbFieldType.OY, protoName: 'encryptionKey') + ..a<$core.List<$core.int>>(7, _omitFieldNames ? '' : 'encryptionMac', $pb.PbFieldType.OY, protoName: 'encryptionMac') + ..a<$core.List<$core.int>>(8, _omitFieldNames ? '' : 'encryptionNonce', $pb.PbFieldType.OY, protoName: 'encryptionNonce') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_Media clone() => EncryptedContent_Media()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_Media copyWith(void Function(EncryptedContent_Media) updates) => super.copyWith((message) => updates(message as EncryptedContent_Media)) as EncryptedContent_Media; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_Media create() => EncryptedContent_Media._(); + EncryptedContent_Media createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_Media getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_Media? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get senderMessageId => $_getSZ(0); + @$pb.TagNumber(1) + set senderMessageId($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasSenderMessageId() => $_has(0); + @$pb.TagNumber(1) + void clearSenderMessageId() => clearField(1); + + @$pb.TagNumber(2) + EncryptedContent_Media_Type get type => $_getN(1); + @$pb.TagNumber(2) + set type(EncryptedContent_Media_Type v) { setField(2, v); } + @$pb.TagNumber(2) + $core.bool hasType() => $_has(1); + @$pb.TagNumber(2) + void clearType() => clearField(2); + + @$pb.TagNumber(3) + $fixnum.Int64 get displayLimitInMilliseconds => $_getI64(2); + @$pb.TagNumber(3) + set displayLimitInMilliseconds($fixnum.Int64 v) { $_setInt64(2, v); } + @$pb.TagNumber(3) + $core.bool hasDisplayLimitInMilliseconds() => $_has(2); + @$pb.TagNumber(3) + void clearDisplayLimitInMilliseconds() => clearField(3); + + @$pb.TagNumber(4) + $core.bool get requiresAuthentication => $_getBF(3); + @$pb.TagNumber(4) + set requiresAuthentication($core.bool v) { $_setBool(3, v); } + @$pb.TagNumber(4) + $core.bool hasRequiresAuthentication() => $_has(3); + @$pb.TagNumber(4) + void clearRequiresAuthentication() => clearField(4); + + @$pb.TagNumber(5) + $core.List<$core.int> get downloadToken => $_getN(4); + @$pb.TagNumber(5) + set downloadToken($core.List<$core.int> v) { $_setBytes(4, v); } + @$pb.TagNumber(5) + $core.bool hasDownloadToken() => $_has(4); + @$pb.TagNumber(5) + void clearDownloadToken() => clearField(5); + + @$pb.TagNumber(6) + $core.List<$core.int> get encryptionKey => $_getN(5); + @$pb.TagNumber(6) + set encryptionKey($core.List<$core.int> v) { $_setBytes(5, v); } + @$pb.TagNumber(6) + $core.bool hasEncryptionKey() => $_has(5); + @$pb.TagNumber(6) + void clearEncryptionKey() => clearField(6); + + @$pb.TagNumber(7) + $core.List<$core.int> get encryptionMac => $_getN(6); + @$pb.TagNumber(7) + set encryptionMac($core.List<$core.int> v) { $_setBytes(6, v); } + @$pb.TagNumber(7) + $core.bool hasEncryptionMac() => $_has(6); + @$pb.TagNumber(7) + void clearEncryptionMac() => clearField(7); + + @$pb.TagNumber(8) + $core.List<$core.int> get encryptionNonce => $_getN(7); + @$pb.TagNumber(8) + set encryptionNonce($core.List<$core.int> v) { $_setBytes(7, v); } + @$pb.TagNumber(8) + $core.bool hasEncryptionNonce() => $_has(7); + @$pb.TagNumber(8) + void clearEncryptionNonce() => clearField(8); +} + +class EncryptedContent_MediaUpdate extends $pb.GeneratedMessage { + factory EncryptedContent_MediaUpdate({ + EncryptedContent_MediaUpdate_Type? type, + $core.String? targetMessageId, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + if (targetMessageId != null) { + $result.targetMessageId = targetMessageId; + } + return $result; + } + EncryptedContent_MediaUpdate._() : super(); + factory EncryptedContent_MediaUpdate.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_MediaUpdate.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.MediaUpdate', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_MediaUpdate_Type.REOPENED, valueOf: EncryptedContent_MediaUpdate_Type.valueOf, enumValues: EncryptedContent_MediaUpdate_Type.values) + ..aOS(2, _omitFieldNames ? '' : 'targetMessageId', protoName: 'targetMessageId') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_MediaUpdate clone() => EncryptedContent_MediaUpdate()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_MediaUpdate copyWith(void Function(EncryptedContent_MediaUpdate) updates) => super.copyWith((message) => updates(message as EncryptedContent_MediaUpdate)) as EncryptedContent_MediaUpdate; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_MediaUpdate create() => EncryptedContent_MediaUpdate._(); + EncryptedContent_MediaUpdate createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_MediaUpdate getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_MediaUpdate? _defaultInstance; + + @$pb.TagNumber(1) + EncryptedContent_MediaUpdate_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(EncryptedContent_MediaUpdate_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get targetMessageId => $_getSZ(1); + @$pb.TagNumber(2) + set targetMessageId($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasTargetMessageId() => $_has(1); + @$pb.TagNumber(2) + void clearTargetMessageId() => clearField(2); +} + +class EncryptedContent_ContactRequest extends $pb.GeneratedMessage { + factory EncryptedContent_ContactRequest({ + EncryptedContent_ContactRequest_Type? type, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + return $result; + } + EncryptedContent_ContactRequest._() : super(); + factory EncryptedContent_ContactRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_ContactRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.ContactRequest', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_ContactRequest_Type.REQUEST, valueOf: EncryptedContent_ContactRequest_Type.valueOf, enumValues: EncryptedContent_ContactRequest_Type.values) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_ContactRequest clone() => EncryptedContent_ContactRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_ContactRequest copyWith(void Function(EncryptedContent_ContactRequest) updates) => super.copyWith((message) => updates(message as EncryptedContent_ContactRequest)) as EncryptedContent_ContactRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_ContactRequest create() => EncryptedContent_ContactRequest._(); + EncryptedContent_ContactRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_ContactRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_ContactRequest? _defaultInstance; + + @$pb.TagNumber(1) + EncryptedContent_ContactRequest_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(EncryptedContent_ContactRequest_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); +} + +class EncryptedContent_ContactUpdate extends $pb.GeneratedMessage { + factory EncryptedContent_ContactUpdate({ + EncryptedContent_ContactUpdate_Type? type, + $core.String? avatarSvg, + $core.String? displayName, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + if (avatarSvg != null) { + $result.avatarSvg = avatarSvg; + } + if (displayName != null) { + $result.displayName = displayName; + } + return $result; + } + EncryptedContent_ContactUpdate._() : super(); + factory EncryptedContent_ContactUpdate.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_ContactUpdate.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.ContactUpdate', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_ContactUpdate_Type.REQUEST, valueOf: EncryptedContent_ContactUpdate_Type.valueOf, enumValues: EncryptedContent_ContactUpdate_Type.values) + ..aOS(2, _omitFieldNames ? '' : 'avatarSvg', protoName: 'avatarSvg') + ..aOS(3, _omitFieldNames ? '' : 'displayName', protoName: 'displayName') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_ContactUpdate clone() => EncryptedContent_ContactUpdate()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_ContactUpdate copyWith(void Function(EncryptedContent_ContactUpdate) updates) => super.copyWith((message) => updates(message as EncryptedContent_ContactUpdate)) as EncryptedContent_ContactUpdate; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_ContactUpdate create() => EncryptedContent_ContactUpdate._(); + EncryptedContent_ContactUpdate createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_ContactUpdate getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_ContactUpdate? _defaultInstance; + + @$pb.TagNumber(1) + EncryptedContent_ContactUpdate_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(EncryptedContent_ContactUpdate_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get avatarSvg => $_getSZ(1); + @$pb.TagNumber(2) + set avatarSvg($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasAvatarSvg() => $_has(1); + @$pb.TagNumber(2) + void clearAvatarSvg() => clearField(2); + + @$pb.TagNumber(3) + $core.String get displayName => $_getSZ(2); + @$pb.TagNumber(3) + set displayName($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasDisplayName() => $_has(2); + @$pb.TagNumber(3) + void clearDisplayName() => clearField(3); +} + +class EncryptedContent_PushKeys extends $pb.GeneratedMessage { + factory EncryptedContent_PushKeys({ + EncryptedContent_PushKeys_Type? type, + $fixnum.Int64? keyId, + $core.List<$core.int>? key, + }) { + final $result = create(); + if (type != null) { + $result.type = type; + } + if (keyId != null) { + $result.keyId = keyId; + } + if (key != null) { + $result.key = key; + } + return $result; + } + EncryptedContent_PushKeys._() : super(); + factory EncryptedContent_PushKeys.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_PushKeys.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.PushKeys', createEmptyInstance: create) + ..e(1, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE, defaultOrMaker: EncryptedContent_PushKeys_Type.REQUEST, valueOf: EncryptedContent_PushKeys_Type.valueOf, enumValues: EncryptedContent_PushKeys_Type.values) + ..aInt64(2, _omitFieldNames ? '' : 'keyId', protoName: 'keyId') + ..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'key', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_PushKeys clone() => EncryptedContent_PushKeys()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_PushKeys copyWith(void Function(EncryptedContent_PushKeys) updates) => super.copyWith((message) => updates(message as EncryptedContent_PushKeys)) as EncryptedContent_PushKeys; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_PushKeys create() => EncryptedContent_PushKeys._(); + EncryptedContent_PushKeys createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_PushKeys getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_PushKeys? _defaultInstance; + + @$pb.TagNumber(1) + EncryptedContent_PushKeys_Type get type => $_getN(0); + @$pb.TagNumber(1) + set type(EncryptedContent_PushKeys_Type v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasType() => $_has(0); + @$pb.TagNumber(1) + void clearType() => clearField(1); + + @$pb.TagNumber(2) + $fixnum.Int64 get keyId => $_getI64(1); + @$pb.TagNumber(2) + set keyId($fixnum.Int64 v) { $_setInt64(1, v); } + @$pb.TagNumber(2) + $core.bool hasKeyId() => $_has(1); + @$pb.TagNumber(2) + void clearKeyId() => clearField(2); + + @$pb.TagNumber(3) + $core.List<$core.int> get key => $_getN(2); + @$pb.TagNumber(3) + set key($core.List<$core.int> v) { $_setBytes(2, v); } + @$pb.TagNumber(3) + $core.bool hasKey() => $_has(2); + @$pb.TagNumber(3) + void clearKey() => clearField(3); +} + +class EncryptedContent_FlameSync extends $pb.GeneratedMessage { + factory EncryptedContent_FlameSync({ + $fixnum.Int64? flameCounter, + $fixnum.Int64? lastFlameCounterChange, + $core.bool? bestFriend, + }) { + final $result = create(); + if (flameCounter != null) { + $result.flameCounter = flameCounter; + } + if (lastFlameCounterChange != null) { + $result.lastFlameCounterChange = lastFlameCounterChange; + } + if (bestFriend != null) { + $result.bestFriend = bestFriend; + } + return $result; + } + EncryptedContent_FlameSync._() : super(); + factory EncryptedContent_FlameSync.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent_FlameSync.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent.FlameSync', createEmptyInstance: create) + ..aInt64(1, _omitFieldNames ? '' : 'flameCounter', protoName: 'flameCounter') + ..aInt64(2, _omitFieldNames ? '' : 'lastFlameCounterChange', protoName: 'lastFlameCounterChange') + ..aOB(3, _omitFieldNames ? '' : 'bestFriend', protoName: 'bestFriend') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent_FlameSync clone() => EncryptedContent_FlameSync()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent_FlameSync copyWith(void Function(EncryptedContent_FlameSync) updates) => super.copyWith((message) => updates(message as EncryptedContent_FlameSync)) as EncryptedContent_FlameSync; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent_FlameSync create() => EncryptedContent_FlameSync._(); + EncryptedContent_FlameSync createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent_FlameSync getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent_FlameSync? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get flameCounter => $_getI64(0); + @$pb.TagNumber(1) + set flameCounter($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasFlameCounter() => $_has(0); + @$pb.TagNumber(1) + void clearFlameCounter() => clearField(1); + + @$pb.TagNumber(2) + $fixnum.Int64 get lastFlameCounterChange => $_getI64(1); + @$pb.TagNumber(2) + set lastFlameCounterChange($fixnum.Int64 v) { $_setInt64(1, v); } + @$pb.TagNumber(2) + $core.bool hasLastFlameCounterChange() => $_has(1); + @$pb.TagNumber(2) + void clearLastFlameCounterChange() => clearField(2); + + @$pb.TagNumber(3) + $core.bool get bestFriend => $_getBF(2); + @$pb.TagNumber(3) + set bestFriend($core.bool v) { $_setBool(2, v); } + @$pb.TagNumber(3) + $core.bool hasBestFriend() => $_has(2); + @$pb.TagNumber(3) + void clearBestFriend() => clearField(3); +} + +class EncryptedContent extends $pb.GeneratedMessage { + factory EncryptedContent({ + $core.String? groupId, + $fixnum.Int64? senderProfileCounter, + EncryptedContent_TextMessage? textMessage, + EncryptedContent_MessageUpdate? messageUpdate, + EncryptedContent_Media? media, + EncryptedContent_MediaUpdate? mediaUpdate, + EncryptedContent_ContactUpdate? contactUpdate, + EncryptedContent_ContactRequest? contactRequest, + EncryptedContent_FlameSync? flameSync, + EncryptedContent_PushKeys? pushKeys, + EncryptedContent_Reaction? reaction, + }) { + final $result = create(); + if (groupId != null) { + $result.groupId = groupId; + } + if (senderProfileCounter != null) { + $result.senderProfileCounter = senderProfileCounter; + } + if (textMessage != null) { + $result.textMessage = textMessage; + } + if (messageUpdate != null) { + $result.messageUpdate = messageUpdate; + } + if (media != null) { + $result.media = media; + } + if (mediaUpdate != null) { + $result.mediaUpdate = mediaUpdate; + } + if (contactUpdate != null) { + $result.contactUpdate = contactUpdate; + } + if (contactRequest != null) { + $result.contactRequest = contactRequest; + } + if (flameSync != null) { + $result.flameSync = flameSync; + } + if (pushKeys != null) { + $result.pushKeys = pushKeys; + } + if (reaction != null) { + $result.reaction = reaction; + } + return $result; + } + EncryptedContent._() : super(); + factory EncryptedContent.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EncryptedContent.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EncryptedContent', createEmptyInstance: create) + ..aOS(2, _omitFieldNames ? '' : 'groupId', protoName: 'groupId') + ..aInt64(3, _omitFieldNames ? '' : 'senderProfileCounter', protoName: 'senderProfileCounter') + ..aOM(4, _omitFieldNames ? '' : 'textMessage', protoName: 'textMessage', subBuilder: EncryptedContent_TextMessage.create) + ..aOM(5, _omitFieldNames ? '' : 'messageUpdate', protoName: 'messageUpdate', subBuilder: EncryptedContent_MessageUpdate.create) + ..aOM(6, _omitFieldNames ? '' : 'media', subBuilder: EncryptedContent_Media.create) + ..aOM(7, _omitFieldNames ? '' : 'mediaUpdate', protoName: 'mediaUpdate', subBuilder: EncryptedContent_MediaUpdate.create) + ..aOM(8, _omitFieldNames ? '' : 'contactUpdate', protoName: 'contactUpdate', subBuilder: EncryptedContent_ContactUpdate.create) + ..aOM(9, _omitFieldNames ? '' : 'contactRequest', protoName: 'contactRequest', subBuilder: EncryptedContent_ContactRequest.create) + ..aOM(10, _omitFieldNames ? '' : 'flameSync', protoName: 'flameSync', subBuilder: EncryptedContent_FlameSync.create) + ..aOM(11, _omitFieldNames ? '' : 'pushKeys', protoName: 'pushKeys', subBuilder: EncryptedContent_PushKeys.create) + ..aOM(12, _omitFieldNames ? '' : 'reaction', subBuilder: EncryptedContent_Reaction.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EncryptedContent clone() => EncryptedContent()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EncryptedContent copyWith(void Function(EncryptedContent) updates) => super.copyWith((message) => updates(message as EncryptedContent)) as EncryptedContent; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EncryptedContent create() => EncryptedContent._(); + EncryptedContent createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EncryptedContent getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EncryptedContent? _defaultInstance; + + @$pb.TagNumber(2) + $core.String get groupId => $_getSZ(0); + @$pb.TagNumber(2) + set groupId($core.String v) { $_setString(0, v); } + @$pb.TagNumber(2) + $core.bool hasGroupId() => $_has(0); + @$pb.TagNumber(2) + void clearGroupId() => clearField(2); + + /// / This can be added, so the receiver can check weather he is up to date with the current profile + @$pb.TagNumber(3) + $fixnum.Int64 get senderProfileCounter => $_getI64(1); + @$pb.TagNumber(3) + set senderProfileCounter($fixnum.Int64 v) { $_setInt64(1, v); } + @$pb.TagNumber(3) + $core.bool hasSenderProfileCounter() => $_has(1); + @$pb.TagNumber(3) + void clearSenderProfileCounter() => clearField(3); + + @$pb.TagNumber(4) + EncryptedContent_TextMessage get textMessage => $_getN(2); + @$pb.TagNumber(4) + set textMessage(EncryptedContent_TextMessage v) { setField(4, v); } + @$pb.TagNumber(4) + $core.bool hasTextMessage() => $_has(2); + @$pb.TagNumber(4) + void clearTextMessage() => clearField(4); + @$pb.TagNumber(4) + EncryptedContent_TextMessage ensureTextMessage() => $_ensure(2); + + @$pb.TagNumber(5) + EncryptedContent_MessageUpdate get messageUpdate => $_getN(3); + @$pb.TagNumber(5) + set messageUpdate(EncryptedContent_MessageUpdate v) { setField(5, v); } + @$pb.TagNumber(5) + $core.bool hasMessageUpdate() => $_has(3); + @$pb.TagNumber(5) + void clearMessageUpdate() => clearField(5); + @$pb.TagNumber(5) + EncryptedContent_MessageUpdate ensureMessageUpdate() => $_ensure(3); + + @$pb.TagNumber(6) + EncryptedContent_Media get media => $_getN(4); + @$pb.TagNumber(6) + set media(EncryptedContent_Media v) { setField(6, v); } + @$pb.TagNumber(6) + $core.bool hasMedia() => $_has(4); + @$pb.TagNumber(6) + void clearMedia() => clearField(6); + @$pb.TagNumber(6) + EncryptedContent_Media ensureMedia() => $_ensure(4); + + @$pb.TagNumber(7) + EncryptedContent_MediaUpdate get mediaUpdate => $_getN(5); + @$pb.TagNumber(7) + set mediaUpdate(EncryptedContent_MediaUpdate v) { setField(7, v); } + @$pb.TagNumber(7) + $core.bool hasMediaUpdate() => $_has(5); + @$pb.TagNumber(7) + void clearMediaUpdate() => clearField(7); + @$pb.TagNumber(7) + EncryptedContent_MediaUpdate ensureMediaUpdate() => $_ensure(5); + + @$pb.TagNumber(8) + EncryptedContent_ContactUpdate get contactUpdate => $_getN(6); + @$pb.TagNumber(8) + set contactUpdate(EncryptedContent_ContactUpdate v) { setField(8, v); } + @$pb.TagNumber(8) + $core.bool hasContactUpdate() => $_has(6); + @$pb.TagNumber(8) + void clearContactUpdate() => clearField(8); + @$pb.TagNumber(8) + EncryptedContent_ContactUpdate ensureContactUpdate() => $_ensure(6); + + @$pb.TagNumber(9) + EncryptedContent_ContactRequest get contactRequest => $_getN(7); + @$pb.TagNumber(9) + set contactRequest(EncryptedContent_ContactRequest v) { setField(9, v); } + @$pb.TagNumber(9) + $core.bool hasContactRequest() => $_has(7); + @$pb.TagNumber(9) + void clearContactRequest() => clearField(9); + @$pb.TagNumber(9) + EncryptedContent_ContactRequest ensureContactRequest() => $_ensure(7); + + @$pb.TagNumber(10) + EncryptedContent_FlameSync get flameSync => $_getN(8); + @$pb.TagNumber(10) + set flameSync(EncryptedContent_FlameSync v) { setField(10, v); } + @$pb.TagNumber(10) + $core.bool hasFlameSync() => $_has(8); + @$pb.TagNumber(10) + void clearFlameSync() => clearField(10); + @$pb.TagNumber(10) + EncryptedContent_FlameSync ensureFlameSync() => $_ensure(8); + + @$pb.TagNumber(11) + EncryptedContent_PushKeys get pushKeys => $_getN(9); + @$pb.TagNumber(11) + set pushKeys(EncryptedContent_PushKeys v) { setField(11, v); } + @$pb.TagNumber(11) + $core.bool hasPushKeys() => $_has(9); + @$pb.TagNumber(11) + void clearPushKeys() => clearField(11); + @$pb.TagNumber(11) + EncryptedContent_PushKeys ensurePushKeys() => $_ensure(9); + + @$pb.TagNumber(12) + EncryptedContent_Reaction get reaction => $_getN(10); + @$pb.TagNumber(12) + set reaction(EncryptedContent_Reaction v) { setField(12, v); } + @$pb.TagNumber(12) + $core.bool hasReaction() => $_has(10); + @$pb.TagNumber(12) + void clearReaction() => clearField(12); + @$pb.TagNumber(12) + EncryptedContent_Reaction ensureReaction() => $_ensure(10); +} + + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/lib/src/model/protobuf/client/generated/messages.pbenum.dart b/lib/src/model/protobuf/client/generated/messages.pbenum.dart new file mode 100644 index 0000000..37118a9 --- /dev/null +++ b/lib/src/model/protobuf/client/generated/messages.pbenum.dart @@ -0,0 +1,149 @@ +// +// Generated code. Do not modify. +// source: messages.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +class Message_Type extends $pb.ProtobufEnum { + static const Message_Type SENDER_DELIVERY_RECEIPT = Message_Type._(0, _omitEnumNames ? '' : 'SENDER_DELIVERY_RECEIPT'); + static const Message_Type PLAINTEXT_CONTENT = Message_Type._(1, _omitEnumNames ? '' : 'PLAINTEXT_CONTENT'); + static const Message_Type CIPHERTEXT = Message_Type._(2, _omitEnumNames ? '' : 'CIPHERTEXT'); + static const Message_Type PREKEY_BUNDLE = Message_Type._(3, _omitEnumNames ? '' : 'PREKEY_BUNDLE'); + + static const $core.List values = [ + SENDER_DELIVERY_RECEIPT, + PLAINTEXT_CONTENT, + CIPHERTEXT, + PREKEY_BUNDLE, + ]; + + static final $core.Map<$core.int, Message_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static Message_Type? valueOf($core.int value) => _byValue[value]; + + const Message_Type._($core.int v, $core.String n) : super(v, n); +} + +class PlaintextContent_DecryptionErrorMessage_Type extends $pb.ProtobufEnum { + static const PlaintextContent_DecryptionErrorMessage_Type UNKNOWN = PlaintextContent_DecryptionErrorMessage_Type._(0, _omitEnumNames ? '' : 'UNKNOWN'); + static const PlaintextContent_DecryptionErrorMessage_Type PREKEY_UNKNOWN = PlaintextContent_DecryptionErrorMessage_Type._(1, _omitEnumNames ? '' : 'PREKEY_UNKNOWN'); + + static const $core.List values = [ + UNKNOWN, + PREKEY_UNKNOWN, + ]; + + static final $core.Map<$core.int, PlaintextContent_DecryptionErrorMessage_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static PlaintextContent_DecryptionErrorMessage_Type? valueOf($core.int value) => _byValue[value]; + + const PlaintextContent_DecryptionErrorMessage_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_MessageUpdate_Type extends $pb.ProtobufEnum { + static const EncryptedContent_MessageUpdate_Type DELETE = EncryptedContent_MessageUpdate_Type._(0, _omitEnumNames ? '' : 'DELETE'); + static const EncryptedContent_MessageUpdate_Type EDIT_TEXT = EncryptedContent_MessageUpdate_Type._(1, _omitEnumNames ? '' : 'EDIT_TEXT'); + static const EncryptedContent_MessageUpdate_Type OPENED = EncryptedContent_MessageUpdate_Type._(2, _omitEnumNames ? '' : 'OPENED'); + + static const $core.List values = [ + DELETE, + EDIT_TEXT, + OPENED, + ]; + + static final $core.Map<$core.int, EncryptedContent_MessageUpdate_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_MessageUpdate_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_MessageUpdate_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_Media_Type extends $pb.ProtobufEnum { + static const EncryptedContent_Media_Type IMAGE = EncryptedContent_Media_Type._(0, _omitEnumNames ? '' : 'IMAGE'); + static const EncryptedContent_Media_Type VIDEO = EncryptedContent_Media_Type._(1, _omitEnumNames ? '' : 'VIDEO'); + static const EncryptedContent_Media_Type GIF = EncryptedContent_Media_Type._(2, _omitEnumNames ? '' : 'GIF'); + + static const $core.List values = [ + IMAGE, + VIDEO, + GIF, + ]; + + static final $core.Map<$core.int, EncryptedContent_Media_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_Media_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_Media_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_MediaUpdate_Type extends $pb.ProtobufEnum { + static const EncryptedContent_MediaUpdate_Type REOPENED = EncryptedContent_MediaUpdate_Type._(0, _omitEnumNames ? '' : 'REOPENED'); + static const EncryptedContent_MediaUpdate_Type STORED = EncryptedContent_MediaUpdate_Type._(1, _omitEnumNames ? '' : 'STORED'); + static const EncryptedContent_MediaUpdate_Type DECRYPTION_ERROR = EncryptedContent_MediaUpdate_Type._(2, _omitEnumNames ? '' : 'DECRYPTION_ERROR'); + + static const $core.List values = [ + REOPENED, + STORED, + DECRYPTION_ERROR, + ]; + + static final $core.Map<$core.int, EncryptedContent_MediaUpdate_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_MediaUpdate_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_MediaUpdate_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_ContactRequest_Type extends $pb.ProtobufEnum { + static const EncryptedContent_ContactRequest_Type REQUEST = EncryptedContent_ContactRequest_Type._(0, _omitEnumNames ? '' : 'REQUEST'); + static const EncryptedContent_ContactRequest_Type REJECT = EncryptedContent_ContactRequest_Type._(1, _omitEnumNames ? '' : 'REJECT'); + static const EncryptedContent_ContactRequest_Type ACCEPT = EncryptedContent_ContactRequest_Type._(2, _omitEnumNames ? '' : 'ACCEPT'); + + static const $core.List values = [ + REQUEST, + REJECT, + ACCEPT, + ]; + + static final $core.Map<$core.int, EncryptedContent_ContactRequest_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_ContactRequest_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_ContactRequest_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_ContactUpdate_Type extends $pb.ProtobufEnum { + static const EncryptedContent_ContactUpdate_Type REQUEST = EncryptedContent_ContactUpdate_Type._(0, _omitEnumNames ? '' : 'REQUEST'); + static const EncryptedContent_ContactUpdate_Type UPDATE = EncryptedContent_ContactUpdate_Type._(1, _omitEnumNames ? '' : 'UPDATE'); + + static const $core.List values = [ + REQUEST, + UPDATE, + ]; + + static final $core.Map<$core.int, EncryptedContent_ContactUpdate_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_ContactUpdate_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_ContactUpdate_Type._($core.int v, $core.String n) : super(v, n); +} + +class EncryptedContent_PushKeys_Type extends $pb.ProtobufEnum { + static const EncryptedContent_PushKeys_Type REQUEST = EncryptedContent_PushKeys_Type._(0, _omitEnumNames ? '' : 'REQUEST'); + static const EncryptedContent_PushKeys_Type UPDATE = EncryptedContent_PushKeys_Type._(1, _omitEnumNames ? '' : 'UPDATE'); + + static const $core.List values = [ + REQUEST, + UPDATE, + ]; + + static final $core.Map<$core.int, EncryptedContent_PushKeys_Type> _byValue = $pb.ProtobufEnum.initByValue(values); + static EncryptedContent_PushKeys_Type? valueOf($core.int value) => _byValue[value]; + + const EncryptedContent_PushKeys_Type._($core.int v, $core.String n) : super(v, n); +} + + +const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names'); diff --git a/lib/src/model/protobuf/client/generated/messages.pbjson.dart b/lib/src/model/protobuf/client/generated/messages.pbjson.dart new file mode 100644 index 0000000..9da2b0c --- /dev/null +++ b/lib/src/model/protobuf/client/generated/messages.pbjson.dart @@ -0,0 +1,358 @@ +// +// Generated code. Do not modify. +// source: messages.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use messageDescriptor instead') +const Message$json = { + '1': 'Message', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.Message.Type', '10': 'type'}, + {'1': 'receiptId', '3': 2, '4': 1, '5': 9, '10': 'receiptId'}, + {'1': 'encryptedContent', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'encryptedContent', '17': true}, + {'1': 'plaintextContent', '3': 4, '4': 1, '5': 11, '6': '.PlaintextContent', '9': 1, '10': 'plaintextContent', '17': true}, + ], + '4': [Message_Type$json], + '8': [ + {'1': '_encryptedContent'}, + {'1': '_plaintextContent'}, + ], +}; + +@$core.Deprecated('Use messageDescriptor instead') +const Message_Type$json = { + '1': 'Type', + '2': [ + {'1': 'SENDER_DELIVERY_RECEIPT', '2': 0}, + {'1': 'PLAINTEXT_CONTENT', '2': 1}, + {'1': 'CIPHERTEXT', '2': 2}, + {'1': 'PREKEY_BUNDLE', '2': 3}, + ], +}; + +/// Descriptor for `Message`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List messageDescriptor = $convert.base64Decode( + 'CgdNZXNzYWdlEiEKBHR5cGUYASABKA4yDS5NZXNzYWdlLlR5cGVSBHR5cGUSHAoJcmVjZWlwdE' + 'lkGAIgASgJUglyZWNlaXB0SWQSLwoQZW5jcnlwdGVkQ29udGVudBgDIAEoDEgAUhBlbmNyeXB0' + 'ZWRDb250ZW50iAEBEkIKEHBsYWludGV4dENvbnRlbnQYBCABKAsyES5QbGFpbnRleHRDb250ZW' + '50SAFSEHBsYWludGV4dENvbnRlbnSIAQEiXQoEVHlwZRIbChdTRU5ERVJfREVMSVZFUllfUkVD' + 'RUlQVBAAEhUKEVBMQUlOVEVYVF9DT05URU5UEAESDgoKQ0lQSEVSVEVYVBACEhEKDVBSRUtFWV' + '9CVU5ETEUQA0ITChFfZW5jcnlwdGVkQ29udGVudEITChFfcGxhaW50ZXh0Q29udGVudA=='); + +@$core.Deprecated('Use plaintextContentDescriptor instead') +const PlaintextContent$json = { + '1': 'PlaintextContent', + '2': [ + {'1': 'decryptionErrorMessage', '3': 1, '4': 1, '5': 11, '6': '.PlaintextContent.DecryptionErrorMessage', '9': 0, '10': 'decryptionErrorMessage', '17': true}, + ], + '3': [PlaintextContent_DecryptionErrorMessage$json], + '8': [ + {'1': '_decryptionErrorMessage'}, + ], +}; + +@$core.Deprecated('Use plaintextContentDescriptor instead') +const PlaintextContent_DecryptionErrorMessage$json = { + '1': 'DecryptionErrorMessage', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.PlaintextContent.DecryptionErrorMessage.Type', '10': 'type'}, + ], + '4': [PlaintextContent_DecryptionErrorMessage_Type$json], +}; + +@$core.Deprecated('Use plaintextContentDescriptor instead') +const PlaintextContent_DecryptionErrorMessage_Type$json = { + '1': 'Type', + '2': [ + {'1': 'UNKNOWN', '2': 0}, + {'1': 'PREKEY_UNKNOWN', '2': 1}, + ], +}; + +/// Descriptor for `PlaintextContent`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List plaintextContentDescriptor = $convert.base64Decode( + 'ChBQbGFpbnRleHRDb250ZW50EmUKFmRlY3J5cHRpb25FcnJvck1lc3NhZ2UYASABKAsyKC5QbG' + 'FpbnRleHRDb250ZW50LkRlY3J5cHRpb25FcnJvck1lc3NhZ2VIAFIWZGVjcnlwdGlvbkVycm9y' + 'TWVzc2FnZYgBARqEAQoWRGVjcnlwdGlvbkVycm9yTWVzc2FnZRJBCgR0eXBlGAEgASgOMi0uUG' + 'xhaW50ZXh0Q29udGVudC5EZWNyeXB0aW9uRXJyb3JNZXNzYWdlLlR5cGVSBHR5cGUiJwoEVHlw' + 'ZRILCgdVTktOT1dOEAASEgoOUFJFS0VZX1VOS05PV04QAUIZChdfZGVjcnlwdGlvbkVycm9yTW' + 'Vzc2FnZQ=='); + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent$json = { + '1': 'EncryptedContent', + '2': [ + {'1': 'groupId', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'groupId', '17': true}, + {'1': 'senderProfileCounter', '3': 3, '4': 1, '5': 3, '9': 1, '10': 'senderProfileCounter', '17': true}, + {'1': 'textMessage', '3': 4, '4': 1, '5': 11, '6': '.EncryptedContent.TextMessage', '9': 2, '10': 'textMessage', '17': true}, + {'1': 'messageUpdate', '3': 5, '4': 1, '5': 11, '6': '.EncryptedContent.MessageUpdate', '9': 3, '10': 'messageUpdate', '17': true}, + {'1': 'media', '3': 6, '4': 1, '5': 11, '6': '.EncryptedContent.Media', '9': 4, '10': 'media', '17': true}, + {'1': 'mediaUpdate', '3': 7, '4': 1, '5': 11, '6': '.EncryptedContent.MediaUpdate', '9': 5, '10': 'mediaUpdate', '17': true}, + {'1': 'contactUpdate', '3': 8, '4': 1, '5': 11, '6': '.EncryptedContent.ContactUpdate', '9': 6, '10': 'contactUpdate', '17': true}, + {'1': 'contactRequest', '3': 9, '4': 1, '5': 11, '6': '.EncryptedContent.ContactRequest', '9': 7, '10': 'contactRequest', '17': true}, + {'1': 'flameSync', '3': 10, '4': 1, '5': 11, '6': '.EncryptedContent.FlameSync', '9': 8, '10': 'flameSync', '17': true}, + {'1': 'pushKeys', '3': 11, '4': 1, '5': 11, '6': '.EncryptedContent.PushKeys', '9': 9, '10': 'pushKeys', '17': true}, + {'1': 'reaction', '3': 12, '4': 1, '5': 11, '6': '.EncryptedContent.Reaction', '9': 10, '10': 'reaction', '17': true}, + ], + '3': [EncryptedContent_TextMessage$json, EncryptedContent_Reaction$json, EncryptedContent_MessageUpdate$json, EncryptedContent_Media$json, EncryptedContent_MediaUpdate$json, EncryptedContent_ContactRequest$json, EncryptedContent_ContactUpdate$json, EncryptedContent_PushKeys$json, EncryptedContent_FlameSync$json], + '8': [ + {'1': '_groupId'}, + {'1': '_senderProfileCounter'}, + {'1': '_textMessage'}, + {'1': '_messageUpdate'}, + {'1': '_media'}, + {'1': '_mediaUpdate'}, + {'1': '_contactUpdate'}, + {'1': '_contactRequest'}, + {'1': '_flameSync'}, + {'1': '_pushKeys'}, + {'1': '_reaction'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_TextMessage$json = { + '1': 'TextMessage', + '2': [ + {'1': 'senderMessageId', '3': 1, '4': 1, '5': 9, '10': 'senderMessageId'}, + {'1': 'text', '3': 2, '4': 1, '5': 9, '10': 'text'}, + {'1': 'quoteMessageId', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'quoteMessageId', '17': true}, + ], + '8': [ + {'1': '_quoteMessageId'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_Reaction$json = { + '1': 'Reaction', + '2': [ + {'1': 'targetMessageId', '3': 1, '4': 1, '5': 9, '10': 'targetMessageId'}, + {'1': 'emoji', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'emoji', '17': true}, + {'1': 'remove', '3': 3, '4': 1, '5': 8, '9': 1, '10': 'remove', '17': true}, + ], + '8': [ + {'1': '_emoji'}, + {'1': '_remove'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_MessageUpdate$json = { + '1': 'MessageUpdate', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.EncryptedContent.MessageUpdate.Type', '10': 'type'}, + {'1': 'senderMessageId', '3': 2, '4': 1, '5': 9, '10': 'senderMessageId'}, + {'1': 'text', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'text', '17': true}, + {'1': 'timestamp', '3': 4, '4': 1, '5': 3, '9': 1, '10': 'timestamp', '17': true}, + ], + '4': [EncryptedContent_MessageUpdate_Type$json], + '8': [ + {'1': '_text'}, + {'1': '_timestamp'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_MessageUpdate_Type$json = { + '1': 'Type', + '2': [ + {'1': 'DELETE', '2': 0}, + {'1': 'EDIT_TEXT', '2': 1}, + {'1': 'OPENED', '2': 2}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_Media$json = { + '1': 'Media', + '2': [ + {'1': 'senderMessageId', '3': 1, '4': 1, '5': 9, '10': 'senderMessageId'}, + {'1': 'type', '3': 2, '4': 1, '5': 14, '6': '.EncryptedContent.Media.Type', '10': 'type'}, + {'1': 'displayLimitInMilliseconds', '3': 3, '4': 1, '5': 3, '9': 0, '10': 'displayLimitInMilliseconds', '17': true}, + {'1': 'requiresAuthentication', '3': 4, '4': 1, '5': 8, '10': 'requiresAuthentication'}, + {'1': 'downloadToken', '3': 5, '4': 1, '5': 12, '9': 1, '10': 'downloadToken', '17': true}, + {'1': 'encryptionKey', '3': 6, '4': 1, '5': 12, '9': 2, '10': 'encryptionKey', '17': true}, + {'1': 'encryptionMac', '3': 7, '4': 1, '5': 12, '9': 3, '10': 'encryptionMac', '17': true}, + {'1': 'encryptionNonce', '3': 8, '4': 1, '5': 12, '9': 4, '10': 'encryptionNonce', '17': true}, + ], + '4': [EncryptedContent_Media_Type$json], + '8': [ + {'1': '_displayLimitInMilliseconds'}, + {'1': '_downloadToken'}, + {'1': '_encryptionKey'}, + {'1': '_encryptionMac'}, + {'1': '_encryptionNonce'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_Media_Type$json = { + '1': 'Type', + '2': [ + {'1': 'IMAGE', '2': 0}, + {'1': 'VIDEO', '2': 1}, + {'1': 'GIF', '2': 2}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_MediaUpdate$json = { + '1': 'MediaUpdate', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.EncryptedContent.MediaUpdate.Type', '10': 'type'}, + {'1': 'targetMessageId', '3': 2, '4': 1, '5': 9, '10': 'targetMessageId'}, + ], + '4': [EncryptedContent_MediaUpdate_Type$json], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_MediaUpdate_Type$json = { + '1': 'Type', + '2': [ + {'1': 'REOPENED', '2': 0}, + {'1': 'STORED', '2': 1}, + {'1': 'DECRYPTION_ERROR', '2': 2}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_ContactRequest$json = { + '1': 'ContactRequest', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.EncryptedContent.ContactRequest.Type', '10': 'type'}, + ], + '4': [EncryptedContent_ContactRequest_Type$json], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_ContactRequest_Type$json = { + '1': 'Type', + '2': [ + {'1': 'REQUEST', '2': 0}, + {'1': 'REJECT', '2': 1}, + {'1': 'ACCEPT', '2': 2}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_ContactUpdate$json = { + '1': 'ContactUpdate', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.EncryptedContent.ContactUpdate.Type', '10': 'type'}, + {'1': 'avatarSvg', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'avatarSvg', '17': true}, + {'1': 'displayName', '3': 3, '4': 1, '5': 9, '9': 1, '10': 'displayName', '17': true}, + ], + '4': [EncryptedContent_ContactUpdate_Type$json], + '8': [ + {'1': '_avatarSvg'}, + {'1': '_displayName'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_ContactUpdate_Type$json = { + '1': 'Type', + '2': [ + {'1': 'REQUEST', '2': 0}, + {'1': 'UPDATE', '2': 1}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_PushKeys$json = { + '1': 'PushKeys', + '2': [ + {'1': 'type', '3': 1, '4': 1, '5': 14, '6': '.EncryptedContent.PushKeys.Type', '10': 'type'}, + {'1': 'keyId', '3': 2, '4': 1, '5': 3, '9': 0, '10': 'keyId', '17': true}, + {'1': 'key', '3': 3, '4': 1, '5': 12, '9': 1, '10': 'key', '17': true}, + ], + '4': [EncryptedContent_PushKeys_Type$json], + '8': [ + {'1': '_keyId'}, + {'1': '_key'}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_PushKeys_Type$json = { + '1': 'Type', + '2': [ + {'1': 'REQUEST', '2': 0}, + {'1': 'UPDATE', '2': 1}, + ], +}; + +@$core.Deprecated('Use encryptedContentDescriptor instead') +const EncryptedContent_FlameSync$json = { + '1': 'FlameSync', + '2': [ + {'1': 'flameCounter', '3': 1, '4': 1, '5': 3, '10': 'flameCounter'}, + {'1': 'lastFlameCounterChange', '3': 2, '4': 1, '5': 3, '10': 'lastFlameCounterChange'}, + {'1': 'bestFriend', '3': 3, '4': 1, '5': 8, '10': 'bestFriend'}, + ], +}; + +/// Descriptor for `EncryptedContent`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List encryptedContentDescriptor = $convert.base64Decode( + 'ChBFbmNyeXB0ZWRDb250ZW50Eh0KB2dyb3VwSWQYAiABKAlIAFIHZ3JvdXBJZIgBARI3ChRzZW' + '5kZXJQcm9maWxlQ291bnRlchgDIAEoA0gBUhRzZW5kZXJQcm9maWxlQ291bnRlcogBARJECgt0' + 'ZXh0TWVzc2FnZRgEIAEoCzIdLkVuY3J5cHRlZENvbnRlbnQuVGV4dE1lc3NhZ2VIAlILdGV4dE' + '1lc3NhZ2WIAQESSgoNbWVzc2FnZVVwZGF0ZRgFIAEoCzIfLkVuY3J5cHRlZENvbnRlbnQuTWVz' + 'c2FnZVVwZGF0ZUgDUg1tZXNzYWdlVXBkYXRliAEBEjIKBW1lZGlhGAYgASgLMhcuRW5jcnlwdG' + 'VkQ29udGVudC5NZWRpYUgEUgVtZWRpYYgBARJECgttZWRpYVVwZGF0ZRgHIAEoCzIdLkVuY3J5' + 'cHRlZENvbnRlbnQuTWVkaWFVcGRhdGVIBVILbWVkaWFVcGRhdGWIAQESSgoNY29udGFjdFVwZG' + 'F0ZRgIIAEoCzIfLkVuY3J5cHRlZENvbnRlbnQuQ29udGFjdFVwZGF0ZUgGUg1jb250YWN0VXBk' + 'YXRliAEBEk0KDmNvbnRhY3RSZXF1ZXN0GAkgASgLMiAuRW5jcnlwdGVkQ29udGVudC5Db250YW' + 'N0UmVxdWVzdEgHUg5jb250YWN0UmVxdWVzdIgBARI+CglmbGFtZVN5bmMYCiABKAsyGy5FbmNy' + 'eXB0ZWRDb250ZW50LkZsYW1lU3luY0gIUglmbGFtZVN5bmOIAQESOwoIcHVzaEtleXMYCyABKA' + 'syGi5FbmNyeXB0ZWRDb250ZW50LlB1c2hLZXlzSAlSCHB1c2hLZXlziAEBEjsKCHJlYWN0aW9u' + 'GAwgASgLMhouRW5jcnlwdGVkQ29udGVudC5SZWFjdGlvbkgKUghyZWFjdGlvbogBARqLAQoLVG' + 'V4dE1lc3NhZ2USKAoPc2VuZGVyTWVzc2FnZUlkGAEgASgJUg9zZW5kZXJNZXNzYWdlSWQSEgoE' + 'dGV4dBgCIAEoCVIEdGV4dBIrCg5xdW90ZU1lc3NhZ2VJZBgDIAEoCUgAUg5xdW90ZU1lc3NhZ2' + 'VJZIgBAUIRCg9fcXVvdGVNZXNzYWdlSWQagQEKCFJlYWN0aW9uEigKD3RhcmdldE1lc3NhZ2VJ' + 'ZBgBIAEoCVIPdGFyZ2V0TWVzc2FnZUlkEhkKBWVtb2ppGAIgASgJSABSBWVtb2ppiAEBEhsKBn' + 'JlbW92ZRgDIAEoCEgBUgZyZW1vdmWIAQFCCAoGX2Vtb2ppQgkKB19yZW1vdmUa9QEKDU1lc3Nh' + 'Z2VVcGRhdGUSOAoEdHlwZRgBIAEoDjIkLkVuY3J5cHRlZENvbnRlbnQuTWVzc2FnZVVwZGF0ZS' + '5UeXBlUgR0eXBlEigKD3NlbmRlck1lc3NhZ2VJZBgCIAEoCVIPc2VuZGVyTWVzc2FnZUlkEhcK' + 'BHRleHQYAyABKAlIAFIEdGV4dIgBARIhCgl0aW1lc3RhbXAYBCABKANIAVIJdGltZXN0YW1wiA' + 'EBIi0KBFR5cGUSCgoGREVMRVRFEAASDQoJRURJVF9URVhUEAESCgoGT1BFTkVEEAJCBwoFX3Rl' + 'eHRCDAoKX3RpbWVzdGFtcBqgBAoFTWVkaWESKAoPc2VuZGVyTWVzc2FnZUlkGAEgASgJUg9zZW' + '5kZXJNZXNzYWdlSWQSMAoEdHlwZRgCIAEoDjIcLkVuY3J5cHRlZENvbnRlbnQuTWVkaWEuVHlw' + 'ZVIEdHlwZRJDChpkaXNwbGF5TGltaXRJbk1pbGxpc2Vjb25kcxgDIAEoA0gAUhpkaXNwbGF5TG' + 'ltaXRJbk1pbGxpc2Vjb25kc4gBARI2ChZyZXF1aXJlc0F1dGhlbnRpY2F0aW9uGAQgASgIUhZy' + 'ZXF1aXJlc0F1dGhlbnRpY2F0aW9uEikKDWRvd25sb2FkVG9rZW4YBSABKAxIAVINZG93bmxvYW' + 'RUb2tlbogBARIpCg1lbmNyeXB0aW9uS2V5GAYgASgMSAJSDWVuY3J5cHRpb25LZXmIAQESKQoN' + 'ZW5jcnlwdGlvbk1hYxgHIAEoDEgDUg1lbmNyeXB0aW9uTWFjiAEBEi0KD2VuY3J5cHRpb25Ob2' + '5jZRgIIAEoDEgEUg9lbmNyeXB0aW9uTm9uY2WIAQEiJQoEVHlwZRIJCgVJTUFHRRAAEgkKBVZJ' + 'REVPEAESBwoDR0lGEAJCHQobX2Rpc3BsYXlMaW1pdEluTWlsbGlzZWNvbmRzQhAKDl9kb3dubG' + '9hZFRva2VuQhAKDl9lbmNyeXB0aW9uS2V5QhAKDl9lbmNyeXB0aW9uTWFjQhIKEF9lbmNyeXB0' + 'aW9uTm9uY2UapwEKC01lZGlhVXBkYXRlEjYKBHR5cGUYASABKA4yIi5FbmNyeXB0ZWRDb250ZW' + '50Lk1lZGlhVXBkYXRlLlR5cGVSBHR5cGUSKAoPdGFyZ2V0TWVzc2FnZUlkGAIgASgJUg90YXJn' + 'ZXRNZXNzYWdlSWQiNgoEVHlwZRIMCghSRU9QRU5FRBAAEgoKBlNUT1JFRBABEhQKEERFQ1JZUF' + 'RJT05fRVJST1IQAhp4Cg5Db250YWN0UmVxdWVzdBI5CgR0eXBlGAEgASgOMiUuRW5jcnlwdGVk' + 'Q29udGVudC5Db250YWN0UmVxdWVzdC5UeXBlUgR0eXBlIisKBFR5cGUSCwoHUkVRVUVTVBAAEg' + 'oKBlJFSkVDVBABEgoKBkFDQ0VQVBACGtIBCg1Db250YWN0VXBkYXRlEjgKBHR5cGUYASABKA4y' + 'JC5FbmNyeXB0ZWRDb250ZW50LkNvbnRhY3RVcGRhdGUuVHlwZVIEdHlwZRIhCglhdmF0YXJTdm' + 'cYAiABKAlIAFIJYXZhdGFyU3ZniAEBEiUKC2Rpc3BsYXlOYW1lGAMgASgJSAFSC2Rpc3BsYXlO' + 'YW1liAEBIh8KBFR5cGUSCwoHUkVRVUVTVBAAEgoKBlVQREFURRABQgwKCl9hdmF0YXJTdmdCDg' + 'oMX2Rpc3BsYXlOYW1lGqQBCghQdXNoS2V5cxIzCgR0eXBlGAEgASgOMh8uRW5jcnlwdGVkQ29u' + 'dGVudC5QdXNoS2V5cy5UeXBlUgR0eXBlEhkKBWtleUlkGAIgASgDSABSBWtleUlkiAEBEhUKA2' + 'tleRgDIAEoDEgBUgNrZXmIAQEiHwoEVHlwZRILCgdSRVFVRVNUEAASCgoGVVBEQVRFEAFCCAoG' + 'X2tleUlkQgYKBF9rZXkahwEKCUZsYW1lU3luYxIiCgxmbGFtZUNvdW50ZXIYASABKANSDGZsYW' + '1lQ291bnRlchI2ChZsYXN0RmxhbWVDb3VudGVyQ2hhbmdlGAIgASgDUhZsYXN0RmxhbWVDb3Vu' + 'dGVyQ2hhbmdlEh4KCmJlc3RGcmllbmQYAyABKAhSCmJlc3RGcmllbmRCCgoIX2dyb3VwSWRCFw' + 'oVX3NlbmRlclByb2ZpbGVDb3VudGVyQg4KDF90ZXh0TWVzc2FnZUIQCg5fbWVzc2FnZVVwZGF0' + 'ZUIICgZfbWVkaWFCDgoMX21lZGlhVXBkYXRlQhAKDl9jb250YWN0VXBkYXRlQhEKD19jb250YW' + 'N0UmVxdWVzdEIMCgpfZmxhbWVTeW5jQgsKCV9wdXNoS2V5c0ILCglfcmVhY3Rpb24='); + diff --git a/lib/src/model/protobuf/client/generated/messages.pbserver.dart b/lib/src/model/protobuf/client/generated/messages.pbserver.dart new file mode 100644 index 0000000..956b01d --- /dev/null +++ b/lib/src/model/protobuf/client/generated/messages.pbserver.dart @@ -0,0 +1,14 @@ +// +// Generated code. Do not modify. +// source: messages.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names +// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +export 'messages.pb.dart'; + diff --git a/lib/src/model/protobuf/push_notification/push_notification.pb.dart b/lib/src/model/protobuf/client/generated/push_notification.pb.dart similarity index 100% rename from lib/src/model/protobuf/push_notification/push_notification.pb.dart rename to lib/src/model/protobuf/client/generated/push_notification.pb.dart diff --git a/lib/src/model/protobuf/push_notification/push_notification.pbenum.dart b/lib/src/model/protobuf/client/generated/push_notification.pbenum.dart similarity index 100% rename from lib/src/model/protobuf/push_notification/push_notification.pbenum.dart rename to lib/src/model/protobuf/client/generated/push_notification.pbenum.dart diff --git a/lib/src/model/protobuf/push_notification/push_notification.pbjson.dart b/lib/src/model/protobuf/client/generated/push_notification.pbjson.dart similarity index 100% rename from lib/src/model/protobuf/push_notification/push_notification.pbjson.dart rename to lib/src/model/protobuf/client/generated/push_notification.pbjson.dart diff --git a/lib/src/model/protobuf/push_notification/push_notification.pbserver.dart b/lib/src/model/protobuf/client/generated/push_notification.pbserver.dart similarity index 100% rename from lib/src/model/protobuf/push_notification/push_notification.pbserver.dart rename to lib/src/model/protobuf/client/generated/push_notification.pbserver.dart diff --git a/lib/src/model/protobuf/client/messages.proto b/lib/src/model/protobuf/client/messages.proto new file mode 100644 index 0000000..39b3105 --- /dev/null +++ b/lib/src/model/protobuf/client/messages.proto @@ -0,0 +1,135 @@ +syntax = "proto3"; + +message Message { + enum Type { + SENDER_DELIVERY_RECEIPT = 0; + PLAINTEXT_CONTENT = 1; + CIPHERTEXT = 2; + PREKEY_BUNDLE = 3; + } + Type type = 1; + string receiptId = 2; + optional bytes encryptedContent = 3; + optional PlaintextContent plaintextContent = 4; +} + +message PlaintextContent { + optional DecryptionErrorMessage decryptionErrorMessage = 1; + + message DecryptionErrorMessage { + enum Type { + UNKNOWN = 0; + PREKEY_UNKNOWN = 1; + } + Type type = 1; + } +} + + +message EncryptedContent { + + optional string groupId = 2; + + /// This can be added, so the receiver can check weather he is up to date with the current profile + optional int64 senderProfileCounter = 3; + + optional TextMessage textMessage = 4; + optional MessageUpdate messageUpdate = 5; + optional Media media = 6; + optional MediaUpdate mediaUpdate = 7; + optional ContactUpdate contactUpdate = 8; + optional ContactRequest contactRequest = 9; + optional FlameSync flameSync = 10; + optional PushKeys pushKeys = 11; + optional Reaction reaction = 12; + + message TextMessage { + string senderMessageId = 1; + string text = 2; + optional string quoteMessageId = 3; + } + + message Reaction { + string targetMessageId = 1; + optional string emoji = 2; + optional bool remove = 3; + } + + message MessageUpdate { + enum Type { + DELETE = 0; + EDIT_TEXT = 1; + OPENED = 2; + } + Type type = 1; + string senderMessageId = 2; + optional string text = 3; + optional int64 timestamp = 4; + } + + message Media { + enum Type { + IMAGE = 0; + VIDEO = 1; + GIF = 2; + } + + string senderMessageId = 1; + Type type = 2; + optional int64 displayLimitInMilliseconds = 3; + bool requiresAuthentication = 4; + + optional bytes downloadToken = 5; + optional bytes encryptionKey = 6; + optional bytes encryptionMac = 7; + optional bytes encryptionNonce = 8; + } + + message MediaUpdate { + enum Type { + REOPENED = 0; + STORED = 1; + DECRYPTION_ERROR = 2; + } + Type type = 1; + string targetMessageId = 2; + } + + message ContactRequest { + enum Type { + REQUEST = 0; + REJECT = 1; + ACCEPT = 2; + } + Type type = 1; + } + + message ContactUpdate { + enum Type { + REQUEST = 0; + UPDATE = 1; + } + + Type type = 1; + optional string avatarSvg = 2; + optional string displayName = 3; + } + + message PushKeys { + enum Type { + REQUEST = 0; + UPDATE = 1; + } + + Type type = 1; + optional int64 keyId = 2; + optional bytes key = 3; + } + + message FlameSync { + int64 flameCounter = 1; + int64 lastFlameCounterChange = 2; + bool bestFriend = 3; + } + +} \ No newline at end of file diff --git a/lib/src/model/protobuf/push_notification/push_notification.proto b/lib/src/model/protobuf/client/push_notification.proto similarity index 100% rename from lib/src/model/protobuf/push_notification/push_notification.proto rename to lib/src/model/protobuf/client/push_notification.proto diff --git a/lib/src/services/api.service.dart b/lib/src/services/api.service.dart index 461d180..8a54cff 100644 --- a/lib/src/services/api.service.dart +++ b/lib/src/services/api.service.dart @@ -17,7 +17,7 @@ import 'package:mutex/mutex.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/constants/secure_storage_keys.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pbserver.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart' diff --git a/lib/src/services/api/media_download.dart b/lib/src/services/api/media_download.dart index 4148d9d..0c2708d 100644 --- a/lib/src/services/api/media_download.dart +++ b/lib/src/services/api/media_download.dart @@ -13,8 +13,8 @@ import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/services/api/media_upload.dart'; import 'package:twonly/src/services/api/utils.dart'; import 'package:twonly/src/utils/log.dart'; diff --git a/lib/src/services/api/media_upload.dart b/lib/src/services/api/media_upload.dart index 96c35a4..364eb1f 100644 --- a/lib/src/services/api/media_upload.dart +++ b/lib/src/services/api/media_upload.dart @@ -19,8 +19,8 @@ import 'package:twonly/globals.dart'; import 'package:twonly/src/constants/secure_storage_keys.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/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/api/http/http_requests.pb.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pbserver.dart'; diff --git a/lib/src/services/api/messages.dart b/lib/src/services/api/messages.dart index c939546..08cbb6c 100644 --- a/lib/src/services/api/messages.dart +++ b/lib/src/services/api/messages.dart @@ -8,9 +8,11 @@ import 'package:fixnum/fixnum.dart'; import 'package:mutex/mutex.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart' + as pb; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pb.dart'; import 'package:twonly/src/services/api/server_messages.dart' show messageGetsAck; @@ -36,12 +38,15 @@ Future tryTransmitMessages() async { }); } -Future sendRetransmitMessage(int retransId) async { +Future tryToSendCompleteMessage(String receiptId) async { try { final retrans = await twonlyDB.messageRetransmissionDao .getRetransmissionById(retransId) .getSingleOrNull(); + /// SET THE Message().receiptID !!!!!!! + /// ALSO THE encryptedContent is NOT YET ENCRYPTED! + if (retrans == null) { Log.error('$retransId not found in database'); return; @@ -156,97 +161,74 @@ Future sendRetransmitMessage(int retransId) async { } } -// encrypts and stores the message and then sends it in the background -Future encryptAndSendMessageAsync( - int? messageId, - int userId, - MessageJson msg, { - PushNotification? pushNotification, -}) async { - Uint8List? pushData; - if (pushNotification != null) { - pushData = await getPushData(userId, pushNotification); - } - - final retransId = - await twonlyDB.messageRetransmissionDao.insertRetransmission( - MessageRetransmissionsCompanion( - contactId: Value(userId), - messageId: Value(messageId), - plaintextContent: Value(Uint8List(0)), - pushData: Value(pushData), - ), - ); - - if (retransId == null) { - Log.error('Could not insert the message into the retransmission database'); - return; - } - - msg.retransId = retransId; - - final plaintextContent = - Uint8List.fromList(gzip.encode(utf8.encode(jsonEncode(msg.toJson())))); - - await twonlyDB.messageRetransmissionDao.updateRetransmission( - retransId, - MessageRetransmissionsCompanion( - plaintextContent: Value(plaintextContent), - ), - ); - - // this can now be done in the background... - unawaited(sendRetransmitMessage(retransId)); -} - -Future sendTextMessage( - int target, - TextMessageContent content, - PushNotification? pushNotification, +Future sendCipherText( + int contactId, + pb.EncryptedContent encryptedContent, ) async { - final messageSendAt = DateTime.now(); - DateTime? openedAt; + final response = pb.Message() + ..type = pb.Message_Type.CIPHERTEXT + ..encryptedContent = encryptedContent.writeToBuffer(); - if (pushNotification != null && pushNotification.hasReactionContent()) { - openedAt = DateTime.now(); - } - - final messageId = await twonlyDB.messagesDao.insertMessage( - MessagesCompanion( - contactId: Value(target), - kind: const Value(MessageKind.textMessage), - sendAt: Value(messageSendAt), - responseToOtherMessageId: Value(content.responseToMessageId), - responseToMessageId: Value(content.responseToOtherMessageId), - downloadState: const Value(DownloadState.downloaded), - openedAt: Value(openedAt), - contentJson: Value( - jsonEncode(content.toJson()), - ), + final receipt = await twonlyDB.receiptsDao.insertReceipt( + ReceiptsCompanion( + contactId: Value(contactId), + message: Value(response.writeToBuffer()), ), ); - if (messageId == null) return; - - if (pushNotification != null && !pushNotification.hasReactionContent()) { - pushNotification.messageId = Int64(messageId); + if (receipt != null) { + await tryToSendCompleteMessage(receipt.receiptId); } - - final msg = MessageJson( - kind: MessageKind.textMessage, - messageSenderId: messageId, - content: content, - timestamp: messageSendAt, - ); - - await encryptAndSendMessageAsync( - messageId, - target, - msg, - pushNotification: pushNotification, - ); } +// Future sendTextMessage( +// int target, +// TextMessageContent content, +// PushNotification? pushNotification, +// ) async { +// final messageSendAt = DateTime.now(); +// DateTime? openedAt; + +// if (pushNotification != null && pushNotification.hasReactionContent()) { +// openedAt = DateTime.now(); +// } + +// final messageId = await twonlyDB.messagesDao.insertMessage( +// MessagesCompanion( +// contactId: Value(target), +// kind: const Value(MessageKind.textMessage), +// sendAt: Value(messageSendAt), +// responseToOtherMessageId: Value(content.responseToMessageId), +// responseToMessageId: Value(content.responseToOtherMessageId), +// downloadState: const Value(DownloadState.downloaded), +// openedAt: Value(openedAt), +// contentJson: Value( +// jsonEncode(content.toJson()), +// ), +// ), +// ); + +// if (messageId == null) return; + +// if (pushNotification != null && !pushNotification.hasReactionContent()) { +// pushNotification.messageId = Int64(messageId); +// } + +// final msg = MessageJson( +// kind: MessageKind.textMessage, +// messageSenderId: messageId, +// content: content, +// timestamp: messageSendAt, +// ); + +// await encryptAndSendMessageAsync( +// messageId, +// target, +// msg, +// pushNotification: pushNotification, +// ); +// } + Future notifyContactAboutOpeningMessage( int fromUserId, List messageOtherIds, @@ -269,33 +251,25 @@ Future notifyContactAboutOpeningMessage( await updateLastMessageId(fromUserId, biggestMessageId); } -Future notifyContactsAboutProfileChange() async { - final contacts = await twonlyDB.contactsDao.getAllNotBlockedContacts(); - +Future notifyContactsAboutProfileChange({int? onlyToContact}) async { final user = await getUser(); if (user == null) return; if (user.avatarSvg == null) return; + final encryptedContent = pb.EncryptedContent() + ..contactUpdate = (pb.EncryptedContent_ContactUpdate() + ..type = pb.EncryptedContent_ContactUpdate_Type.UPDATE + ..avatarSvg = user.avatarSvg! + ..displayName = user.displayName); + + if (onlyToContact != null) { + await sendCipherText(onlyToContact, encryptedContent); + return; + } + + final contacts = await twonlyDB.contactsDao.getAllNotBlockedContacts(); + for (final contact in contacts) { - if (contact.myAvatarCounter < user.avatarCounter) { - await twonlyDB.contactsDao.updateContact( - contact.userId, - ContactsCompanion( - myAvatarCounter: Value(user.avatarCounter), - ), - ); - await encryptAndSendMessageAsync( - null, - contact.userId, - MessageJson( - kind: MessageKind.profileChange, - content: ProfileContent( - avatarSvg: user.avatarSvg!, - displayName: user.displayName, - ), - timestamp: DateTime.now(), - ), - ); - } + await sendCipherText(contact.userId, encryptedContent); } } diff --git a/lib/src/services/api/server_messages.dart b/lib/src/services/api/server_messages.dart index ba89de0..953924c 100644 --- a/lib/src/services/api/server_messages.dart +++ b/lib/src/services/api/server_messages.dart @@ -1,42 +1,31 @@ -// ignore_for_file: avoid_dynamic_calls - import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:cryptography_plus/cryptography_plus.dart'; import 'package:drift/drift.dart'; -import 'package:fixnum/fixnum.dart'; import 'package:mutex/mutex.dart'; import 'package:twonly/globals.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/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart' hide Message; import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart' as client; import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart'; -import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart' as server; -import 'package:twonly/src/services/api/media_download.dart'; -import 'package:twonly/src/services/api/media_upload.dart'; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; import 'package:twonly/src/services/api/messages.dart'; -import 'package:twonly/src/services/api/utils.dart'; -import 'package:twonly/src/services/notifications/pushkeys.notifications.dart'; -import 'package:twonly/src/services/notifications/setup.notifications.dart'; +import 'package:twonly/src/services/api/server_messages/contact.server_messages.dart'; +import 'package:twonly/src/services/api/server_messages/media.server_messages.dart'; +import 'package:twonly/src/services/api/server_messages/messages.server_messages.dart'; +import 'package:twonly/src/services/api/server_messages/prekeys.server_messages.dart'; +import 'package:twonly/src/services/api/server_messages/pushkeys.server_messages.dart'; +import 'package:twonly/src/services/api/server_messages/reaction.server_message.dart'; +import 'package:twonly/src/services/api/server_messages/text_message.server_messages.dart'; import 'package:twonly/src/services/signal/encryption.signal.dart'; -import 'package:twonly/src/services/signal/identity.signal.dart'; -import 'package:twonly/src/services/thumbnail.service.dart'; import 'package:twonly/src/utils/log.dart'; -import 'package:twonly/src/utils/misc.dart'; -import 'package:twonly/src/views/components/animate_icon.dart'; final lockHandleServerMessage = Mutex(); Future handleServerMessage(server.ServerToClient msg) async { - // return lockHandleServerMessage.protect(() async { - client.Response? response; + /// Returns means, that the server can delete the message from the server. + final ok = client.Response_Ok()..none = true; + var response = client.Response()..ok = ok; try { if (msg.v0.hasRequestNewPreKeys()) { @@ -44,13 +33,12 @@ Future handleServerMessage(server.ServerToClient msg) async { } else if (msg.v0.hasNewMessage()) { final body = Uint8List.fromList(msg.v0.newMessage.body); final fromUserId = msg.v0.newMessage.fromUserId.toInt(); - response = await handleNewMessage(fromUserId, body); + await handleNewMessage(fromUserId, body); } else { - Log.error('Got a unknown message from the server: $msg'); - response = client.Response()..error = ErrorCode.InternalError; + Log.error('Unknown server message: $msg'); } } catch (e) { - response = client.Response()..error = ErrorCode.InternalError; + Log.error(e); } final v0 = client.V0() @@ -58,435 +46,159 @@ Future handleServerMessage(server.ServerToClient msg) async { ..response = response; await apiService.sendResponse(ClientToServer()..v0 = v0); - // }); } -DateTime lastSignalDecryptMessage = - DateTime.now().subtract(const Duration(hours: 1)); DateTime lastPushKeyRequest = DateTime.now().subtract(const Duration(hours: 1)); -bool messageGetsAck(MessageKind kind) { - return kind != MessageKind.pushKey && kind != MessageKind.ack; -} +Future handleNewMessage(int fromUserId, Uint8List body) async { + final message = Message.fromBuffer(body); + final receiptId = message.receiptId; -Future handleNewMessage(int fromUserId, Uint8List body) async { - final message = await signalDecryptMessage(fromUserId, body); - if (message == null) { - final encryptedHash = (await Sha256().hash(body)).bytes; - await encryptAndSendMessageAsync( - null, - fromUserId, - MessageJson( - kind: MessageKind.signalDecryptError, - content: SignalDecryptErrorContent(encryptedHash: encryptedHash), - timestamp: DateTime.now(), - ), - ); + switch (message.type) { + case Message_Type.SENDER_DELIVERY_RECEIPT: + Log.info('Got delivery receipt for $receiptId!'); + await twonlyDB.receiptsDao.confirmReceipt(receiptId, fromUserId); - Log.error('Could not decrypt others message!'); - - // Message is not valid, so server can delete it - final ok = client.Response_Ok()..none = true; - return client.Response()..ok = ok; - } - - client.Response? result; - - Log.info('Got: ${message.kind} from $fromUserId'); - - switch (message.kind) { - case MessageKind.ack: - final content = message.content; - if (content is AckContent) { - if (content.messageIdToAck != null) { - const update = MessagesCompanion( - acknowledgeByUser: Value(true), - errorWhileSending: Value(false), - ); - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - content.messageIdToAck!, - update, - ); - } - await twonlyDB.messageRetransmissionDao - .deleteRetransmissionById(content.retransIdToAck); - } - case MessageKind.signalDecryptError: - Log.error( - 'Got signal decrypt error from other user! Sending it again.', - ); - - final content = message.content; - if (content is SignalDecryptErrorContent) { - final hash = Uint8List.fromList(content.encryptedHash); - await twonlyDB.messageRetransmissionDao.resetAckStatusFor( - fromUserId, - hash, + case Message_Type.PLAINTEXT_CONTENT: + if (message.hasPlaintextContent() && + message.plaintextContent.hasDecryptionErrorMessage()) { + Log.info( + 'Got decryption error: ${message.plaintextContent.decryptionErrorMessage.type} for $receiptId', ); - final message = await twonlyDB.messageRetransmissionDao - .getRetransmissionFromHash(fromUserId, hash); - if (message != null) { - unawaited(sendRetransmitMessage(message.retransmissionId)); + await tryToSendCompleteMessage(receiptId); + } + + case Message_Type.CIPHERTEXT: + case Message_Type.PREKEY_BUNDLE: + if (message.hasEncryptedContent()) { + final encryptedContentRaw = + Uint8List.fromList(message.encryptedContent); + + final responsePlaintextContent = await handleEncryptedMessage( + fromUserId, + encryptedContentRaw, + message.type, + ); + Message response; + if (responsePlaintextContent != null) { + response = Message() + ..receiptId = receiptId + ..type = Message_Type.PLAINTEXT_CONTENT + ..plaintextContent = responsePlaintextContent; + Log.error('Sending decryption error ($receiptId)'); } else { - Log.error('Could not find message to retransmit!'); + response = Message()..type = Message_Type.SENDER_DELIVERY_RECEIPT; } - } - - case MessageKind.contactRequest: - await handleContactRequest(fromUserId, message); - - case MessageKind.flameSync: - final contact = await twonlyDB.contactsDao - .getContactByUserId(fromUserId) - .getSingleOrNull(); - if (contact != null && contact.lastFlameCounterChange != null) { - final content = message.content; - if (content is FlameSyncContent) { - var updates = ContactsCompanion( - alsoBestFriend: Value(content.bestFriend), - ); - if (isToday(contact.lastFlameCounterChange!) && - isToday(content.lastFlameCounterChange)) { - if (content.flameCounter > contact.flameCounter) { - updates = ContactsCompanion( - flameCounter: Value(content.flameCounter), - ); - } - } - await twonlyDB.contactsDao.updateContact(fromUserId, updates); - } - } - - case MessageKind.receiveMediaError: - if (message.messageReceiverId != null) { - final openedMessage = await twonlyDB.messagesDao - .getMessageByIdAndContactId(fromUserId, message.messageReceiverId!) - .getSingleOrNull(); - - if (openedMessage != null) { - /// message found - - /// checks if - /// 1. this was a media upload - /// 2. the media was not already retransmitted - /// 3. the media was send in the last two days - if (openedMessage.mediaUploadId != null && - openedMessage.mediaRetransmissionState == - MediaRetransmitting.none && - openedMessage.sendAt - .isAfter(DateTime.now().subtract(const Duration(days: 2)))) { - // reset the media upload state to pending, - // this will cause the media to be re-encrypted again - await twonlyDB.mediaUploadsDao.updateMediaUpload( - openedMessage.mediaUploadId!, - const MediaUploadsCompanion( - state: Value( - UploadState.pending, - ), - ), - ); - // reset the message upload so the upload will be done again - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - message.messageReceiverId!, - const MessagesCompanion( - downloadState: Value(DownloadState.pending), - mediaRetransmissionState: - Value(MediaRetransmitting.retransmitted), - ), - ); - unawaited(retryMediaUpload(false)); - } else { - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - message.messageReceiverId!, - const MessagesCompanion( - errorWhileSending: Value(true), - ), - ); - } - } - } - - case MessageKind.opened: - if (message.messageReceiverId != null) { - final update = MessagesCompanion( - openedAt: Value(message.timestamp), - errorWhileSending: const Value(false), + await twonlyDB.receiptsDao.insertReceipt( + ReceiptsCompanion( + receiptId: Value(receiptId), + contactId: Value(fromUserId), + message: Value(response.writeToBuffer()), + contactWillSendsReceipt: const Value(false), + ), ); - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - message.messageReceiverId!, - update, - ); - final openedMessage = await twonlyDB.messagesDao - .getMessageByMessageId(message.messageReceiverId!) - .getSingleOrNull(); - if (openedMessage != null && - openedMessage.kind == MessageKind.textMessage) { - await twonlyDB.messagesDao.openedAllNonMediaMessagesFromOtherUser( - fromUserId, - ); - } - } - - case MessageKind.rejectRequest: - await deleteContact(fromUserId); - - case MessageKind.acceptRequest: - const update = ContactsCompanion(accepted: Value(true)); - await twonlyDB.contactsDao.updateContact(fromUserId, update); - unawaited(notifyContactsAboutProfileChange()); - - case MessageKind.profileChange: - final content = message.content; - if (content is ProfileContent) { - final update = ContactsCompanion( - avatarSvg: Value(content.avatarSvg), - displayName: Value(content.displayName), - ); - await twonlyDB.contactsDao.updateContact(fromUserId, update); - } - unawaited(createPushAvatars()); - - case MessageKind.requestPushKey: - if (lastPushKeyRequest - .isBefore(DateTime.now().subtract(const Duration(seconds: 60)))) { - lastPushKeyRequest = DateTime.now(); - unawaited(setupNotificationWithUsers(forceContact: fromUserId)); - } - - case MessageKind.pushKey: - if (message.content != null) { - final pushKey = message.content!; - if (pushKey is PushKeyContent) { - await handleNewPushKey(fromUserId, pushKey); - } - } - - // ignore: no_default_cases - default: - if (message.messageSenderId == null) { - Log.error('Messageid not defined $message'); - } else if ([ - MessageKind.textMessage, - MessageKind.media, - MessageKind.storedMediaFile, - MessageKind.reopenedMedia, - ].contains(message.kind)) { - result = await handleMediaOrTextMessage(fromUserId, message); - } else { - Log.error('Got unknown MessageKind $message'); + await tryToSendCompleteMessage(receiptId); } } - - if (messageGetsAck(message.kind) && message.retransId != null) { - Log.info('Sending ACK for ${message.kind}'); - - /// ACK every message - await encryptAndSendMessageAsync( - null, - fromUserId, - MessageJson( - kind: MessageKind.ack, - content: AckContent( - messageIdToAck: message.messageSenderId, - retransIdToAck: message.retransId!, - ), - timestamp: DateTime.now(), - ), - ); - } - - if (result != null) { - return result; - } - final ok = client.Response_Ok()..none = true; - return client.Response()..ok = ok; } -Future handleMediaOrTextMessage( +Future handleEncryptedMessage( int fromUserId, - MessageJson message, + Uint8List encryptedContentRaw, + Message_Type messageType, ) async { - if (message.kind == MessageKind.storedMediaFile) { - if (message.messageReceiverId != null) { - /// stored media file just updates the message - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - message.messageReceiverId!, - const MessagesCompanion( - mediaStored: Value(true), - errorWhileSending: Value(false), - ), - ); - final msg = await twonlyDB.messagesDao - .getMessageByIdAndContactId( - fromUserId, - message.messageReceiverId!, - ) - .getSingleOrNull(); - if (msg != null && msg.mediaUploadId != null) { - final filePath = await getMediaFilePath(msg.mediaUploadId, 'send'); - if (filePath.contains('mp4')) { - unawaited(createThumbnailsForVideo(File(filePath))); - } else { - unawaited(createThumbnailsForImage(File(filePath))); - } - } - } - } else if (message.content != null) { - final content = message.content!; - // when a message is received doubled ignore it... + final (content, decryptionErrorType) = await signalDecryptMessage( + fromUserId, + encryptedContentRaw, + messageType as int, + ); - final openedMessage = await twonlyDB.messagesDao - .getMessageByOtherMessageId(fromUserId, message.messageSenderId!) - .getSingleOrNull(); - - if (openedMessage != null) { - if (openedMessage.errorWhileSending) { - await twonlyDB.messagesDao - .deleteMessagesByMessageId(openedMessage.messageId); - } else { - Log.error( - 'Got a duplicated message from other user: ${message.messageSenderId!}', - ); - final ok = client.Response_Ok()..none = true; - return client.Response()..ok = ok; - } - } - - int? responseToMessageId; - int? responseToOtherMessageId; - int? messageId; - - var acknowledgeByUser = false; - DateTime? openedAt; - - if (message.kind == MessageKind.reopenedMedia) { - acknowledgeByUser = true; - openedAt = DateTime.now(); - } - - if (content is TextMessageContent) { - responseToMessageId = content.responseToMessageId; - responseToOtherMessageId = content.responseToOtherMessageId; - - if (responseToMessageId != null || responseToOtherMessageId != null) { - // reactions are shown in the notification directly... - if (isEmoji(content.text)) { - openedAt = DateTime.now(); - } - } - } - if (content is ReopenedMediaFileContent) { - responseToMessageId = content.messageId; - } - - if (responseToMessageId != null) { - await twonlyDB.messagesDao.updateMessageByOtherUser( - fromUserId, - responseToMessageId, - MessagesCompanion( - errorWhileSending: const Value(false), - openedAt: Value( - DateTime.now(), - ), // when a user reacted to the media file, it should be marked as opened - ), - ); - } - - final contentJson = jsonEncode(content.toJson()); - final update = MessagesCompanion( - contactId: Value(fromUserId), - kind: Value(message.kind), - messageOtherId: Value(message.messageSenderId), - contentJson: Value(contentJson), - acknowledgeByServer: const Value(true), - acknowledgeByUser: Value(acknowledgeByUser), - responseToMessageId: Value(responseToMessageId), - responseToOtherMessageId: Value(responseToOtherMessageId), - openedAt: Value(openedAt), - downloadState: Value( - message.kind == MessageKind.media - ? DownloadState.pending - : DownloadState.downloaded, - ), - sendAt: Value(message.timestamp), - ); - - messageId = await twonlyDB.messagesDao.insertMessage( - update, - ); - - if (messageId == null) { - Log.error('could not insert message into db'); - return client.Response()..error = ErrorCode.InternalError; - } - - Log.info('Inserted a new message with id: $messageId'); - - if (message.kind == MessageKind.media) { - await twonlyDB.contactsDao.incFlameCounter( - fromUserId, - true, - message.timestamp, - ); - - final msg = await twonlyDB.messagesDao - .getMessageByMessageId(messageId) - .getSingleOrNull(); - if (msg != null) { - unawaited(startDownloadMedia(msg, false)); - } - } - } else { - Log.error('Content is not defined $message'); + if (content == null) { + return PlaintextContent() + ..decryptionErrorMessage = (PlaintextContent_DecryptionErrorMessage() + ..type = decryptionErrorType!); + } + + final senderProfileCounter = await checkForProfileUpdate(fromUserId, content); + + if (content.hasContactRequest()) { + await handleContactRequest(fromUserId, content.contactRequest); + return null; + } + + if (content.hasContactUpdate()) { + await handleContactUpdate( + fromUserId, + content.contactUpdate, + senderProfileCounter, + ); + return null; + } + + if (content.hasFlameSync()) { + await handleFlameSync(fromUserId, content.flameSync); + return null; + } + + if (content.hasPushKeys()) { + await handlePushKey(fromUserId, content.pushKeys); + return null; + } + + if (!content.hasGroupId()) { + return null; + } + + /// Verify that the user is (still) in that group... + if (!await twonlyDB.groupsDao.isContactInGroup(fromUserId, content.groupId)) { + Log.error('User $fromUserId tried to access group ${content.groupId}.'); + return null; + } + + if (content.hasMessageUpdate()) { + await handleMessageUpdate( + fromUserId, + content.groupId, + content.messageUpdate, + ); + return null; + } + + if (content.hasTextMessage()) { + await handleTextMessage( + fromUserId, + content.groupId, + content.textMessage, + ); + return null; + } + + if (content.hasReaction()) { + await handleReaction( + fromUserId, + content.groupId, + content.reaction, + ); + return null; + } + + if (content.hasMedia()) { + await handleMedia( + fromUserId, + content.groupId, + content.media, + ); + return null; + } + + if (content.hasMediaUpdate()) { + await handleMediaUpdate( + fromUserId, + content.groupId, + content.mediaUpdate, + ); + return null; } - // unarchive contact when receiving a new message - await twonlyDB.contactsDao.updateContact( - fromUserId, - const ContactsCompanion( - archived: Value(false), - ), - ); return null; } - -Future handleRequestNewPreKey() async { - final localPreKeys = await signalGetPreKeys(); - - final prekeysList = []; - for (var i = 0; i < localPreKeys.length; i++) { - prekeysList.add( - client.Response_PreKey() - ..id = Int64(localPreKeys[i].id) - ..prekey = localPreKeys[i].getKeyPair().publicKey.serialize(), - ); - } - final prekeys = client.Response_Prekeys(prekeys: prekeysList); - final ok = client.Response_Ok()..prekeys = prekeys; - return client.Response()..ok = ok; -} - -Future handleContactRequest( - int fromUserId, - MessageJson message, -) async { - // request the username by the server so an attacker can not - // forge the displayed username in the contact request - final username = await apiService.getUsername(fromUserId); - if (username.isSuccess) { - final name = username.value.userdata.username as Uint8List; - await twonlyDB.contactsDao.insertContact( - ContactsCompanion( - username: Value(utf8.decode(name)), - userId: Value(fromUserId), - requested: const Value(true), - ), - ); - } - await setupNotificationWithUsers(); -} diff --git a/lib/src/services/api/server_messages/contact.server_messages.dart b/lib/src/services/api/server_messages/contact.server_messages.dart new file mode 100644 index 0000000..aff4c79 --- /dev/null +++ b/lib/src/services/api/server_messages/contact.server_messages.dart @@ -0,0 +1,121 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:drift/drift.dart'; +import 'package:twonly/globals.dart'; +import 'package:twonly/src/database/twonly.db.dart' hide Message; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; +import 'package:twonly/src/services/api/messages.dart'; +import 'package:twonly/src/services/api/utils.dart'; +import 'package:twonly/src/services/notifications/pushkeys.notifications.dart'; +import 'package:twonly/src/services/notifications/setup.notifications.dart'; +import 'package:twonly/src/utils/misc.dart'; + +Future handleContactRequest( + int fromUserId, + EncryptedContent_ContactRequest contactRequest, +) async { + switch (contactRequest.type) { + case EncryptedContent_ContactRequest_Type.REQUEST: + // Request the username by the server so an attacker can not + // forge the displayed username in the contact request + final username = await apiService.getUsername(fromUserId); + if (username.isSuccess) { + // ignore: avoid_dynamic_calls + final name = username.value.userdata.username as Uint8List; + await twonlyDB.contactsDao.insertContact( + ContactsCompanion( + username: Value(utf8.decode(name)), + userId: Value(fromUserId), + requested: const Value(true), + ), + ); + } + await setupNotificationWithUsers(); + case EncryptedContent_ContactRequest_Type.ACCEPT: + await twonlyDB.contactsDao.updateContact( + fromUserId, + const ContactsCompanion( + requested: Value(false), + accepted: Value(true), + ), + ); + case EncryptedContent_ContactRequest_Type.REJECT: + await twonlyDB.contactsDao.deleteContactByUserId(fromUserId); + } +} + +Future handleContactUpdate( + int fromUserId, + EncryptedContent_ContactUpdate contactUpdate, + int? senderProfileCounter) async { + switch (contactUpdate.type) { + case EncryptedContent_ContactUpdate_Type.REQUEST: + await notifyContactsAboutProfileChange(onlyToContact: fromUserId); + + case EncryptedContent_ContactUpdate_Type.UPDATE: + if (contactUpdate.hasAvatarSvg() && + contactUpdate.hasDisplayName() && + senderProfileCounter != null) { + await twonlyDB.contactsDao.updateContact( + fromUserId, + ContactsCompanion( + avatarSvg: Value(contactUpdate.avatarSvg), + displayName: Value(contactUpdate.displayName), + senderProfileCounter: Value(senderProfileCounter), + ), + ); + unawaited(createPushAvatars()); + } + } +} + +Future handleFlameSync( + int contactId, + EncryptedContent_FlameSync flameSync, +) async { + final contact = await twonlyDB.contactsDao + .getContactByUserId(contactId) + .getSingleOrNull(); + + if (contact == null || contact.lastFlameCounterChange != null) return; + + var updates = ContactsCompanion( + alsoBestFriend: Value(flameSync.bestFriend), + ); + if (isToday(contact.lastFlameCounterChange!) && + isToday(fromTimestamp(flameSync.lastFlameCounterChange))) { + if (flameSync.flameCounter > contact.flameCounter) { + updates = ContactsCompanion( + flameCounter: Value(flameSync.flameCounter.toInt()), + ); + } + } + await twonlyDB.contactsDao.updateContact(contactId, updates); +} + +Future checkForProfileUpdate( + int fromUserId, + EncryptedContent content, +) async { + int? senderProfileCounter; + + if (content.hasSenderProfileCounter() && !content.hasContactUpdate()) { + senderProfileCounter = content.senderProfileCounter.toInt(); + final contact = await twonlyDB.contactsDao + .getContactByUserId(fromUserId) + .getSingleOrNull(); + if (contact != null) { + if (contact.senderProfileCounter < senderProfileCounter) { + await sendCipherText( + fromUserId, + EncryptedContent() + ..contactUpdate = (EncryptedContent_ContactUpdate() + ..type = EncryptedContent_ContactUpdate_Type.REQUEST), + ); + } + } + } + + return senderProfileCounter; +} diff --git a/lib/src/services/api/server_messages/media.server_messages.dart b/lib/src/services/api/server_messages/media.server_messages.dart new file mode 100644 index 0000000..7b2583b --- /dev/null +++ b/lib/src/services/api/server_messages/media.server_messages.dart @@ -0,0 +1,92 @@ + +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; + +Future handleMedia(int fromUserId, String groupId, EncryptedContent_Media media) async { +TODO +} + +Future handleMediaUpdate(int fromUserId, String groupId, EncryptedContent_MediaUpdate mediaUpdate) async { +TODO + + + // switch (message.kind) { + // case MessageKind.receiveMediaError: + // if (message.messageReceiverId != null) { + // final openedMessage = await twonlyDB.messagesDao + // .getMessageByIdAndContactId(fromUserId, message.messageReceiverId!) + // .getSingleOrNull(); + + // if (openedMessage != null) { + // /// message found + + // /// checks if + // /// 1. this was a media upload + // /// 2. the media was not already retransmitted + // /// 3. the media was send in the last two days + // if (openedMessage.mediaUploadId != null && + // openedMessage.mediaRetransmissionState == + // MediaRetransmitting.none && + // openedMessage.sendAt + // .isAfter(DateTime.now().subtract(const Duration(days: 2)))) { + // // reset the media upload state to pending, + // // this will cause the media to be re-encrypted again + // await twonlyDB.mediaUploadsDao.updateMediaUpload( + // openedMessage.mediaUploadId!, + // const MediaUploadsCompanion( + // state: Value( + // UploadState.pending, + // ), + // ), + // ); + // // reset the message upload so the upload will be done again + // await twonlyDB.messagesDao.updateMessageByOtherUser( + // fromUserId, + // message.messageReceiverId!, + // const MessagesCompanion( + // downloadState: Value(DownloadState.pending), + // mediaRetransmissionState: + // Value(MediaRetransmitting.retransmitted), + // ), + // ); + // unawaited(retryMediaUpload(false)); + // } else { + // await twonlyDB.messagesDao.updateMessageByOtherUser( + // fromUserId, + // message.messageReceiverId!, + // const MessagesCompanion( + // errorWhileSending: Value(true), + // ), + // ); + // } + // } + // } + + + if (message.kind == MessageKind.storedMediaFile) { + if (message.messageReceiverId != null) { + /// stored media file just updates the message + await twonlyDB.messagesDao.updateMessageByOtherUser( + fromUserId, + message.messageReceiverId!, + const MessagesCompanion( + mediaStored: Value(true), + errorWhileSending: Value(false), + ), + ); + final msg = await twonlyDB.messagesDao + .getMessageByIdAndContactId( + fromUserId, + message.messageReceiverId!, + ) + .getSingleOrNull(); + if (msg != null && msg.mediaUploadId != null) { + final filePath = await getMediaFilePath(msg.mediaUploadId, 'send'); + if (filePath.contains('mp4')) { + unawaited(createThumbnailsForVideo(File(filePath))); + } else { + unawaited(createThumbnailsForImage(File(filePath))); + } + } + } + } else if (message.content != null) {} +} diff --git a/lib/src/services/api/server_messages/messages.server_messages.dart b/lib/src/services/api/server_messages/messages.server_messages.dart new file mode 100644 index 0000000..6a65873 --- /dev/null +++ b/lib/src/services/api/server_messages/messages.server_messages.dart @@ -0,0 +1,35 @@ +import 'package:twonly/globals.dart'; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; +import 'package:twonly/src/services/api/utils.dart'; +import 'package:twonly/src/utils/log.dart'; + +Future handleMessageUpdate( + int contactId, + String groupId, + EncryptedContent_MessageUpdate messageUpdate, +) async { + switch (messageUpdate.type) { + case EncryptedContent_MessageUpdate_Type.OPENED: + Log.info('Opened message ${messageUpdate.senderMessageId}'); + await twonlyDB.messagesDao.handleMessageOpened( + groupId, + messageUpdate.senderMessageId, + fromTimestamp(messageUpdate.timestamp), + ); + case EncryptedContent_MessageUpdate_Type.DELETE: + Log.info('Delete message ${messageUpdate.senderMessageId}'); + await twonlyDB.messagesDao.handleMessageDeletion( + contactId, + messageUpdate.senderMessageId, + fromTimestamp(messageUpdate.timestamp), + ); + case EncryptedContent_MessageUpdate_Type.EDIT_TEXT: + Log.info('Edit message ${messageUpdate.senderMessageId}'); + await twonlyDB.messagesDao.handleTextEdit( + contactId, + messageUpdate.senderMessageId, + messageUpdate.text, + fromTimestamp(messageUpdate.timestamp), + ); + } +} diff --git a/lib/src/services/api/server_messages/prekeys.server_messages.dart b/lib/src/services/api/server_messages/prekeys.server_messages.dart new file mode 100644 index 0000000..4f2ed1c --- /dev/null +++ b/lib/src/services/api/server_messages/prekeys.server_messages.dart @@ -0,0 +1,20 @@ +import 'package:fixnum/fixnum.dart'; +import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart' + as client; +import 'package:twonly/src/services/signal/identity.signal.dart'; + +Future handleRequestNewPreKey() async { + final localPreKeys = await signalGetPreKeys(); + + final prekeysList = []; + for (var i = 0; i < localPreKeys.length; i++) { + prekeysList.add( + client.Response_PreKey() + ..id = Int64(localPreKeys[i].id) + ..prekey = localPreKeys[i].getKeyPair().publicKey.serialize(), + ); + } + final prekeys = client.Response_Prekeys(prekeys: prekeysList); + final ok = client.Response_Ok()..prekeys = prekeys; + return client.Response()..ok = ok; +} diff --git a/lib/src/services/api/server_messages/pushkeys.server_messages.dart b/lib/src/services/api/server_messages/pushkeys.server_messages.dart new file mode 100644 index 0000000..4e755ff --- /dev/null +++ b/lib/src/services/api/server_messages/pushkeys.server_messages.dart @@ -0,0 +1,23 @@ +import 'dart:async'; + +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; +import 'package:twonly/src/services/notifications/pushkeys.notifications.dart'; + +DateTime lastPushKeyRequest = DateTime.now().subtract(const Duration(hours: 1)); + +Future handlePushKey( + int contactId, + EncryptedContent_PushKeys pushKeys, +) async { + switch (pushKeys.type) { + case EncryptedContent_PushKeys_Type.REQUEST: + if (lastPushKeyRequest + .isBefore(DateTime.now().subtract(const Duration(seconds: 60)))) { + lastPushKeyRequest = DateTime.now(); + unawaited(setupNotificationWithUsers(forceContact: contactId)); + } + + case EncryptedContent_PushKeys_Type.UPDATE: + await handleNewPushKey(contactId, pushKeys.keyId.toInt(), pushKeys.key); + } +} diff --git a/lib/src/services/api/server_messages/reaction.server_message.dart b/lib/src/services/api/server_messages/reaction.server_message.dart new file mode 100644 index 0000000..733457c --- /dev/null +++ b/lib/src/services/api/server_messages/reaction.server_message.dart @@ -0,0 +1,25 @@ +import 'package:twonly/globals.dart'; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; + +Future handleReaction( + int fromUserId, + String groupId, + EncryptedContent_Reaction reaction, +) async { + if (reaction.hasRemove()) { + if (reaction.remove) { + await twonlyDB.reactionsDao + .updateReaction(fromUserId, reaction.targetMessageId, groupId, null); + } + return; + } + if (reaction.hasEmoji()) { + await twonlyDB.reactionsDao.updateReaction( + fromUserId, + reaction.targetMessageId, + groupId, + reaction.emoji, + ); + return; + } +} diff --git a/lib/src/services/api/server_messages/text_message.server_messages.dart b/lib/src/services/api/server_messages/text_message.server_messages.dart new file mode 100644 index 0000000..df9140c --- /dev/null +++ b/lib/src/services/api/server_messages/text_message.server_messages.dart @@ -0,0 +1,125 @@ +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; + +Future handleTextMessage( + int fromUserId, + String groupId, + EncryptedContent_TextMessage textMessage, +) async { + TODO + // final content = message.content!; + // // when a message is received doubled ignore it... + + // final openedMessage = await twonlyDB.messagesDao + // .getMessageByOtherMessageId(fromUserId, message.messageSenderId!) + // .getSingleOrNull(); + + // if (openedMessage != null) { + // if (openedMessage.errorWhileSending) { + // await twonlyDB.messagesDao + // .deleteMessagesByMessageId(openedMessage.messageId); + // } else { + // Log.error( + // 'Got a duplicated message from other user: ${message.messageSenderId!}', + // ); + // final ok = client.Response_Ok()..none = true; + // return client.Response()..ok = ok; + // } + // } + + // int? responseToMessageId; + // int? responseToOtherMessageId; + // int? messageId; + + // var acknowledgeByUser = false; + // DateTime? openedAt; + + // if (message.kind == MessageKind.reopenedMedia) { + // acknowledgeByUser = true; + // openedAt = DateTime.now(); + // } + + // if (content is TextMessageContent) { + // responseToMessageId = content.responseToMessageId; + // responseToOtherMessageId = content.responseToOtherMessageId; + + // if (responseToMessageId != null || responseToOtherMessageId != null) { + // // reactions are shown in the notification directly... + // if (isEmoji(content.text)) { + // openedAt = DateTime.now(); + // } + // } + // } + // if (content is ReopenedMediaFileContent) { + // responseToMessageId = content.messageId; + // } + + // if (responseToMessageId != null) { + // await twonlyDB.messagesDao.updateMessageByOtherUser( + // fromUserId, + // responseToMessageId, + // MessagesCompanion( + // errorWhileSending: const Value(false), + // openedAt: Value( + // DateTime.now(), + // ), // when a user reacted to the media file, it should be marked as opened + // ), + // ); + // } + + // final contentJson = jsonEncode(content.toJson()); + // final update = MessagesCompanion( + // contactId: Value(fromUserId), + // kind: Value(message.kind), + // messageOtherId: Value(message.messageSenderId), + // contentJson: Value(contentJson), + // acknowledgeByServer: const Value(true), + // acknowledgeByUser: Value(acknowledgeByUser), + // responseToMessageId: Value(responseToMessageId), + // responseToOtherMessageId: Value(responseToOtherMessageId), + // openedAt: Value(openedAt), + // downloadState: Value( + // message.kind == MessageKind.media + // ? DownloadState.pending + // : DownloadState.downloaded, + // ), + // sendAt: Value(message.timestamp), + // ); + + // messageId = await twonlyDB.messagesDao.insertMessage( + // update, + // ); + + // if (messageId == null) { + // Log.error('could not insert message into db'); + // return client.Response()..error = ErrorCode.InternalError; + // } + + // Log.info('Inserted a new message with id: $messageId'); + + // if (message.kind == MessageKind.media) { + // await twonlyDB.contactsDao.incFlameCounter( + // fromUserId, + // true, + // message.timestamp, + // ); + + // final msg = await twonlyDB.messagesDao + // .getMessageByMessageId(messageId) + // .getSingleOrNull(); + // if (msg != null) { + // unawaited(startDownloadMedia(msg, false)); + // } + // } + // } else { + // Log.error('Content is not defined $message'); + // } + + // // unarchive contact when receiving a new message + // await twonlyDB.contactsDao.updateContact( + // fromUserId, + // const ContactsCompanion( + // archived: Value(false), + // ), + // ); + // return null; +} diff --git a/lib/src/services/api/utils.dart b/lib/src/services/api/utils.dart index 3c42df9..c5b119a 100644 --- a/lib/src/services/api/utils.dart +++ b/lib/src/services/api/utils.dart @@ -2,8 +2,8 @@ import 'package:drift/drift.dart'; import 'package:fixnum/fixnum.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart' as client; import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pbserver.dart'; @@ -24,6 +24,10 @@ class Result { bool get isError => error != null; } +DateTime fromTimestamp(Int64 timeStamp) { + return DateTime.fromMillisecondsSinceEpoch(timeStamp.toInt() * 1000); +} + // ignore: strict_raw_type Result asResult(server.ServerToClient? msg) { if (msg == null) { diff --git a/lib/src/services/flame.service.dart b/lib/src/services/flame.service.dart index 01edd40..929dc0b 100644 --- a/lib/src/services/flame.service.dart +++ b/lib/src/services/flame.service.dart @@ -1,10 +1,10 @@ import 'package:collection/collection.dart'; import 'package:drift/drift.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart' as my; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart' as my; import 'package:twonly/src/services/api/messages.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; diff --git a/lib/src/services/mediafile.service.dart b/lib/src/services/mediafile.service.dart new file mode 100644 index 0000000..eea8842 --- /dev/null +++ b/lib/src/services/mediafile.service.dart @@ -0,0 +1,5 @@ +import 'package:twonly/src/utils/log.dart'; + +Future removeMediaFile(String mediaId) async { + Log.error('TODO removeMediaFile: $mediaId'); +} diff --git a/lib/src/services/notifications/pushkeys.notifications.dart b/lib/src/services/notifications/pushkeys.notifications.dart index 5488cc1..562da78 100644 --- a/lib/src/services/notifications/pushkeys.notifications.dart +++ b/lib/src/services/notifications/pushkeys.notifications.dart @@ -9,10 +9,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/constants/secure_storage_keys.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart' as my; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart' as my; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pb.dart'; import 'package:twonly/src/services/api/messages.dart'; import 'package:twonly/src/utils/log.dart'; @@ -144,7 +144,7 @@ Future updatePushUser(Contact contact) async { await setPushKeys(SecureStorageKeys.receivingPushKeys, pushKeys); } -Future handleNewPushKey(int fromUserId, my.PushKeyContent pushKey) async { +Future handleNewPushKey(int fromUserId, int keyId, List key) async { final pushKeys = await getPushKeys(SecureStorageKeys.sendingPushKeys); var pushUser = pushKeys.firstWhereOrNull((x) => x.userId == fromUserId); diff --git a/lib/src/services/signal/encryption.signal.dart b/lib/src/services/signal/encryption.signal.dart index 8087fac..1338663 100644 --- a/lib/src/services/signal/encryption.signal.dart +++ b/lib/src/services/signal/encryption.signal.dart @@ -1,10 +1,8 @@ -import 'dart:convert'; -import 'dart:io'; import 'dart:typed_data'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:mutex/mutex.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'; import 'package:twonly/src/services/signal/consts.signal.dart'; import 'package:twonly/src/services/signal/prekeys.signal.dart'; import 'package:twonly/src/services/signal/utils.signal.dart'; @@ -92,42 +90,40 @@ Future signalEncryptMessage( }); } -Future signalDecryptMessage(int source, Uint8List msg) async { +Future<(EncryptedContent?, PlaintextContent_DecryptionErrorMessage_Type?)> + signalDecryptMessage( + int source, + Uint8List encryptedContentRaw, + int type, +) async { try { - final signalStore = (await getSignalStore())!; - final session = SessionCipher.fromStore( - signalStore, + (await getSignalStore())!, SignalProtocolAddress(source.toString(), defaultDeviceId), ); - final msgs = removeLastXBytes(msg, 4); - if (msgs == null) { - Log.error('Message requires at least 4 bytes.'); - return null; - } - final body = msgs[0]; - final type = bytesToInt(msgs[1]); Uint8List plaintext; - if (type == CiphertextMessage.prekeyType) { - final pre = PreKeySignalMessage(body); - plaintext = await session.decrypt(pre); - } else if (type == CiphertextMessage.whisperType) { - final signalMsg = SignalMessage.fromSerialized(body); - plaintext = await session.decryptFromSignal(signalMsg); - } else { - Log.error('Type not known: $type'); - return null; + + switch (type) { + case CiphertextMessage.prekeyType: + plaintext = await session.decrypt( + PreKeySignalMessage(encryptedContentRaw), + ); + case CiphertextMessage.whisperType: + plaintext = await session.decryptFromSignal( + SignalMessage.fromSerialized(encryptedContentRaw), + ); + default: + Log.error('Unknown Message Decryption Type: $type'); + return (null, PlaintextContent_DecryptionErrorMessage_Type.UNKNOWN); } - return MessageJson.fromJson( - jsonDecode( - utf8.decode( - gzip.decode(plaintext), - ), - ) as Map, - ); + + return (EncryptedContent.fromBuffer(plaintext), null); + } on InvalidKeyIdException catch (e) { + Log.error(e); + return (null, PlaintextContent_DecryptionErrorMessage_Type.PREKEY_UNKNOWN); } catch (e) { - Log.error(e.toString()); - return null; + Log.error(e); + return (null, PlaintextContent_DecryptionErrorMessage_Type.UNKNOWN); } } diff --git a/lib/src/services/signal/prekeys.signal.dart b/lib/src/services/signal/prekeys.signal.dart index 9ce59be..ccee8ec 100644 --- a/lib/src/services/signal/prekeys.signal.dart +++ b/lib/src/services/signal/prekeys.signal.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:drift/drift.dart'; import 'package:mutex/mutex.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart' as server; import 'package:twonly/src/utils/log.dart'; diff --git a/lib/src/services/twonly_safe/create_backup.twonly_safe.dart b/lib/src/services/twonly_safe/create_backup.twonly_safe.dart index 5d18482..5a93816 100644 --- a/lib/src/services/twonly_safe/create_backup.twonly_safe.dart +++ b/lib/src/services/twonly_safe/create_backup.twonly_safe.dart @@ -11,7 +11,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twonly/src/constants/secure_storage_keys.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/model/protobuf/backup/backup.pb.dart'; import 'package:twonly/src/services/api/media_upload.dart'; diff --git a/lib/src/services/twonly_safe/restore.twonly_safe.dart b/lib/src/services/twonly_safe/restore.twonly_safe.dart index 471bef2..28a14c0 100644 --- a/lib/src/services/twonly_safe/restore.twonly_safe.dart +++ b/lib/src/services/twonly_safe/restore.twonly_safe.dart @@ -11,7 +11,7 @@ import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twonly/src/constants/secure_storage_keys.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/model/protobuf/backup/backup.pb.dart'; import 'package:twonly/src/services/twonly_safe/common.twonly_safe.dart'; diff --git a/lib/src/utils/misc.dart b/lib/src/utils/misc.dart index 41b1847..63d2475 100644 --- a/lib/src/utils/misc.dart +++ b/lib/src/utils/misc.dart @@ -9,9 +9,9 @@ import 'package:gal/gal.dart'; import 'package:intl/intl.dart'; import 'package:local_auth/local_auth.dart'; import 'package:provider/provider.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/localization/generated/app_localizations.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/providers/settings.provider.dart'; import 'package:twonly/src/utils/log.dart'; diff --git a/lib/src/views/camera/camera_preview_controller_view.dart b/lib/src/views/camera/camera_preview_controller_view.dart index 40ded4d..26f8d0b 100644 --- a/lib/src/views/camera/camera_preview_controller_view.dart +++ b/lib/src/views/camera/camera_preview_controller_view.dart @@ -9,8 +9,8 @@ import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:screenshot/screenshot.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; @@ -308,7 +308,7 @@ class _CameraPreviewViewState extends State { imageBytes: imageBytes, sharedFromGallery: sharedFromGallery, sendTo: widget.sendTo, - mirrorVideo: isFront && Platform.isAndroid, + mirrorVideo: isFront && Platform.isAndroid && false, useHighQuality: true, ), transitionsBuilder: (context, animation, secondaryAnimation, child) { diff --git a/lib/src/views/camera/camera_send_to_view.dart b/lib/src/views/camera/camera_send_to_view.dart index b29c109..e00d990 100644 --- a/lib/src/views/camera/camera_send_to_view.dart +++ b/lib/src/views/camera/camera_send_to_view.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:camera/camera.dart'; import 'package:flutter/material.dart'; import 'package:screenshot/screenshot.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/views/camera/camera_preview_components/camera_preview.dart'; import 'package:twonly/src/views/camera/camera_preview_controller_view.dart'; diff --git a/lib/src/views/camera/share_image_components/best_friends_selector.dart b/lib/src/views/camera/share_image_components/best_friends_selector.dart index 86ba2c9..f63cba5 100644 --- a/lib/src/views/camera/share_image_components/best_friends_selector.dart +++ b/lib/src/views/camera/share_image_components/best_friends_selector.dart @@ -4,8 +4,8 @@ import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/flame.dart'; import 'package:twonly/src/views/components/headline.dart'; diff --git a/lib/src/views/camera/share_image_editor_view.dart b/lib/src/views/camera/share_image_editor_view.dart index 6dc0239..acd8eaa 100644 --- a/lib/src/views/camera/share_image_editor_view.dart +++ b/lib/src/views/camera/share_image_editor_view.dart @@ -8,8 +8,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:screenshot/screenshot.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/api/media_upload.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; diff --git a/lib/src/views/camera/share_image_view.dart b/lib/src/views/camera/share_image_view.dart index f957ba6..537a193 100644 --- a/lib/src/views/camera/share_image_view.dart +++ b/lib/src/views/camera/share_image_view.dart @@ -7,8 +7,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/api/media_upload.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/camera/share_image_components/best_friends_selector.dart'; diff --git a/lib/src/views/chats/add_new_user.view.dart b/lib/src/views/chats/add_new_user.view.dart index d6398b4..c05331e 100644 --- a/lib/src/views/chats/add_new_user.view.dart +++ b/lib/src/views/chats/add_new_user.view.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pbserver.dart'; import 'package:twonly/src/services/api/messages.dart'; import 'package:twonly/src/services/api/utils.dart'; diff --git a/lib/src/views/chats/chat_list.view.dart b/lib/src/views/chats/chat_list.view.dart index fb2157d..be2444d 100644 --- a/lib/src/views/chats/chat_list.view.dart +++ b/lib/src/views/chats/chat_list.view.dart @@ -7,9 +7,9 @@ import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/providers/connection.provider.dart'; import 'package:twonly/src/services/api/media_download.dart'; diff --git a/lib/src/views/chats/chat_list_components/last_message_time.dart b/lib/src/views/chats/chat_list_components/last_message_time.dart index b1f229f..273869c 100644 --- a/lib/src/views/chats/chat_list_components/last_message_time.dart +++ b/lib/src/views/chats/chat_list_components/last_message_time.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; class LastMessageTime extends StatefulWidget { diff --git a/lib/src/views/chats/chat_messages.view.dart b/lib/src/views/chats/chat_messages.view.dart index 654bd7c..8d12d25 100644 --- a/lib/src/views/chats/chat_messages.view.dart +++ b/lib/src/views/chats/chat_messages.view.dart @@ -8,10 +8,10 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:pie_menu/pie_menu.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pb.dart'; import 'package:twonly/src/services/api/messages.dart'; @@ -134,7 +134,7 @@ class _ChatMessagesViewState extends State { final tmpEmojiReactionsToMessageId = >{}; // only send openedMessage to one text message, as receiver will then set all as read... - int? openedTextMessageOtherIds; + List openedTextMessageOtherIds; final messageOtherMessageIdToMyMessageId = {}; final messageIdToMessage = {}; @@ -154,7 +154,7 @@ class _ChatMessagesViewState extends State { msg.openedAt == null && (openedTextMessageOtherIds == null || openedTextMessageOtherIds < msg.messageOtherId!)) { - openedTextMessageOtherIds = msg.messageOtherId; + openedTextMessageOtherIds.add(msg.messageOtherId); } Message? responseTo; @@ -210,10 +210,10 @@ class _ChatMessagesViewState extends State { } } - if (openedTextMessageOtherIds != null) { + if (openedTextMessageOtherIds.isNotEmpty) { await notifyContactAboutOpeningMessage( widget.contact.userId, - [openedTextMessageOtherIds], + openedTextMessageOtherIds, ); } diff --git a/lib/src/views/chats/chat_messages_components/chat_list_entry.dart b/lib/src/views/chats/chat_messages_components/chat_list_entry.dart index 4ba5c6b..d4770b5 100644 --- a/lib/src/views/chats/chat_messages_components/chat_list_entry.dart +++ b/lib/src/views/chats/chat_messages_components/chat_list_entry.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/views/chats/chat_messages.view.dart'; import 'package:twonly/src/views/chats/chat_messages_components/chat_media_entry.dart'; diff --git a/lib/src/views/chats/chat_messages_components/chat_media_entry.dart b/lib/src/views/chats/chat_messages_components/chat_media_entry.dart index 65208f0..9a247f9 100644 --- a/lib/src/views/chats/chat_messages_components/chat_media_entry.dart +++ b/lib/src/views/chats/chat_messages_components/chat_media_entry.dart @@ -4,8 +4,8 @@ import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pbserver.dart'; import 'package:twonly/src/services/api/media_download.dart' as received; diff --git a/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart b/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart index 113400d..d859e8f 100644 --- a/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart +++ b/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart @@ -2,8 +2,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/animate_icon.dart'; diff --git a/lib/src/views/chats/chat_messages_components/in_chat_media_viewer.dart b/lib/src/views/chats/chat_messages_components/in_chat_media_viewer.dart index 26774e0..28a4623 100644 --- a/lib/src/views/chats/chat_messages_components/in_chat_media_viewer.dart +++ b/lib/src/views/chats/chat_messages_components/in_chat_media_viewer.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/views/chats/chat_messages_components/message_send_state_icon.dart'; import 'package:twonly/src/views/memories/memories_item_thumbnail.dart'; diff --git a/lib/src/views/chats/chat_messages_components/message_actions.dart b/lib/src/views/chats/chat_messages_components/message_actions.dart index 7ee69ea..e691a92 100644 --- a/lib/src/views/chats/chat_messages_components/message_actions.dart +++ b/lib/src/views/chats/chat_messages_components/message_actions.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; class MessageActions extends StatefulWidget { const MessageActions({ diff --git a/lib/src/views/chats/chat_messages_components/message_context_menu.dart b/lib/src/views/chats/chat_messages_components/message_context_menu.dart index 26fe88e..4118d69 100644 --- a/lib/src/views/chats/chat_messages_components/message_context_menu.dart +++ b/lib/src/views/chats/chat_messages_components/message_context_menu.dart @@ -6,8 +6,8 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:pie_menu/pie_menu.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pbserver.dart'; import 'package:twonly/src/services/api/messages.dart'; import 'package:twonly/src/utils/misc.dart'; diff --git a/lib/src/views/chats/chat_messages_components/message_send_state_icon.dart b/lib/src/views/chats/chat_messages_components/message_send_state_icon.dart index f6c2cda..52293e4 100644 --- a/lib/src/views/chats/chat_messages_components/message_send_state_icon.dart +++ b/lib/src/views/chats/chat_messages_components/message_send_state_icon.dart @@ -4,8 +4,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/animate_icon.dart'; diff --git a/lib/src/views/chats/chat_messages_components/response_container.dart b/lib/src/views/chats/chat_messages_components/response_container.dart index 14bdf7a..c02d4b2 100644 --- a/lib/src/views/chats/chat_messages_components/response_container.dart +++ b/lib/src/views/chats/chat_messages_components/response_container.dart @@ -3,10 +3,10 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/chats/chat_messages.view.dart'; diff --git a/lib/src/views/chats/media_viewer.view.dart b/lib/src/views/chats/media_viewer.view.dart index f58449c..e6650e5 100644 --- a/lib/src/views/chats/media_viewer.view.dart +++ b/lib/src/views/chats/media_viewer.view.dart @@ -10,10 +10,10 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:lottie/lottie.dart'; import 'package:no_screenshot/no_screenshot.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/tables/messages_table.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/model/protobuf/push_notification/push_notification.pb.dart'; import 'package:twonly/src/services/api/media_download.dart'; import 'package:twonly/src/services/api/messages.dart'; diff --git a/lib/src/views/chats/start_new_chat.view.dart b/lib/src/views/chats/start_new_chat.view.dart index 85c0773..affe878 100644 --- a/lib/src/views/chats/start_new_chat.view.dart +++ b/lib/src/views/chats/start_new_chat.view.dart @@ -5,8 +5,8 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:pie_menu/pie_menu.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/chats/add_new_user.view.dart'; import 'package:twonly/src/views/chats/chat_messages.view.dart'; diff --git a/lib/src/views/components/flame.dart b/lib/src/views/components/flame.dart index 2f3c80a..b37c01c 100644 --- a/lib/src/views/components/flame.dart +++ b/lib/src/views/components/flame.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/views/components/animate_icon.dart'; class FlameCounterWidget extends StatelessWidget { diff --git a/lib/src/views/components/initialsavatar.dart b/lib/src/views/components/initialsavatar.dart index 59068db..ec7ae11 100644 --- a/lib/src/views/components/initialsavatar.dart +++ b/lib/src/views/components/initialsavatar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/utils/log.dart'; diff --git a/lib/src/views/components/user_context_menu.dart b/lib/src/views/components/user_context_menu.dart index 2b30fce..ac834b3 100644 --- a/lib/src/views/components/user_context_menu.dart +++ b/lib/src/views/components/user_context_menu.dart @@ -4,7 +4,7 @@ import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:pie_menu/pie_menu.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/chats/chat_messages.view.dart'; import 'package:twonly/src/views/contact/contact.view.dart'; diff --git a/lib/src/views/components/verified_shield.dart b/lib/src/views/components/verified_shield.dart index 27c1c45..4c3523d 100644 --- a/lib/src/views/components/verified_shield.dart +++ b/lib/src/views/components/verified_shield.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/views/contact/contact_verify.view.dart'; class VerifiedShield extends StatelessWidget { diff --git a/lib/src/views/contact/contact.view.dart b/lib/src/views/contact/contact.view.dart index 31fcfde..52d2ef3 100644 --- a/lib/src/views/contact/contact.view.dart +++ b/lib/src/views/contact/contact.view.dart @@ -2,8 +2,8 @@ import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/api/utils.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/alert_dialog.dart'; diff --git a/lib/src/views/contact/contact_verify.view.dart b/lib/src/views/contact/contact_verify.view.dart index 05b05c3..2b37dd7 100644 --- a/lib/src/views/contact/contact_verify.view.dart +++ b/lib/src/views/contact/contact_verify.view.dart @@ -9,8 +9,8 @@ import 'package:image/image.dart' as imglib; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:lottie/lottie.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/services/signal/session.signal.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/fingerprint_text.dart'; diff --git a/lib/src/views/contact/contact_verify_qr_scan.view.dart b/lib/src/views/contact/contact_verify_qr_scan.view.dart index 566a833..5328b42 100644 --- a/lib/src/views/contact/contact_verify_qr_scan.view.dart +++ b/lib/src/views/contact/contact_verify_qr_scan.view.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_zxing/flutter_zxing.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/log.dart'; class ContactVerifyQrScanView extends StatefulWidget { diff --git a/lib/src/views/memories/memories.view.dart b/lib/src/views/memories/memories.view.dart index 91702c6..588fdfe 100644 --- a/lib/src/views/memories/memories.view.dart +++ b/lib/src/views/memories/memories.view.dart @@ -4,7 +4,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/services/api/media_upload.dart' as send; import 'package:twonly/src/services/thumbnail.service.dart'; diff --git a/lib/src/views/memories/memories_photo_slider.view.dart b/lib/src/views/memories/memories_photo_slider.view.dart index a1c0103..5489e9b 100644 --- a/lib/src/views/memories/memories_photo_slider.view.dart +++ b/lib/src/views/memories/memories_photo_slider.view.dart @@ -4,7 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:photo_view/photo_view.dart'; import 'package:photo_view/photo_view_gallery.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/memory_item.model.dart'; import 'package:twonly/src/services/api/media_download.dart' as received; import 'package:twonly/src/services/api/media_upload.dart' as send; diff --git a/lib/src/views/settings/developer/automated_testing.view.dart b/lib/src/views/settings/developer/automated_testing.view.dart index 8d9c415..2587c7b 100644 --- a/lib/src/views/settings/developer/automated_testing.view.dart +++ b/lib/src/views/settings/developer/automated_testing.view.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/services/api/messages.dart'; class AutomatedTestingView extends StatefulWidget { diff --git a/lib/src/views/settings/developer/retransmission_data.view.dart b/lib/src/views/settings/developer/retransmission_data.view.dart index 34538fc..4889c52 100644 --- a/lib/src/views/settings/developer/retransmission_data.view.dart +++ b/lib/src/views/settings/developer/retransmission_data.view.dart @@ -6,8 +6,8 @@ import 'package:drift/drift.dart' hide Column; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/twonly_database.dart'; -import 'package:twonly/src/model/json/message.dart'; +import 'package:twonly/src/database/twonly.db.dart'; +import 'package:twonly/src/model/json/message_old.dart'; import 'package:twonly/src/services/api/messages.dart'; class RetransmissionDataView extends StatefulWidget { diff --git a/lib/src/views/settings/privacy_view_block.users.dart b/lib/src/views/settings/privacy_view_block.users.dart index ce1dd86..394f5e3 100644 --- a/lib/src/views/settings/privacy_view_block.users.dart +++ b/lib/src/views/settings/privacy_view_block.users.dart @@ -2,8 +2,8 @@ import 'package:drift/drift.dart' hide Column; import 'package:flutter/material.dart'; import 'package:pie_menu/pie_menu.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; -import 'package:twonly/src/database/twonly_database.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; +import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/initialsavatar.dart'; import 'package:twonly/src/views/components/user_context_menu.dart'; diff --git a/lib/src/views/settings/subscription/additional_users.view.dart b/lib/src/views/settings/subscription/additional_users.view.dart index 1afc62f..5a76e88 100644 --- a/lib/src/views/settings/subscription/additional_users.view.dart +++ b/lib/src/views/settings/subscription/additional_users.view.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pbserver.dart'; import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'; import 'package:twonly/src/utils/log.dart'; diff --git a/lib/src/views/settings/subscription/subscription.view.dart b/lib/src/views/settings/subscription/subscription.view.dart index bdaeccd..4c0c8fc 100644 --- a/lib/src/views/settings/subscription/subscription.view.dart +++ b/lib/src/views/settings/subscription/subscription.view.dart @@ -7,7 +7,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:twonly/globals.dart'; -import 'package:twonly/src/database/daos/contacts_dao.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'; import 'package:twonly/src/providers/connection.provider.dart'; diff --git a/pubspec.lock b/pubspec.lock index 8b26fd6..7c121f6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -162,12 +162,13 @@ packages: source: hosted version: "0.11.2" camera_android_camerax: - dependency: transitive + dependency: "direct overridden" description: - name: camera_android_camerax - sha256: "92dcc36e8ff2fa1ea3acdbb609ca2976cded55dceb719b4869c124c6d011f110" - url: "https://pub.dev" - source: hosted + path: "packages/camera/camera_android_camerax" + ref: aef58af205a5f3ce6588a5c59bb2e734aab943f0 + resolved-ref: aef58af205a5f3ce6588a5c59bb2e734aab943f0 + url: "https://github.com/otsmr/flutter-packages.git" + source: git version: "0.6.23+2" camera_avfoundation: dependency: transitive @@ -662,9 +663,11 @@ packages: flutter_secure_storage: dependency: "direct main" description: - path: "dependencies/flutter_secure_storage/flutter_secure_storage" - relative: true - source: path + path: flutter_secure_storage + ref: "71b75a36f35f2ce945998e20c6c6aa1820babfc6" + resolved-ref: "71b75a36f35f2ce945998e20c6c6aa1820babfc6" + url: "https://github.com/juliansteenbakker/flutter_secure_storage.git" + source: git version: "10.0.0-beta.4" flutter_secure_storage_darwin: dependency: transitive @@ -1278,10 +1281,12 @@ packages: pie_menu: dependency: "direct main" description: - path: "dependencies/flutter-pie-menu" - relative: true - source: path - version: "3.3.0" + path: "." + ref: HEAD + resolved-ref: e1ae0b2dabdfa9ad204b2cf93c48a5962e243c6c + url: "https://github.com/otsmr/flutter-pie-menu.git" + source: git + version: "3.3.2" platform: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a12ab31..d01d5d0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: avatar_maker: ^0.4.0 background_downloader: ^9.2.2 cached_network_image: ^3.4.1 - camera: ^0.11.1 + camera: ^0.11.2 collection: ^1.18.0 connectivity_plus: ^7.0.0 cryptography_flutter_plus: ^2.3.4 @@ -29,9 +29,11 @@ dependencies: flutter_local_notifications: ^19.1.0 flutter_localizations: sdk: flutter - # flutter_secure_storage: ^10.0.0-beta.4 flutter_secure_storage: - path: ./dependencies/flutter_secure_storage/flutter_secure_storage + git: + url: https://github.com/juliansteenbakker/flutter_secure_storage.git + ref: 71b75a36f35f2ce945998e20c6c6aa1820babfc6 # from develop + path: flutter_secure_storage/ flutter_svg: ^2.0.17 flutter_zxing: path: ./dependencies/flutter_zxing @@ -58,7 +60,8 @@ dependencies: permission_handler: ^12.0.0+1 photo_view: ^0.15.0 pie_menu: - path: ./dependencies/flutter-pie-menu + git: + url: https://github.com/otsmr/flutter-pie-menu.git protobuf: ^4.0.0 provider: ^6.1.2 restart_app: ^1.3.2 @@ -72,6 +75,15 @@ dependencies: video_thumbnail: ^0.5.6 web_socket_channel: ^3.0.1 +dependency_overrides: + # hardcoding the mirror mode of the VideCapture to MIRROR_MODE_ON_FRONT_ONLY + camera_android_camerax: + # path: ../flutter-packages/packages/camera/camera_android_camerax + git: + url: https://github.com/otsmr/flutter-packages.git + path: packages/camera/camera_android_camerax + ref: aef58af205a5f3ce6588a5c59bb2e734aab943f0 + dev_dependencies: build_runner: ^2.4.15 drift_dev: ^2.25.2 diff --git a/scripts/generate_proto.sh b/scripts/generate_proto.sh index 7fb971d..ceb9d77 100755 --- a/scripts/generate_proto.sh +++ b/scripts/generate_proto.sh @@ -8,11 +8,16 @@ if [ ! -f "pubspec.yaml" ]; then fi # Definitions for twonly Safe -protoc --proto_path="./lib/src/model/protobuf/backup/" --dart_out="./lib/src/model/protobuf/backup/" "backup.proto" +GENERATED_DIR="./lib/src/model/protobuf/client/generated/" +CLIENT_DIR="./lib/src/model/protobuf/client/" -# Definitions for the Push Notifications -protoc --proto_path="./lib/src/model/protobuf/push_notification/" --dart_out="./lib/src/model/protobuf/push_notification/" "push_notification.proto" -protoc --proto_path="./lib/src/model/protobuf/push_notification/" --swift_out="./ios/NotificationService/" "push_notification.proto" +protoc --proto_path="$CLIENT_DIR" --dart_out="$GENERATED_DIR" "backup.proto" +protoc --proto_path="$CLIENT_DIR" --dart_out="$GENERATED_DIR" "messages.proto" + +protoc --proto_path="$CLIENT_DIR" --dart_out="$GENERATED_DIR" "push_notification.proto" +protoc --proto_path="$CLIENT_DIR" --swift_out="./ios/NotificationService/" "push_notification.proto" + +exit # Definitions for the Server API diff --git a/test/unit_test.dart b/test/unit_test.dart index b37a39f..36e6252 100644 --- a/test/unit_test.dart +++ b/test/unit_test.dart @@ -1,6 +1,8 @@ +import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; +import 'package:hashlib/random.dart'; import 'package:twonly/src/services/api/media_upload.dart'; import 'package:twonly/src/utils/pow.dart'; import 'package:twonly/src/views/components/animate_icon.dart'; @@ -31,5 +33,12 @@ void main() { final list1 = Uint8List.fromList([41, 41, 41, 41, 41, 41, 41]); expect(list1, hexToUint8List(uint8ListToHex(list1))); }); + + test('encoding uuid4', () async { + final uv4 = uuid.v4(); + final uv4Bytes = Uint8List.fromList(uv4.codeUnits); + final uv4String = utf8.decode(uv4Bytes.cast()); + expect(uv4String, uv4); + }); }); }