From a66129a9ba9ae1136b169426ecc966aefffa6138 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 24 Feb 2025 21:18:49 +0800 Subject: [PATCH] :bug: Bug fixes --- lib/controllers/chat_message_controller.dart | 26 +++++++------ lib/providers/notification.dart | 3 +- lib/providers/sn_attachment.dart | 41 +++++++++++++++----- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/lib/controllers/chat_message_controller.dart b/lib/controllers/chat_message_controller.dart index ec7e495..4e77c7c 100644 --- a/lib/controllers/chat_message_controller.dart +++ b/lib/controllers/chat_message_controller.dart @@ -194,9 +194,11 @@ class ChatMessageController extends ChangeNotifier { channelId: channel!.id, createdAt: Value(message.createdAt), ), - onConflict: DoUpdate((_) => SnLocalChatMessageCompanion.custom( - content: Constant(jsonEncode(message.toJson())), - )), + onConflict: DoUpdate( + (_) => SnLocalChatMessageCompanion.custom( + content: Constant(jsonEncode(message.toJson())), + ), + ), ); } else { incomeStrandedQueue.add(message); @@ -218,15 +220,15 @@ class ChatMessageController extends ChangeNotifier { body: newBody, updatedAt: message.updatedAt, ); - if (message.relatedEventId != null) { - await (_dt.db.snLocalChatMessage.update() - ..where((e) => e.id.equals(message.relatedEventId!))) - .write( - SnLocalChatMessageCompanion.custom( - content: Constant(jsonEncode(messages[idx].toJson())), - ), - ); - } + } + if (message.relatedEventId != null) { + await (_dt.db.snLocalChatMessage.update() + ..where((e) => e.id.equals(message.relatedEventId!))) + .write( + SnLocalChatMessageCompanion.custom( + content: Constant(jsonEncode(messages[idx].toJson())), + ), + ); } } case 'messages.delete': diff --git a/lib/providers/notification.dart b/lib/providers/notification.dart index dbc2732..0dbe561 100644 --- a/lib/providers/notification.dart +++ b/lib/providers/notification.dart @@ -88,7 +88,8 @@ class NotificationProvider extends ChangeNotifier { final doHaptic = _cfg.prefs.getBool(kAppNotifyWithHaptic) ?? true; if (doHaptic) HapticFeedback.mediumImpact(); - if (notification.topic == 'messaging.message') { + if (notification.topic == 'messaging.message' && + skippableNotifyChannel != null) { if (notification.metadata['channel_id'] != null && notification.metadata['channel_id'] == skippableNotifyChannel) { return; diff --git a/lib/providers/sn_attachment.dart b/lib/providers/sn_attachment.dart index 7a0dbb5..4a32d14 100644 --- a/lib/providers/sn_attachment.dart +++ b/lib/providers/sn_attachment.dart @@ -41,7 +41,8 @@ class SnAttachmentProvider { return out; } - Future> getMultiple(List rids, {noCache = false}) async { + Future> getMultiple(List rids, + {noCache = false}) async { final result = List.filled(rids.length, null); final Map randomMapping = {}; for (int i = 0; i < rids.length; i++) { @@ -62,8 +63,10 @@ class SnAttachmentProvider { 'id': pendingFetch.join(','), }, ); - final List out = - resp.data['data'].map((e) => e['id'] == 0 ? null : SnAttachment.fromJson(e)).cast().toList(); + final List out = resp.data['data'] + .map((e) => e['id'] == 0 ? null : SnAttachment.fromJson(e)) + .cast() + .toList(); for (final item in out) { if (item == null) continue; @@ -77,7 +80,13 @@ class SnAttachmentProvider { return result; } - static Map mimetypeOverrides = {'mov': 'video/quicktime', 'mp4': 'video/mp4'}; + static Map mimetypeOverrides = { + 'mov': 'video/quicktime', + 'mp4': 'video/mp4', + 'm4a': 'audio/mp4', + 'apng': 'image/apng', + 'webp': 'image/webp', + }; Future directUploadOne( Uint8List data, @@ -89,8 +98,11 @@ class SnAttachmentProvider { bool analyzeNow = false, }) async { final filePayload = MultipartFile.fromBytes(data, filename: filename); - final fileAlt = filename.contains('.') ? filename.substring(0, filename.lastIndexOf('.')) : filename; - final fileExt = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); + final fileAlt = filename.contains('.') + ? filename.substring(0, filename.lastIndexOf('.')) + : filename; + final fileExt = + filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); String? mimetypeOverride; if (mimetype != null) { @@ -127,8 +139,11 @@ class SnAttachmentProvider { Map? metadata, { String? mimetype, }) async { - final fileAlt = filename.contains('.') ? filename.substring(0, filename.lastIndexOf('.')) : filename; - final fileExt = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); + final fileAlt = filename.contains('.') + ? filename.substring(0, filename.lastIndexOf('.')) + : filename; + final fileExt = + filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); String? mimetypeOverride; if (mimetype == null && mimetypeOverrides.keys.contains(fileExt)) { @@ -146,7 +161,10 @@ class SnAttachmentProvider { if (mimetypeOverride != null) 'mimetype': mimetypeOverride, }); - return (SnAttachmentFragment.fromJson(resp.data['meta']), resp.data['chunk_size'] as int); + return ( + SnAttachmentFragment.fromJson(resp.data['meta']), + resp.data['chunk_size'] as int + ); } Future _chunkedUploadOnePart( @@ -197,7 +215,10 @@ class SnAttachmentProvider { (entry.value + 1) * chunkSize, await file.length(), ); - final data = Uint8List.fromList(await file.openRead(beginCursor, endCursor).expand((chunk) => chunk).toList()); + final data = Uint8List.fromList(await file + .openRead(beginCursor, endCursor) + .expand((chunk) => chunk) + .toList()); final result = await _chunkedUploadOnePart( data,