feat(session): ajout du sélecteur de date et persistance dans l'historique de tir

This commit is contained in:
qguillaume
2026-05-27 00:57:26 +02:00
parent e570bd4296
commit 78c9fc96c9
6 changed files with 111 additions and 54 deletions

View File

@@ -174,7 +174,7 @@ class AnalysisProvider extends ChangeNotifier {
x: impact.x,
y: impact.y,
score: impact.suggestedScore,
analysisId: '', // Will be set when saving
analysisId: '',
);
}).toList();
@@ -537,8 +537,7 @@ class AnalysisProvider extends ChangeNotifier {
_imagePath = correctedPath;
_correctedImagePath = correctedPath;
_distortionCorrectionEnabled = true;
_imageAspectRatio =
1.0; // The corrected image is always square (side x side)
_imageAspectRatio = 1.0;
notifyListeners();
}
@@ -616,18 +615,18 @@ class AnalysisProvider extends ChangeNotifier {
// 3. Application immédiate de la transformation (méthode asynchrone)
await applyDistortionCorrection();
} else {
notifyListeners(); // On prévient quand même si pas de correction
notifyListeners();
}
}
Future<void> runFullDistortionWorkflow() async {
_state = AnalysisState.loading; // Affiche un spinner sur votre UI
_state = AnalysisState.loading;
notifyListeners();
try {
calculateDistortion(); // Calcule les paramètres
await applyDistortionCorrection(); // Génère le fichier corrigé
_distortionCorrectionEnabled = true; // Active l'affichage
calculateDistortion();
await applyDistortionCorrection();
_distortionCorrectionEnabled = true;
_state = AnalysisState.success;
} catch (e) {
_errorMessage = "Erreur de rendu : $e";
@@ -688,12 +687,7 @@ class AnalysisProvider extends ChangeNotifier {
return false;
}
// Identifiant d'analyse temporaire
final analysisId = _shots.isNotEmpty && _shots.first.analysisId.isNotEmpty
? _shots.first.analysisId
: 'analysis_${DateTime.now().millisecondsSinceEpoch}';
final service = AiExportService(); // Local instanciation for simplicity
final service = AiExportService();
_state = AnalysisState.loading;
notifyListeners();
@@ -716,13 +710,14 @@ class AnalysisProvider extends ChangeNotifier {
return success;
}
/// Save the session (legacy standalone flow)
/// Save the session (Refactorisé pour appliquer le paramètre de date personnalisé)
Future<TargetAnalysis> saveSession({
String? notes,
String? sessionId,
String? weaponName,
String? weaponId,
int? distance,
DateTime? date, // <-- REÇOIT PROPREMENT LA DATE DE DEBUT DE SESSION
}) async {
if (_imagePath == null || _targetType == null) {
throw Exception('Cannot save: missing image or target type');
@@ -748,6 +743,7 @@ class AnalysisProvider extends ChangeNotifier {
if (existingSession != null) {
await _sessionRepository.addAnalysisToSession(sessionId, targetAnalysis);
} else {
// CORRECTION : Utilise la date injectée plutôt que DateTime.now()
await _sessionRepository.createSession(
id: sessionId,
weapon: weaponName ?? 'Inconnue',
@@ -756,9 +752,11 @@ class AnalysisProvider extends ChangeNotifier {
analyses: [targetAnalysis],
notes: notes,
distance: distance ?? 25,
date: date ?? DateTime.now(),
);
}
} else {
// CORRECTION : S'applique aussi au flux alternatif sans ID préalable
await _sessionRepository.createSession(
weapon: weaponName ?? 'Inconnue',
weaponId: weaponId,
@@ -766,6 +764,7 @@ class AnalysisProvider extends ChangeNotifier {
analyses: [targetAnalysis],
notes: notes,
distance: distance ?? 25,
date: date ?? DateTime.now(),
);
}