mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 07:48:40 +00:00
fixing more issues
This commit is contained in:
parent
2f3f927914
commit
0207aaf074
10 changed files with 849 additions and 668 deletions
|
|
@ -348,6 +348,10 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
|||
return select(messages)..where((t) => t.messageId.equals(messageId));
|
||||
}
|
||||
|
||||
Future<List<Message>> getMessagesByMediaId(String mediaId) async {
|
||||
return (select(messages)..where((t) => t.mediaId.equals(mediaId))).get();
|
||||
}
|
||||
|
||||
// Future<List<Message>> getMessagesByMediaUploadId(int mediaUploadId) async {
|
||||
// return (select(messages)
|
||||
// ..where((t) => t.mediaUploadId.equals(mediaUploadId)))
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ part of 'messages.dao.dart';
|
|||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$MessagesDaoMixin on DatabaseAccessor<TwonlyDB> {
|
||||
$GroupsTable get groups => attachedDatabase.groups;
|
||||
$ContactsTable get contacts => attachedDatabase.contacts;
|
||||
$MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles;
|
||||
$MessagesTable get messages => attachedDatabase.messages;
|
||||
$MessageHistoriesTable get messageHistories =>
|
||||
attachedDatabase.messageHistories;
|
||||
$GroupsTable get groups => attachedDatabase.groups;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ part of 'reactions.dao.dart';
|
|||
|
||||
// ignore_for_file: type=lint
|
||||
mixin _$ReactionsDaoMixin on DatabaseAccessor<TwonlyDB> {
|
||||
$GroupsTable get groups => attachedDatabase.groups;
|
||||
$ContactsTable get contacts => attachedDatabase.contacts;
|
||||
$MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles;
|
||||
$MessagesTable get messages => attachedDatabase.messages;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ part of 'receipts.dao.dart';
|
|||
// ignore_for_file: type=lint
|
||||
mixin _$ReceiptsDaoMixin on DatabaseAccessor<TwonlyDB> {
|
||||
$ContactsTable get contacts => attachedDatabase.contacts;
|
||||
$GroupsTable get groups => attachedDatabase.groups;
|
||||
$MediaFilesTable get mediaFiles => attachedDatabase.mediaFiles;
|
||||
$MessagesTable get messages => attachedDatabase.messages;
|
||||
$ReceiptsTable get receipts => attachedDatabase.receipts;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ enum UploadState {
|
|||
receiverNotified,
|
||||
}
|
||||
|
||||
enum DownloadState { pending, downloading }
|
||||
enum DownloadState { pending, downloading, reuploadRequested }
|
||||
|
||||
@DataClassName('MediaFile')
|
||||
class MediaFiles extends Table {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
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/groups.table.dart';
|
||||
import 'package:twonly/src/database/tables/mediafiles.table.dart';
|
||||
|
||||
@DataClassName('Message')
|
||||
class Messages extends Table {
|
||||
TextColumn get groupId => text()();
|
||||
TextColumn get groupId =>
|
||||
text().references(Groups, #groupId, onDelete: KeyAction.cascade)();
|
||||
TextColumn get messageId => text().clientDefault(() => uuid.v7())();
|
||||
|
||||
// in case senderId is null, it was send by user itself
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,15 +1,16 @@
|
|||
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/tables/mediafiles.table.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';
|
||||
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/model/protobuf/client/generated/messages.pbserver.dart'
|
||||
hide Message;
|
||||
import 'package:twonly/src/services/api/messages.dart';
|
||||
import 'package:twonly/src/services/signal/session.signal.dart';
|
||||
|
||||
|
|
@ -57,44 +58,41 @@ ClientToServer createClientToServerFromApplicationData(
|
|||
}
|
||||
|
||||
Future<void> deleteContact(int contactId) async {
|
||||
await twonlyDB.messagesDao.deleteAllMessagesByContactId(contactId);
|
||||
await twonlyDB.signalDao.deleteAllByContactId(contactId);
|
||||
await deleteSessionWithTarget(contactId);
|
||||
await twonlyDB.contactsDao.deleteContactByUserId(contactId);
|
||||
}
|
||||
|
||||
Future<void> rejectUser(int contactId) async {
|
||||
await encryptAndSendMessageAsync(
|
||||
null,
|
||||
await sendCipherText(
|
||||
contactId,
|
||||
MessageJson(
|
||||
kind: MessageKind.rejectRequest,
|
||||
timestamp: DateTime.now(),
|
||||
content: MessageContent(),
|
||||
EncryptedContent(
|
||||
contactRequest: EncryptedContent_ContactRequest(
|
||||
type: EncryptedContent_ContactRequest_Type.REJECT,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> handleMediaError(Message message) async {
|
||||
await twonlyDB.messagesDao.updateMessageByMessageId(
|
||||
message.messageId,
|
||||
const MessagesCompanion(
|
||||
errorWhileSending: Value(true),
|
||||
mediaRetransmissionState: Value(
|
||||
MediaRetransmitting.requested,
|
||||
Future<void> handleMediaError(MediaFile media) async {
|
||||
await twonlyDB.mediaFilesDao.updateMedia(
|
||||
media.mediaId,
|
||||
const MediaFilesCompanion(
|
||||
downloadState: Value(DownloadState.reuploadRequested),
|
||||
),
|
||||
);
|
||||
final messages =
|
||||
await twonlyDB.messagesDao.getMessagesByMediaId(media.mediaId);
|
||||
if (messages.length != 1) return;
|
||||
final message = messages.first;
|
||||
if (message.senderId == null) return;
|
||||
await sendCipherText(
|
||||
message.senderId!,
|
||||
EncryptedContent(
|
||||
mediaUpdate: EncryptedContent_MediaUpdate(
|
||||
type: EncryptedContent_MediaUpdate_Type.DECRYPTION_ERROR,
|
||||
targetMessageId: message.messageId,
|
||||
),
|
||||
),
|
||||
);
|
||||
if (message.messageOtherId != null) {
|
||||
await encryptAndSendMessageAsync(
|
||||
null,
|
||||
message.contactId,
|
||||
MessageJson(
|
||||
kind: MessageKind.receiveMediaError,
|
||||
timestamp: DateTime.now(),
|
||||
content: MessageContent(),
|
||||
messageReceiverId: message.messageOtherId,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:collection/collection.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:twonly/globals.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.db.dart';
|
||||
import 'package:twonly/src/model/json/message_old.dart' as my;
|
||||
import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart';
|
||||
import 'package:twonly/src/services/api/messages.dart';
|
||||
import 'package:twonly/src/utils/misc.dart';
|
||||
import 'package:twonly/src/utils/storage.dart';
|
||||
|
|
@ -38,17 +38,15 @@ Future<void> syncFlameCounters() async {
|
|||
// only sync when flame counter is higher than three days
|
||||
if (flameCounter < 1 && bestFriend.userId != contact.userId) continue;
|
||||
|
||||
await encryptAndSendMessageAsync(
|
||||
null,
|
||||
await sendCipherText(
|
||||
contact.userId,
|
||||
my.MessageJson(
|
||||
kind: MessageKind.flameSync,
|
||||
content: my.FlameSyncContent(
|
||||
flameCounter: flameCounter,
|
||||
lastFlameCounterChange: contact.lastFlameCounterChange!,
|
||||
EncryptedContent(
|
||||
flameSync: EncryptedContent_FlameSync(
|
||||
flameCounter: Int64(flameCounter),
|
||||
lastFlameCounterChange:
|
||||
Int64(contact.lastFlameCounterChange!.millisecondsSinceEpoch),
|
||||
bestFriend: contact.userId == bestFriend.userId,
|
||||
),
|
||||
timestamp: DateTime.now(),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,11 @@ import 'package:cryptography_plus/cryptography_plus.dart';
|
|||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:twonly/src/constants/secure_storage_keys.dart';
|
||||
import 'package:twonly/src/model/protobuf/client/generated/push_notification.pb.dart';
|
||||
import 'package:twonly/src/model/protobuf/client/generated/push_notification.pbenum.dart';
|
||||
import 'package:twonly/src/services/notifications/pushkeys.notifications.dart';
|
||||
import 'package:twonly/src/utils/log.dart';
|
||||
import 'package:twonly/src/utils/misc.dart';
|
||||
import 'package:twonly/src/views/camera/share_image_editor_view.dart'
|
||||
show gMediaShowInfinite;
|
||||
|
||||
|
|
@ -75,7 +77,10 @@ Future<void> handlePushData(String pushDataB64) async {
|
|||
);
|
||||
} else if (foundPushUser != null) {
|
||||
if (pushNotification.hasMessageId()) {
|
||||
if (pushNotification.messageId <= foundPushUser.lastMessageId) {
|
||||
if (isUUIDNewer(
|
||||
foundPushUser.lastMessageId,
|
||||
pushNotification.messageId,
|
||||
)) {
|
||||
Log.info(
|
||||
'Got a push notification for a message which was already opened.',
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue