81 lines
2.7 KiB
Dart
81 lines
2.7 KiB
Dart
|
|
/// اسکریپت برای پیدا کردن 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}');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|