3.4 KiB
3.4 KiB
Galeri: Klasör Tabanlı Gezinme — Rapor ve Plan
Tarih: 2026-08-03 Durum: Uygulandı (2026-08-03)
1. Mevcut Sorunun Analizi
RAM şişmesi — lib/services/image_manager.dart
addImages()her eklenen yol içinprecacheImage(FileImage(...))çağırıyor (satır 33-35).- Sonuç: toplu sürüklemede tüm resimler tam çözünürlükte decode edilip ImageCache'e yazılıyor.
- Örnek: 12MP JPEG dekode ≈ 48MB RGBA; 30 resim ≈ 1.4GB.
- Decode UI thread'inde yapılıyor → pencere donması, "çok pencere açmış gibi" hissi.
configureCache()tavanı: 1000 görsel / 1GB (satır 62-65).
Sağ tık efektlerinde çökme — lib/widgets/image_canvas.dart
- Her pointer move'da
setState→ColorFilteredtüm görseli yeniden boyuyor (satır 224-240). - Bellek zaten yüksekken + VM'de yazılımsal render → çökme en çok burada görülüyor.
- Kök neden RAM şişmesi; o çözülünce bu senaryo da hafifler.
2. Alınan Kararlar (kullanıcı onayı)
- Precache tamamen kaldırılacak — hiçbir resim önceden decode edilmeyecek.
- Görüntüleme anında decode: sıradaki resme geçişte yüklenene kadar beklenir.
- RAM kısıtlaması yok — cache limitlerine dokunulmayacak, daraltılmayacak.
- Önceki resim cache'ten düşebilir (zorunlu tutma yok). Precache olmadığı için bellekte aynı anda yalnızca açık olan resim(ler) durur; kabarık galeri listesi sorun yaratmaz.
3. Yeni Özellik — Klasör Tabanlı Galeri
Amaç: resimleri topluca seçip sürükleyerek galeri kurmak yerine, açılan herhangi bir resmin bulunduğu dizin otomatik galeri olsun.
Davranış:
- Bir resim açıldığında (çift tık, CLI argümanı, sürükle-bırak) bulunduğu dizin taranır.
- Dizindeki desteklenen imaj dosyaları (png/jpg/jpeg/jfif/jpe/webp/bmp/gif/wbmp) galeri listesi olarak set edilir.
- Açılan resim listedeki konumunu bulur ve o an gösterilir.
- Ctrl+Tab / Ctrl+Shift+Tab ile klasör içinde ileri-geri gezilir.
- Mevcut pencere başına singleton yapısı korunur — her pencere ayrı process, her biri kendi klasör galerisini kurar.
Sıralama
- Dosya yöneticisinin (Thunar/PCManFM/Nautilus) klasör sort'u OS seviyesinde okunamaz — uygulama içi ayardır, dosya sisteminde saklanmaz. Bu seçenek pratikte yok.
- Bu yüzden tarihe göre sıralanacak (dosyanın değiştirilme zamanı).
- Yön: en yeni önce, en eski sonra (azalan).
4. Uygulama (uygulandı)
lib/services/image_manager.dart— precache döngüsü vebuildContextkaldırıldı.addImagesyerinesetGalleryFromPaths(paths)geldi: ilk geçerli resmin klasörünü tarar, desteklenenleri filtreler, değiştirilme zamanına göre en yeni önce sıralar, açılan resmi o anki konum yapar. (Aynı zaman damgasında dosya adına göre sabit sıra)lib/services/file_handler.dart—addImagesçağrılarısetGalleryFromPathsoldu (Ctrl+O ve sürükle-bırak aynı akıştan geçiyor).lib/screens/viewer_screen.dart—buildContextataması kaldırıldı (precache yok).- RAM kısıtlaması eklenmedi —
configureCacheaynen duruyor.
5. Açık Sorular
Çözüldü:
Tarih sıralama yönü→ en yeni önce, en eski sonraPencereye birden fazla resim sürüklenirse→ sürüklenen resmin klasörüne geçilir (galeri açıkken yeni resim gelirse de aynı: o resmin klasörü yeni galeri olur)