OmniRoute/docs/i18n/cs/electron/README.md
zenobit bfa9cd15b7 Add Czech language + Fix VM_DEPLOYMENT_GUIDE.md English source
Author: zenobit <zenobit@disroot.org>
2026-03-19 16:02:28 +01:00

254 lines
8 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.

# Aplikace OmniRoute Electron pro stolní počítače
Tento adresář obsahuje obalovou aplikaci Electron pro desktopovou aplikaci OmniRoute.
## Architektura (v1.6.4)
```
electron/
├── main.js # Main process — window, tray, server lifecycle, CSP, IPC
├── preload.js # Preload script — secure IPC bridge with disposer pattern
├── package.json # Electron-specific dependencies & electron-builder config
├── types.d.ts # TypeScript definitions (AppInfo, ServerStatus, ElectronAPI)
└── assets/ # Application icons and resources
src/shared/hooks/
└── useElectron.ts # React hooks — useSyncExternalStore, zero re-renders
```
## Klíčová rozhodnutí o designu
Rozhodnutí | Odůvodnění
--- | ---
dotazování `waitForServer()` | Zabraňuje zobrazení prázdné obrazovky při studeném startu — před načtením se ozve `http://localhost:PORT`
`stdio: 'pipe'` | Zachycuje stdout/stderr serveru pro logování + detekci připravenosti ( `inherit` )
Vzor drtiče odpadu | `onServerStatus()` vrací `() => void` pro přesné vyčištění listeneru (ne `removeAllListeners` )
`useSyncExternalStore` | Nulové renderování pro `useIsElectron()` — žádný cyklus `useState` + `useEffect`
CSP prostřednictvím záhlaví relace | `Content-Security-Policy` omezuje `script-src` , `connect-src` atd. dle osvědčených postupů Electron.
Podmíněný titulek pro platformu | `titleBarStyle: 'hiddenInset'` pouze v systému macOS; `default` ve Windows/Linuxu
## Rozvoj
### Předpoklady
1. Nejprve sestavte aplikaci Next.js:
```bash
npm run build
```
1. Instalace závislostí Electronu:
```bash
cd electron
npm install
```
### Spuštěno ve vývoji
1. Spusťte vývojový server Next.js:
```bash
npm run dev
```
1. V jiném terminálu spusťte Electron:
```bash
cd electron
npm run dev
```
### Spuštění v produkčním režimu
1. Sestavení Next.js v samostatném režimu:
```bash
npm run build
```
1. Spuštění elektronu:
```bash
cd electron
npm start
```
## Budova
### Sestavení pro aktuální platformu
```bash
cd electron
npm run build
```
### Vytvořte pro specifické platformy
```bash
# Windows
npm run build:win
# macOS (x64 + arm64)
npm run build:mac
# Linux
npm run build:linux
```
## Výstup
Vytvořené aplikace jsou umístěny v `dist-electron/` :
- Windows: `.exe` instalační program (NSIS) + přenosný `.exe`
- macOS: instalační soubor `.dmg` (Intel + Apple Silicon)
- Linux: `.AppImage`
## Instalace
### macOS
1. Stáhněte si nejnovější soubor `.dmg` ze stránky [Verze](https://github.com/diegosouzapw/OmniRoute/releases) .
2. Otevřete soubor `.dmg` .
3. Přetáhněte `OmniRoute.app` do složky Aplikace.
4. Spustit z Aplikací.
> ⚠️ **Poznámka:** Aplikace zatím není podepsána certifikátem Apple Developer. Pokud macOS aplikaci blokuje, spusťte:
>
> ```bash
> xattr -cr /Applications/OmniRoute.app
> ```
>
> Nebo klikněte pravým tlačítkem myši na aplikaci → Otevřít → Otevřít (pro obejití Gatekeeperu při prvním spuštění).
### Windows
**Instalační program (doporučeno):**
1. Stáhněte si `OmniRoute.Setup.*.exe` z [Releases](https://github.com/diegosouzapw/OmniRoute/releases) .
2. Spusťte instalační program.
3. Spuštění z nabídky Start nebo zástupce na ploše.
**Přenosné (bez instalace):**
1. Stáhněte si soubor `OmniRoute.exe` ze [sekce Vydání](https://github.com/diegosouzapw/OmniRoute/releases) .
2. Spouštět přímo z libovolné složky.
### Linux
1. Stáhněte si soubor `.AppImage` ze [sekce Releases](https://github.com/diegosouzapw/OmniRoute/releases) .
2. Udělejte z něj spustitelný soubor:
```bash
chmod +x OmniRoute-*.AppImage
```
3. Běh:
```bash
./OmniRoute-*.AppImage
```
## Funkce
- **Připravenost serveru** Před zobrazením okna čeká na kontrolu stavu
- **Systémový zásobník** — Minimalizace do systémového zásobníku s rychlými akcemi (otevřít, změnit port, ukončit)
- **Správa portů** — Změna portu z nabídky v systémové liště (server se automaticky restartuje)
- **Ovládací prvky oken** — Vlastní minimalizace, maximalizace, zavření přes IPC
- **Zásady zabezpečení obsahu** Omezující CSP prostřednictvím záhlaví relací
- **Offline podpora** — Samostatný server Next.js v balíčku
- **Jedna instance** V daném okamžiku může běžet pouze jedna instance aplikace.
## Konfigurace
### Proměnné prostředí
Proměnná | Výchozí | Popis
--- | --- | ---
`OMNIROUTE_PORT` | `20128` | Port serveru
`OMNIROUTE_MEMORY_MB` | `512` | Limit haldy Node.js (6416384 MB)
`NODE_ENV` | `production` | Nastavit na `development` pro vývojářský režim
### Vlastní ikona
Umístěte ikony do `assets/` :
- `icon.ico` — ikona Windows (256×256)
- `icon.icns` — balíček ikon pro macOS
- `icon.png` — Linux/obecné použití (512×512)
- `tray-icon.png` — Ikona na systémové liště (16×16 nebo 32×32)
## Kanály IPC
### Vyvolání (Renderer → Hlavní, asynchronní)
Kanál | Vrácení zboží | Popis
--- | --- | ---
`get-app-info` | `AppInfo` | Název aplikace, verze, platforma, isDev, port
`open-external` | `void` | Otevřít URL ve výchozím prohlížeči (pouze http/https)
`get-data-dir` | `string` | Získat cestu k adresáři userData
`restart-server` | `{ success }` | Zastavení + restart serveru (časový limit 5 s + SIGKILL)
### Odeslat (Renderer → Hlavní, spustit a zapomenout)
Kanál | Popis
--- | ---
`window-minimize` | Minimalizovat okno
`window-maximize` | Přepnout maximalizaci/obnovení
`window-close` | Zavřít okno (minimalizovat do zásobníku)
### Příjem (Hlavní → Renderer, události)
Kanál | Užitečné zatížení | Vydáno, když
--- | --- | ---
`server-status` | `ServerStatus` | Server se spouští, zastavuje, dochází k chybám nebo se restartuje
`port-changed` | `number` | Změna portu přes menu zásobníku
> **Poznámka** : Posluchače vracejí funkce pro přesné čištění. Viz hooky `useServerStatus` a `usePortChanged` .
## Zabezpečení
Funkce | Implementace
--- | ---
Izolace kontextu | `contextIsolation: true` — renderer nemůže přistupovat k Node.js
Integrace uzlů | `nodeIntegration: false` — v rendereru není `require()`
Bílý seznam IPC | Názvy kanálů ověřené při předběžném načítání pomocí `safeInvoke` / `safeSend` / `safeOn`
Ověření URL adresy | `shell.openExternal()` povoluje pouze protokoly `http:` / `https:`
CSP | Záhlaví `Content-Security-Policy` nastavené pomocí `session.webRequest.onHeadersReceived`
Zabezpečení webu | `webSecurity: true` vynucena politika stejného původu
## React Hooky
Háček | Vrácení zboží | Popis
--- | --- | ---
`useIsElectron()` | `boolean` | Detekce nulového renderování pomocí `useSyncExternalStore`
`useElectronAppInfo()` | `{ appInfo, loading, error }` | Informace o aplikaci z hlavního procesu
`useDataDir()` | `{ dataDir, loading, error }` | Adresář uživatelských dat
`useWindowControls()` | `{ minimize, maximize, close }` | Akce ovládání oken
`useOpenExternal()` | `{ openExternal }` | Otevřít URL adresy v prohlížeči
`useServerControls()` | `{ restart, restarting }` | Řízení restartu serveru
`useServerStatus(cb)` | Drtič odpadu | Poslouchejte události stavu serveru
`usePortChanged(cb)` | Drtič odpadu | Poslouchejte události změny portu
## Odstraňování problémů
### Aplikace se nespustí
1. Zkontrolujte, zda je port 20128 dostupný: `lsof -i :20128`
2. Zkontrolujte protokoly konzole pro prefix `[Electron]`
3. Ověřte, zda výstup sestavení existuje v souboru `.next/standalone`
### Bílá obrazovka
1. Ověření existence buildu Next.js čekání na připravenost serveru maximálně 30 sekund
2. Zkontrolujte výstup protokolů `[Server]` a `[Server:err]`
3. Hledání porušení CSP v konzoli pro vývojáře
### Selhání sestavení
Ujistěte se, že máte nainstalované nástroje pro sestavení:
- Windows: Nástroje pro sestavení ve Visual Studiu
- macOS: Nástroje příkazového řádku Xcode
- Linux: `build-essential` , `libsecret-1-dev`
## Licence
MIT