Files
imajviewer/docs/galeri-klasor-tabanli.md

3.4 KiB
Raw Blame History

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 setStateColorFiltered 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.
  • ı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.dartaddImages çağrıları setGalleryFromPaths oldu (Ctrl+O ve sürükle-bırak aynı akıştan geçiyor).
  • lib/screens/viewer_screen.dartbuildContext 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üklenirsesürüklenen resmin klasörüne geçilir (galeri açıkken yeni resim gelirse de aynı: o resmin klasörü yeni galeri olur)