From 504b528770749cc34e805d0eddecaef6a6aa09e3 Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 11 Feb 2025 01:43:02 +0100 Subject: [PATCH] buf fix #8 --- lib/src/providers/api/api.dart | 24 +++++++++++++++--------- lib/src/providers/api_provider.dart | 5 +++-- lib/src/views/chats/chat_list_view.dart | 3 +-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/src/providers/api/api.dart b/lib/src/providers/api/api.dart index 26023f2..f5d8e6c 100644 --- a/lib/src/providers/api/api.dart +++ b/lib/src/providers/api/api.dart @@ -46,8 +46,13 @@ Future tryTransmitMessages() async { if (encryptedMedia != null) { final content = retransmit[i].messageContent; if (content is MediaMessageContent) { - uploadMediaFile(msgId, Int64(retransmit[i].otherUserId), encryptedMedia, - content.isRealTwonly, content.maxShowTime, retransmit[i].sendAt); + await uploadMediaFile( + msgId, + Int64(retransmit[i].otherUserId), + encryptedMedia, + content.isRealTwonly, + content.maxShowTime, + retransmit[i].sendAt); } } } @@ -110,7 +115,7 @@ Future uploadMediaFile( ) async { Box box = await getMediaStorage(); - List? uploadToken = await box.get("retransmit-$messageId-uploadtoken"); + List? uploadToken = box.get("retransmit-$messageId-uploadtoken"); if (uploadToken == null) { Result res = await apiProvider.getUploadToken(); @@ -120,34 +125,35 @@ Future uploadMediaFile( } uploadToken = res.value.uploadtoken; - - await box.put("retransmit-$messageId-uploadtoken", uploadToken); } if (uploadToken == null) return; - int offset = await box.get("retransmit-$messageId-offset") ?? 0; + int offset = box.get("retransmit-$messageId-offset") ?? 0; int fragmentedTransportSize = 100000; while (offset < encryptedMedia.length) { + debugPrint("offset: $offset"); int end = encryptedMedia.length; if (offset + fragmentedTransportSize < encryptedMedia.length) { end = offset + fragmentedTransportSize; } - bool wasSend = await apiProvider.uploadData( + Result wasSend = await apiProvider.uploadData( uploadToken, encryptedMedia.sublist(offset, end), offset, ); - if (!wasSend) { + if (wasSend.isError) { + await box.put("retransmit-$messageId-offset", 0); + await box.delete("retransmit-$messageId-uploadtoken"); Logger("api.dart").shout("error while uploading media"); return; } - await box.put("retransmit-$messageId-offset", offset); + box.put("retransmit-$messageId-offset", offset); offset = end; } diff --git a/lib/src/providers/api_provider.dart b/lib/src/providers/api_provider.dart index f764aa4..24c3836 100644 --- a/lib/src/providers/api_provider.dart +++ b/lib/src/providers/api_provider.dart @@ -112,6 +112,7 @@ class ApiProvider { } void _onError(dynamic e) { + log.shout("WebSocket Error: $e"); globalCallbackConnectionState(false); _channel = null; isAuthenticated = false; @@ -309,7 +310,7 @@ class ApiProvider { return await _sendRequestV0(req); } - Future uploadData( + Future uploadData( List uploadToken, Uint8List data, int offset) async { var get = ApplicationData_UploadData() ..uploadToken = uploadToken @@ -318,7 +319,7 @@ class ApiProvider { var appData = ApplicationData()..uploaddata = get; var req = createClientToServerFromApplicationData(appData); final result = await _sendRequestV0(req); - return result.isSuccess; + return result; } Future getUserData(String username) async { diff --git a/lib/src/views/chats/chat_list_view.dart b/lib/src/views/chats/chat_list_view.dart index acc4982..00a0ef6 100644 --- a/lib/src/views/chats/chat_list_view.dart +++ b/lib/src/views/chats/chat_list_view.dart @@ -43,10 +43,9 @@ class _ChatListViewState extends State { allUsers.sort((b, a) { DbMessage? msgA = lastMessages[a.userId.toInt()]; - DbMessage? msgB = lastMessages[a.userId.toInt()]; + DbMessage? msgB = lastMessages[b.userId.toInt()]; if (msgA == null) return 1; if (msgB == null) return -1; - return msgA.sendAt.compareTo(msgB.sendAt); });