From 3d9e5743094e33d6def8790dcf57864c9411bd74 Mon Sep 17 00:00:00 2001 From: qlionbleusam Date: Sat, 29 Aug 2026 10:19:01 +0200 Subject: [PATCH] feat(ai-export): annotate uploads with the expected shot count --- lib/features/analysis/analysis_provider.dart | 2 ++ lib/features/analysis/analysis_screen.dart | 5 +++++ lib/features/settings/settings_screen.dart | 3 ++- lib/services/ai_export_service.dart | 6 ++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/features/analysis/analysis_provider.dart b/lib/features/analysis/analysis_provider.dart index 1bd1beb6..cb93675d 100644 --- a/lib/features/analysis/analysis_provider.dart +++ b/lib/features/analysis/analysis_provider.dart @@ -248,6 +248,7 @@ class AnalysisProvider extends ChangeNotifier { String? sessionId, int? distance, String? caliber, + int? expectedShots, }) async { if (_imagePath == null || _targetType == null) { _errorMessage = "Impossible d'exporter : image ou type de cible manquant."; @@ -273,6 +274,7 @@ class AnalysisProvider extends ChangeNotifier { shots: _shots, distanceMeters: distance ?? 25, caliber: caliber ?? 'unknown', + expectedShots: expectedShots, ); _state = AnalysisState.success; diff --git a/lib/features/analysis/analysis_screen.dart b/lib/features/analysis/analysis_screen.dart index dc582d96..249defb5 100644 --- a/lib/features/analysis/analysis_screen.dart +++ b/lib/features/analysis/analysis_screen.dart @@ -943,6 +943,11 @@ class _AnalysisScreenContentState extends State<_AnalysisScreenContent> { sessionId: sessionProvider.activeSessionId, distance: sessionProvider.distance, caliber: sessionProvider.currentWeaponCaliber, + // Hors session, shotsPerTarget vaut sa valeur par defaut : mieux + // vaut ne rien annoncer qu'annoncer un nombre faux. + expectedShots: sessionProvider.isSessionActive + ? sessionProvider.shotsPerTarget + : null, ); messenger.hideCurrentSnackBar(); } diff --git a/lib/features/settings/settings_screen.dart b/lib/features/settings/settings_screen.dart index 2d0ec00f..2105c9ed 100644 --- a/lib/features/settings/settings_screen.dart +++ b/lib/features/settings/settings_screen.dart @@ -463,7 +463,8 @@ class _SettingsScreenState extends State { const SizedBox(height: 14), const Text( '📤 Ce qui est envoyé : la photo de la cible, la position des ' - 'impacts que vous avez placés, la distance de tir et le calibre.', + 'impacts que vous avez placés, la distance de tir, le calibre et ' + 'le nombre de coups prévus.', style: TextStyle(fontSize: 13), ), const SizedBox(height: 10), diff --git a/lib/services/ai_export_service.dart b/lib/services/ai_export_service.dart index 881b10a7..14ca8d80 100644 --- a/lib/services/ai_export_service.dart +++ b/lib/services/ai_export_service.dart @@ -108,6 +108,7 @@ class AiExportService { required List shots, int distanceMeters = 25, String caliber = 'unknown', + int? expectedShots, String? apiUrl, }) async { try { @@ -172,6 +173,11 @@ class AiExportService { "type": targetType.name, "distance_meters": distanceMeters, "caliber": caliber, + // Nombre de coups prevus pour cette cible, null hors session. + // Un ecart avec le nombre d'impacts ne signifie pas que le + // marquage est faux (un coup peut etre parti hors papier) : c'est + // au tri du dataset d'en decider, pas au client. + "expected_shots": expectedShots, }, "plotting": { "target_corners": corners,