diff --git a/lib/src/providers/api/api.dart b/lib/src/providers/api/api.dart index 097fed6..1ddfa75 100644 --- a/lib/src/providers/api/api.dart +++ b/lib/src/providers/api/api.dart @@ -130,7 +130,7 @@ Future uploadMediaFile( int offset = box.get("retransmit-$messageId-offset") ?? 0; - int fragmentedTransportSize = 50000; + int fragmentedTransportSize = 1_000_000; // per upload transfer while (offset < encryptedMedia.length) { Logger("api.dart").info("Uploading image $messageId with offset: $offset"); @@ -272,6 +272,7 @@ Future sendImage( Future tryDownloadMedia(int messageId, int fromUserId, List mediaToken, {bool force = false}) async { if (globalIsAppInBackground) return; + if (!force) { // TODO: create option to enable download via mobile data final List connectivityResult = @@ -281,9 +282,15 @@ Future tryDownloadMedia(int messageId, int fromUserId, List mediaToken, return; } } + + final box = await getMediaStorage(); + if (box.containsKey("${mediaToken}_downloaded")) { + Logger("tryDownloadMedia").shout("mediaToken already downloaded"); + return; + } + Logger("tryDownloadMedia").info("Downloading: $mediaToken"); int offset = 0; - final box = await getMediaStorage(); Uint8List? media = box.get("$mediaToken"); if (media != null && media.isNotEmpty) { offset = media.length; diff --git a/lib/src/providers/api/server_messages.dart b/lib/src/providers/api/server_messages.dart index 736df6c..636d499 100644 --- a/lib/src/providers/api/server_messages.dart +++ b/lib/src/providers/api/server_messages.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:fixnum/fixnum.dart'; -import 'package:flutter/foundation.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:logging/logging.dart'; import 'package:twonly/globals.dart'; diff --git a/lib/src/providers/api_provider.dart b/lib/src/providers/api_provider.dart index 577507e..2b4d4ef 100644 --- a/lib/src/providers/api_provider.dart +++ b/lib/src/providers/api_provider.dart @@ -25,11 +25,11 @@ import 'package:web_socket_channel/web_socket_channel.dart'; /// It handles errors and does automatically tries to reconnect on /// errors or network changes. class ApiProvider { - final String apiUrl = (kDebugMode && false) + final String apiUrl = (kDebugMode) ? "ws://10.99.0.6:3030/api/client" : "wss://api.twonly.eu/api/client"; // ws://api.twonly.eu/api/client - final String? backupApiUrl = (kDebugMode && false) + final String? backupApiUrl = (kDebugMode) ? "ws://10.99.0.6:3030/api/client" : "wss://api2.twonly.eu/api/client"; bool isAuthenticated = false; diff --git a/lib/src/providers/messages_change_provider.dart b/lib/src/providers/messages_change_provider.dart index 8ee89c6..93fa0b9 100644 --- a/lib/src/providers/messages_change_provider.dart +++ b/lib/src/providers/messages_change_provider.dart @@ -34,6 +34,8 @@ class MessagesChangeProvider with ChangeNotifier, DiagnosticableTreeMixin { int index = _allMessagesFromUser[targetUserId]! .indexWhere((x) => x.messageId == messageId); if (index == -1) { + print("should be indexed by time!!"); + _allMessagesFromUser[targetUserId]!.insert(0, msg); // reload all messages but async loadMessagesForUser(targetUserId, force: true); diff --git a/lib/src/utils/signal.dart b/lib/src/utils/signal.dart index 3837444..e2452c0 100644 --- a/lib/src/utils/signal.dart +++ b/lib/src/utils/signal.dart @@ -49,22 +49,20 @@ Future addNewContact(Response_UserData userData) async { 1); tempPreKeyId = userData.prekeys.first.id.toInt(); } - // Signed pre key calculation + int tempSignedPreKeyId = userData.signedPrekeyId.toInt(); - // Map? tempSignedPreKey = remoteBundle["signedPreKey"]; - ECPublicKey? tempSignedPreKeyPublic; - Uint8List? tempSignedPreKeySignature; - // if (tempSignedPreKey != null) { - tempSignedPreKeyPublic = Curve.decodePoint( + + ECPublicKey? tempSignedPreKeyPublic = Curve.decodePoint( DjbECPublicKey(Uint8List.fromList(userData.signedPrekey)).serialize(), 1); - tempSignedPreKeySignature = + + Uint8List? tempSignedPreKeySignature = Uint8List.fromList(userData.signedPrekeySignature); - // } - // Identity key calculation + IdentityKey tempIdentityKey = IdentityKey(Curve.decodePoint( DjbECPublicKey(Uint8List.fromList(userData.publicIdentityKey)) .serialize(), 1)); + PreKeyBundle preKeyBundle = PreKeyBundle( userData.userId.toInt(), 1, @@ -230,6 +228,7 @@ Future decryptBytes(Uint8List bytes, Int64 target) async { int type = bytesToInt(msgs[1]); Uint8List plaintext; + Logger("utils/signal").info("got signal type: $type!"); if (type == CiphertextMessage.prekeyType) { PreKeySignalMessage pre = PreKeySignalMessage(body); plaintext = await session.decrypt(pre); @@ -237,6 +236,7 @@ Future decryptBytes(Uint8List bytes, Int64 target) async { SignalMessage signalMsg = SignalMessage.fromSerialized(body); plaintext = await session.decryptFromSignal(signalMsg); } else { + Logger("utils/signal").shout("signal type is not known: $type!"); return null; } List? plainBytes = gzip.decode(Uint8List.fromList(plaintext)); diff --git a/pubspec.yaml b/pubspec.yaml index 60b7a36..b28914c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ publish_to: 'none' version: 0.0.4+4 environment: - sdk: ^3.5.4 + sdk: ^3.6.0 dependencies: camerawesome: ^2.1.0