diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..00b783d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,30 @@ +--- +name: Bug report +about: Report a bug to help us improve +title: "[Bug] " +labels: bug +assignees: '' +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To reproduce** +Steps to reproduce the behavior: +1. Open '...' +2. Click on '...' +3. See error + +**Expected behavior** +What you expected to happen. + +**Screenshots / screen recording** +If applicable, add screenshots to help explain your problem. + +**Environment** +- OS / distro: [e.g. Ubuntu 24.04, Windows 11] +- imajViewer version: [e.g. 1.1.0 — from `pubspec.yaml` or release name] +- Desktop environment / GPU: [e.g. XFCE + llvmpipe, or NVIDIA driver] + +**Additional context** +Anything else relevant (log output, image that triggers the bug, etc.) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..1a01d86 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for imajViewer +title: "[Feature] " +labels: enhancement +assignees: '' +--- + +**Is your feature request related to a problem?** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +Other approaches or workarounds you've tried. + +**Additional context** +Screenshots, mockups, or any other context about the feature request. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..e86ee56 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +## Description + + + +## Related issue + + + +## Changes + +- [ ] Feature / fix implemented +- [ ] `flutter test` passes +- [ ] `flutter analyze` shows no new issues +- [ ] Changelog updated (if user-facing change) + +## Screenshots (if applicable) + + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..1b92a86 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,113 @@ +name: Build & Release + +on: + push: + branches: [main] + tags: ['v*'] + workflow_dispatch: + +jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable + + - name: Install packaging tools + run: | + sudo apt-get update + sudo apt-get install -y patchelf fakeroot dpkg + + - name: Get dependencies + run: flutter pub get + + - name: Build Linux release + run: flutter build linux --release + + - name: Build .deb package + run: bash dist/rebuild-deb.sh + + - name: Upload .deb artifact + uses: actions/upload-artifact@v4 + with: + name: imajviewer-linux + path: dist/imajviewer_*.deb + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: stable + + - name: Get dependencies + run: flutter pub get + + - name: Build Windows release + run: flutter build windows --release + + - name: Install Inno Setup + run: | + choco install innosetup --no-progress -y + + - name: Sync version from pubspec.yaml + shell: pwsh + run: | + $version = (Select-String -Path pubspec.yaml -Pattern '^version:\s*([0-9]+\.[0-9]+\.[0-9]+)').Matches[0].Groups[1].Value + (Get-Content windows/installer.iss -Raw) -replace '#define MyAppVersion "[^"]+"', "#define MyAppVersion `"$version`"" | Set-Content windows/installer.iss + Write-Host "Inno Setup version: $version" + + - name: Build Inno Setup installer + shell: cmd + run: | + "C:\ProgramData\chocolatey\bin\ISCC.exe" windows\installer.iss + + - name: Upload installer artifact + uses: actions/upload-artifact@v4 + with: + name: imajviewer-windows + path: | + build/windows/x64/runner/Release/ + dist/imajviewer_setup_*.exe + + create-release: + needs: [build-linux, build-windows] + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + steps: + - name: Download Linux artifacts + uses: actions/download-artifact@v4 + with: + name: imajviewer-linux + path: release-artifacts + + - name: Download Windows artifacts + uses: actions/download-artifact@v4 + with: + name: imajviewer-windows + path: release-artifacts/windows + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + name: "imajViewer ${{ github.ref_name }}" + body: | + imajViewer ${{ github.ref_name }} + + See the [changelog](CHANGELOG.md) for details. + + ### Downloads + - Linux: `.deb` package (Ubuntu/Debian) + - Windows: Inno Setup installer + files: | + release-artifacts/imajviewer_*.deb + release-artifacts/windows/dist/imajviewer_setup_*.exe + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 3e2e7c0..1125271 100644 --- a/.gitignore +++ b/.gitignore @@ -44,10 +44,9 @@ app.*.map.json /android/app/profile /android/app/release -# Distribution binaries — only keep under dist/ +# Distribution binaries — release assets, not tracked in git *.deb *.tar.gz *.exe -!dist/*.deb -!dist/*.exe +deb/usr/lib/imajviewer/ release/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..dd357cb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +All notable changes to imajViewer are documented in this file. + +## [1.1.0] - 2026-08-06 + +### Fixed +- `Ctrl+Q` now closes the window reliably (`onKeyEvent` rework) +- Pan freeze regression on effect-applied images (root cause analysis) + +### Added +- Navigation arrows (visible on hover) +- Settings window: folder sorting by time/name, print, shortcut info +- Print support (printing package, A4 fit) +- Title bar hover transparency +- Shader warmup — right-click effects no longer stutter on first use + +## [1.0.1] - 2026-07-27 + +### Fixed +- Zoom/pan issues on large images +- Image provider memoize — repeated opens no longer reload from disk + +### Changed +- Version now sourced from `pubspec.yaml` (single source of truth) + +## [1.0.0] - 2026-07-22 + +### Added +- Initial release: ultra-lightweight image viewer +- Formats: PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP +- Pan (left drag), zoom (wheel, cursor-centered), fill/fit toggle (double click) +- Contrast / saturation / brightness / rotate gestures +- Drag & drop, window position memory, set-as-default-viewer +- Linux (.deb) and Windows (setup.exe) installers diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e199f4b --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,64 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances + of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +alhan@softmediadesign.com. All complaints will be reviewed and investigated +promptly and fairly. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. + +[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..c9a5ba0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing to imajViewer + +Thanks for taking the time to contribute! 🎉 + +## Development setup + +- [Flutter SDK](https://docs.flutter.dev/get-started/install) (stable channel) +- Linux: GTK dev libraries (`libgtk-3-dev`, `ninja-build`, `clang`, `cmake`) +- Windows: Visual Studio 2022 Build Tools with "Desktop development with C++" + +```bash +flutter pub get +flutter build linux # or: flutter build windows --release +``` + +## Code style + +- Follow `flutter_lints` (see `analysis_options.yaml`) +- Keep changes minimal and focused — no drive-by refactors +- Use existing patterns in `lib/` (services, widgets, screens) + +## Tests + +Run the test suite before opening a PR: + +```bash +flutter test +``` + +## Commit conventions + +We use conventional commit prefixes: + +- `feat:` — new feature +- `fix:` — bug fix +- `perf:` — performance improvement +- `build:` — build/packaging/CI changes +- `docs:` — documentation only + +## Pull request process + +1. Fork the repository +2. Create a branch: `git checkout -b fix/describe-the-fix` +3. Make your changes, run `flutter test` +4. Commit with a conventional message +5. Open a PR against `main` and describe what you changed and why + +## Reporting bugs + +Open an issue using the bug report template. Include: + +- imajViewer version (from `pubspec.yaml` or the release name) +- OS and desktop environment +- Steps to reproduce +- Expected vs. actual behavior diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..07d1ab3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Alhan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 0e2a023..1d73744 100644 --- a/README.md +++ b/README.md @@ -1,162 +1,113 @@ # imajViewer -Ultra hafif görüntü izleyici. Flutter ile yazıldı — Linux & Windows desteği. +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![Build](https://github.com/alhan/imajviewer/actions/workflows/build.yml/badge.svg)](https://github.com/alhan/imajviewer/actions/workflows/build.yml) +[![Release](https://img.shields.io/github/v/release/alhan/imajviewer)](https://github.com/alhan/imajviewer/releases/latest) -## Özellikler +Ultra-lightweight image viewer written in Flutter — Linux & Windows. -- **Dosya formatları:** PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP -- **Pan:** Sol tık + sürükle -- **Zoom:** Fare tekerleği (imleç merkezli, rotate modunda viewport merkezli) -- **Fill/Fit geçişi:** Sol çift tık -- **Contrast ayarı:** Sağ tık + dikey sürükle -- **Saturation ayarı:** Ctrl + Sağ tık + dikey sürükle -- **Brightness ayarı:** Ctrl+Shift + Sağ tık + dikey sürükle -- **Rotate:** Shift + Sağ tık + dikey sürükle (~100px = 90°) -- **Reset (tüm efektler):** Sağ çift tık -- **Gezinme okları:** Sol/sağ alt köşede, mouse resme girince görünür (hover'da kırmızı) -- **Ayarlar (gear):** Title bar'da; klasör sıralaması (zamana/isme göre), yazdırma, kısayollar -- **Yazdırma:** Ayarlar penceresinden resmi yazıcıya gönderir (A4, sığdır) -- Sürükle-bırak ile resim açma -- Pencere boyutu/konumu hatırlama (JSON persistence) -- Varsayılan görüntü izleyici olarak ayarlanabilir -- Yeni pencere öncekinin yanında açılır (cascade — taşarsa alt satır) -- Taskbar gruplama (Linux: `StartupWMClass`, otomatik) +![imajViewer](imajviewer.png) -## Linux Kurulum +## Features -**Flutter SDK gerekmez** — `dist/` dizininde hazır .deb paketi gelir. +- **Formats:** PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP +- **Pan:** Left drag +- **Zoom:** Mouse wheel (cursor-centered; viewport-centered in rotate mode) +- **Fill/Fit toggle:** Double left click +- **Contrast:** Right drag + vertical move +- **Saturation:** Ctrl + Right drag + vertical move +- **Brightness:** Ctrl+Shift + Right drag + vertical move +- **Rotate:** Shift + Right drag + vertical move (~100px = 90°) +- **Reset (all effects):** Double right click +- **Navigation arrows:** bottom corners, visible on hover +- **Settings (gear):** sort by time/name, print, shortcut info +- **Print:** send the image to a printer (A4, fit) +- Drag & drop to open images +- Window size/position memory (JSON persistence) +- Set as default image viewer +- Cascade placement for new windows +- Taskbar grouping (Linux: `StartupWMClass`) -### .deb paketi ile kurulum (Önerilen) +## Install + +### Linux (.deb, recommended) + +No Flutter SDK needed — grab the latest `.deb` from the +[Releases page](https://github.com/alhan/imajviewer/releases/latest): ```bash -git clone https://git.softmediadesign.com/git_alhan/imajviewer.git -cd imajviewer -sudo dpkg -i dist/imajviewer_1.0.0_amd64.deb -sudo apt-get install -f # eksik bağımlılıklar varsa +sudo dpkg -i imajviewer_*_amd64.deb +sudo apt-get install -f # install missing dependencies, if any ``` -### install.sh ile kurulum (kaynaktan/build) +After install, open an image with `xdg-open ` or double-click it. -```bash -git clone https://git.softmediadesign.com/git_alhan/imajviewer.git -cd imajviewer -./install.sh -``` +### Windows (installer) -Kurulum sonrası `xdg-open ` ile açabilir veya dosyaya çift tıklayabilirsiniz. -Aynı uygulamanın pencereleri taskbar'da otomatik gruplanır. +Download `imajviewer_setup_*.exe` from the +[Releases page](https://github.com/alhan/imajviewer/releases/latest) and run it. +The installer: -### Kaldırma +- Installs to Program Files +- Adds a Start Menu shortcut (optional desktop shortcut) +- Registers file associations (PNG, JPG, JPEG, WebP, BMP, GIF) +- Supports uninstall (Settings > Apps) -```bash -rm -rf ~/.local/lib/imajviewer ~/.local/bin/imajviewer \ - ~/.local/share/applications/imajviewer.desktop \ - ~/.local/share/icons/hicolor/64x64/apps/imajviewer.png -``` +### Build from source -## Windows Kurulum - -### Seçenek 1 — Inno Setup Installer (Önerilen) - -`dist/imajviewer_setup_1.0.0.exe` dosyasını çift tıklayarak kurun. Yönetici yetkisi ister. - -Kurulum şunları yapar: -- Program Files altına kurulum -- Başlat menüsü kısayolu -- İsteğe bağlı masaüstü kısayolu -- Kayıt defterine dosya ilişkilendirmeleri (PNG, JPG, JPEG, WebP, BMP, GIF) -- Kaldırma desteği (Ayarlar > Uygulamalar) - -### Seçenek 2 — MSIX Paketi - -`build\windows\x64\runner\Release\imajviewer.msix` dosyasını PowerShell ile kurun: - -```powershell -Add-AppxPackage -Path "build\windows\x64\runner\Release\imajviewer.msix" -``` - -> **Not:** MSIX imzalı değildir. Kurulum için Windows Developer Mode açık olmalıdır -> (Ayarlar > Geliştiriciler için > Geliştirici Modu). - -### Seçenek 3 — Portable (Kendin Derle) - -| Gereksinim | Açıklama | +| Requirement | Notes | |---|---| -| [Flutter SDK](https://docs.flutter.dev/get-started/install/windows) | stable channel | -| Visual Studio 2022 Build Tools | "Desktop development with C++" iş yükü | -| Windows Developer Mode | Ayarlar > Geliştiriciler için > Geliştirici Modu | - -```powershell -git clone https://git.softmediadesign.com/git_alhan/imajviewer.git -cd imajviewer -flutter pub get -flutter build windows --release -``` - -Çıktı: `build\windows\x64\runner\Release\` dizini. `imajviewer.exe` ile birlikte tüm DLL'ler burada — taşınabilir, başka makinelere kopyalanabilir. - -### Installer'ı Yeniden Oluşturma - -```powershell -flutter pub get -flutter build windows --release -"C:\ProgramData\chocolatey\bin\ISCC.exe" windows\installer.iss -``` - -Çıktı: `dist\imajviewer_setup_1.0.0.exe` - -## Klavye / Fare Kısayolları - -| Etkileşim | Eylem | -|---|---| -| Sol tık + sürükle | Pan | -| Fare tekerleği | Zoom (imleç merkezli) | -| Sol çift tık | Fill / Fit geçişi | -| Sağ tık + dikey sürükle | Contrast (0.0 – 2.0) | -| Ctrl + Sağ tık + dikey sürükle | Saturation (0.0 – 2.0) | -| Ctrl+Shift + Sağ tık + dikey sürükle | Brightness (-100 – 100) | -| Shift + Sağ tık + dikey sürükle | Rotate (serbest) | -| Sağ çift tık | Reset (tüm efektler) | -| Sol / Sağ ok | Önceki / sonraki resim | -| Ctrl + Q | Pencereyi kapat | -| Ctrl + Shift + Q | Tüm pencereleri kapat | - -## CI / Otomatik Build - -Gitea Actions ile Windows build ve Inno Setup installer otomatik oluşturulur: - -- **Trigger:** `main` dalına push -- **İş akışı:** `.gitea/workflows/build-windows.yml` -- **Çıktı:** `imajviewer.exe` + tüm DLL'ler, `imajviewer_setup_*.exe` -- **Tag bazlı release:** `v*` tag'i push'lanırsa Gitea Release oluşturulur (`GITEA_TOKEN` gerekli) - -## Sistem Gereksinimleri — Donanım Hızlandırma (VM önerisi) - -Uygulama yazılımsal render (llvmpipe) altında çalışır, ancak efekt sürüklemesi -büyük görsellerde kare atlayabilir. Sanal makinede akıcı kullanım için: - -- **virtio-gpu + VirGL**: QEMU/libvirt'ta `virtio-vga-gl` / `virtio-gpu-gl` - (mesa VirGL yoluyla hızlandırılmış GL). `/dev/dri` görünür hale gelir, - llvmpipe yerine donanım render'ı kullanılır. -- **PCIe Passthrough**: gerçek GPU'nun VM'e bağlanması (en yüksek performans). - -## Geliştirme - -Flutter SDK gereklidir. +| [Flutter SDK](https://docs.flutter.dev/get-started/install) | stable channel | +| Linux: GTK dev libs | `libgtk-3-dev`, `ninja-build`, `clang`, `cmake` | +| Windows: VS 2022 Build Tools | "Desktop development with C++" workload | ```bash flutter pub get flutter build linux # Linux -flutter build windows # Windows +flutter build windows --release # Windows ``` -### .deb paketini güncelleme +Linux output: `build/linux/x64/release/bundle/` +Windows output: `build\windows\x64\runner\Release\` (portable: copy the whole +folder including `imajviewer.exe` and all DLLs). + +## Keyboard & Mouse Shortcuts + +| Interaction | Action | +|---|---| +| Left drag | Pan | +| Mouse wheel | Zoom (cursor-centered) | +| Double left click | Fill / Fit toggle | +| Right drag + vertical | Contrast (0.0 – 2.0) | +| Ctrl + Right drag + vertical | Saturation (0.0 – 2.0) | +| Ctrl+Shift + Right drag + vertical | Brightness (-100 – 100) | +| Shift + Right drag + vertical | Rotate (free) | +| Double right click | Reset (all effects) | +| Left / Right arrow | Previous / next image | +| Ctrl + Q | Close window | +| Ctrl + Shift + Q | Close all windows | + +## CI / Releases + +GitHub Actions builds Linux `.deb` and Windows installer on every push to +`main`. Pushing a `v*` tag creates a GitHub Release with both installers as +assets. + +## Development + +```bash +flutter pub get +flutter analyze +flutter test +``` + +To rebuild the `.deb` locally: ```bash flutter build linux --release bash dist/rebuild-deb.sh ``` -## Lisans +## License -MIT +[MIT](LICENSE) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..0bcb86a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,26 @@ +# Security Policy + +## Reporting a vulnerability + +Please do **not** open a public issue for security vulnerabilities. + +Report them privately via GitHub's Security Advisories: + +1. Go to the repository's **Security** tab +2. Click **Report a vulnerability** +3. Describe the issue, affected versions, and steps to reproduce + +You can also email the maintainer directly: alhan@softmediadesign.com + +We will acknowledge reports within 5 business days and keep you informed as the +issue is triaged and fixed. Please allow time for a fix to be released before +disclosing the vulnerability publicly. + +## Supported versions + +| Version | Supported | +|---------|--------------------| +| latest | ✅ Fully supported | +| older | ❌ Best effort only | + +We recommend always running the latest release. diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/AssetManifest.bin b/deb/usr/lib/imajviewer/data/flutter_assets/AssetManifest.bin deleted file mode 100644 index 86d111f..0000000 Binary files a/deb/usr/lib/imajviewer/data/flutter_assets/AssetManifest.bin and /dev/null differ diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/FontManifest.json b/deb/usr/lib/imajviewer/data/flutter_assets/FontManifest.json deleted file mode 100644 index 3abf18c..0000000 --- a/deb/usr/lib/imajviewer/data/flutter_assets/FontManifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]}] \ No newline at end of file diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/NOTICES.Z b/deb/usr/lib/imajviewer/data/flutter_assets/NOTICES.Z deleted file mode 100644 index db068ac..0000000 Binary files a/deb/usr/lib/imajviewer/data/flutter_assets/NOTICES.Z and /dev/null differ diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/NativeAssetsManifest.json b/deb/usr/lib/imajviewer/data/flutter_assets/NativeAssetsManifest.json deleted file mode 100644 index 523bfc7..0000000 --- a/deb/usr/lib/imajviewer/data/flutter_assets/NativeAssetsManifest.json +++ /dev/null @@ -1 +0,0 @@ -{"format-version":[1,0,0],"native-assets":{}} \ No newline at end of file diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/fonts/MaterialIcons-Regular.otf b/deb/usr/lib/imajviewer/data/flutter_assets/fonts/MaterialIcons-Regular.otf deleted file mode 100644 index 8c99266..0000000 Binary files a/deb/usr/lib/imajviewer/data/flutter_assets/fonts/MaterialIcons-Regular.otf and /dev/null differ diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/shaders/ink_sparkle.frag b/deb/usr/lib/imajviewer/data/flutter_assets/shaders/ink_sparkle.frag deleted file mode 100644 index 21cc216..0000000 Binary files a/deb/usr/lib/imajviewer/data/flutter_assets/shaders/ink_sparkle.frag and /dev/null differ diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/shaders/stretch_effect.frag b/deb/usr/lib/imajviewer/data/flutter_assets/shaders/stretch_effect.frag deleted file mode 100644 index aaed5f7..0000000 Binary files a/deb/usr/lib/imajviewer/data/flutter_assets/shaders/stretch_effect.frag and /dev/null differ diff --git a/deb/usr/lib/imajviewer/data/flutter_assets/version.json b/deb/usr/lib/imajviewer/data/flutter_assets/version.json deleted file mode 100644 index 52fea97..0000000 --- a/deb/usr/lib/imajviewer/data/flutter_assets/version.json +++ /dev/null @@ -1 +0,0 @@ -{"app_name":"imajviewer","version":"1.0.0","build_number":"1","package_name":"imajviewer"} \ No newline at end of file diff --git a/deb/usr/lib/imajviewer/data/icudtl.dat b/deb/usr/lib/imajviewer/data/icudtl.dat deleted file mode 100644 index 8f3adcf..0000000 Binary files a/deb/usr/lib/imajviewer/data/icudtl.dat and /dev/null differ diff --git a/deb/usr/lib/imajviewer/imajviewer b/deb/usr/lib/imajviewer/imajviewer deleted file mode 100755 index 5f53b86..0000000 Binary files a/deb/usr/lib/imajviewer/imajviewer and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/libapp.so b/deb/usr/lib/imajviewer/lib/libapp.so deleted file mode 100644 index bdbe287..0000000 Binary files a/deb/usr/lib/imajviewer/lib/libapp.so and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/libdesktop_drop_plugin.so b/deb/usr/lib/imajviewer/lib/libdesktop_drop_plugin.so deleted file mode 100644 index e1b9b9f..0000000 Binary files a/deb/usr/lib/imajviewer/lib/libdesktop_drop_plugin.so and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/libflutter_linux_gtk.so b/deb/usr/lib/imajviewer/lib/libflutter_linux_gtk.so deleted file mode 100644 index f31004b..0000000 Binary files a/deb/usr/lib/imajviewer/lib/libflutter_linux_gtk.so and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/libscreen_retriever_linux_plugin.so b/deb/usr/lib/imajviewer/lib/libscreen_retriever_linux_plugin.so deleted file mode 100644 index b580b2e..0000000 Binary files a/deb/usr/lib/imajviewer/lib/libscreen_retriever_linux_plugin.so and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/libwindow_manager_plugin.so b/deb/usr/lib/imajviewer/lib/libwindow_manager_plugin.so deleted file mode 100644 index 93ec1e2..0000000 Binary files a/deb/usr/lib/imajviewer/lib/libwindow_manager_plugin.so and /dev/null differ diff --git a/deb/usr/lib/imajviewer/lib/native_assets.json b/deb/usr/lib/imajviewer/lib/native_assets.json deleted file mode 100644 index 523bfc7..0000000 --- a/deb/usr/lib/imajviewer/lib/native_assets.json +++ /dev/null @@ -1 +0,0 @@ -{"format-version":[1,0,0],"native-assets":{}} \ No newline at end of file diff --git a/dist/imajviewer_setup_1.1.0.exe b/dist/imajviewer_setup_1.1.0.exe deleted file mode 100644 index 73d925a..0000000 Binary files a/dist/imajviewer_setup_1.1.0.exe and /dev/null differ diff --git a/Implementation.md b/docs/Implementation.md similarity index 100% rename from Implementation.md rename to docs/Implementation.md diff --git a/PRD.md b/docs/PRD.md similarity index 100% rename from PRD.md rename to docs/PRD.md diff --git a/docs/index.md b/docs/index.md index cf41c5a..6245c98 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,11 @@ # imajViewer — Dokümantasyon İndeksi | Tarih | Dosya | Konu | -|---|---|---| +||---|---|---| +| 2026-08-06 | [rapor-github-acik-kaynak.md](rapor-github-acik-kaynak.md) | **Rapor** — GitHub açık kaynak hazırlığı (gereksinimler, riskler, plan) | +| 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 | diff --git a/docs/rapor-github-acik-kaynak.md b/docs/rapor-github-acik-kaynak.md new file mode 100644 index 0000000..21f7346 --- /dev/null +++ b/docs/rapor-github-acik-kaynak.md @@ -0,0 +1,88 @@ +# Rapor — imajViewer'ı GitHub'da Açık Kaynak Yapmak + +> Tarih: 2026-08-06 +> Konu: GitHub'a açık kaynak repo koymak için gerekenler + mevcut repo durumu + geçmiş/silinme sorusu + "pro" hale getirme planı + +## 1. Sorunun cevabı: dosya silersem GitHub'a eski dosyalar gider mi? + +**Çalışma ağacından gider, geçmişten GİTMEZ.** + +- Aynı repo geçmişini (aynı commit zincirini) GitHub'a push edersen: sildiğin dosyalar + son sürümde (en son commit'te) görünmez, ama **git geçmişindeki eski commit'lerde + aynen durur**. GitHub'da eski commit'lere tıklayan herkes o dosyaları görür ve indirebilir. +- Üstelik bu geçmiş 391 MB binary taşıyor (aşağıda detay). GitHub'a geçmişle gitmek hem + bu yükü hem de "eski dosyalar hâlâ orada" sorununu getirir. +- **Öneri:** GitHub için geçmişsiz / tek commit'li temiz başlangıç yap. Ya `git init` ile + yeni repo (sıfır geçmiş), ya da squash ile tek commit. O zaman ne sildiysen tamamen gider. + +## 2. GitHub'a açık kaynak repo koymak için gerekenler (checklist) + +| Öğe | Durum | Not | +|---|---|---| +| LICENSE dosyası | ❌ YOK | README'de "MIT" yazıyor ama kökte LICENSE dosyası yok. GitHub lisansı bunu algılamaz | +| README | ⚠️ Var | Gitea URL'leri içeriyor, Türkçe, badge yok (detay: madde 4) | +| CONTRIBUTING.md | ❌ YOK | Katkı kuralları (kod stili, test, PR süreci) | +| CODE_OF_CONDUCT.md | ❌ YOK | GitHub topluluk standartları için beklenir | +| SECURITY.md | ❌ YOK | Güvenlik açığı bildirim yolu (private advisory) | +| CHANGELOG.md | ❌ YOK | 1.0.0 → 1.1.0 geçmişi yazılı değil | +| CI (GitHub Actions) | ❌ YOK | Sadece `.gitea/workflows/` var — GitHub bunu ÇALIŞTIRMAZ, `.github/workflows/` gerekir | +| Issue/PR template | ❌ YOK | `.github/ISSUE_TEMPLATE/` + `PULL_REQUEST_TEMPLATE.md` | +| .gitignore | ✅ Var | İyi durumda (build/, .dart_tool/ ignore ediliyor) | +| Repo metadata | ❌ | description + topics (image-viewer, flutter, linux, windows) + lisans seçimi | +| Releases | ⚠️ | v1.1.0 tag + .deb/.exe asset'leri GitHub Releases'e taşınmalı | +| FUNDING.yml | ❌ | Opsiyonel | + +## 3. KRİTİK: Sızıntı / hijyen riskleri + +1. **Gömülü token:** `git remote -v` çıktısında origin URL'si + `https://git_alhan:1254baa3...@git.softmediadesign.com/...` — token URL'e gömülü. + Bu dosya `.git/config`'te; push ile GitHub'a gitmez (config transfer edilmez). + Ama GitHub'a yeni remote eklerken bu URL'yi yanlışlıkla kopyalamamaya dikkat. + Token'ı Gitea'dan yenilemek en temizi. +2. **Kişisel dosyalar repoda:** `imajviewer.desktop` (yerel .desktop, mode 600), + `Implementation.md`, `PRD.md`, `update_plan_01.md`, `docs/session-*.md`, + `docs/rapor-*.md` — iç geliştirme notları. Açık kaynak repo'da hepsi durmamalı. +3. **Binary dosyalar git'te:** `deb/` (16 MB libflutter_linux_gtk.so vb. — build çıktısı) + ve `dist/` (.deb, .exe — sürüm paketleri) git ile takip ediliyor. Binary'ler git'e + girmez; release asset'i olur. `.gitignore`'da `*.deb`/`*.exe` var ama `!dist/*.deb` + istisnası ve `deb/` dizini bunları açıkta bırakıyor. +4. **Mutlak yol:** `pubspec.yaml` → `msix_config.logo_path: C:/projects/imajviewer/...` + — yerel Windows yolu. GitHub runner'ında msix adımı kırılır; göreli yol olmalı. +5. **Geçmiş 391 MB:** En büyük blob'lar: setup.exe 24 MB ×4 kopya, libflutter_linux_gtk.so + 16 MB, .deb'ler 8-11 MB ×8, tar.gz 9 MB. GitHub'da dosya limiti 100 MB — şu an + geçmiyor ama repo 1 GB'a yaklaşırsa GitHub uyarır, şişkinlik de kötü görünür. + +## 4. README düzeltmeleri + +- Klon/curl komutlarındaki `git.softmediadesign.com` URL'leri GitHub URL'si olmalı +- `.deb` kurulum adımındaki sürüm `1.0.0` yazılmış, güncel `1.1.0` +- Türkçe → açık kaynak için İngilizce (veya TR+EN iki dilli) önerilir +- Badge'ler (build status, license, release) + ekran görüntüsü (imajviewer.png var) +- "Gitea Actions" bölümü → "GitHub Actions" olarak yeniden yazılmalı + +## 5. "Pro" hale getirme planı (uygulama adımları, onay sonrası) + +1. **Kök temizliği:** `imajviewer.desktop` sil; iç dokümanları (Implementation/PRD/ + update_plan/docs) taşı ya da sil — karar gerekiyor (aşağıda). +2. **Binary'leri git'ten çıkar:** `git rm --cached deb/ dist/*.deb dist/*.exe`, + `.gitignore`'u düzelt (deb/ tamamen ignore; dist/'te sadece rebuild-deb.sh kalsın). + Not: `git rm --cached` sadece ileriye dönük temizler; geçmişteki 391 MB durur — + tam temizlik için ya filter-repo ya da temiz başlangıç gerekir. +3. **Lisans:** Köke `LICENSE` (MIT) ekle. +4. **README'yi yeniden yaz:** İngilizce, GitHub linkleri, badge, screenshot. +5. **Topluluk dosyaları:** CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, + CHANGELOG.md, `.github/` (issue/PR template + workflows/build-windows.yml). +6. **CI'ı GitHub'a uyarla:** `.gitea/workflows/build-windows.yml` → `.github/workflows/`: + `GITEA_TOKEN` → `GITHUB_TOKEN` (otomatik), release adımı + `softprops/action-gh-release` ile GitHub Release + .deb/.exe asset. +7. **pubspec.yaml:** `logo_path`'i göreli yap (CI'da msix kırılmasın). +8. **GitHub'a aktarım:** Yeni boş GitHub repo → `git remote add github ` → + temiz tek commit (squash/orphan) → `git push github main`. Gitea ayrı kalır. + +## 6. Açık kararlar (senin onayın gerekiyor) + +1. README dili: İngilizce mi, TR mi, iki dilli mi? (açık kaynak görünürlüğü için İngilizce önerilir) +2. `docs/` ve kök dokümanlar: iç raporlar/session notları ne olacak? (yerel yedek alınır mı?) +3. Geçmiş: temiz tek commit mi, yoksa tüm geçmiş GitHub'a taşınsın mı? (öneri: temiz tek commit) +4. GitHub hesabı/org: repo hangi hesaba? Repo adı: `imajviewer` mi `imajViewer` mi? +5. Lisans: MIT kesin mi? (README'de MIT yazıyor, dosya yok) diff --git a/update_plan_01.md b/docs/update_plan_01.md similarity index 100% rename from update_plan_01.md rename to docs/update_plan_01.md diff --git a/imajviewer.desktop b/imajviewer.desktop deleted file mode 100644 index 10074ce..0000000 --- a/imajviewer.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Type=Application -Name=imajViewer -Comment=Ultra hafif görüntü izleyici -Exec=imajviewer %F -Icon=imajviewer -Terminal=false -Categories=Graphics;Viewer;RasterGraphics; -MimeType=image/png;image/jpeg;image/webp;image/bmp;image/gif;image/jpg;image/vnd.wap.wbmp; -StartupNotify=false diff --git a/pubspec.yaml b/pubspec.yaml index 022f851..b442938 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ msix_config: display_name: ImajViewer publisher_display_name: imajviewer identity_name: imajviewer.imajviewer - logo_path: C:/projects/imajviewer/windows/runner/resources/app_icon.ico + logo_path: windows/runner/resources/app_icon.ico install_certificate: false sign_msix: false