From 9485203383303c16e210653d4834dafd314cf845 Mon Sep 17 00:00:00 2001 From: otsmr Date: Sun, 9 Feb 2025 23:06:12 +0100 Subject: [PATCH] fix box problem with foreground service --- lib/src/providers/api/api.dart | 11 +++++----- lib/src/providers/api/server_messages.dart | 20 +++++++++---------- .../views/chats/chat_item_details_view.dart | 3 ++- lib/src/views/chats/chat_list_view.dart | 4 +++- lib/src/views/chats/media_viewer_view.dart | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/src/providers/api/api.dart b/lib/src/providers/api/api.dart index a576129..b216585 100644 --- a/lib/src/providers/api/api.dart +++ b/lib/src/providers/api/api.dart @@ -216,7 +216,7 @@ Future sendImage( } } -Future tryDownloadMedia(int messageId, List mediaToken, +Future tryDownloadMedia(int messageId, int fromUserId, List mediaToken, {bool force = false}) async { if (globalIsAppInBackground) return; if (!force) { @@ -237,6 +237,7 @@ Future tryDownloadMedia(int messageId, List mediaToken, } globalCallBackOnDownloadChange(mediaToken, true); box.put("${mediaToken}_messageId", messageId); + box.put("${mediaToken}_fromUserId", fromUserId); apiProvider.triggerDownload(mediaToken, offset); } @@ -255,7 +256,7 @@ Future userOpenedOtherMessage(int fromUserId, int messageOtherId) async { } Future getDownloadedMedia( - List mediaToken, int messageOtherId) async { + List mediaToken, int messageOtherId, int otherUserId) async { final box = await getMediaStorage(); Uint8List? media; try { @@ -265,13 +266,11 @@ Future getDownloadedMedia( } if (media == null) return null; - int fromUserId = box.get("${mediaToken}_fromUserId"); - await userOpenedOtherMessage(fromUserId, messageOtherId); + await userOpenedOtherMessage(otherUserId, messageOtherId); box.delete(mediaToken.toString()); box.put("${mediaToken}_downloaded", "deleted"); - box.delete("${mediaToken}_fromUserId"); box.delete("${mediaToken}_messageId"); - + box.delete("${mediaToken}_fromUserId"); return media; } diff --git a/lib/src/providers/api/server_messages.dart b/lib/src/providers/api/server_messages.dart index 92f59de..ea252b3 100644 --- a/lib/src/providers/api/server_messages.dart +++ b/lib/src/providers/api/server_messages.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:fixnum/fixnum.dart'; import 'package:flutter/foundation.dart'; -import 'package:hive/hive.dart'; import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart'; import 'package:logging/logging.dart'; import 'package:twonly/globals.dart'; @@ -50,6 +49,10 @@ Future handleServerMessage(server.ServerToClient msg) async { } Future handleDownloadData(DownloadData data) async { + if (globalIsAppInBackground) { + // download should only be done when the app is open + return client.Response()..error = ErrorCode.InternalError; + } debugPrint("Downloading: ${data.uploadToken} ${data.fin}"); final box = await getMediaStorage(); @@ -61,7 +64,6 @@ Future handleDownloadData(DownloadData data) async { if (messageId != null) { int? fromUserId = await DbMessages.deleteMessageById(messageId); box.delete(boxId); - // int? fromUserId = box.get("${data.uploadToken}_fromUserId"); if (fromUserId != null) { globalCallBackOnMessageChange(fromUserId); } @@ -181,16 +183,12 @@ Future handleNewMessage( message.kind == MessageKind.image) { await DbContacts.checkAndUpdateFlames(fromUserId.toInt(), timestamp: message.timestamp); - - final content = message.content; - if (content is MediaMessageContent) { - List downloadToken = content.downloadToken; - Box box = await getMediaStorage(); - box.put("${downloadToken}_fromUserId", fromUserId.toInt()); - if (box.get("${downloadToken}_fromUserId") == null) { - debugPrint("BOX IS NOT WORKING"); + if (!globalIsAppInBackground) { + final content = message.content; + if (content is MediaMessageContent) { + List downloadToken = content.downloadToken; + tryDownloadMedia(messageId, fromUserId.toInt(), downloadToken); } - tryDownloadMedia(messageId, downloadToken); } } localPushNotificationNewMessage( diff --git a/lib/src/views/chats/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart index 0f66ea1..16b19de 100644 --- a/lib/src/views/chats/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -80,7 +80,8 @@ class ChatListEntry extends StatelessWidget { }), ); } else { - tryDownloadMedia(message.messageId, token, force: true); + tryDownloadMedia(message.messageId, message.otherUserId, token, + force: true); } } }, diff --git a/lib/src/views/chats/chat_list_view.dart b/lib/src/views/chats/chat_list_view.dart index 69e335c..34163c9 100644 --- a/lib/src/views/chats/chat_list_view.dart +++ b/lib/src/views/chats/chat_list_view.dart @@ -208,7 +208,9 @@ class _UserListItem extends State { onTap: () { if (isDownloading) return; if (!widget.lastMessage.isDownloaded) { - tryDownloadMedia(widget.lastMessage.messageId, token, force: true); + tryDownloadMedia(widget.lastMessage.messageId, + widget.lastMessage.otherUserId, token, + force: true); return; } if (state == MessageSendState.received && diff --git a/lib/src/views/chats/media_viewer_view.dart b/lib/src/views/chats/media_viewer_view.dart index 216875a..df71cd2 100644 --- a/lib/src/views/chats/media_viewer_view.dart +++ b/lib/src/views/chats/media_viewer_view.dart @@ -73,8 +73,8 @@ class _MediaViewerViewState extends State { flutterLocalNotificationsPlugin.cancel(widget.message.messageId); List token = content.downloadToken; - _imageByte = - await getDownloadedMedia(token, widget.message.messageOtherId!); + _imageByte = await getDownloadedMedia( + token, widget.message.messageOtherId!, widget.message.otherUserId); if (_imageByte == null) { // image already deleted if (context.mounted) {