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

66 lines
3.4 KiB
Markdown
Raw 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.
# 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)