diff --git a/lib/src/components/message_send_state_icon.dart b/lib/src/components/message_send_state_icon.dart index 8936ac7..0017d7a 100644 --- a/lib/src/components/message_send_state_icon.dart +++ b/lib/src/components/message_send_state_icon.dart @@ -149,7 +149,7 @@ class _MessageSendStateIconState extends State { if (message.errorWhileSending) { icon = FaIcon(FontAwesomeIcons.circleExclamation, size: 12, color: color); - text = "Error while sending"; + text = "Unknown error."; } icons.add(icon); diff --git a/lib/src/database/daos/messages_dao.dart b/lib/src/database/daos/messages_dao.dart index 73e5577..f947edc 100644 --- a/lib/src/database/daos/messages_dao.dart +++ b/lib/src/database/daos/messages_dao.dart @@ -15,7 +15,10 @@ class MessagesDao extends DatabaseAccessor Stream> watchMessageNotOpened(int contactId) { return (select(messages) - ..where((t) => t.openedAt.isNull() & t.contactId.equals(contactId)) + ..where((t) => + t.openedAt.isNull() & + t.contactId.equals(contactId) & + t.errorWhileSending.equals(false)) ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) .watch(); } @@ -55,8 +58,12 @@ class MessagesDao extends DatabaseAccessor Future removeOldMessages() { return (update(messages) ..where((t) => - t.openedAt.isSmallerThanValue( - DateTime.now().subtract(Duration(days: 1))) & + (t.openedAt.isSmallerThanValue( + DateTime.now().subtract(Duration(days: 1)), + ) | + (t.sendAt.isSmallerThanValue( + DateTime.now().subtract(Duration(days: 1))) & + t.errorWhileSending.equals(true))) & t.kind.equals(MessageKind.textMessage.name))) .write(MessagesCompanion(contentJson: Value(null))); } diff --git a/lib/src/views/chats/media_viewer_view.dart b/lib/src/views/chats/media_viewer_view.dart index 2340c4c..81136fc 100644 --- a/lib/src/views/chats/media_viewer_view.dart +++ b/lib/src/views/chats/media_viewer_view.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; +import 'package:drift/drift.dart' hide Column; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:lottie/lottie.dart'; import 'package:no_screenshot/no_screenshot.dart'; @@ -91,7 +91,7 @@ class _MediaViewerViewState extends State { Future loadCurrentMediaFile({bool showTwonly = false}) async { await _noScreenshot.screenshotOff(); - if (!context.mounted || allMediaFiles.isEmpty) return; + if (!context.mounted || allMediaFiles.isEmpty) return nextMediaOrExit(); final current = allMediaFiles.first; final MediaMessageContent content = @@ -137,14 +137,24 @@ class _MediaViewerViewState extends State { do { if (isDownloading) { await Future.delayed(Duration(milliseconds: 10)); + if (!apiProvider.isConnected) break; } if (content.downloadToken == null) break; imageBytes = await getDownloadedMedia(current, content.downloadToken!); } while (isDownloading && imageBytes == null); isDownloading = false; - if (imageBytes == null) { + if (current.downloadState == DownloadState.downloaded) { + // When the message should be downloaded but imageBytes are null then a error happened + await twonlyDatabase.messagesDao.updateMessageByMessageId( + current.messageId, + MessagesCompanion( + errorWhileSending: Value(true), + ), + ); + } + nextMediaOrExit(); return; }