mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 14:48:41 +00:00
some bug fixes
This commit is contained in:
parent
6856eb3809
commit
00ad654660
6 changed files with 23 additions and 15 deletions
|
|
@ -130,7 +130,7 @@ Future uploadMediaFile(
|
||||||
|
|
||||||
int offset = box.get("retransmit-$messageId-offset") ?? 0;
|
int offset = box.get("retransmit-$messageId-offset") ?? 0;
|
||||||
|
|
||||||
int fragmentedTransportSize = 50000;
|
int fragmentedTransportSize = 1_000_000; // per upload transfer
|
||||||
|
|
||||||
while (offset < encryptedMedia.length) {
|
while (offset < encryptedMedia.length) {
|
||||||
Logger("api.dart").info("Uploading image $messageId with offset: $offset");
|
Logger("api.dart").info("Uploading image $messageId with offset: $offset");
|
||||||
|
|
@ -272,6 +272,7 @@ Future sendImage(
|
||||||
Future tryDownloadMedia(int messageId, int fromUserId, List<int> mediaToken,
|
Future tryDownloadMedia(int messageId, int fromUserId, List<int> mediaToken,
|
||||||
{bool force = false}) async {
|
{bool force = false}) async {
|
||||||
if (globalIsAppInBackground) return;
|
if (globalIsAppInBackground) return;
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
// TODO: create option to enable download via mobile data
|
// TODO: create option to enable download via mobile data
|
||||||
final List<ConnectivityResult> connectivityResult =
|
final List<ConnectivityResult> connectivityResult =
|
||||||
|
|
@ -281,9 +282,15 @@ Future tryDownloadMedia(int messageId, int fromUserId, List<int> mediaToken,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final box = await getMediaStorage();
|
||||||
|
if (box.containsKey("${mediaToken}_downloaded")) {
|
||||||
|
Logger("tryDownloadMedia").shout("mediaToken already downloaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Logger("tryDownloadMedia").info("Downloading: $mediaToken");
|
Logger("tryDownloadMedia").info("Downloading: $mediaToken");
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
final box = await getMediaStorage();
|
|
||||||
Uint8List? media = box.get("$mediaToken");
|
Uint8List? media = box.get("$mediaToken");
|
||||||
if (media != null && media.isNotEmpty) {
|
if (media != null && media.isNotEmpty) {
|
||||||
offset = media.length;
|
offset = media.length;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:fixnum/fixnum.dart';
|
import 'package:fixnum/fixnum.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@ import 'package:web_socket_channel/web_socket_channel.dart';
|
||||||
/// It handles errors and does automatically tries to reconnect on
|
/// It handles errors and does automatically tries to reconnect on
|
||||||
/// errors or network changes.
|
/// errors or network changes.
|
||||||
class ApiProvider {
|
class ApiProvider {
|
||||||
final String apiUrl = (kDebugMode && false)
|
final String apiUrl = (kDebugMode)
|
||||||
? "ws://10.99.0.6:3030/api/client"
|
? "ws://10.99.0.6:3030/api/client"
|
||||||
: "wss://api.twonly.eu/api/client";
|
: "wss://api.twonly.eu/api/client";
|
||||||
// ws://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"
|
? "ws://10.99.0.6:3030/api/client"
|
||||||
: "wss://api2.twonly.eu/api/client";
|
: "wss://api2.twonly.eu/api/client";
|
||||||
bool isAuthenticated = false;
|
bool isAuthenticated = false;
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ class MessagesChangeProvider with ChangeNotifier, DiagnosticableTreeMixin {
|
||||||
int index = _allMessagesFromUser[targetUserId]!
|
int index = _allMessagesFromUser[targetUserId]!
|
||||||
.indexWhere((x) => x.messageId == messageId);
|
.indexWhere((x) => x.messageId == messageId);
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
|
print("should be indexed by time!!");
|
||||||
|
|
||||||
_allMessagesFromUser[targetUserId]!.insert(0, msg);
|
_allMessagesFromUser[targetUserId]!.insert(0, msg);
|
||||||
// reload all messages but async
|
// reload all messages but async
|
||||||
loadMessagesForUser(targetUserId, force: true);
|
loadMessagesForUser(targetUserId, force: true);
|
||||||
|
|
|
||||||
|
|
@ -49,22 +49,20 @@ Future<bool> addNewContact(Response_UserData userData) async {
|
||||||
1);
|
1);
|
||||||
tempPreKeyId = userData.prekeys.first.id.toInt();
|
tempPreKeyId = userData.prekeys.first.id.toInt();
|
||||||
}
|
}
|
||||||
// Signed pre key calculation
|
|
||||||
int tempSignedPreKeyId = userData.signedPrekeyId.toInt();
|
int tempSignedPreKeyId = userData.signedPrekeyId.toInt();
|
||||||
// Map? tempSignedPreKey = remoteBundle["signedPreKey"];
|
|
||||||
ECPublicKey? tempSignedPreKeyPublic;
|
ECPublicKey? tempSignedPreKeyPublic = Curve.decodePoint(
|
||||||
Uint8List? tempSignedPreKeySignature;
|
|
||||||
// if (tempSignedPreKey != null) {
|
|
||||||
tempSignedPreKeyPublic = Curve.decodePoint(
|
|
||||||
DjbECPublicKey(Uint8List.fromList(userData.signedPrekey)).serialize(), 1);
|
DjbECPublicKey(Uint8List.fromList(userData.signedPrekey)).serialize(), 1);
|
||||||
tempSignedPreKeySignature =
|
|
||||||
|
Uint8List? tempSignedPreKeySignature =
|
||||||
Uint8List.fromList(userData.signedPrekeySignature);
|
Uint8List.fromList(userData.signedPrekeySignature);
|
||||||
// }
|
|
||||||
// Identity key calculation
|
|
||||||
IdentityKey tempIdentityKey = IdentityKey(Curve.decodePoint(
|
IdentityKey tempIdentityKey = IdentityKey(Curve.decodePoint(
|
||||||
DjbECPublicKey(Uint8List.fromList(userData.publicIdentityKey))
|
DjbECPublicKey(Uint8List.fromList(userData.publicIdentityKey))
|
||||||
.serialize(),
|
.serialize(),
|
||||||
1));
|
1));
|
||||||
|
|
||||||
PreKeyBundle preKeyBundle = PreKeyBundle(
|
PreKeyBundle preKeyBundle = PreKeyBundle(
|
||||||
userData.userId.toInt(),
|
userData.userId.toInt(),
|
||||||
1,
|
1,
|
||||||
|
|
@ -230,6 +228,7 @@ Future<Uint8List?> decryptBytes(Uint8List bytes, Int64 target) async {
|
||||||
int type = bytesToInt(msgs[1]);
|
int type = bytesToInt(msgs[1]);
|
||||||
|
|
||||||
Uint8List plaintext;
|
Uint8List plaintext;
|
||||||
|
Logger("utils/signal").info("got signal type: $type!");
|
||||||
if (type == CiphertextMessage.prekeyType) {
|
if (type == CiphertextMessage.prekeyType) {
|
||||||
PreKeySignalMessage pre = PreKeySignalMessage(body);
|
PreKeySignalMessage pre = PreKeySignalMessage(body);
|
||||||
plaintext = await session.decrypt(pre);
|
plaintext = await session.decrypt(pre);
|
||||||
|
|
@ -237,6 +236,7 @@ Future<Uint8List?> decryptBytes(Uint8List bytes, Int64 target) async {
|
||||||
SignalMessage signalMsg = SignalMessage.fromSerialized(body);
|
SignalMessage signalMsg = SignalMessage.fromSerialized(body);
|
||||||
plaintext = await session.decryptFromSignal(signalMsg);
|
plaintext = await session.decryptFromSignal(signalMsg);
|
||||||
} else {
|
} else {
|
||||||
|
Logger("utils/signal").shout("signal type is not known: $type!");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List<int>? plainBytes = gzip.decode(Uint8List.fromList(plaintext));
|
List<int>? plainBytes = gzip.decode(Uint8List.fromList(plaintext));
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ publish_to: 'none'
|
||||||
version: 0.0.4+4
|
version: 0.0.4+4
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.5.4
|
sdk: ^3.6.0
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
camerawesome: ^2.1.0
|
camerawesome: ^2.1.0
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue