Causa (il "solito" problema dei progetti Sailfish): QSettings di default scrive in ~/.config/harbour/hermes.conf, FUORI dalla directory che la sandbox SailJail rende persistente (~/.config/harbour/hermes/). Dal launcher le modifiche finivano in una vista effimera e sparivano a ogni riavvio; da terminale invece restavano (da qui l'effetto "a volte si' a volte no"). Stesso problema gia' risolto in harbour-calibreweb e harbour-quill con il percorso esplicito. - Settings: QSettings(configPath(), IniFormat) con configPath() = AppConfigLocation + "/hermes.conf" (mkpath della directory) - store(): ogni setter fa setValue + sync immediato (nessuna modifica persa se il sistema termina l'app) - migrateIfNeeded(): al primo avvio importa i valori rimasti nel vecchio percorso di default (~/.config/harbour/hermes.conf, piu' i path legacy nemo/defaultuser) - diagnostica: log del file impostazioni e dei valori letti all'avvio - core-test: test di persistenza (scrittura con una istanza, rilettura con una SECONDA istanza: prova che passa dal file su disco)
121 lines
4.2 KiB
Markdown
121 lines
4.2 KiB
Markdown
# Build: compilazione, test e deploy
|
|
|
|
## 1. Prerequisiti SDK
|
|
|
|
- Sailfish SDK (testato su 5.1.0.11) con target del dispositivo aarch64:
|
|
`SailfishOS-5.0.0.62-aarch64` (Jolla Phone 2026) o equivalente.
|
|
- Nel target SDK serve **QtMultimedia** (registrazione/riproduzione):
|
|
se `pkgconfig(Qt5Multimedia)` non è trovato in fase di build, installa il
|
|
pacchetto devel nel target:
|
|
|
|
```bash
|
|
sfdk tools exec SailfishOS-5.0.0.62-aarch64 zypper install -y qt5-qtmultimedia-devel
|
|
```
|
|
|
|
(oppure via Qt Creator: Tools → Sailfish OS → Manage targets → Packages,
|
|
oppure `sfdk target install` con un RPM locale.)
|
|
|
|
## 2. Build e deploy dell'app
|
|
|
|
```bash
|
|
cd harbour-hermes
|
|
sfdk build # genera RPMS/
|
|
sfdk deploy # installa sul device collegato
|
|
```
|
|
|
|
Note:
|
|
- Il target è Qt 5.6: il codice del core è scritto per compilare anche lì
|
|
(niente API Qt > 5.6; per il TTS si usa `audio/mpeg` di edge-tts).
|
|
- Il profilo SailJail è nel `rpm/harbour-hermes.desktop`
|
|
(`Internet;Audio;Microphone`) e deve restare allineato a
|
|
`setOrganizationName("harbour")` / `setApplicationName("hermes")` in `main.cpp`.
|
|
- Al primo uso del microfono Sailfish chiede il consenso al permesso
|
|
**Microphone**.
|
|
|
|
## 3. Test del core in locale (senza SDK)
|
|
|
|
Il core (ApiClient, ChatModel, parser SSE, Recorder, Player) si compila anche
|
|
su desktop con Qt 5.15 per i test:
|
|
|
|
```bash
|
|
# Qt desktop (qui: Qt 5.15.2 nel kit locali)
|
|
export PATH=<Qt5.15>/gcc_64/bin:$PATH
|
|
mkdir -p /tmp/hh-test && cd /tmp/hh-test
|
|
qmake /percorso/harbour-hermes/tests/core_test.pro
|
|
make -j4
|
|
```
|
|
|
|
- **Unit** (parser SSE): `./core-test`
|
|
- **Integrazione live**: `./core-test --live`
|
|
richiede un'istanza di prova di hermes-webui su `http://127.0.0.1:8899`
|
|
con password in `/tmp/hermes-probe/pw` e l'audio di prova in
|
|
`/tmp/hermes-probe/out/prova.ogg` (vedi note in `tests/core_test.cpp`).
|
|
Il flusso coperto: login → nuova sessione → turno con streaming → TTS →
|
|
trascrizione.
|
|
|
|
Nota desktop: se manca `libGL.so` di sviluppo, creare un symlink
|
|
`libGL.so -> /usr/lib/x86_64-linux-gnu/libGL.so.1` e assicurarsi che
|
|
`core_test.pro` punti lì (`GLSTUB`), oppure lanciare con `LD_LIBRARY_PATH`
|
|
puntato alla lib dir di Qt.
|
|
|
|
Nota desktop 2: Qt5Multimedia richiede `libpulse-mainloop-glib.so.0`
|
|
(pacchetto `libpulse-mainloop-glib0`, non installato su questo server).
|
|
Senza sudo si estrae dal .deb:
|
|
|
|
```bash
|
|
mkdir -p /tmp/hh-libs && cd /tmp/hh-libs
|
|
apt-get download libpulse-mainloop-glib0
|
|
dpkg-deb -x libpulse-mainloop-glib0_*.deb ext
|
|
export LD_LIBRARY_PATH=/tmp/hh-libs/ext/usr/lib/x86_64-linux-gnu:<Qt>/gcc_64/lib
|
|
```
|
|
|
|
Esecuzione: `./core-test` (unit) e `./core-test --live` (integrazione,
|
|
richiede il probe WebUI su :8899). Esito 12/09/2026: unit 9/9, live completo OK.
|
|
|
|
## 4. Tarball per la build da Qt Creator
|
|
|
|
```bash
|
|
cd ~/workspace
|
|
tar czf harbour-hermes-0.5.3.tar.gz \
|
|
--transform 's,^harbour-hermes,harbour-hermes-0.5.3,' \
|
|
--exclude='.git' harbour-hermes
|
|
```
|
|
|
|
Lo spec si aspetta la directory `harbour-hermes-0.5.3/` (pattern degli altri
|
|
progetti: cercato in modo robusto anche per i sorgenti live di sfdk).
|
|
|
|
## Traduzioni
|
|
|
|
Stringhe UI in `qsTr()` (QML) e `tr()` (C++). Dopo modifiche alle stringhe:
|
|
|
|
```bash
|
|
lupdate -no-obsolete -recursive src qml -ts translations/harbour-hermes-it.ts \
|
|
translations/harbour-hermes-fr.ts translations/harbour-hermes-de.ts
|
|
```
|
|
|
|
In build `CONFIG += sailfishapp_i18n` compila i `.qm` e li installa in
|
|
`/usr/share/harbour-hermes/translations` (caricati all'avvio in base alla
|
|
lingua di sistema).
|
|
|
|
## 5. Dipendenze lato server (WebUI)
|
|
|
|
- `/api/transcribe` richiede un provider STT attivo sul server
|
|
(qui: faster-whisper locale — verificato con `/api/transcribe/capability`).
|
|
- `/api/tts` con engine `edge` non richiede chiavi API.
|
|
- Le voci italiane di edge sono state aggiunte all'allowlist del server
|
|
(patch a `hermes-webui/api/routes.py` + test
|
|
`tests/test_italian_voices_tts_allowlist.py`): per attivarle **riavviare
|
|
il servizio WebUI** (`sudo systemctl restart hermes-webui`).
|
|
- Per una dettatura italiana corretta impostare in `~/.hermes/config.yaml`:
|
|
|
|
```yaml
|
|
stt:
|
|
provider: local
|
|
local:
|
|
model: base
|
|
language: it
|
|
```
|
|
|
|
(senza, whisper può tradurre/maltrascrivere l'italiano). Richiede il
|
|
riavvio del WebUI.
|