Refactor ActivityCard UI and improve voting functionality
- Updated ActivityCard layout for better visual consistency and responsiveness. - Simplified the category badge and adjusted styles for better readability. - Enhanced the voting section with a progress bar and improved button designs. - Added a new method in Activity model to check if all trip participants approved an activity. - Improved error handling and validation in ActivityRepository for voting and fetching activities. - Implemented pagination in ActivityPlacesService for activity searches. - Removed outdated scripts for cleaning up duplicate images.
This commit is contained in:
@@ -1,46 +0,0 @@
|
||||
import 'dart:io';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import '../lib/services/trip_image_service.dart';
|
||||
import '../lib/firebase_options.dart';
|
||||
|
||||
/// Script pour nettoyer les doublons d'images de Londres
|
||||
void main() async {
|
||||
|
||||
try {
|
||||
// Initialiser Firebase
|
||||
await Firebase.initializeApp(
|
||||
options: DefaultFirebaseOptions.currentPlatform,
|
||||
);
|
||||
|
||||
|
||||
final tripImageService = TripImageService();
|
||||
|
||||
await tripImageService.cleanupDuplicateImages();
|
||||
|
||||
|
||||
} catch (e) {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Instructions d'utilisation:
|
||||
|
||||
1. Assurez-vous que Firebase est configuré dans votre projet
|
||||
2. Exécutez: dart run scripts/cleanup_london_duplicates.dart
|
||||
3. Le script analysera automatiquement tous les doublons et les supprimera
|
||||
4. Vérifiez Firebase Storage après l'exécution
|
||||
|
||||
Le script:
|
||||
- Groupe toutes les images par destination (normalisée)
|
||||
- Identifie les doublons pour la même destination
|
||||
- Garde l'image la plus récente (basé sur le timestamp)
|
||||
- Supprime les anciennes versions
|
||||
|
||||
Pour Londres spécifiquement, si vous avez:
|
||||
- Londres_Royaume_Uni_1762175016594.jpg
|
||||
- Londres_Royaume_Uni_1762175016603.jpg
|
||||
|
||||
Le script gardera la version _1762175016603.jpg (plus récente)
|
||||
et supprimera _1762175016594.jpg (plus ancienne)
|
||||
*/
|
||||
@@ -1,81 +0,0 @@
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:firebase_storage/firebase_storage.dart';
|
||||
|
||||
void main() async {
|
||||
|
||||
try {
|
||||
await Firebase.initializeApp();
|
||||
|
||||
final storage = FirebaseStorage.instance;
|
||||
final ref = storage.ref().child('trip_images');
|
||||
|
||||
final result = await ref.listAll();
|
||||
|
||||
|
||||
// Grouper les images par ville
|
||||
Map<String, List<Reference>> imagesByCity = {};
|
||||
|
||||
for (var item in result.items) {
|
||||
final name = item.name;
|
||||
|
||||
// Extraire la ville du nom de fichier
|
||||
String city = 'unknown';
|
||||
if (name.contains('_')) {
|
||||
// Format: londres_timestamp.jpg ou london_timestamp.jpg
|
||||
city = name.split('_')[0].toLowerCase();
|
||||
}
|
||||
|
||||
if (!imagesByCity.containsKey(city)) {
|
||||
imagesByCity[city] = [];
|
||||
}
|
||||
imagesByCity[city]!.add(item);
|
||||
}
|
||||
|
||||
for (var entry in imagesByCity.entries) {
|
||||
}
|
||||
|
||||
// Focus sur Londres/London
|
||||
final londonImages = <Reference>[];
|
||||
londonImages.addAll(imagesByCity['londres'] ?? []);
|
||||
londonImages.addAll(imagesByCity['london'] ?? []);
|
||||
|
||||
|
||||
if (londonImages.length > 1) {
|
||||
|
||||
// Trier par timestamp (garder la plus récente)
|
||||
londonImages.sort((a, b) {
|
||||
final timestampA = _extractTimestamp(a.name);
|
||||
final timestampB = _extractTimestamp(b.name);
|
||||
return timestampB.compareTo(timestampA); // Plus récent en premier
|
||||
});
|
||||
|
||||
for (var image in londonImages) {
|
||||
final timestamp = _extractTimestamp(image.name);
|
||||
}
|
||||
|
||||
// Supprimer toutes sauf la première (plus récente)
|
||||
for (int i = 1; i < londonImages.length; i++) {
|
||||
await londonImages[i].delete();
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
int _extractTimestamp(String filename) {
|
||||
try {
|
||||
// Extraire le timestamp du nom de fichier
|
||||
// Format: ville_timestamp.jpg
|
||||
final parts = filename.split('_');
|
||||
if (parts.length >= 2) {
|
||||
final timestampPart = parts[1].split('.')[0]; // Enlever l'extension
|
||||
return int.parse(timestampPart);
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
return 0; // Timestamp par défaut
|
||||
}
|
||||
Reference in New Issue
Block a user