Name: harbour-calibreweb Summary: Client OPDS per Calibre Web Version: 0.3.4 Release: 1 Group: Qt/Qt License: MIT URL: https://github.com/kaneda/harbour-calibreweb Source0: %{name}-%{version}.tar.gz Source1: %{name}.desktop Requires: sailfishsilica-qt5 >= 0.10.9 BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5Qml) BuildRequires: pkgconfig(Qt5Quick) BuildRequires: desktop-file-utils %description Client per navigare e scaricare libri da un'istanza Calibre Web (o dal Content Server di Calibre) tramite il protocollo OPDS. Supporta autenticazione di base, ricerca, copertine, download in tutti i formati disponibili e lettura EPUB integrata con reflow del testo, margini configurabili e posizione salvata in locale. %changelog * Fri Aug 21 2026 Carlo Baratto - 0.3.4-1 - Fix tap avanti: scrollToCharJs usava window.scrollTo(0, rect.top+scrollY-8) e window.scrollY e' stale sul WebView Sailfish -> il tap oscillava di pochi pixel invece di avanzare. Ora scrollBy relativo (0, rect.top-8): nessuna lettura di scrollY, avanzamento di una pagina esatta * Fri Aug 21 2026 Carlo Baratto - 0.3.3-1 - Paginazione per CONTENUTO: il tap avanza di una pagina di testo (offset in caratteri calcolato sui text node del DOM), la fine del capitolo e' decisa confrontando l'offset con la lunghezza del capitolo nota in C++ — nessuna dipendenza dallo scroll del WebView (window.scrollY non riflette lo scroll reale; contentHeight/scrollPosition nativi non scrivibili su Qt 5.6) - Impostazioni: numero di versione in fondo alla pagina (label "Version") - Fix definitivo del cambio capitolo avanti/indietro * Fri Aug 21 2026 Carlo Baratto - 0.3.2-1 - Fix definitivo cambio capitolo: la navigazione non usa piu' window.scrollY/ scrollBy via runJavaScript (lo scroll reale del WebView Sailfish non e' sempre riflesso in window.scrollY: la posizione non arrivava mai a fine documento e il cambio capitolo non scattava). Ora paginazione con le proprieta' NATIVE del WebView (contentHeight/scrollPosition): aritmetica QML pura, affidabile * Fri Aug 21 2026 Carlo Baratto - 0.3.1-1 - Fix passaggio di capitolo: il tap avanti/indietro usava un confronto con max calcolato (scrollHeight - innerHeight), che sul WebView di Sailfish può essere sovrastimato: scrollY non raggiungeva mai max e il cambio capitolo non scattava (si restava dentro il capitolo). Ora lo scroll avviene con scrollBy e la condizione è "lo scroll si è MOSSO?" — infallibile anche con max errato; se il documento è bloccato (overflow hidden), unlock CSS e riprova * Fri Aug 21 2026 Carlo Baratto - 0.3.0-1 - Lettore: bookmark per POSIZIONE (numero di carattere, chiave cw:v2:) invece di capitolo+frazione: la posizione è stabile cambiando font e margini; le vecchie chiavi cw:v1 vengono migrate automaticamente al primo avvio - Lettore: paginazione a tap corretta quando il CSS del libro blocca lo scroll (height:100%/overflow:hidden): stile iniettato con height:auto+overflow:visible e sblocco JS dei contenitori nascosti — prima ogni tap saltava al capitolo successivo perdendo tutto il testo del capitolo - Lettore: prevPage dall'inizio del capitolo torna all'ULTIMA pagina del capitolo precedente (prima ripartiva dall'inizio saltando la coda del testo) - Lettore: cambio font A-/A+ mantiene la posizione di lettura (ripristino per carattere dopo il reflow) - Lettore: label del menu con pagina corrente/totale del capitolo; avanzamento calcolato su documentElement E body (libri che scrollano il body) - Parser EPUB: lunghezze testo per capitolo (text node del DOM) per la mappatura offset assoluto -> capitolo - Test: harness C++ locale (Qt) + test JS con DOM mock per conteggio caratteri, ripristino e paginazione * Wed Aug 19 2026 Carlo Baratto - 0.2.0-1 - Sandbox SailJail (Sailfish 4.4+/5.x): profilo X-Sailjail esplicito nel desktop file (Internet;Downloads, org harbour/app calibreweb) e config in AppConfigLocation (~/.config/harbour/calibreweb/calibreweb.conf, l'unica zona persistente della sandbox). Senza profilo la sandbox nascondeva ~/.config/harbour e le impostazioni dal launcher sparivano (config solo funzionante da SSH). Migrazione automatica dal vecchio file per-utente. - Fix crash 'Close book': pop(null) differito con Timer (distruggere la pagina dall'handler del suo MenuItem crashava) - Config condivisa nemo/defaultuser: permessi aperti su /home/nemo/.config/harbour e sul file a ogni scrittura (il launcher gira come nemo, il debug SSH come defaultuser: prima le impostazioni salvate da un lato sparivano dall'altro) - Selettore lingua nelle impostazioni (System/English/Italiano, applicata al riavvio; QTranslator in main.cpp, pattern quill). Catalogo .qm nel data dir dell'app (/usr/share/harbour-calibreweb/translations, il validatore RPM rifiuta /usr/share/translations) - Localizzazione: lingua di default inglese (qsTr ovunque), catalogo italiano harbour-calibreweb_it.ts/.qm nel data dir dell'app - Fix configurazione persa: file di configurazione unico e fisso (/home/nemo/.config/harbour/calibreweb.conf) indipendente dall'utente che avvia l'app (launcher nemo / debug SSH defaultuser), con migrazione automatica dei valori gia' salvati - Config auto-adattiva: la home grafica su Jolla Phone 2026 (Sailfish 5.1) e' /home/rootitanium (non nemo): candidate rootitanium -> nemo -> home dell'utente corrente, file esistente prima, poi prima home scrivibile; permessi aperti sulla home scelta a ogni scrittura - Lettore EPUB nativo (WebView): capitoli, reflow A-/A+, margini configurabili, posizione salvata in locale (QSettings) e ripristinata all'apertura - Parser EPUB in C++ (ZIP minimale + container/OPF/spine, TOC EPUB2+3) - Rimossa la sync server dell'avanzamento (route web con login di sessione): resta solo il segno locale - URL risolti RFC 3986 (sottopath /calibre non piu raddoppiato), copertine validate prima del cache, pagine corrette per Silica 5.1 - Icone in struttura standard hicolor %prep %setup -q -n %{name}-%{version} %build %qmake5 make %{?_smp_mflags} # Translation catalogue: generated explicitly with lrelease (the sailfishapp_i18n # template does not produce the .qm reliably on the 5.1 kit). The .ts lives in # the source tree; sfdk uses the sources live (shadow build), so locate it # across the possible layouts. if [ -f %{_builddir}/../%{name}-%{version}/translations/%{name}_it.ts ]; then TS=%{_builddir}/../%{name}-%{version}/translations/%{name}_it.ts elif [ -f %{_builddir}/%{name}-%{version}/translations/%{name}_it.ts ]; then TS=%{_builddir}/%{name}-%{version}/translations/%{name}_it.ts elif [ -f %{_builddir}/translations/%{name}_it.ts ]; then TS=%{_builddir}/translations/%{name}_it.ts else echo "ERROR: %{name}_it.ts not found" >&2 exit 1 fi lrelease "$TS" -qm %{_builddir}/%{name}_it.qm %install make install INSTALL_ROOT=%{buildroot} mkdir -p %{buildroot}%{_datadir}/applications install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/applications/%{name}.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop || true # Italian translation: installed in the app data dir (the RPM validator # rejects /usr/share/translations); main.cpp loads it from there. mkdir -p %{buildroot}%{_datadir}/%{name}/translations install -m 0644 %{_builddir}/%{name}_it.qm %{buildroot}%{_datadir}/%{name}/translations/ %files %defattr(-,root,root,-) %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/86x86/apps/%{name}.png %{_datadir}/icons/hicolor/108x108/apps/%{name}.png %{_datadir}/icons/hicolor/128x128/apps/%{name}.png %{_datadir}/icons/hicolor/172x172/apps/%{name}.png %{_datadir}/%{name}/qml %{_datadir}/%{name}/translations/%{name}*.qm