mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
chore: impl suggestions
This commit is contained in:
@@ -1,13 +1,15 @@
|
|||||||
import 'package:immich_mobile/domain/models/ocr.model.dart';
|
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/entities/asset_ocr.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||||
|
import 'package:drift/drift.dart';
|
||||||
|
|
||||||
class OcrRepository extends DriftDatabaseRepository {
|
class OcrRepository extends DriftDatabaseRepository {
|
||||||
final Drift _db;
|
final Drift _db;
|
||||||
const OcrRepository(this._db) : super(_db);
|
const OcrRepository(this._db) : super(_db);
|
||||||
|
|
||||||
Future<List<Ocr>?> get(String assetId) async {
|
Future<List<Ocr>> get(String assetId) async {
|
||||||
final query = _db.select(_db.assetOcrEntity)..where((row) => row.assetId.equals(assetId));
|
final query = _db.select(_db.assetOcrEntity)
|
||||||
|
..where((row) => row.assetId.equals(assetId) & row.isVisible.equals(true));
|
||||||
|
|
||||||
final result = await query.get();
|
final result = await query.get();
|
||||||
return result.map((e) => e.toDto()).toList();
|
return result.map((e) => e.toDto()).toList();
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ class SyncApiRepository {
|
|||||||
SyncRequestType.peopleV1,
|
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.assetFacesV1,
|
||||||
if (serverVersion >= const SemVer(major: 2, minor: 6, patch: 0)) SyncRequestType.assetFacesV2,
|
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,
|
reset: shouldReset,
|
||||||
).toJson(),
|
).toJson(),
|
||||||
|
|||||||
@@ -804,7 +804,6 @@ class SyncStreamRepository extends DriftDatabaseRepository {
|
|||||||
await _db.batch((batch) {
|
await _db.batch((batch) {
|
||||||
for (final assetOcr in data) {
|
for (final assetOcr in data) {
|
||||||
final companion = AssetOcrEntityCompanion(
|
final companion = AssetOcrEntityCompanion(
|
||||||
id: Value(assetOcr.id),
|
|
||||||
assetId: Value(assetOcr.assetId),
|
assetId: Value(assetOcr.assetId),
|
||||||
recognizedText: Value(assetOcr.text),
|
recognizedText: Value(assetOcr.text),
|
||||||
x1: Value(assetOcr.x1),
|
x1: Value(assetOcr.x1),
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math' as math;
|
import 'dart:math' as math;
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.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/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/ocr.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/providers/infrastructure/ocr.provider.dart';
|
||||||
import 'package:immich_mobile/widgets/photo_view/photo_view.dart';
|
import 'package:immich_mobile/widgets/photo_view/photo_view.dart';
|
||||||
|
|
||||||
@@ -185,7 +187,7 @@ class _OcrOverlayState extends ConsumerState<OcrOverlay> {
|
|||||||
Offset(x4 - minX, y4 - minY),
|
Offset(x4 - minX, y4 - minY),
|
||||||
],
|
],
|
||||||
isSelected: isSelected,
|
isSelected: isSelected,
|
||||||
context: context,
|
colorScheme: context.themeData.colorScheme,
|
||||||
),
|
),
|
||||||
size: Size(maxX - minX, maxY - minY),
|
size: Size(maxX - minX, maxY - minY),
|
||||||
),
|
),
|
||||||
@@ -243,19 +245,19 @@ class _OcrOverlayState extends ConsumerState<OcrOverlay> {
|
|||||||
class _OcrBoxPainter extends CustomPainter {
|
class _OcrBoxPainter extends CustomPainter {
|
||||||
final List<Offset> points;
|
final List<Offset> points;
|
||||||
final bool isSelected;
|
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
|
@override
|
||||||
void paint(Canvas canvas, Size size) {
|
void paint(Canvas canvas, Size size) {
|
||||||
final paint = Paint()
|
final paint = Paint()
|
||||||
..color = isSelected ? Colors.blue : Colors.lightBlue
|
..color = isSelected ? colorScheme.primary : colorScheme.secondary
|
||||||
..style = PaintingStyle.stroke
|
..style = PaintingStyle.stroke
|
||||||
..strokeWidth = 2.0;
|
..strokeWidth = 2.0;
|
||||||
|
|
||||||
final fillPaint = Paint()
|
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;
|
..style = PaintingStyle.fill;
|
||||||
|
|
||||||
final path = Path()
|
final path = Path()
|
||||||
@@ -271,6 +273,6 @@ class _OcrBoxPainter extends CustomPainter {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool shouldRepaint(_OcrBoxPainter oldDelegate) {
|
bool shouldRepaint(_OcrBoxPainter oldDelegate) {
|
||||||
return oldDelegate.isSelected != isSelected || oldDelegate.points != points;
|
return oldDelegate.isSelected != isSelected || listEquals(oldDelegate.points, points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class AssetViewerStateNotifier extends Notifier<AssetViewerState> {
|
|||||||
|
|
||||||
void setAsset(BaseAsset asset) {
|
void setAsset(BaseAsset asset) {
|
||||||
if (asset == state.currentAsset) return;
|
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) {
|
void setOpacity(double opacity) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ final ocrRepositoryProvider = Provider<OcrRepository>((ref) => OcrRepository(ref
|
|||||||
|
|
||||||
final ocrServiceProvider = Provider<OcrService>((ref) => OcrService(ref.watch(ocrRepositoryProvider)));
|
final ocrServiceProvider = Provider<OcrService>((ref) => OcrService(ref.watch(ocrRepositoryProvider)));
|
||||||
|
|
||||||
final ocrAssetProvider = FutureProvider.family<List<Ocr>?, String>((ref, assetId) async {
|
final ocrAssetProvider = FutureProvider.autoDispose.family<List<Ocr>?, String>((ref, assetId) async {
|
||||||
final service = ref.watch(ocrServiceProvider);
|
final service = ref.watch(ocrServiceProvider);
|
||||||
return service.get(assetId);
|
return service.get(assetId);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user