Files
rasadyar_application/tools/find_duplicate_assets.dart

81 lines
2.7 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/// اسکریپت برای پیدا کردن Assets تکراری (SVG و VEC)
///
/// استفاده:
/// dart run tools/find_duplicate_assets.dart
import 'dart:io';
void main() async {
print('🔍 در حال بررسی Assets تکراری...\n');
final svgFiles = <String>[];
final vecFiles = <String>[];
// خواندن SVG files
final iconsDir = Directory('assets/icons');
if (await iconsDir.exists()) {
await for (final entity in iconsDir.list()) {
if (entity is File && entity.path.endsWith('.svg')) {
final fileName = entity.path.split(Platform.pathSeparator).last;
svgFiles.add(fileName.replaceAll('.svg', ''));
}
}
}
// خواندن VEC files
final vecDir = Directory('assets/vec');
if (await vecDir.exists()) {
await for (final entity in vecDir.list()) {
if (entity is File && entity.path.endsWith('.vec')) {
final fileName = entity.path.split(Platform.pathSeparator).last;
vecFiles.add(fileName.replaceAll('.svg.vec', '').replaceAll('.vec', ''));
}
}
}
print('📊 آمار:');
print(' SVG files: ${svgFiles.length}');
print(' VEC files: ${vecFiles.length}\n');
// پیدا کردن تکراری‌ها
final duplicates = <String>[];
for (final svg in svgFiles) {
if (vecFiles.contains(svg)) {
duplicates.add(svg);
}
}
if (duplicates.isNotEmpty) {
print('⚠️ پیدا شد ${duplicates.length} asset تکراری:\n');
for (final dup in duplicates) {
print(' - $dup');
print(' 📄 assets/icons/$dup.svg');
print(' 📄 assets/vec/$dup.svg.vec\n');
}
print('💡 پیشنهاد:');
print(' اگر از VEC استفاده می‌کنید، SVG ها رو حذف کنید');
print(' یا برعکس، اگر از SVG استفاده می‌کنید، VEC ها رو حذف کنید');
print(' این کار می‌تونه حجم اپ رو تا 50% کاهش بده!\n');
// محاسبه حجم تقریبی
print('📦 حجم تقریبی قابل صرفه‌جویی:');
print(' ${duplicates.length} فایل × ~10KB = ~${(duplicates.length * 10 / 1024).toStringAsFixed(2)} MB');
} else {
print('✅ هیچ asset تکراری پیدا نشد!');
}
// پیدا کردن SVG های بدون VEC
final svgOnly = svgFiles.where((svg) => !vecFiles.contains(svg)).toList();
if (svgOnly.isNotEmpty) {
print('\n📄 SVG های بدون نسخه VEC: ${svgOnly.length}');
}
// پیدا کردن VEC های بدون SVG
final vecOnly = vecFiles.where((vec) => !svgFiles.contains(vec)).toList();
if (vecOnly.isNotEmpty) {
print('📄 VEC های بدون نسخه SVG: ${vecOnly.length}');
}
}