Skip to main content

E-Book Reader - Releases

← App details

Nextcloud 35

E-Book Reader 1.0.0
Release Details
UpdatedOct. 29, 2026, 10:31 a.m.
Changelog

Hinzugefügt

  • Longstrip-Comics (Webtoons): Ein als Longstrip markierter Comic wird im Reader nicht geblättert, sondern nahtlos nach unten gescrollt. Alle Seiten liegen ohne Abstand untereinander, Bilder werden in der Nähe des sichtbaren Bereichs geladen und weiter entfernt wieder freigegeben, sodass auch Bände mit Tausenden Seiten flüssig bleiben. Die Position innerhalb einer hohen Seite wird mitgespeichert. Seitliche Tipp-Zonen, Leertaste und Bild-Tasten scrollen eine Bildschirmhöhe, die Pfeiltasten in kleinen Schritten. Zoom: Originalbreite (höchstens Bildschirmbreite) oder Bildschirmbreite.
  • Erkennung beim Indizieren aus ComicInfo.xml (Format „Webtoon“, „Long Strip“ oder „Vertical“, oder ein solcher Tag bzw. ein solches Genre). Die Markierung lässt sich in den Buchdetails, in der Massenbearbeitung und direkt in den Reader-Einstellungen („Darstellung: Seiten / Longstrip“) ändern. Ein von Hand gesetzter Wert übersteht das erneute Indizieren und lässt sich auf den Wert aus der Datei zurücksetzen.
  • Bei Longstrip-Comics trägt das Format-Abzeichen auf der Karte und in der Liste den Zusatz „-LS“ (z. B. „CBZ-LS“). In der Navigation gibt es die Gruppe „Darstellung“ mit dem Filter layout:longstrip.
  • API: Das Buch-JSON hat longstrip und longstripManual. PATCH /books/{fileId}/app-data und PATCH /books/app-data kennen longstrip (true/false) und resetLongstrip. Die Facetten haben layouts mit der Anzahl der Longstrip-Comics. Neue Spalten longstrip, longstrip_file, longstrip_manual (Migration Version1009Date20261025100000). Bereits indizierte Comics erhalten den Wert aus der Datei beim nächsten Scan mit --force.
  • Lesevorschläge: Am Ende eines Buchs zeigt der Reader „Fertig gelesen“ mit „Weiterlesen: <nächster Band>“ und 3–4 ähnlichen, ungelesenen Titeln. Der Block erscheint auch in den Details gelesener Bücher und lässt sich schließen. Ähnlich heißt: mindestens ein gemeinsamer Autor, ein Genre oder ein Tag; Sprache und Comic/E-Book verbessern nur die Reihenfolge. Pro Serie erscheint höchstens ein Titel (ihr erster ungelesener Band), Bände derselben Serie nie. Das Ende ist die letzte Seite bzw. Doppelseite, beim Longstrip und bei gescrolltem Text das untere Ende; die Prozentanzeige zählt dafür nicht. Neuer Endpunkt GET /api/v1/books/{fileId}/suggestions (Capability-Feature suggestions).
  • Fehlt die Bandnummer in den Metadaten, liest der Server sie beim Indizieren aus Titel oder Dateiname (z. B. „Vol. 10“, „v02“, „Band 3“, „#7“, „Tome 4“, „第3巻“, „Saga 10“; Jahreszahlen zählen nicht). Eine Nummer aus den Metadaten oder aus dem Editor hat immer Vorrang. Capability-Feature series-order; Migration Version1010Date20261027100000 (Spalten title_sort und series_index_derived, für vorhandene Bücher gefüllt).
  • Lesen über öffentliche Linkfreigaben: Ein Gast mit Freigabe-Link kann ein Buch jetzt im Browser lesen. Eine Anmeldung ist nicht nötig. Der Reader öffnet sich in der Dateien-Vorschau der Freigabeseite. Er funktioniert für eine geteilte Datei und für Bücher in einem geteilten Ordner. Bei einer Freigabe mit Passwort gibt der Gast zuerst das Passwort auf der Freigabeseite ein.
  • Der Gast hat Inhaltsverzeichnis, Suche, Einstellungen und Vollbild. Markierungen, Lesezeichen und Vorschläge gibt es ohne Konto nicht.
  • Der Browser speichert Position und Einstellungen. Der Server speichert nichts.
  • Bei „Download verbergen“ oder ohne Download-Recht gibt der Server die Datei nicht heraus. Der Reader zeigt dann einen Hinweis.
  • Neue Routen GET /s/{token} (Reader-Seite) und GET /s/{token}/file (Buchdatei, mit HTTP-Range, höchstens 60 Aufrufe pro Minute).
  • Bildfilter für Comics: Die Reader-Einstellungen haben für Comics die Regler „Helligkeit“ und „Kontrast“ (50–200 %) und den Schalter „Graustufen“. Der Filter gilt nur für die Seitenbilder, der Hintergrund bleibt unverändert. Die Werte gelten für alle Comics und auch im Longstrip. „Bild zurücksetzen“ stellt das Originalbild wieder her. Neue Reader-Einstellungen comicBrightness, comicContrast, comicGrayscale.
  • Freigaben eines Buchs ansehen und entfernen: Die Buchdetails haben den neuen Reiter „Freigaben“. Der Reiter zeigt alle Personen, die das Buch lesen können, und die Freigabe, die den Zugriff gibt:
  • Freigaben der App: Buch, Regal, Serie oder Ordner.
  • Nextcloud-Freigaben der Datei oder eines übergeordneten Ordners: Benutzer, Gruppen, öffentliche Links, E-Mail, Teams, Talk. Weiterteilungen durch Empfänger erscheinen mit dem Namen der Person.
  • Der Dialog „Teilen“ eines Buchs zeigt dieselbe Liste. Ein Buch, das über seine Serie geteilt ist, erscheint dort nicht mehr als „Noch mit niemandem geteilt“.
  • Das Kreuz entfernt eine Freigabe. Vorher zeigt der Reiter die Folge, z. B. „Das ganze Regal … wird nicht mehr geteilt“ oder „Die Freigabe endet für alle Dateien im Ordner“.
  • Neue Endpunkte GET /api/v1/books/{fileId}/access und DELETE /api/v1/books/{fileId}/access?shareId=… (nur Nextcloud-Freigaben; Freigaben der App entfernen ihre eigenen Endpunkte). Capability-Feature book-access.

Geändert

  • Bearbeiten-Ansicht: Unter den Metadaten gibt es den Abschnitt „Bibliothek“ mit denselben Feldern wie in den Buchdetails: Bewertung, Lesestatus, Abschluss-Status, Altersfreigabe und Longstrip. Die Werte werden sofort gespeichert; die Buchdatei bleibt unverändert.
  • Unterstützte Nextcloud-Versionen: 33 bis 35. Nextcloud 31 und 32 entfallen. Die Kompatibilitäts-Shims dafür sind entfernt (Compat-Klasse, Fallback für window._nc_fileactions); die Server-APIs IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename und IShare::canSeeContent werden direkt genutzt. CI prüft nur noch 33–35.
  • Bände sortieren natürlich nach Bandnummer: „Band 2“ steht vor „Band 10“ (Sortierung „Serie“, Serienansicht, GET /series, OPDS, „Als Nächstes“). Auch die Sortierung „Titel“ ist natürlich. Bände ohne Nummer stehen immer am Ende.
  • Umbenennen/Einsortieren mit führenden Nullen: {series_index} schreibt die Bandnummer passend zur höchsten Nummer der Serie (01–99, ab 100 Bänden 001); Dezimalzahlen behalten den Bruch (05.5). {series_index:raw} schreibt ohne Nullen, {series_index:N} genau N Stellen. Achtung: Bestehende Muster mit {series_index} erzeugen jetzt „02“ statt „2“.

Behoben

  • Dialog „Teilen“: Die Suche nach der Benutzer-ID fand den Benutzer auf dem Server, die Auswahlliste blendete den Treffer aber aus, wenn der Anzeigename anders lautet. Die Liste zeigt jetzt alle Treffer des Servers.
  • GET /series: coverFileIds und firstFileId ordneten Titel ohne Bandnummer nicht natürlich.
  • Hilfetext für das Dateinamen-Muster nannte den ungültigen Platzhalter {index}; richtig ist {series_index}.
  • Eigene Tags und Genres gehen nicht mehr verloren, wenn ein Buch kurz aus der Bibliothek verschwindet (Papierkorb und Wiederherstellen, Verschieben und Zurückschieben, Freigabe neu, Ordner kurz nicht erreichbar). Die Tags bleiben am gelöschten Eintrag und kommen mit dem Buch zurück. Der tägliche Aufräum-Job löscht sie erst zusammen mit dem Eintrag nach 30 Tagen.

Sicherheit

  • Grenzen für Markierungen und Tags: Ein Benutzer hat höchstens 100 000 Markierungen, Notizen und Lesezeichen über alle Bücher. Pro Buch bleiben es höchstens 5000. Ist die Grenze erreicht, zeigt der Reader eine klare Meldung und sendet keine Anfrage. Ein Buch hat höchstens 100 App-Tags und 100 App-Genres.
  • Reader: Skripte in präparierten Büchern. Der Reader setzt die Content-Security-Policy jetzt in einen eigenen <head>, der das erste Element jedes Kapitels ist. Bisher ließ sich die Regel umgehen: mit einem <head> nach dem <body>, einem <head> in einem fremden Namespace oder einem Skript vor dem <head>. Zusätzlich entfernt der Reader aus jedem Kapitel Skripte, on*-Attribute, javascript:-Links, <meta http-equiv> (z. B. Refresh), <base>, Frames, Plugins, <?xml-stylesheet?> und SVG-Animationen, die Links ändern.
  • Reader: iframe-Attribut csp. Die Kapitel-iframes tragen dieselbe Regel als Attribut csp. Chromium und die Android-WebView setzen sie unabhängig vom Inhalt des Kapitels durch. docs/SECURITY-READER.md beschreibt jetzt richtig, dass die Sandbox mit allow-same-origin keine Isolation bietet.
  • Reader: Entpacken im Browser begrenzt. Höchstens 100 000 Einträge und 256 MB pro Eintrag. Bei ZIP (EPUB, CBZ) zählt der Reader die entpackten Bytes; eine ZIP-Bombe bricht an der Grenze ab. Bei CBR/CB7/CBT prüft der Reader die angegebene und die tatsächliche Größe.
  • libarchive im Browser aktualisiert: Die WASM-Datei für CBR/CB7/CBT im Browser enthält jetzt libarchive 3.8.10 statt 3.7.2 (behobene Fehler im RAR-, 7z- und TAR-Parser). Sie ist selbst gebaut, ohne OpenSSL; Bauanleitung in packages/libarchive/README.md. Das Paket enthält nur noch diesen Worker. Vorher kopierte der Build zusätzlich den alten, ungenutzten Worker aus npm.
  • Comic-Seiten-Cache begrenzt: Der Cache der skalierten Comic-Seiten in den App-Daten zählt zu keinem Kontingent. Er hat jetzt eine Obergrenze (App-Einstellung comic_cache_mb, Standard 2048). Darüber entfernt der Server die ältesten Seiten. Eine Seite, die nicht verkleinert werden muss, liegt nur noch einmal im Cache statt einmal pro Breitenstufe. GET /comic/{fileId}/pages hat ein Limit (120 Aufrufe pro Minute und Benutzer). Eine nicht lesbare Seitenliste merkt sich der Server 10 Minuten, statt 7z oder unrar bei jedem Aufruf neu zu starten.
  • Grenzen für Metadaten: Beschreibungen haben höchstens 64 KB (längere werden als gekürzter Text gespeichert, gelesen werden höchstens 256 KB). Autoren, Genres, Tags und Schlagwörter sind auf je 100 Einträge begrenzt, Namen auf 255 Zeichen. Das OPF-Paketdokument eines EPUB darf höchstens 4 MB groß sein, container.xml 64 KB, ComicInfo.xml in CBZ 5 MB. Ein präpariertes Buch kann so den PHP-Speicher nicht mehr sprengen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
SignatureuX2qL2mCGvFpoJ4clQoKmSPg83IlkXLFzuNFPm8guROuocxNLZJZJM2qq4+Kd75ksy241uKYvUxdn+v/ICMuZ71x/LedMi56VRRwx6FKth3oVi+6un7UmSE/H/ZtjKuJWfaFoeWQuqteLngUYhWpfBmgegWfwRlkmqCjQRwlbF+vn89pEWcLpGjx9zP1JVv3cI0VKlTop5ekaR6tNwubIt/QqIIzJWbdAc6Z8sjBFRfh+5pwkzJqNRP3/XKydZ9yHg3npztzGJl0fHaDzKI/LfGAcPWgSGdzsYxS/I1pV0rs9rn+lBWgZGfv5mU99iAhgTxZnfevs9gVAJMHeM1z6vv/JslFySJzpliy9tCtd6hW6AulOMHV0NziT3EQkkVweismkqWVI/Nmk9v7q4LP6IYinB6jxNHzHfT+iWJMJ4pZZJObiQ1Ubw3KLd7CPCNJIuwrwmRlF9nAp4ZqjCFdSdJ3S8V+R4DWrlINGoYYNYpD7Z7iSu0HdkfHKgx+2nKZnDPV9DRH0mg1R+LOPYxUDwaTCDnQFsBxnhnkYSo9Mt8D0eBMhmbmOS2B+mgn1yXjgYATD5xWIOXrt9dUpEpto6DwguSSwMx9pd3VLrtp7AqTbbmC9f78ZVdYTWJaZ/xCQn4rCEB/rPm6Et8weBVSLfBuF2YT6fWZ7Kme0RSUZTw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
E-Book Reader 0.11.1
Release Details
UpdatedOct. 13, 2026, 7 a.m.
Changelog

Geändert

  • Unterstützte Nextcloud-Versionen: 31 bis 35 (bisher nur 34). Nextcloud 35 wird damit unterstützt; auf einem auf 35 aktualisierten Server wurde die App vorher wegen max-version deaktiviert, und der Cron meldete u. a. „Could not resolve OCA\EbookReader\BackgroundJob\SyncSharedShelvesJob“. Neuere Server-APIs (IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename, IShare::canSeeContent) werden mit abgesicherten Fallbacks genutzt, damit Nextcloud 31 weiter funktioniert.

Hinzugefügt

  • CI: Psalm läuft gegen die OCP-Stubs aller unterstützten Nextcloud-Versionen (31–35, zusätzlich master als Vorwarnung). Ein Integrationstest installiert die App in ein echtes Nextcloud (31–35, mehrere PHP-Versionen, SQLite), lädt ein Test-EPUB hoch, scannt die Bibliothek, ruft die wichtigsten API-Endpunkte und die Web-Oberfläche auf und führt die Hintergrundjobs der App aus.

Behoben

  • Die Zeile „Weiterlesen“ unter „Alle Bücher“ zeigt jetzt dieselben Bücher wie der Menüpunkt „Weiterlesen“ (Lesestatus „Wird gelesen“, zuletzt gelesene zuerst), wie schon das Dashboard-Widget. Bisher entschied der Lesefortschritt: Bücher mit Status „Wird gelesen“ ohne Fortschritt fehlten, und die Auswahl wich vom Menüpunkt ab.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signatureny5dltYJ7xc07YBjbJoYZoifzeem54IyA28qPGkDGfnQTEp9RWAkRYSXVjSPUhun3yEvokXXLTLlTkeeEq4GMTRyEcjV3500nI600LbExvLIHnAlZNZAQhaMd+ow33ytvR6kDzIgbVe3njc9jEMSDvcFO0++EqDctHv3oX//BhCTvGO4IzzpF4UlyNhZBVRXJJfMCvAjWkfxt4EdhL99p9/Xdmg25kM0AzgFHm3vLzD9vYV+i8+eJjmq1MLhfPo8xUue8qFo0RnKDaTcze+q3eN6C/eALM48q6JqLVUj7TE7y72SqMlI91jdBuket6ehCYkPO7dOnaTLbZcVpdlEDxtVP/xH4q31zDFSf64tcwUGIaPg/QS/EHN7KxNZutPu0gzBvbAdPn6weFouMSh97u6uhWeh3ZnCeWD0tOf0iV8E7vxbtqjE2bV2XOEWUXXKnMp7wxPrjmxXyrmxW2fIAmTMyrZJufbDgb6g5eQnQGDA9ZiQh/XHI7piPoZHJxRqkDkJ6UkCZ9M1A/HdNmV+YrTi+L/Z13oef3yWtNqTz7AKtoDmzDp3U9jy1Ys+q4CLbjN8JB6mt72/5QnVg5WPo00d8kGfG2JdbJ3Ef2YXmKRgrUv1+DqBGuwj7zMqaHnFVKX0U9Q1Y4kB61N3M4RdqgZTxtr8Eimk+NZKqMgJvb0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 34

E-Book Reader 1.0.0
Release Details
UpdatedOct. 29, 2026, 10:31 a.m.
Changelog

Hinzugefügt

  • Longstrip-Comics (Webtoons): Ein als Longstrip markierter Comic wird im Reader nicht geblättert, sondern nahtlos nach unten gescrollt. Alle Seiten liegen ohne Abstand untereinander, Bilder werden in der Nähe des sichtbaren Bereichs geladen und weiter entfernt wieder freigegeben, sodass auch Bände mit Tausenden Seiten flüssig bleiben. Die Position innerhalb einer hohen Seite wird mitgespeichert. Seitliche Tipp-Zonen, Leertaste und Bild-Tasten scrollen eine Bildschirmhöhe, die Pfeiltasten in kleinen Schritten. Zoom: Originalbreite (höchstens Bildschirmbreite) oder Bildschirmbreite.
  • Erkennung beim Indizieren aus ComicInfo.xml (Format „Webtoon“, „Long Strip“ oder „Vertical“, oder ein solcher Tag bzw. ein solches Genre). Die Markierung lässt sich in den Buchdetails, in der Massenbearbeitung und direkt in den Reader-Einstellungen („Darstellung: Seiten / Longstrip“) ändern. Ein von Hand gesetzter Wert übersteht das erneute Indizieren und lässt sich auf den Wert aus der Datei zurücksetzen.
  • Bei Longstrip-Comics trägt das Format-Abzeichen auf der Karte und in der Liste den Zusatz „-LS“ (z. B. „CBZ-LS“). In der Navigation gibt es die Gruppe „Darstellung“ mit dem Filter layout:longstrip.
  • API: Das Buch-JSON hat longstrip und longstripManual. PATCH /books/{fileId}/app-data und PATCH /books/app-data kennen longstrip (true/false) und resetLongstrip. Die Facetten haben layouts mit der Anzahl der Longstrip-Comics. Neue Spalten longstrip, longstrip_file, longstrip_manual (Migration Version1009Date20261025100000). Bereits indizierte Comics erhalten den Wert aus der Datei beim nächsten Scan mit --force.
  • Lesevorschläge: Am Ende eines Buchs zeigt der Reader „Fertig gelesen“ mit „Weiterlesen: <nächster Band>“ und 3–4 ähnlichen, ungelesenen Titeln. Der Block erscheint auch in den Details gelesener Bücher und lässt sich schließen. Ähnlich heißt: mindestens ein gemeinsamer Autor, ein Genre oder ein Tag; Sprache und Comic/E-Book verbessern nur die Reihenfolge. Pro Serie erscheint höchstens ein Titel (ihr erster ungelesener Band), Bände derselben Serie nie. Das Ende ist die letzte Seite bzw. Doppelseite, beim Longstrip und bei gescrolltem Text das untere Ende; die Prozentanzeige zählt dafür nicht. Neuer Endpunkt GET /api/v1/books/{fileId}/suggestions (Capability-Feature suggestions).
  • Fehlt die Bandnummer in den Metadaten, liest der Server sie beim Indizieren aus Titel oder Dateiname (z. B. „Vol. 10“, „v02“, „Band 3“, „#7“, „Tome 4“, „第3巻“, „Saga 10“; Jahreszahlen zählen nicht). Eine Nummer aus den Metadaten oder aus dem Editor hat immer Vorrang. Capability-Feature series-order; Migration Version1010Date20261027100000 (Spalten title_sort und series_index_derived, für vorhandene Bücher gefüllt).
  • Lesen über öffentliche Linkfreigaben: Ein Gast mit Freigabe-Link kann ein Buch jetzt im Browser lesen. Eine Anmeldung ist nicht nötig. Der Reader öffnet sich in der Dateien-Vorschau der Freigabeseite. Er funktioniert für eine geteilte Datei und für Bücher in einem geteilten Ordner. Bei einer Freigabe mit Passwort gibt der Gast zuerst das Passwort auf der Freigabeseite ein.
  • Der Gast hat Inhaltsverzeichnis, Suche, Einstellungen und Vollbild. Markierungen, Lesezeichen und Vorschläge gibt es ohne Konto nicht.
  • Der Browser speichert Position und Einstellungen. Der Server speichert nichts.
  • Bei „Download verbergen“ oder ohne Download-Recht gibt der Server die Datei nicht heraus. Der Reader zeigt dann einen Hinweis.
  • Neue Routen GET /s/{token} (Reader-Seite) und GET /s/{token}/file (Buchdatei, mit HTTP-Range, höchstens 60 Aufrufe pro Minute).
  • Bildfilter für Comics: Die Reader-Einstellungen haben für Comics die Regler „Helligkeit“ und „Kontrast“ (50–200 %) und den Schalter „Graustufen“. Der Filter gilt nur für die Seitenbilder, der Hintergrund bleibt unverändert. Die Werte gelten für alle Comics und auch im Longstrip. „Bild zurücksetzen“ stellt das Originalbild wieder her. Neue Reader-Einstellungen comicBrightness, comicContrast, comicGrayscale.
  • Freigaben eines Buchs ansehen und entfernen: Die Buchdetails haben den neuen Reiter „Freigaben“. Der Reiter zeigt alle Personen, die das Buch lesen können, und die Freigabe, die den Zugriff gibt:
  • Freigaben der App: Buch, Regal, Serie oder Ordner.
  • Nextcloud-Freigaben der Datei oder eines übergeordneten Ordners: Benutzer, Gruppen, öffentliche Links, E-Mail, Teams, Talk. Weiterteilungen durch Empfänger erscheinen mit dem Namen der Person.
  • Der Dialog „Teilen“ eines Buchs zeigt dieselbe Liste. Ein Buch, das über seine Serie geteilt ist, erscheint dort nicht mehr als „Noch mit niemandem geteilt“.
  • Das Kreuz entfernt eine Freigabe. Vorher zeigt der Reiter die Folge, z. B. „Das ganze Regal … wird nicht mehr geteilt“ oder „Die Freigabe endet für alle Dateien im Ordner“.
  • Neue Endpunkte GET /api/v1/books/{fileId}/access und DELETE /api/v1/books/{fileId}/access?shareId=… (nur Nextcloud-Freigaben; Freigaben der App entfernen ihre eigenen Endpunkte). Capability-Feature book-access.

Geändert

  • Bearbeiten-Ansicht: Unter den Metadaten gibt es den Abschnitt „Bibliothek“ mit denselben Feldern wie in den Buchdetails: Bewertung, Lesestatus, Abschluss-Status, Altersfreigabe und Longstrip. Die Werte werden sofort gespeichert; die Buchdatei bleibt unverändert.
  • Unterstützte Nextcloud-Versionen: 33 bis 35. Nextcloud 31 und 32 entfallen. Die Kompatibilitäts-Shims dafür sind entfernt (Compat-Klasse, Fallback für window._nc_fileactions); die Server-APIs IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename und IShare::canSeeContent werden direkt genutzt. CI prüft nur noch 33–35.
  • Bände sortieren natürlich nach Bandnummer: „Band 2“ steht vor „Band 10“ (Sortierung „Serie“, Serienansicht, GET /series, OPDS, „Als Nächstes“). Auch die Sortierung „Titel“ ist natürlich. Bände ohne Nummer stehen immer am Ende.
  • Umbenennen/Einsortieren mit führenden Nullen: {series_index} schreibt die Bandnummer passend zur höchsten Nummer der Serie (01–99, ab 100 Bänden 001); Dezimalzahlen behalten den Bruch (05.5). {series_index:raw} schreibt ohne Nullen, {series_index:N} genau N Stellen. Achtung: Bestehende Muster mit {series_index} erzeugen jetzt „02“ statt „2“.

Behoben

  • Dialog „Teilen“: Die Suche nach der Benutzer-ID fand den Benutzer auf dem Server, die Auswahlliste blendete den Treffer aber aus, wenn der Anzeigename anders lautet. Die Liste zeigt jetzt alle Treffer des Servers.
  • GET /series: coverFileIds und firstFileId ordneten Titel ohne Bandnummer nicht natürlich.
  • Hilfetext für das Dateinamen-Muster nannte den ungültigen Platzhalter {index}; richtig ist {series_index}.
  • Eigene Tags und Genres gehen nicht mehr verloren, wenn ein Buch kurz aus der Bibliothek verschwindet (Papierkorb und Wiederherstellen, Verschieben und Zurückschieben, Freigabe neu, Ordner kurz nicht erreichbar). Die Tags bleiben am gelöschten Eintrag und kommen mit dem Buch zurück. Der tägliche Aufräum-Job löscht sie erst zusammen mit dem Eintrag nach 30 Tagen.

Sicherheit

  • Grenzen für Markierungen und Tags: Ein Benutzer hat höchstens 100 000 Markierungen, Notizen und Lesezeichen über alle Bücher. Pro Buch bleiben es höchstens 5000. Ist die Grenze erreicht, zeigt der Reader eine klare Meldung und sendet keine Anfrage. Ein Buch hat höchstens 100 App-Tags und 100 App-Genres.
  • Reader: Skripte in präparierten Büchern. Der Reader setzt die Content-Security-Policy jetzt in einen eigenen <head>, der das erste Element jedes Kapitels ist. Bisher ließ sich die Regel umgehen: mit einem <head> nach dem <body>, einem <head> in einem fremden Namespace oder einem Skript vor dem <head>. Zusätzlich entfernt der Reader aus jedem Kapitel Skripte, on*-Attribute, javascript:-Links, <meta http-equiv> (z. B. Refresh), <base>, Frames, Plugins, <?xml-stylesheet?> und SVG-Animationen, die Links ändern.
  • Reader: iframe-Attribut csp. Die Kapitel-iframes tragen dieselbe Regel als Attribut csp. Chromium und die Android-WebView setzen sie unabhängig vom Inhalt des Kapitels durch. docs/SECURITY-READER.md beschreibt jetzt richtig, dass die Sandbox mit allow-same-origin keine Isolation bietet.
  • Reader: Entpacken im Browser begrenzt. Höchstens 100 000 Einträge und 256 MB pro Eintrag. Bei ZIP (EPUB, CBZ) zählt der Reader die entpackten Bytes; eine ZIP-Bombe bricht an der Grenze ab. Bei CBR/CB7/CBT prüft der Reader die angegebene und die tatsächliche Größe.
  • libarchive im Browser aktualisiert: Die WASM-Datei für CBR/CB7/CBT im Browser enthält jetzt libarchive 3.8.10 statt 3.7.2 (behobene Fehler im RAR-, 7z- und TAR-Parser). Sie ist selbst gebaut, ohne OpenSSL; Bauanleitung in packages/libarchive/README.md. Das Paket enthält nur noch diesen Worker. Vorher kopierte der Build zusätzlich den alten, ungenutzten Worker aus npm.
  • Comic-Seiten-Cache begrenzt: Der Cache der skalierten Comic-Seiten in den App-Daten zählt zu keinem Kontingent. Er hat jetzt eine Obergrenze (App-Einstellung comic_cache_mb, Standard 2048). Darüber entfernt der Server die ältesten Seiten. Eine Seite, die nicht verkleinert werden muss, liegt nur noch einmal im Cache statt einmal pro Breitenstufe. GET /comic/{fileId}/pages hat ein Limit (120 Aufrufe pro Minute und Benutzer). Eine nicht lesbare Seitenliste merkt sich der Server 10 Minuten, statt 7z oder unrar bei jedem Aufruf neu zu starten.
  • Grenzen für Metadaten: Beschreibungen haben höchstens 64 KB (längere werden als gekürzter Text gespeichert, gelesen werden höchstens 256 KB). Autoren, Genres, Tags und Schlagwörter sind auf je 100 Einträge begrenzt, Namen auf 255 Zeichen. Das OPF-Paketdokument eines EPUB darf höchstens 4 MB groß sein, container.xml 64 KB, ComicInfo.xml in CBZ 5 MB. Ein präpariertes Buch kann so den PHP-Speicher nicht mehr sprengen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
SignatureuX2qL2mCGvFpoJ4clQoKmSPg83IlkXLFzuNFPm8guROuocxNLZJZJM2qq4+Kd75ksy241uKYvUxdn+v/ICMuZ71x/LedMi56VRRwx6FKth3oVi+6un7UmSE/H/ZtjKuJWfaFoeWQuqteLngUYhWpfBmgegWfwRlkmqCjQRwlbF+vn89pEWcLpGjx9zP1JVv3cI0VKlTop5ekaR6tNwubIt/QqIIzJWbdAc6Z8sjBFRfh+5pwkzJqNRP3/XKydZ9yHg3npztzGJl0fHaDzKI/LfGAcPWgSGdzsYxS/I1pV0rs9rn+lBWgZGfv5mU99iAhgTxZnfevs9gVAJMHeM1z6vv/JslFySJzpliy9tCtd6hW6AulOMHV0NziT3EQkkVweismkqWVI/Nmk9v7q4LP6IYinB6jxNHzHfT+iWJMJ4pZZJObiQ1Ubw3KLd7CPCNJIuwrwmRlF9nAp4ZqjCFdSdJ3S8V+R4DWrlINGoYYNYpD7Z7iSu0HdkfHKgx+2nKZnDPV9DRH0mg1R+LOPYxUDwaTCDnQFsBxnhnkYSo9Mt8D0eBMhmbmOS2B+mgn1yXjgYATD5xWIOXrt9dUpEpto6DwguSSwMx9pd3VLrtp7AqTbbmC9f78ZVdYTWJaZ/xCQn4rCEB/rPm6Et8weBVSLfBuF2YT6fWZ7Kme0RSUZTw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
E-Book Reader 0.11.1
Release Details
UpdatedOct. 13, 2026, 7 a.m.
Changelog

Geändert

  • Unterstützte Nextcloud-Versionen: 31 bis 35 (bisher nur 34). Nextcloud 35 wird damit unterstützt; auf einem auf 35 aktualisierten Server wurde die App vorher wegen max-version deaktiviert, und der Cron meldete u. a. „Could not resolve OCA\EbookReader\BackgroundJob\SyncSharedShelvesJob“. Neuere Server-APIs (IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename, IShare::canSeeContent) werden mit abgesicherten Fallbacks genutzt, damit Nextcloud 31 weiter funktioniert.

Hinzugefügt

  • CI: Psalm läuft gegen die OCP-Stubs aller unterstützten Nextcloud-Versionen (31–35, zusätzlich master als Vorwarnung). Ein Integrationstest installiert die App in ein echtes Nextcloud (31–35, mehrere PHP-Versionen, SQLite), lädt ein Test-EPUB hoch, scannt die Bibliothek, ruft die wichtigsten API-Endpunkte und die Web-Oberfläche auf und führt die Hintergrundjobs der App aus.

Behoben

  • Die Zeile „Weiterlesen“ unter „Alle Bücher“ zeigt jetzt dieselben Bücher wie der Menüpunkt „Weiterlesen“ (Lesestatus „Wird gelesen“, zuletzt gelesene zuerst), wie schon das Dashboard-Widget. Bisher entschied der Lesefortschritt: Bücher mit Status „Wird gelesen“ ohne Fortschritt fehlten, und die Auswahl wich vom Menüpunkt ab.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signatureny5dltYJ7xc07YBjbJoYZoifzeem54IyA28qPGkDGfnQTEp9RWAkRYSXVjSPUhun3yEvokXXLTLlTkeeEq4GMTRyEcjV3500nI600LbExvLIHnAlZNZAQhaMd+ow33ytvR6kDzIgbVe3njc9jEMSDvcFO0++EqDctHv3oX//BhCTvGO4IzzpF4UlyNhZBVRXJJfMCvAjWkfxt4EdhL99p9/Xdmg25kM0AzgFHm3vLzD9vYV+i8+eJjmq1MLhfPo8xUue8qFo0RnKDaTcze+q3eN6C/eALM48q6JqLVUj7TE7y72SqMlI91jdBuket6ehCYkPO7dOnaTLbZcVpdlEDxtVP/xH4q31zDFSf64tcwUGIaPg/QS/EHN7KxNZutPu0gzBvbAdPn6weFouMSh97u6uhWeh3ZnCeWD0tOf0iV8E7vxbtqjE2bV2XOEWUXXKnMp7wxPrjmxXyrmxW2fIAmTMyrZJufbDgb6g5eQnQGDA9ZiQh/XHI7piPoZHJxRqkDkJ6UkCZ9M1A/HdNmV+YrTi+L/Z13oef3yWtNqTz7AKtoDmzDp3U9jy1Ys+q4CLbjN8JB6mt72/5QnVg5WPo00d8kGfG2JdbJ3Ef2YXmKRgrUv1+DqBGuwj7zMqaHnFVKX0U9Q1Y4kB61N3M4RdqgZTxtr8Eimk+NZKqMgJvb0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
E-Book Reader 0.11.0
Release Details
UpdatedOct. 13, 2026, 4:34 a.m.
Changelog

Hinzugefügt

  • Neue Sprachen: Die App ist jetzt auch auf Französisch, Arabisch (Hocharabisch), Türkisch und Persisch (fa) verfügbar – zusätzlich zu Deutsch, Englisch, Spanisch und Japanisch, also in denselben Sprachen wie die Android-App. Alle Oberflächentexte sind übersetzt (inklusive der Pluralformen, bei Arabisch mit allen sechs); Name, Kurzbeschreibung und Beschreibung im App Store gibt es zusätzlich auf Französisch, Arabisch, Türkisch und Persisch. Für Arabisch und Persisch wird die Oberfläche von rechts nach links dargestellt; die Karten der Bibliothek verwenden dafür logische statt fester Positionen. Persisch erscheint in Nextclouds Sprachauswahl als „فارسی“ und wird dort wie alle anderen Sprachen ausgewählt.

Geändert

  • Bibliothek: Suche, Sortierung, Filter und die Auswahlleiste bleiben beim Scrollen oben sichtbar. „Auswahl bearbeiten“ ist so auch in langen Listen ohne Zurückscrollen erreichbar.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signaturek4MpZM7m2L9L+kBgLKJninB70LZ4iq7RCZF2mV59eL2Ggh+ABTphvslMjSj3pfUrMiBLQxVe8LJbTy80GDdr+S/6vYpg1jvN0rZ46SDde5BWAFfk2zU75rmmMLV7NoWhCfDf0tANHof8N610bm/WG7Tg1wjhwECTdt6Cf9a/VV8Js3802JrKTXEqgaO/MWwY4GFQWwByjQ8uT/Iq+tpoB9Wer6FjeZg+MC/8ejuatuZa8LOcid4gVEuVhao5n8IreyctprSwQTLAxv0GgagOXzEkvdbP4bQjnJn2jUoAOeqTAniqvpebwqqwkz/QYz9Fvxaz0EyE+yV2e+G3XwAd+hy2U2a/n8qI32y+e/YycdY/m3h/RgsXuepbQwuZFcx9XRmGkVcAWg/byWRmhlFx6LOtRWBycUVLygFKTNoyFtwgL7uxabINbM4E/Gu3FCctA7x3qcvi7WHkhj2GV1tB6aKw1btnXgoMZP7VwqCkf/8hjOFEWYLfVuYXpE9E1QLThgHnDQ+QJGuDzEi+sajDfhO+ihAfPH+yEAK1fpPCxCv/ZRlR/8JxBAdfEGTz5Z+y50qiHjs2uzhlG01mvYrhc2snXU/LuX+vUtNw4zPyONKKgU+5H1esnnYlIxE6WT8R3DZ5lsZz0Jah4LruL65INpJD6yM5Rfd7IrRvBg1NlU0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=34.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0
E-Book Reader 0.10.0
Release Details
UpdatedOct. 11, 2026, 9:28 a.m.
Changelog

Hinzugefügt

  • Navigation neu geordnet: Alle Bücher, Weiterlesen, Ungelesen, Gelesen, Serien, Geteilt, Ordner, danach die Regale. „Serien“ zeigt direkt alle Serien (Klick öffnet die Bände) und ist kein Filter-Eintrag mehr; der Schalter „Serien gruppieren“ entfällt.
  • Ansicht „Geteilt“: alle geteilten Bücher als Raster oder Liste mit Endlos-Scrollen, eingrenzbar auf „Mit mir geteilt“ / „Von mir geteilt“; gefiltert wird in der Datenbank, damit es auch bei sehr großen (Community-)Bibliotheken schnell bleibt. Die Freigaben-Übersicht ist über „Freigaben verwalten“ erreichbar.
  • Ordneransicht: Bücher nach Ordnerstruktur durchsuchen (Pfadleiste, Unterordner mit Anzahl, optional inklusive Unterordnern), Ordner teilen und in der Dateien-App öffnen.
  • Serien teilen: live und nur lesend – später zur Serie hinzukommende Bände werden beim nächsten Abgleich (alle 15 Minuten) automatisch mitgeteilt.
  • Ordner teilen: ein Ordner der Bibliothek wird als eine schreibgeschützte Nextcloud-Freigabe geteilt (nicht eine Freigabe pro Buch).
  • Teilen-Symbol auf Büchern, Serien und Ordnern, die du teilst oder die mit dir geteilt wurden (unterschiedliche Symbole und Tooltips).
  • Einstellung „Begleitdateien speichern“: wie bisher als versteckte Datei neben dem Buch (.<Buch>.opf) oder gesammelt in einem versteckten .meta-Ordner pro Verzeichnis (.meta/<Buch>.opf) – übersichtlicher z. B. im Windows-Explorer über den Sync-Client. Beim Umstellen verschiebt ein Hintergrundjob die vorhandenen eigenen Begleitdateien; gelesen werden immer beide Orte, leere .meta-Ordner werden entfernt.
  • API: GET /books kennt shared=incoming|outgoing|any, folder und folderRecursive; das Buch-JSON hat sharedOut; neue Endpunkte GET /folders, POST/DELETE /series/shares, POST/DELETE /folders/shares; GET /series liefert sharedWith/shared; GET /shares listet Serien- und Ordnerfreigaben (type: series|folder); Einstellung sidecarLocation; Capabilities melden features (shared-filter, series-shares, folder-shares, folders, sidecar-meta). Neue Tabellen ebookreader_series_shares, ebookreader_folder_shares und Spalte books.shared_owner (Migration Version1008Date20261008100000).

Geändert

  • Geteilte Ordner erscheinen automatisch in der Bibliothek: Bücher in Ordnern, die andere Benutzer geteilt haben (über die App oder ganz normal in der Dateien-App), werden indexiert – egal, wo die Freigabe eingebunden ist, auch außerhalb der Bibliotheksordner. Liegt die Freigabe in einem Bibliotheksordner, gibt es keine Duplikate. Lesestatus, Fortschritt und Markierungen bleiben pro Benutzer; Dateien des Eigentümers werden weiterhin nie verändert.
  • Release-Workflow: Die Veröffentlichung im Nextcloud App Store läuft nur noch, wenn die Repository-Variable APPSTORE_PUBLISH auf true steht. Solange die App dort nicht registriert ist, schlägt das Release dadurch nicht mehr fehl; das GitHub-Release wird wie bisher erstellt.

Behoben

  • Beim Kopieren eines Buchs in der Dateien-App (oder per WebDAV COPY) wird die Begleitdatei jetzt mitkopiert. Verschieben, Umbenennen, Löschen, Organisieren und Konvertieren behandeln beide Ablageorte der Begleitdateien.
  • Delta-Sync (GET /sync): Änderungen an Freigaben (Buch, Regal, Serie oder Ordner geteilt bzw. nicht mehr geteilt, Freigabe in der Dateien-App gelöscht, Empfänger gelöscht) setzen jetzt updated_at der betroffenen Bücher des Eigentümers neu. Die Android-App erhält so den neuen Wert von sharedOut im nächsten Abgleich und braucht dafür keinen vollständigen Neuabgleich mehr.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
SignaturehNTJlLB34cYgqZ0WllyzyiADlLHFTC6BypZkxazr9uwwhp5DqK4o/EzWnnNSMzEzNLJmBVV7S+8/gKVFGbCILv++N44hDAmlinXLHdCUKSf+Ko1N0C4BLdP3aoPqooR3vgGKeHCFuckoQGGPATOJP20SQYGk3ibqaUY5DGckW33oTltW7Z4QcKmOebC8mKXhw/VULw3Kyr/xG7Idqe2bRCWHX/0WI7FNvcnasvw6XeTNmowOc/Z37oTKbCFOSUw/EqUIFYAOeqhnI43P3AjpREJhzl+wblKYK0rtX/TwLannaQToMPaWzJWh1Xnh5nPPHyUlyoMiLWDbjKZy9q75tYM4lAtUEvr+Js+dnj7nC/IVLW+LRxat9Q1POnL7hCMuyaA25jS5zTZSPtLwURh4+vAJ3hmsDaqU12zJorNjbFPjjlgo3X3OZRPMTnyI2woxkSQHwoVg6ETolkFY1jQiV0lTW4kXDsThbPnrYXB5gwHvm6PKDtT9QN9PhGidNFlGJhgR0kznbRf2Zi88t6eYHAcFPc/0+nNbj+q4GyCveqECvl9low3/NXZA0bnuDHHRvbyjHL/Au2+sv61FuYHu/ZdBv1l8SaUDC89VojffQoGyVO33TquWMgSx7yNq/W3thEP1+of7wE+GgDFKoRLYrQcuJ9P+WJ+8p5kAfae9bU4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=34.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 33

E-Book Reader 1.0.0
Release Details
UpdatedOct. 29, 2026, 10:31 a.m.
Changelog

Hinzugefügt

  • Longstrip-Comics (Webtoons): Ein als Longstrip markierter Comic wird im Reader nicht geblättert, sondern nahtlos nach unten gescrollt. Alle Seiten liegen ohne Abstand untereinander, Bilder werden in der Nähe des sichtbaren Bereichs geladen und weiter entfernt wieder freigegeben, sodass auch Bände mit Tausenden Seiten flüssig bleiben. Die Position innerhalb einer hohen Seite wird mitgespeichert. Seitliche Tipp-Zonen, Leertaste und Bild-Tasten scrollen eine Bildschirmhöhe, die Pfeiltasten in kleinen Schritten. Zoom: Originalbreite (höchstens Bildschirmbreite) oder Bildschirmbreite.
  • Erkennung beim Indizieren aus ComicInfo.xml (Format „Webtoon“, „Long Strip“ oder „Vertical“, oder ein solcher Tag bzw. ein solches Genre). Die Markierung lässt sich in den Buchdetails, in der Massenbearbeitung und direkt in den Reader-Einstellungen („Darstellung: Seiten / Longstrip“) ändern. Ein von Hand gesetzter Wert übersteht das erneute Indizieren und lässt sich auf den Wert aus der Datei zurücksetzen.
  • Bei Longstrip-Comics trägt das Format-Abzeichen auf der Karte und in der Liste den Zusatz „-LS“ (z. B. „CBZ-LS“). In der Navigation gibt es die Gruppe „Darstellung“ mit dem Filter layout:longstrip.
  • API: Das Buch-JSON hat longstrip und longstripManual. PATCH /books/{fileId}/app-data und PATCH /books/app-data kennen longstrip (true/false) und resetLongstrip. Die Facetten haben layouts mit der Anzahl der Longstrip-Comics. Neue Spalten longstrip, longstrip_file, longstrip_manual (Migration Version1009Date20261025100000). Bereits indizierte Comics erhalten den Wert aus der Datei beim nächsten Scan mit --force.
  • Lesevorschläge: Am Ende eines Buchs zeigt der Reader „Fertig gelesen“ mit „Weiterlesen: <nächster Band>“ und 3–4 ähnlichen, ungelesenen Titeln. Der Block erscheint auch in den Details gelesener Bücher und lässt sich schließen. Ähnlich heißt: mindestens ein gemeinsamer Autor, ein Genre oder ein Tag; Sprache und Comic/E-Book verbessern nur die Reihenfolge. Pro Serie erscheint höchstens ein Titel (ihr erster ungelesener Band), Bände derselben Serie nie. Das Ende ist die letzte Seite bzw. Doppelseite, beim Longstrip und bei gescrolltem Text das untere Ende; die Prozentanzeige zählt dafür nicht. Neuer Endpunkt GET /api/v1/books/{fileId}/suggestions (Capability-Feature suggestions).
  • Fehlt die Bandnummer in den Metadaten, liest der Server sie beim Indizieren aus Titel oder Dateiname (z. B. „Vol. 10“, „v02“, „Band 3“, „#7“, „Tome 4“, „第3巻“, „Saga 10“; Jahreszahlen zählen nicht). Eine Nummer aus den Metadaten oder aus dem Editor hat immer Vorrang. Capability-Feature series-order; Migration Version1010Date20261027100000 (Spalten title_sort und series_index_derived, für vorhandene Bücher gefüllt).
  • Lesen über öffentliche Linkfreigaben: Ein Gast mit Freigabe-Link kann ein Buch jetzt im Browser lesen. Eine Anmeldung ist nicht nötig. Der Reader öffnet sich in der Dateien-Vorschau der Freigabeseite. Er funktioniert für eine geteilte Datei und für Bücher in einem geteilten Ordner. Bei einer Freigabe mit Passwort gibt der Gast zuerst das Passwort auf der Freigabeseite ein.
  • Der Gast hat Inhaltsverzeichnis, Suche, Einstellungen und Vollbild. Markierungen, Lesezeichen und Vorschläge gibt es ohne Konto nicht.
  • Der Browser speichert Position und Einstellungen. Der Server speichert nichts.
  • Bei „Download verbergen“ oder ohne Download-Recht gibt der Server die Datei nicht heraus. Der Reader zeigt dann einen Hinweis.
  • Neue Routen GET /s/{token} (Reader-Seite) und GET /s/{token}/file (Buchdatei, mit HTTP-Range, höchstens 60 Aufrufe pro Minute).
  • Bildfilter für Comics: Die Reader-Einstellungen haben für Comics die Regler „Helligkeit“ und „Kontrast“ (50–200 %) und den Schalter „Graustufen“. Der Filter gilt nur für die Seitenbilder, der Hintergrund bleibt unverändert. Die Werte gelten für alle Comics und auch im Longstrip. „Bild zurücksetzen“ stellt das Originalbild wieder her. Neue Reader-Einstellungen comicBrightness, comicContrast, comicGrayscale.
  • Freigaben eines Buchs ansehen und entfernen: Die Buchdetails haben den neuen Reiter „Freigaben“. Der Reiter zeigt alle Personen, die das Buch lesen können, und die Freigabe, die den Zugriff gibt:
  • Freigaben der App: Buch, Regal, Serie oder Ordner.
  • Nextcloud-Freigaben der Datei oder eines übergeordneten Ordners: Benutzer, Gruppen, öffentliche Links, E-Mail, Teams, Talk. Weiterteilungen durch Empfänger erscheinen mit dem Namen der Person.
  • Der Dialog „Teilen“ eines Buchs zeigt dieselbe Liste. Ein Buch, das über seine Serie geteilt ist, erscheint dort nicht mehr als „Noch mit niemandem geteilt“.
  • Das Kreuz entfernt eine Freigabe. Vorher zeigt der Reiter die Folge, z. B. „Das ganze Regal … wird nicht mehr geteilt“ oder „Die Freigabe endet für alle Dateien im Ordner“.
  • Neue Endpunkte GET /api/v1/books/{fileId}/access und DELETE /api/v1/books/{fileId}/access?shareId=… (nur Nextcloud-Freigaben; Freigaben der App entfernen ihre eigenen Endpunkte). Capability-Feature book-access.

Geändert

  • Bearbeiten-Ansicht: Unter den Metadaten gibt es den Abschnitt „Bibliothek“ mit denselben Feldern wie in den Buchdetails: Bewertung, Lesestatus, Abschluss-Status, Altersfreigabe und Longstrip. Die Werte werden sofort gespeichert; die Buchdatei bleibt unverändert.
  • Unterstützte Nextcloud-Versionen: 33 bis 35. Nextcloud 31 und 32 entfallen. Die Kompatibilitäts-Shims dafür sind entfernt (Compat-Klasse, Fallback für window._nc_fileactions); die Server-APIs IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename und IShare::canSeeContent werden direkt genutzt. CI prüft nur noch 33–35.
  • Bände sortieren natürlich nach Bandnummer: „Band 2“ steht vor „Band 10“ (Sortierung „Serie“, Serienansicht, GET /series, OPDS, „Als Nächstes“). Auch die Sortierung „Titel“ ist natürlich. Bände ohne Nummer stehen immer am Ende.
  • Umbenennen/Einsortieren mit führenden Nullen: {series_index} schreibt die Bandnummer passend zur höchsten Nummer der Serie (01–99, ab 100 Bänden 001); Dezimalzahlen behalten den Bruch (05.5). {series_index:raw} schreibt ohne Nullen, {series_index:N} genau N Stellen. Achtung: Bestehende Muster mit {series_index} erzeugen jetzt „02“ statt „2“.

Behoben

  • Dialog „Teilen“: Die Suche nach der Benutzer-ID fand den Benutzer auf dem Server, die Auswahlliste blendete den Treffer aber aus, wenn der Anzeigename anders lautet. Die Liste zeigt jetzt alle Treffer des Servers.
  • GET /series: coverFileIds und firstFileId ordneten Titel ohne Bandnummer nicht natürlich.
  • Hilfetext für das Dateinamen-Muster nannte den ungültigen Platzhalter {index}; richtig ist {series_index}.
  • Eigene Tags und Genres gehen nicht mehr verloren, wenn ein Buch kurz aus der Bibliothek verschwindet (Papierkorb und Wiederherstellen, Verschieben und Zurückschieben, Freigabe neu, Ordner kurz nicht erreichbar). Die Tags bleiben am gelöschten Eintrag und kommen mit dem Buch zurück. Der tägliche Aufräum-Job löscht sie erst zusammen mit dem Eintrag nach 30 Tagen.

Sicherheit

  • Grenzen für Markierungen und Tags: Ein Benutzer hat höchstens 100 000 Markierungen, Notizen und Lesezeichen über alle Bücher. Pro Buch bleiben es höchstens 5000. Ist die Grenze erreicht, zeigt der Reader eine klare Meldung und sendet keine Anfrage. Ein Buch hat höchstens 100 App-Tags und 100 App-Genres.
  • Reader: Skripte in präparierten Büchern. Der Reader setzt die Content-Security-Policy jetzt in einen eigenen <head>, der das erste Element jedes Kapitels ist. Bisher ließ sich die Regel umgehen: mit einem <head> nach dem <body>, einem <head> in einem fremden Namespace oder einem Skript vor dem <head>. Zusätzlich entfernt der Reader aus jedem Kapitel Skripte, on*-Attribute, javascript:-Links, <meta http-equiv> (z. B. Refresh), <base>, Frames, Plugins, <?xml-stylesheet?> und SVG-Animationen, die Links ändern.
  • Reader: iframe-Attribut csp. Die Kapitel-iframes tragen dieselbe Regel als Attribut csp. Chromium und die Android-WebView setzen sie unabhängig vom Inhalt des Kapitels durch. docs/SECURITY-READER.md beschreibt jetzt richtig, dass die Sandbox mit allow-same-origin keine Isolation bietet.
  • Reader: Entpacken im Browser begrenzt. Höchstens 100 000 Einträge und 256 MB pro Eintrag. Bei ZIP (EPUB, CBZ) zählt der Reader die entpackten Bytes; eine ZIP-Bombe bricht an der Grenze ab. Bei CBR/CB7/CBT prüft der Reader die angegebene und die tatsächliche Größe.
  • libarchive im Browser aktualisiert: Die WASM-Datei für CBR/CB7/CBT im Browser enthält jetzt libarchive 3.8.10 statt 3.7.2 (behobene Fehler im RAR-, 7z- und TAR-Parser). Sie ist selbst gebaut, ohne OpenSSL; Bauanleitung in packages/libarchive/README.md. Das Paket enthält nur noch diesen Worker. Vorher kopierte der Build zusätzlich den alten, ungenutzten Worker aus npm.
  • Comic-Seiten-Cache begrenzt: Der Cache der skalierten Comic-Seiten in den App-Daten zählt zu keinem Kontingent. Er hat jetzt eine Obergrenze (App-Einstellung comic_cache_mb, Standard 2048). Darüber entfernt der Server die ältesten Seiten. Eine Seite, die nicht verkleinert werden muss, liegt nur noch einmal im Cache statt einmal pro Breitenstufe. GET /comic/{fileId}/pages hat ein Limit (120 Aufrufe pro Minute und Benutzer). Eine nicht lesbare Seitenliste merkt sich der Server 10 Minuten, statt 7z oder unrar bei jedem Aufruf neu zu starten.
  • Grenzen für Metadaten: Beschreibungen haben höchstens 64 KB (längere werden als gekürzter Text gespeichert, gelesen werden höchstens 256 KB). Autoren, Genres, Tags und Schlagwörter sind auf je 100 Einträge begrenzt, Namen auf 255 Zeichen. Das OPF-Paketdokument eines EPUB darf höchstens 4 MB groß sein, container.xml 64 KB, ComicInfo.xml in CBZ 5 MB. Ein präpariertes Buch kann so den PHP-Speicher nicht mehr sprengen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
SignatureuX2qL2mCGvFpoJ4clQoKmSPg83IlkXLFzuNFPm8guROuocxNLZJZJM2qq4+Kd75ksy241uKYvUxdn+v/ICMuZ71x/LedMi56VRRwx6FKth3oVi+6un7UmSE/H/ZtjKuJWfaFoeWQuqteLngUYhWpfBmgegWfwRlkmqCjQRwlbF+vn89pEWcLpGjx9zP1JVv3cI0VKlTop5ekaR6tNwubIt/QqIIzJWbdAc6Z8sjBFRfh+5pwkzJqNRP3/XKydZ9yHg3npztzGJl0fHaDzKI/LfGAcPWgSGdzsYxS/I1pV0rs9rn+lBWgZGfv5mU99iAhgTxZnfevs9gVAJMHeM1z6vv/JslFySJzpliy9tCtd6hW6AulOMHV0NziT3EQkkVweismkqWVI/Nmk9v7q4LP6IYinB6jxNHzHfT+iWJMJ4pZZJObiQ1Ubw3KLd7CPCNJIuwrwmRlF9nAp4ZqjCFdSdJ3S8V+R4DWrlINGoYYNYpD7Z7iSu0HdkfHKgx+2nKZnDPV9DRH0mg1R+LOPYxUDwaTCDnQFsBxnhnkYSo9Mt8D0eBMhmbmOS2B+mgn1yXjgYATD5xWIOXrt9dUpEpto6DwguSSwMx9pd3VLrtp7AqTbbmC9f78ZVdYTWJaZ/xCQn4rCEB/rPm6Et8weBVSLfBuF2YT6fWZ7Kme0RSUZTw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
E-Book Reader 0.11.1
Release Details
UpdatedOct. 13, 2026, 7 a.m.
Changelog

Geändert

  • Unterstützte Nextcloud-Versionen: 31 bis 35 (bisher nur 34). Nextcloud 35 wird damit unterstützt; auf einem auf 35 aktualisierten Server wurde die App vorher wegen max-version deaktiviert, und der Cron meldete u. a. „Could not resolve OCA\EbookReader\BackgroundJob\SyncSharedShelvesJob“. Neuere Server-APIs (IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename, IShare::canSeeContent) werden mit abgesicherten Fallbacks genutzt, damit Nextcloud 31 weiter funktioniert.

Hinzugefügt

  • CI: Psalm läuft gegen die OCP-Stubs aller unterstützten Nextcloud-Versionen (31–35, zusätzlich master als Vorwarnung). Ein Integrationstest installiert die App in ein echtes Nextcloud (31–35, mehrere PHP-Versionen, SQLite), lädt ein Test-EPUB hoch, scannt die Bibliothek, ruft die wichtigsten API-Endpunkte und die Web-Oberfläche auf und führt die Hintergrundjobs der App aus.

Behoben

  • Die Zeile „Weiterlesen“ unter „Alle Bücher“ zeigt jetzt dieselben Bücher wie der Menüpunkt „Weiterlesen“ (Lesestatus „Wird gelesen“, zuletzt gelesene zuerst), wie schon das Dashboard-Widget. Bisher entschied der Lesefortschritt: Bücher mit Status „Wird gelesen“ ohne Fortschritt fehlten, und die Auswahl wich vom Menüpunkt ab.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signatureny5dltYJ7xc07YBjbJoYZoifzeem54IyA28qPGkDGfnQTEp9RWAkRYSXVjSPUhun3yEvokXXLTLlTkeeEq4GMTRyEcjV3500nI600LbExvLIHnAlZNZAQhaMd+ow33ytvR6kDzIgbVe3njc9jEMSDvcFO0++EqDctHv3oX//BhCTvGO4IzzpF4UlyNhZBVRXJJfMCvAjWkfxt4EdhL99p9/Xdmg25kM0AzgFHm3vLzD9vYV+i8+eJjmq1MLhfPo8xUue8qFo0RnKDaTcze+q3eN6C/eALM48q6JqLVUj7TE7y72SqMlI91jdBuket6ehCYkPO7dOnaTLbZcVpdlEDxtVP/xH4q31zDFSf64tcwUGIaPg/QS/EHN7KxNZutPu0gzBvbAdPn6weFouMSh97u6uhWeh3ZnCeWD0tOf0iV8E7vxbtqjE2bV2XOEWUXXKnMp7wxPrjmxXyrmxW2fIAmTMyrZJufbDgb6g5eQnQGDA9ZiQh/XHI7piPoZHJxRqkDkJ6UkCZ9M1A/HdNmV+YrTi+L/Z13oef3yWtNqTz7AKtoDmzDp3U9jy1Ys+q4CLbjN8JB6mt72/5QnVg5WPo00d8kGfG2JdbJ3Ef2YXmKRgrUv1+DqBGuwj7zMqaHnFVKX0U9Q1Y4kB61N3M4RdqgZTxtr8Eimk+NZKqMgJvb0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 32

E-Book Reader 0.11.1
Release Details
UpdatedOct. 13, 2026, 7 a.m.
Changelog

Geändert

  • Unterstützte Nextcloud-Versionen: 31 bis 35 (bisher nur 34). Nextcloud 35 wird damit unterstützt; auf einem auf 35 aktualisierten Server wurde die App vorher wegen max-version deaktiviert, und der Cron meldete u. a. „Could not resolve OCA\EbookReader\BackgroundJob\SyncSharedShelvesJob“. Neuere Server-APIs (IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename, IShare::canSeeContent) werden mit abgesicherten Fallbacks genutzt, damit Nextcloud 31 weiter funktioniert.

Hinzugefügt

  • CI: Psalm läuft gegen die OCP-Stubs aller unterstützten Nextcloud-Versionen (31–35, zusätzlich master als Vorwarnung). Ein Integrationstest installiert die App in ein echtes Nextcloud (31–35, mehrere PHP-Versionen, SQLite), lädt ein Test-EPUB hoch, scannt die Bibliothek, ruft die wichtigsten API-Endpunkte und die Web-Oberfläche auf und führt die Hintergrundjobs der App aus.

Behoben

  • Die Zeile „Weiterlesen“ unter „Alle Bücher“ zeigt jetzt dieselben Bücher wie der Menüpunkt „Weiterlesen“ (Lesestatus „Wird gelesen“, zuletzt gelesene zuerst), wie schon das Dashboard-Widget. Bisher entschied der Lesefortschritt: Bücher mit Status „Wird gelesen“ ohne Fortschritt fehlten, und die Auswahl wich vom Menüpunkt ab.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signatureny5dltYJ7xc07YBjbJoYZoifzeem54IyA28qPGkDGfnQTEp9RWAkRYSXVjSPUhun3yEvokXXLTLlTkeeEq4GMTRyEcjV3500nI600LbExvLIHnAlZNZAQhaMd+ow33ytvR6kDzIgbVe3njc9jEMSDvcFO0++EqDctHv3oX//BhCTvGO4IzzpF4UlyNhZBVRXJJfMCvAjWkfxt4EdhL99p9/Xdmg25kM0AzgFHm3vLzD9vYV+i8+eJjmq1MLhfPo8xUue8qFo0RnKDaTcze+q3eN6C/eALM48q6JqLVUj7TE7y72SqMlI91jdBuket6ehCYkPO7dOnaTLbZcVpdlEDxtVP/xH4q31zDFSf64tcwUGIaPg/QS/EHN7KxNZutPu0gzBvbAdPn6weFouMSh97u6uhWeh3ZnCeWD0tOf0iV8E7vxbtqjE2bV2XOEWUXXKnMp7wxPrjmxXyrmxW2fIAmTMyrZJufbDgb6g5eQnQGDA9ZiQh/XHI7piPoZHJxRqkDkJ6UkCZ9M1A/HdNmV+YrTi+L/Z13oef3yWtNqTz7AKtoDmzDp3U9jy1Ys+q4CLbjN8JB6mt72/5QnVg5WPo00d8kGfG2JdbJ3Ef2YXmKRgrUv1+DqBGuwj7zMqaHnFVKX0U9Q1Y4kB61N3M4RdqgZTxtr8Eimk+NZKqMgJvb0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 31

E-Book Reader 0.11.1
Release Details
UpdatedOct. 13, 2026, 7 a.m.
Changelog

Geändert

  • Unterstützte Nextcloud-Versionen: 31 bis 35 (bisher nur 34). Nextcloud 35 wird damit unterstützt; auf einem auf 35 aktualisierten Server wurde die App vorher wegen max-version deaktiviert, und der Cron meldete u. a. „Could not resolve OCA\EbookReader\BackgroundJob\SyncSharedShelvesJob“. Neuere Server-APIs (IAppManager::isEnabledForAnyone, IFilenameValidator::sanitizeFilename, IShare::canSeeContent) werden mit abgesicherten Fallbacks genutzt, damit Nextcloud 31 weiter funktioniert.

Hinzugefügt

  • CI: Psalm läuft gegen die OCP-Stubs aller unterstützten Nextcloud-Versionen (31–35, zusätzlich master als Vorwarnung). Ein Integrationstest installiert die App in ein echtes Nextcloud (31–35, mehrere PHP-Versionen, SQLite), lädt ein Test-EPUB hoch, scannt die Bibliothek, ruft die wichtigsten API-Endpunkte und die Web-Oberfläche auf und führt die Hintergrundjobs der App aus.

Behoben

  • Die Zeile „Weiterlesen“ unter „Alle Bücher“ zeigt jetzt dieselben Bücher wie der Menüpunkt „Weiterlesen“ (Lesestatus „Wird gelesen“, zuletzt gelesene zuerst), wie schon das Dashboard-Widget. Bisher entschied der Lesefortschritt: Bücher mit Status „Wird gelesen“ ohne Fortschritt fehlten, und die Auswahl wich vom Menüpunkt ab.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEBjCCAu4CAhRWMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYxMDA5MTE1NDUyWhcNMzcwMTE0MTE1NDUyWjAWMRQwEgYD
VQQDDAtlYm9va3JlYWRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMxNdSo0brvupEie/LJaZIYKleIouWcBb8zcarRaK9qHX8ly8RHGYfeK8pLDgfAS
Y4nicPL1GOhoOc2sjMjmmfogrFRjYqx9OVaTvpn1CypttR+sHC1J3q3g2J9Hxc84
k042h2JyP4y6sS90ySs2aj3bvbiqDEgXderoc4KZS+CGJQWJqsa+dX2pik/075O5
/fqKLnGzCmC5Zmt1DMIdO3lKcdtukLQtONDeBsUcDTBuoaQ6qC6kpiwTnKlObnx5
ph/h35r8ZeCCoEOdo1i57i5am1vjaoR6DRHyeS9InC9kzaRFKMIx4sva52RF80Ap
KNuRdhkBgX7I7J72aok09lyMeXYGe0+WgM3/Tb8oFXqdxF6FKJLhB2V+rUsd07DY
MzwW8v/+5H5wsrJmhAdkdG/ok7ozEj5jsPTvsJDDwNFWVssfHEK+71DsipkU2BfU
/rAg3HIFj4e60lPBp+c/qn5gGqwc0bDTbjEA4wsad/5cDiZL2oPpJ6tDsKKTICiL
XXMuNysapG2VdMXbSvjb9F/2Ifcq6VryLzH24ocXyiki45AHoQV4i0IzxYMQx3tI
rpRAyrRf3uz6uavF5yGhgestYJP3d+fOi3AmeprH6xR1wx28cBxQusmLKwTiNouh
stpYNkbEQ2rf9nKXP0UtOOx0e+5xwMnN3Tpa0v6pS8ORAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBADz1toNHU4Pd6RMBCu2uoLCMjH/EHbB3A/fwi0V+234A/vd3uiz/
JPso2Fhl0OUod2lCOXuV/IoaDsXRAzrbgO6ILtwViySxfZxQ9BIQ/jDCmdyknufB
RXc9h+QZgtK+MWER1Fl/s6HikUzdbZnRbNV6e/yroOcvjVKilqj7m9nP4lI5JwQG
xNSQuRom5bxuWISjakX4av66RY/+kj8+xTprbRpuSETA8HenmlYnZ8wqcg69QpwY
bKcJ+nFytI2wx2lHxQddgqzMd67lB1wWy1J8Sm/FHgYDd/WS9V3wjuF/nybGgIgC
tMNfEF4YX4lFb0iA5tNjmmEUkHfAnoW0Wn0=
-----END CERTIFICATE-----
Signatureny5dltYJ7xc07YBjbJoYZoifzeem54IyA28qPGkDGfnQTEp9RWAkRYSXVjSPUhun3yEvokXXLTLlTkeeEq4GMTRyEcjV3500nI600LbExvLIHnAlZNZAQhaMd+ow33ytvR6kDzIgbVe3njc9jEMSDvcFO0++EqDctHv3oX//BhCTvGO4IzzpF4UlyNhZBVRXJJfMCvAjWkfxt4EdhL99p9/Xdmg25kM0AzgFHm3vLzD9vYV+i8+eJjmq1MLhfPo8xUue8qFo0RnKDaTcze+q3eN6C/eALM48q6JqLVUj7TE7y72SqMlI91jdBuket6ehCYkPO7dOnaTLbZcVpdlEDxtVP/xH4q31zDFSf64tcwUGIaPg/QS/EHN7KxNZutPu0gzBvbAdPn6weFouMSh97u6uhWeh3ZnCeWD0tOf0iV8E7vxbtqjE2bV2XOEWUXXKnMp7wxPrjmxXyrmxW2fIAmTMyrZJufbDgb6g5eQnQGDA9ZiQh/XHI7piPoZHJxRqkDkJ6UkCZ9M1A/HdNmV+YrTi+L/Z13oef3yWtNqTz7AKtoDmzDp3U9jy1Ys+q4CLbjN8JB6mt72/5QnVg5WPo00d8kGfG2JdbJ3Ef2YXmKRgrUv1+DqBGuwj7zMqaHnFVKX0U9Q1Y4kB61N3M4RdqgZTxtr8Eimk+NZKqMgJvb0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0