From daa81de3e9719c551d10d4e30a9bed7137443a09 Mon Sep 17 00:00:00 2001 From: Yaros Date: Thu, 30 Apr 2026 20:19:25 +0200 Subject: [PATCH] chore: impl suggestions --- .../repositories/ocr.repository.dart | 6 ++++-- .../repositories/sync_api.repository.dart | 2 +- .../repositories/sync_stream.repository.dart | 1 - .../widgets/asset_viewer/ocr_overlay.widget.dart | 14 ++++++++------ .../asset_viewer/asset_viewer.provider.dart | 2 +- .../lib/providers/infrastructure/ocr.provider.dart | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/mobile/lib/infrastructure/repositories/ocr.repository.dart b/mobile/lib/infrastructure/repositories/ocr.repository.dart index 018d016ab3..99f4fa4675 100644 --- a/mobile/lib/infrastructure/repositories/ocr.repository.dart +++ b/mobile/lib/infrastructure/repositories/ocr.repository.dart @@ -1,13 +1,15 @@ import 'package:immich_mobile/domain/models/ocr.model.dart'; import 'package:immich_mobile/infrastructure/entities/asset_ocr.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; +import 'package:drift/drift.dart'; class OcrRepository extends DriftDatabaseRepository { final Drift _db; const OcrRepository(this._db) : super(_db); - Future?> get(String assetId) async { - final query = _db.select(_db.assetOcrEntity)..where((row) => row.assetId.equals(assetId)); + Future> get(String assetId) async { + final query = _db.select(_db.assetOcrEntity) + ..where((row) => row.assetId.equals(assetId) & row.isVisible.equals(true)); final result = await query.get(); return result.map((e) => e.toDto()).toList(); diff --git a/mobile/lib/infrastructure/repositories/sync_api.repository.dart b/mobile/lib/infrastructure/repositories/sync_api.repository.dart index f1e25834cf..81b88eba84 100644 --- a/mobile/lib/infrastructure/repositories/sync_api.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_api.repository.dart @@ -69,7 +69,7 @@ class SyncApiRepository { SyncRequestType.peopleV1, if (serverVersion < const SemVer(major: 2, minor: 6, patch: 0)) SyncRequestType.assetFacesV1, if (serverVersion >= const SemVer(major: 2, minor: 6, patch: 0)) SyncRequestType.assetFacesV2, - if (serverVersion >= const SemVer(major: 3, minor: 0, patch: 0)) SyncRequestType.assetOcrV1, + SyncRequestType.assetOcrV1, ], reset: shouldReset, ).toJson(), diff --git a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart index a4a20f24fb..34e447bd6c 100644 --- a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart @@ -804,7 +804,6 @@ class SyncStreamRepository extends DriftDatabaseRepository { await _db.batch((batch) { for (final assetOcr in data) { final companion = AssetOcrEntityCompanion( - id: Value(assetOcr.id), assetId: Value(assetOcr.assetId), recognizedText: Value(assetOcr.text), x1: Value(assetOcr.x1), diff --git a/mobile/lib/presentation/widgets/asset_viewer/ocr_overlay.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/ocr_overlay.widget.dart index 36b1005cab..a30bfaae95 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/ocr_overlay.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/ocr_overlay.widget.dart @@ -1,9 +1,11 @@ import 'dart:async'; import 'dart:math' as math; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/ocr.model.dart'; +import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/providers/infrastructure/ocr.provider.dart'; import 'package:immich_mobile/widgets/photo_view/photo_view.dart'; @@ -185,7 +187,7 @@ class _OcrOverlayState extends ConsumerState { Offset(x4 - minX, y4 - minY), ], isSelected: isSelected, - context: context, + colorScheme: context.themeData.colorScheme, ), size: Size(maxX - minX, maxY - minY), ), @@ -243,19 +245,19 @@ class _OcrOverlayState extends ConsumerState { class _OcrBoxPainter extends CustomPainter { final List points; final bool isSelected; - final BuildContext context; + final ColorScheme colorScheme; - const _OcrBoxPainter({required this.points, required this.isSelected, required this.context}); + const _OcrBoxPainter({required this.points, required this.isSelected, required this.colorScheme}); @override void paint(Canvas canvas, Size size) { final paint = Paint() - ..color = isSelected ? Colors.blue : Colors.lightBlue + ..color = isSelected ? colorScheme.primary : colorScheme.secondary ..style = PaintingStyle.stroke ..strokeWidth = 2.0; final fillPaint = Paint() - ..color = (isSelected ? Colors.blue : Colors.lightBlue).withValues(alpha: 0.1) + ..color = (isSelected ? colorScheme.primary : colorScheme.secondary).withValues(alpha: 0.1) ..style = PaintingStyle.fill; final path = Path() @@ -271,6 +273,6 @@ class _OcrBoxPainter extends CustomPainter { @override bool shouldRepaint(_OcrBoxPainter oldDelegate) { - return oldDelegate.isSelected != isSelected || oldDelegate.points != points; + return oldDelegate.isSelected != isSelected || listEquals(oldDelegate.points, points); } } diff --git a/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart b/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart index 579055824d..a38bbba232 100644 --- a/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart +++ b/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart @@ -90,7 +90,7 @@ class AssetViewerStateNotifier extends Notifier { void setAsset(BaseAsset asset) { if (asset == state.currentAsset) return; - state = state.copyWith(currentAsset: asset, stackIndex: 0); + state = state.copyWith(currentAsset: asset, stackIndex: 0, showingOcr: false); } void setOpacity(double opacity) { diff --git a/mobile/lib/providers/infrastructure/ocr.provider.dart b/mobile/lib/providers/infrastructure/ocr.provider.dart index b1ab710112..111f3952ce 100644 --- a/mobile/lib/providers/infrastructure/ocr.provider.dart +++ b/mobile/lib/providers/infrastructure/ocr.provider.dart @@ -8,7 +8,7 @@ final ocrRepositoryProvider = Provider((ref) => OcrRepository(ref final ocrServiceProvider = Provider((ref) => OcrService(ref.watch(ocrRepositoryProvider))); -final ocrAssetProvider = FutureProvider.family?, String>((ref, assetId) async { +final ocrAssetProvider = FutureProvider.autoDispose.family?, String>((ref, assetId) async { final service = ref.watch(ocrServiceProvider); return service.get(assetId); });