Files
imajviewer/docs/index.md
T
Alhan c69f0a0295
Build & Release / build-linux (push) Canceled after 0s
Build & Release / build-windows (push) Canceled after 0s
Build & Release / create-release (push) Canceled after 0s
docs: add imajViewer2 project analysis report (AI image manipulation + video)
2026-11-10 08:14:35 +03:00

105 lines
22 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.
# imajViewer — Dokümantasyon İndeksi
| Tarih | Dosya | Konu |
|---|---|---|
| 2026-11-10 | (bu satır) | **v1.9.2 tamlandı (Gitea release + commit + push)** — Ayarlar sekmeli dialog, hover rengi, grab imleci. Kullanıcı testi onaylı. Gitea release v1.9.2 (id 5) + asset, sha256 doğrulandı. Commit `701eafa` (feat) + `96dc8c6` (dist swap) zaten push edilmişti. Bu oturum: .deb yeniden build edildi (bağımlılık değişimi, 10.7M), pubspec.lock güncellendi, untracked test dosyaları temizlendi. Sistem kurulumu 1.7.0 → 1.9.2. Açık maddeler: dil desteği (placeholder var, uygulanmadı), hücreye snap (ileride). |
| 2026-11-10 | [analiz-imajviewer2.md](analiz-imajviewer2.md) | **RAPOr — imajViewer2 Projesi Analizi** — AI görüntü manipülasyon tool'u + video oynatma. Hibrit mimari önerilir: yerel GPU üzerinde özel Python API server (model yükleme stratejisi), ComfyUI alternatif modeller için. img2img, txt2img, mask-based inpainting, image-to-video. Segment API img2img için uygun ($0.001-$0.0072), video için yerel model önerilir (SkyReels-V3, HunyuanVideo). Flutter client media_kit ile video playback. Model yönetimi stratejisi: aktif model GPU'de kalmalı, kullanıcı ayarlardan seçebilmeli. |
| 2026-10-31 | [rapor-v192.md](rapor-v192.md) | **RAPOR — v1.9.2 yayınlandı** — Ayarlar dialog'u sekmeli (Genel/Boyut/Kısayollar), dış marginsiz tam-kaplayan panel, responsive ızgara + `H:W` etiketi, hover rengi ayarı (8 renk, `window.json`), başlık çubuğunda save gear'ın yanında + grab imleci, sıralama etiketleri tek kelime, footer cümlesi, kısayol fontu/sütunu. Commit `701eafa` + `96dc8c6` push; Gitea release **v1.9.2** (id 5) + asset, indirilen sha256 `0a4148a2…` doğrulandı; sistem kurulumu 1.7.0 → 1.9.2. Kullanıcı testi onaylı. Açık maddeler rapor §10 |
| 2026-10-31 | [plan-settings-tabs.md](plan-settings-tabs.md) | **v1.9.2 YAYINDA (commit + push + release tamam)** — Ayarlar dialog'u sekmeli: `Genel` (sıralama + dosya özellikleri) / `Boyut` / `Kısayollar`, pill sekmeler (`SegmentedButton`, K-01a K-02a K-03a K-04b). `AlertDialog` → `Dialog` `insetPadding: zero`: dış margin ve yuvarlak köşe yok, panel geniş pencerede 520×560 ortada / dar pencerede pencereyi kaplar, `white12` ince border. Sekme başlıkları sekme etiketiyle aynı olduğu için iç başlıklar kaldırıldı. Finalize turu: sekme çubuğu tam genişlik (`expandedInsets`, etiketler ortada) + Boyut sekmesi ızgarası `Expanded` ile pencereyi kaplıyor (responsive hücreler). analyze 33 (baseline), debug build + kurulum `diff -rq` boş. **Kod değişti — çalışan uygulama eski build, kapat/aç gerekir** |
| 2026-10-31 | (bu satır) | **EK FİKİR — dil desteği (uygulanmadı, yol haritası)** — Ayarlar > Genel sekmesinde altta `English / Türkçe / Français` seçeneği **disabled placeholder** olarak duruyor (31-10 kararı: yapıya girilmedi). Gerçek geçiş için gerekenler: (1) dil tercihi için kalıcı state (window.json benzeri settings dosyası) + `MaterialApp.locale`'e bağlama, (2) seçili dilin yeniden başlatmadan uygulanması (MaterialApp rebuild / locale notifier), (3) yeni diller için `app_<locale>.arb` dosyaları (fr vd.) — şu an yalnız tr/en var, (4) koda gömülü metinlerin (ör. `imajViewer $appVersion`, dil adları) l10n'e taşınması. Sıralama etiketleri tek kelimeye indirildiği için dar pencerede satır kırılması riski yok |
| 2026-10-31 | [session-2026-10-31.md](session-2026-10-31.md) | **OTURUM ÖZETİ + DURUM** — v1.8.0 yayında (Gitea). **v1.9.0 YAYINDA (31-10 gece)**: commit a5969cf (feat) + 1a6de71 (dist swap), push; Gitea release **v1.9.0** (id 4) + .deb, download sha256 doğrulandı (63c1ec78…). Kapsam: taskbar dosya adı ✓, ikon 16–256 ✓, ayarlar sırası ✓, ızgara sabit 4 sütun ✓ (geniş/dar transpozesi kaldırıldı — kullanıcı kararı). **AÇIK BUG (kullanıcı testinde doğrulama bekliyor): büyük pencerede ayarlar dialog'u görünmüyor** — transpoze düzeltmesi bu bug'ın çözümü olarak uygulandı; sorun kalarsa kök neden adayı: Impeller + transparent window (session dosyasındaki Skia adımları). Sistem .deb kurulumu kullanıcıda: `sudo apt install ./dist/imajviewer_1.9.0_amd64.deb`. **v1.9.1 WIP (31-10):** compact üst bar + `Flexible` overflow düzeltmesi + **facelift UYGULANDI (bu oturum, detay: session §7)**: [plan-settings-facelift.md](plan-settings-facelift.md) — 520×560 cap'li ortalanmış dialog, M3 bölüm kartları, SegmentedButton sıralama, çift sütun kısayollar (17 l10n çifti, anahtar sütunu 160 px — ölçümle belirlendi, planın ~110 kırpardı), sabit footer, ızgara hücreleri 52×28. **Mekanizma sapması (testle doğrulandı):** planın `LayoutBuilder+Center`'ı açgözlü `Center`'a (dialog kısa içerikte bile pencere yüksekliğine inerdi) → düz `ConstrainedBox`; yapısal widget test: kompakt 568×231 / cap'li 568×600+scroll / küçük pencere 340×332. analyze 33 (dokunulan dosyalarda sıfır); debug build + kurulum `diff -rq` boş. **COMMIT YOK, PUSH YOK** — kullanıcı manuel testi bekleniyor; onay sonrası release akışı (plan §3.4) |
| 2026-10-31 | [rapor-ikon-analizi.md](rapor-ikon-analizi.md) | **Rapor — ikon "sembolsüz" araştırması (canlı probe + render testi)** — Pencere ikonu düzgün (`_NET_WM_ICON` 256'dan, panel doğru çiziyor — ekran görüntüsü karşılaştırmasıyla doğrulandı). Kök neden (yüksek güven): hicolor'da **yalnız 64×64** var; 16/22 px'te (Thunar "Aç ile", Xfce app menüsü) sembol ölçeklemede kaybolup düz koyu kareye dönüyor. Yan bulgular: 10×10 unmapped hayalet pencere (framework, zararsız), ikon cache'leri aslında yerinde (`icon-theme.cache`), başlık C++'ta set ediliyor (`_NET_WM_NAME="imajviewer"`; `window_manager.setTitle` Linux'ta destekli — eklenti kaynağı doğrulandı), çift .desktop (sistem 1.7.0 + yerel). Düzeltme: plan-v190'ta |
| 2026-10-31 | [plan-v190-taskbar-ikon.md](plan-v190-taskbar-ikon.md) | **PLAN v1.9.0 (onay bekliyor)** — (1) taskbar başlığı = açılan dosyanın adı (`windowManager.setTitle`, her pencere ayrı process → çakışma yok); (2) hicolor'a 16–256 boyut seti (deb + install.sh + mevcut kurulumlar). Karar matrisi 3 soru: sembolsüz görülen yer, 16/22 varyant, sürüm planı |
| 2026-10-31 | (bu satır) | **v1.9.0** — Taskbar/alt-tab başlığı = açılan resmin dosya adı; hicolor ikon boyut seti 16–256 (8 boyut); ayarlar sırası (dosya özellikleri → boyut → sıralama); **boyut ızgarası sabit 4 sütun** (geniş/dar transpoze bu sürümde eklenip kaldırıldı — kullanıcı kararı: büyük pencerede ayarlar görünmüyordu). analyze 37 baseline (yeni yok); debug build + kullanıcı kurulumu `diff -rq` temiz. Commit a5969cf (feat) + 1a6de71 (dist swap), push. Release `.deb`: `dist/imajviewer_1.9.0_amd64.deb` (10,384,220 B, 63c1ec78…); Gitea release **v1.9.0** (id 4) + asset (`attachment`), download sha256 doğrulandı. **BEKLENİYOR:** sistem .deb eski — `sudo apt install ./dist/imajviewer_1.9.0_amd64.deb` komutu kullanıcıda; büyük pencere bug düzeltmesi (sabit 4 sütun) kullanıcı testinde doğrulanacak |
| 2026-10-31 | (bu satır) | **v1.8.0** — Pencere boyutu ön ayarları (plan: [plan-window-size.md](plan-window-size.md)) + dosya özellikleri satırları sola yaslandı. Kullanıcı manuel test etti (ızgara butonları çalışıyor) → onay. Commit 9a7480c + dist swap eed0646, push edildi. Release `.deb`: `dist/imajviewer_1.8.0_amd64.deb` (10,280,908 B, 6a5f4304…); Gitea release **v1.8.0** (id 3, tag = main HEAD) + asset upload `attachment` alanıyla; download sha256 karşılaştırmayla doğrulandı. Debug build + kullanıcı kurulumu `diff -rq` temiz; analyze'de yeni hata/uyarı yok. **BEKLENİYOR:** sistem .deb hâlâ eski — agent sudo çalıştıramıyor; kurulum komutu kullanıcıya verildi |
| 2026-10-31 | [plan-window-size.md](plan-window-size.md) | **v1.8.0 PLAN → UYGULANDI + doğrulandı (kullanıcı manuel test; detay: üstteki v1.8.0 satırı)** — Ayarlara "Size" bölümü: 8 sütun × 4 satır ızgara, **31 buton, 1:1 YOK** (title bar çift tık zaten tam ekran — DragToMoveArea). Etiket `a:b` = **H/a × W/b** (1:2 = sağ/sol yarım, 4:8 = en küçük parça ≈240×259 @1080p); sol-üst hücre boş placeholder. Work area = screen_retriever `visibleSize` (taskbar hariç, logical px). **Custom/seçim takibi YOK** — butonlar saf eylem (`setSize`, konum sabit). minimumSize 400×300 → **160×100** (4:8 için şart). Dosyalar: `window_persistence.dart` (+workAreaSize), yeni `widgets/window_size_selector.dart`, `viewer_screen.dart` (bölüm + onPick), `main.dart` (min size), l10n `sizeSection`, sürüm 1.8.0+19. Doğrulama + release akışı plan dosyasında; açık karar yok |
| 2026-10-30 | (bu satır) | **Gitea releases kanalı aktifleşti** — 20-10'dan beri uncommitted kalmış README (GitHub badge/link → Gitea releases) + build-windows.ps1 (Inno Setup sürümü pubspec'ten aynalar) commit+push (8a80cba). Gitea'da ilk release: **v1.7.2** (tag = 8a80cba) + `imajviewer_1.7.2_amd64.deb`; download linki ile sha256 doğrulandı (212aba68…). Not: bu Gitea sürümünde asset upload form alanı `files` değil **`attachment`** (`POST /api/v1/repos/{o}/{r}/releases/{id}/assets` — alan `files` olunca 500 "http: no such file" dönüyor). Windows: acil değil; isteyen build-windows.ps1 ile kendisi derler. **BEKLENİYOR:** sistem .deb hâlâ 1.7.0 — agent sudo çalıştıramıyor (interaktif auth), kurulum komutu kullanıcıya verildi |
| 2026-10-25 | (bu satır) | **v1.7.2** — Sağ tuş çift tık / rotate kaydı düzeltmesi (detay sonraki satırda). Kullanıcı manuel test etti (rotate + arka arkaya drag → kayıt dönmüş geliyor; sağ çift tık hâlâ sıfırlıyor) → onay. Release `.deb`: `dist/imajviewer_1.7.2_amd64.deb`; debug build + kullanıcı kurulumu `diff -rq` temiz; analyze'de yeni hata/uyarı yok |
| 2026-10-25 | (bu satır) | **Sağ tuş çift tık / rotate kaydı düzeltmesi (1.7.2)** — Şikayet: 10+ crop-save testinin birinde rotate kayda gelmedi. Kayıt matematiği doğrulandı: `_cropRotated`/`_cropAxisAligned` deterministik; motorun EXIF yönü davranışı `bakeOrientation` ile aynı (ölçüldü: 100×50 + orientation 6 → motor 50×100, baked 50×100) → EXIF kaynaklı sapma yok. Gerçek neden: `_onPointerDown`'daki sağ-çift-tık sıfırlaması bir önceki **down** zamanı+konumuyla karşılaştırıyordu; bu yüzden aynı noktada 400 ms içinde başlayan iki rotate drag'i "çift tık" sayılıp tüm efektleri (rotate dahil) sessizce sıfırlıyor, ikinci drag hiç uygulanmıyordu (`_interactionMode='none'`) → Ctrl+S rotasyonsuz kaydediyordu; zamanlamaya bağlı olduğu için ~1/10. Düzeltme: çift tık artık yalnızca gerçek tıklamalar için (hareket ≤4 px `_dragClickSlop`), karar **pointer-up**'ta veriliyor, sürükleme zinciri kesiyor; pointer-up `_rightPointerId` ile korunuyor (sol tuş pan'i tık sayılmıyor). Otomatik test yazılamadı: test binding'inde canvas hit-test'i boş dönüyor (görselsiz RenderImage 0×0) — doğrulama kullanıcı manuel testiyle |
| 2026-10-25 | (bu satır) | **v1.7.1** — Zoom yüzde rozeti: alt orta, sağ/sol ok butonlarının arasında, ok butonlarıyla birlikte (hover'da) görünür, hafif saydam siyah zemin; yüzde görüntünün **gerçek piksel boyutuna** göre (100% = 1:1) — `image_canvas.dart::_zoomPercentValue` (fit: yerleşmiş görüntü kutusu / kaynak genişlik, fill: max oran), tekerlek/Ctrl+tekerlek, fill-fit çift tık, görsel değişimi ve pencere boyutu değişiminde güncellenir (`_syncZoom` → post-frame, parent `ValueNotifier<double>`). Header parse (piksel boyutu decode'suz) `lib/services/image_header.dart`'a taşındı; Özellikler paneli de aynı fonksiyonu kullanıyor (davranış değişmedi, kopya kod silindi). analyze: yeni hata/uyarı yok; debug build + kullanıcı kurulumu doğrulandı (`diff -rq` boş); release `.deb`: `dist/imajviewer_1.7.1_amd64.deb` (9.9M) |
| 2026-10-21 | [rapor-cokme-analiz-2.md](rapor-cokme-analiz-2.md) | **Rapor — yeni çökme aileleri (3.47.7 SONRASI)** — A: llvmpipe blit, map'siz kaynaktan glibc AVX2 memcpy okuması (2 core, deterministik, char_7/8 PNG'ler); B: GTK tooltip UAF (core silinmiş). 17 Eki'de Xorg+picom aynı saniyede düştü → yığın seviyesi şüphesi (mesa 26.0.8 / ortam / host RAM). İzolasyon testi + host memtest + üst akış raporu seçenekleri. Not: sistem kurulumu hâlâ 1.6.3 (1.7.0 .deb sisteme kurulmamış) |
| 2026-10-20 | [rapor-yenilik-analizi.md](rapor-yenilik-analizi.md) | **Analiz — v1.8.0 kapsam teklifi** — her aday kod doğrulamalı: F11 tam ekran (küçük), zoom kısayolları+HUD (küçük-orta, clamp alt sınırı dinamik), recent files (window.json `recent` anahtarı), 90° döndürme F tuşu (küçük), yükleme göstergesi (frameBuilder), GIF=README düzeltmesi (karar), temel Özellikler paneli (bağımlılıksız); ertelenenler: thumbnail şeridi, tam EXIF, bağlam menüsü, HEIC (red). Sürüm planı + doğrulama planı dahil |
| 2026-10-20 | [rapor-alcici-degerlendirmesi.md](rapor-alcici-degerlendirmesi.md) | **Rapor** — alıcı gözüyle değerlendirme: animasyonlu GIF yalnız ilk kare, EXIF/bilgi paneli yok, 90° döndürme yok, recent files yok, tam ekrana hiç girilemiyor (F11 yok — "Esc" kısayolu ölü), Windows exe 1.1.0'ta (tag hiç atılmamış); önerilen sıralama tablolu |
| 2026-10-20 | (bu satır) | **v1.7.0** — (1) Scroll zoom adımı: normal tekerlek tıkı ×1.1 (tık başına %10), `Ctrl+kaydırma` ×1.01 (tık başına %1, 10× küçük adım) — `image_canvas.dart::_handleScroll`, mevcut `_ctrlPressed` takibi kullanıldı. (2) Ayarlar penceresinde "imajViewer 1.7.0" sürüm gösterimi (`viewer_screen.dart::appVersion`). (3) Kısayol listesi tamamlandı: eksik olan Ctrl+O, Esc (tam ekrandan çık), kaydırma/zoom, Ctrl+kaydırma, sol tık sürükle (pan), sağ çift tık (reset) eklendi — l10n TR+EN ve README tablosu güncellendi. Debug build + kullanıcı kurulumu doğrulandı (`diff -rq` boş); release .deb üretildi: `dist/imajviewer_1.7.0_amd64.deb` (10.3M). Kullanıcı onayladı → commit 57fa3d9 + ee45677 (dist swap + changelog), Gitea'ya push; GitHub public repo v1.7.0'a squash commit (bf59c6f) ile senkronize edildi (force push yok) |
| 2026-10-20 | [rapor-cokme-analiz.md](rapor-cokme-analiz.md) | **Rapor — kök neden bulundu + düzeltme (1.6.3, kullanıcı onayladı 20-10)** — SEGV, `fl_compositor_opengl`'in kareyi pencere boyutuyla (tampon eski boyutta) yüklemesi: `memcpy` tampon sonrasını okuyor. flutter#187589/#187626; düzeltme 3.44.7'de yok, 3.47.7'de var → Flutter 3.47.7 ayrı dizine kuruldu, imajViewer onunla derlenip kuruldu. Eski hipotez (llvmpipe UAF) geçersiz |
| 2026-10-14 | [plan-flip-horizontal.md](plan-flip-horizontal.md) | **Plan+sonuç (1.6.1 — uygulandı, doğrulandı, push edildi)** — `Ctrl+R` yatay aynalama (efektleri sıfırlayıp aynalar, tekrar basınca geri); crop save aynayı da bindiriyor; kök neden: R tuşu bazı haritalarda mantıksal T geliyor → fiziksel R eşleşmesi eklendi (6e13892) |
| 2026-10-12 | [plan-fullsize-persist.md](plan-fullsize-persist.md) | **Plan+sonuç (1.5.0 — uygulandı, doğrulandı)** — fill/fit ("fullsize") modu window.json'da kalıcı; kanıt scripti docs/kanit-fullsize-persist-test.sh |
| 2026-10-12 | [rapor-save-mavi-offset-bug.md](rapor-save-mavi-offset-bug.md) | **Rapor (1.4.2 — uygulandı, doğrulandı)** — crop-save mavi kanal offset kaybı (`m[13]`→`m[14]`): kanıt, düzeltme, doğrulama tablosu; Gitea'ya push edildi (b3bd540) |
| 2026-10-12 | [rapor-brightness-save-analiz.md](rapor-brightness-save-analiz.md) | ~~Rapor (1.4.1)~~ **GEÇERSİZ** — yukarıdaki rapor bunu kılar (hatalı indeksi iki tarafta da varsaymıştı) |
| 2026-08-06 | [rapor-github-acik-kaynak.md](rapor-github-acik-kaynak.md) | **Rapor** — GitHub açık kaynak hazırlığı (gereksinimler, riskler, plan) |
| 2026-10-11 | [plan-crop-save.md](plan-crop-save.md) | **Plan (1.4.0)** — Crop Save: görünen alanı orijinal çözünürlükte JPEG q90 kaydetme (uygulandı) |
| 2026-08-06 | [Implementation.md](Implementation.md) | Teknik uygulama dokümanı (kökten taşındı) |
| 2026-08-06 | [PRD.md](PRD.md) | Product Requirements Document (kökten taşındı) |
| 2026-08-06 | [update_plan_01.md](update_plan_01.md) | Pan sınırlama & zoom merkezi sorunu (kökten taşındı) |
| 2026-08-06 | [rapor-pan-kilitleme-nuks.md](rapor-pan-kilitleme-nuks.md) | **Rapor** — efekt uygulanmış görselde pan sırasında kilitlenme nüksü (analiz, açık sorular) |
| 2026-08-06 | [rapor-gezinme-ayarlar-print.md](rapor-gezinme-ayarlar-print.md) | **Rapor** — gezinme okları (hover), ayarlar/gear (sıralama), yazdırma (printing paketi) |
| 2026-08-06 | [rapor-sag-tik-donma-analizi.md](rapor-sag-tik-donma-analizi.md) | **Rapor** — sağ tuş efektlerinde donma analizi + slider UI değerlendirmesi |
| 2026-08-03 | [zoom-clamp-mekanizmasi.md](zoom-clamp-mekanizmasi.md) | **Düzeltme** — `_vpSize` sıfırlama bug'ı: çift tıklama sonrası zoom ölümü/pan serbestliği |
| 2026-08-03 | [performance_llvmpipe_issue.md](performance_llvmpipe_issue.md) | **Rapor** — llvmpipe donma analizi, kare hızı throttle, ölçüm sonuçları |
| 2026-08-03 | [rapor-brightness.md](rapor-brightness.md) | **Rapor** — brightness efekti (Ctrl+Shift+sağ tık) + 4x5 matris birleştirme |
| 2026-08-03 | [galeri-klasor-tabanli.md](galeri-klasor-tabanli.md) | **Rapor** — klasör tabanlı galeri + precache/RAM kararı |
| 2026-08-03 | [session-2026-08-03.md](session-2026-08-03.md) | **Session özeti** — jfif/jpe/wbmp, pencere cascade, konum kaydı düzeltmesi |
| 2026-08-03 | [format-destegi-ek-formatlar.md](format-destegi-ek-formatlar.md) | **Plan** — jfif/jpe/wbmp desteği (TIFF vazgeçildi) |
| 2026-08-03 | [pencere-cascade-yerlesim.md](pencere-cascade-yerlesim.md) | **Plan** — yeni pencereyi yan yana / alt satıra açma (screen_retriever) |
| 2026-07-27 | [session-windows-ci.md](session-windows-ci.md) | **Windows setup.exe yeniden derlendi, Gitea CI eklendi** |
| 2026-07-27 | [session-2026-07-27.md](session-2026-07-27.md) | **Session özeti** — rotate aktif, StartupWMClass ile taskbar gruplama |
| 2026-07-27 | [image-canvas-interactions.md](image-canvas-interactions.md) | Detaylı analiz: contrast, saturation, rotate implementasyon planı |
| 2026-08-10 | [windows-setup.md](windows-setup.md) | **Windows Development Ortam Kurulum Rehberi** — Flutter SDK, VS Build Tools, CMake, Inno Setup kurulum adımları |
| önceki | [zoom-clamp-mekanizmasi.md](zoom-clamp-mekanizmasi.md) | Zoom clamp mekanizması (letterbox-aware) |
## Geliştirme Akışı — Otomatik Build ve Kurulum
### Linux
**SDK (2026-10-20):** Linux derlemeleri `/home/alhan/development/flutter-3.47.7/bin/flutter` ile
yapılır — varsayılan `~/development/flutter` (3.44.7) resize çökme hatasını taşıyor
(bkz. [rapor-cokme-analiz.md](rapor-cokme-analiz.md)).
1. Debug build: `flutter build linux --debug`
2. Sisteme kurulum: `./install.sh` (debug bundle tercih edilir → `~/.local/lib/imajviewer/`)
### Windows
1. Ortam kurulumu: [windows-setup.md](windows-setup.md) rehberini takip edin
2. Build + installer: `.\build-windows.ps1`
3. Manuel kurulum (build çıktılarından): `.\install.ps1`
4. Kaldırma: `.\uninstall.ps1`
### Gitea Release (dağıtım kanalı, 30-10'da aktifleşti)
```bash
PASS=$(git remote get-url origin | sed 's|.*://[^:]*:\([^@]*\)@.*|\1|')
# release + tag (main HEAD'e) oluşturur:
curl -u "git_alhan:$PASS" -X POST -H "Content-Type: application/json" \
"https://git.softmediadesign.com/api/v1/repos/git_alhan/imajviewer/releases" \
-d '{"tag_name":"v<SURUM>","name":"v<SURUM>","body":"<changelog>"}'
# .deb yükle — DİKKAT: form alanı "files" değil "attachment"
# (files olunca 500 "http: no such file" döner)
curl -u "git_alhan:$PASS" -F "attachment=@dist/imajviewer_<SURUM>_amd64.deb" \
"https://git.softmediadesign.com/api/v1/repos/git_alhan/imajviewer/releases/<ID>/assets"
```
Doğrulama: response'taki `browser_download_url`'den indirip `sha256sum` karşılaştır.
Projede değişiklik yapıldıktan sonra otomatik yapılır (ayrıca istenmez):
1. Debug build: `flutter build linux --debug`
2. Kullanıcı kurulumu: `rm -rf ~/.local/lib/imajviewer` + `./install.sh` (debug bundle tercih edilir → `~/.local/lib/imajviewer/`)
3. Sürüm atlayan değişikliklerde: `flutter build linux --release` + `bash dist/rebuild-deb.sh` (eski .deb'i dist'ten kaldır)
4. Sistem geneli kurulum: `sudo apt install ./dist/imajviewer_<sürüm>_amd64.deb` (dpkg paketi; `dpkg -l imajviewer` ile sürüm doğrula)
**KURAL (2026-10-14):** Her güncellemeden sonra kurulum SİSTEME de yapılır — yani
2. adım (kullanıcı kurulumu) + 4. adım (sistem .deb kurulumu) birlikte uygulanır;
kullanıcı onayı beklenmez, test edilmemiş sürüm de kurulur. `install.sh` hedef dizini
temizlemez (`cp -r` üzerine yazar), bu yüzden 2. adımda önce `rm -rf
~/.local/lib/imajviewer` çalıştırılır — aksi hâlde önceki release kurulumundan kalan
`lib/libapp.so` gibi artık dosyalar debug kurulumun içinde kalır. Doğrulama:
`diff -rq ~/.local/lib/imajviewer build/linux/x64/debug/bundle` çıktısız olmalı.
**KURAL (2026-10-11):** Bu projede Linux tarafında bir geliştirme yapıldığında
build + kurulum **hemen** uygulanır; kullanıcı onayı bekleneceğine dair
ayrı soru sorulmaz. (Kullanıcı, 11 Eki 2026'da bu kuralı açıkça verdi:
"linuxta yapılan değişiklik sisteme hemen uygulansın kullanıcı onayı
beklenmesin.") Sürüm atlayan değişikliklerde (feat/fix) ek olarak:
`rebuild-deb.sh` ile yeni .deb + dist/ swap (yeni sürümü takip et, eskiyi bırakma).
## İleriye Bırakılanlar
- **Hücreye snap / konumlandırma** (karar 31-10): v1.8.0 Size butonları yalnız
boyutlandırıyor; buton + hücreye taşıma birlikte düşünülürse ekrana tiling tam
otomatik olur. Kullanıcı: "şu anda hiç lazım değil, ileride düşünebiliriz".