# 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çin `precacheImage(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` → `ColorFiltered` tü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ı) 1. **Precache tamamen kaldırılacak** — hiçbir resim önceden decode edilmeyecek. 2. Görüntüleme anında decode: sıradaki resme geçişte yüklenene kadar beklenir. 3. **RAM kısıtlaması yok** — cache limitlerine dokunulmayacak, daraltılmayacak. 4. Ö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ü ve `buildContext` kaldırıldı. `addImages` yerine `setGalleryFromPaths(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ı `setGalleryFromPaths` oldu (Ctrl+O ve sürükle-bırak aynı akıştan geçiyor). - `lib/screens/viewer_screen.dart` — `buildContext` ataması kaldırıldı (precache yok). - RAM kısıtlaması eklenmedi — `configureCache` aynen duruyor. ## 5. Açık Sorular Çözüldü: 1. ~~Tarih sıralama yönü~~ → **en yeni önce, en eski sonra** 2. ~~Pencereye 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)