From dda3677907ae3f1767c1fb5ca0160561d05aca4b Mon Sep 17 00:00:00 2001 From: otsmr Date: Wed, 13 May 2026 15:27:08 +0200 Subject: [PATCH] fixes some more issues --- lib/globals.dart | 2 +- lib/main.dart | 11 +++++++++++ lib/src/database/daos/groups.dao.dart | 13 ++++--------- lib/src/services/api/mediafiles/download.api.dart | 2 -- lib/src/services/backup.service.dart | 2 +- .../main_camera_controller.dart | 1 + lib/src/visual/views/chats/media_viewer.view.dart | 5 +++++ 7 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index c1d7a93a..a73b4aac 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -32,5 +32,5 @@ class AppState { static bool isInBackgroundTask = false; static bool allowErrorTrackingViaSentry = false; static bool gotMessageFromServer = false; - static int latestAppVersionId = 112; + static int latestAppVersionId = 113; } diff --git a/lib/main.dart b/lib/main.dart index c37c41bc..77f5db8d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mutex/mutex.dart'; @@ -246,6 +247,16 @@ Future runMigrations() async { }); } } + if (kDebugMode) { + assert( + AppState.latestAppVersionId == 113, + 'Forgot to update the target version in runMigrations() after incrementing AppState.latestAppVersionId.', + ); + assert( + AppState.latestAppVersionId == userService.currentUser.appVersion, + "Migration incomplete: currentUser.appVersion (${userService.currentUser.appVersion}) does not match AppState.latestAppVersionId (${AppState.latestAppVersionId}). Ensure the user's appVersion is updated in the migration block.", + ); + } } Future postStartupTasks() async { diff --git a/lib/src/database/daos/groups.dao.dart b/lib/src/database/daos/groups.dao.dart index f3e844bd..a9c206e7 100644 --- a/lib/src/database/daos/groups.dao.dart +++ b/lib/src/database/daos/groups.dao.dart @@ -139,15 +139,10 @@ class GroupsDao extends DatabaseAccessor with _$GroupsDaoMixin { } Future _insertGroup(GroupsCompanion group) async { - try { - await into(groups).insert(group); - return await (select( - groups, - )..where((t) => t.groupId.equals(group.groupId.value))).getSingle(); - } catch (e) { - Log.error('Could not insert group: $e'); - return null; - } + await into(groups).insertOnConflictUpdate(group); + return (select( + groups, + )..where((t) => t.groupId.equals(group.groupId.value))).getSingleOrNull(); } Future> getGroupContact(String groupId) async { diff --git a/lib/src/services/api/mediafiles/download.api.dart b/lib/src/services/api/mediafiles/download.api.dart index bbb47f0d..916d45cd 100644 --- a/lib/src/services/api/mediafiles/download.api.dart +++ b/lib/src/services/api/mediafiles/download.api.dart @@ -356,8 +356,6 @@ Future handleEncryptedFile(String mediaId) async { Log.info('Decryption of $mediaId was successful'); mediaService.encryptedPath.deleteSync(); - - unawaited(apiService.downloadDone(mediaService.mediaFile.downloadToken!)); }, ); } diff --git a/lib/src/services/backup.service.dart b/lib/src/services/backup.service.dart index ca314a23..952869d8 100644 --- a/lib/src/services/backup.service.dart +++ b/lib/src/services/backup.service.dart @@ -341,7 +341,7 @@ class BackupService { return (null, RecoveryError.noInternet); } - Log.warn('Backup downlaod status: ${response.statusCode}'); + Log.info('Backup downlaod status: ${response.statusCode}'); switch (response.statusCode) { case 200: diff --git a/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart b/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart index 92c9ebf9..ec5a8206 100644 --- a/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart +++ b/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart @@ -148,6 +148,7 @@ class MainCameraController { await cameraController?.initialize(); } catch (e) { Log.error(e); + cameraController = null; // ensure uninitialized controller is not reused return; } await cameraController?.startImageStream(_processCameraImage); diff --git a/lib/src/visual/views/chats/media_viewer.view.dart b/lib/src/visual/views/chats/media_viewer.view.dart index d6363a71..16ca569c 100644 --- a/lib/src/visual/views/chats/media_viewer.view.dart +++ b/lib/src/visual/views/chats/media_viewer.view.dart @@ -352,6 +352,11 @@ class _MediaViewerViewState extends State { return nextMediaOrExit(); } + // The server can now delete the encrypted bytes, as the users has sucessfully opened it. + unawaited( + apiService.downloadDone(currentMediaLocal.mediaFile.downloadToken!), + ); + var timerRequired = false; if (currentMediaLocal.mediaFile.type == MediaType.video) {