Files
harbour-calibreweb/rpm/harbour-calibreweb.spec
T
kaneda 47f949c3fb Lettore 0.4.1: snap alle pagine, niente preventStealing (menu pulley ok)
preventStealing sulla MouseArea rubava il drag al PushUpMenu (il gesto si
bloccava appena il dito entrava nella zona centrale) e senza di esso il
contenuto scrollava libero. Ora: il drag e' permesso ma lo snap (250ms dopo
l'ultimo movimento) riallinea contentY alla pagina piu' vicina (soglia 70%,
zona finale parziale -> fondo). I pulley menu funzionano normalmente.
2026-08-21 11:46:50 +02:00

172 lines
9.3 KiB
RPMSpec

Name: harbour-calibreweb
Summary: Client OPDS per Calibre Web
Version: 0.4.1
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 <carlo@carlobaratto.it> - 0.4.1-1
- Fix scroll libero e pulley menu: rimosso preventStealing dalla MouseArea
(ruba il gesto al PushUpMenu appena il dito entra nella zona centrale).
Lo scroll libero e' ora neutralizzato dallo SNAP alle pagine: dopo ogni
movimento il contenuto torna alla pagina piu' vicina (soglia 70%, zona
finale parziale -> fondo), i menu pulley funzionano normalmente
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.0-1
- LETTORE RIFATTO senza WebView: i capitoli sono rich text Qt in un Text QML
dentro un SilicaFlickable. Lo scroll (contentY/contentHeight) e' nativo QML
e sempre affidabile: sul WebView di Sailfish lo scroll programmatico non
funziona (window.scrollY stale, contentHeight/scrollPosition non scrivibili)
e il cambio capitolo non scattava mai (regressioni 0.3.x)
- Paginazione a tap su contentY: avanti/indietro di una viewport, cambio
capitolo deterministico (fine = contentY >= contentHeight - height)
- Bookmark v2 invariato (posizione per carattere, stimata dalla frazione di
scroll: stabile col reflow del font); migrazione v1 invariata
- HTML->rich text in C++: tag di base (p, h1-h6, b/i/u/s, liste, tabelle,
blockquote), entita' HTML comuni decodificate, script/style/head/immagini
saltati, fallback per HTML malformato
- NOTA: il lettore non mostra piu' le immagini inline dei capitoli (limite
del rich text Qt); niente scroll libero (paginazione a tap, come richiesto)
* Fri Aug 21 2026 Carlo Baratto <carlo@carlobaratto.it> - 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 <carlo@carlobaratto.it> - 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 <carlo@carlobaratto.it> - 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 <carlo@carlobaratto.it> - 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 <carlo@carlobaratto.it> - 0.3.0-1
- Lettore: bookmark per POSIZIONE (numero di carattere, chiave cw:v2:<assoluto>)
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 <carlo@carlobaratto.it> - 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