feat(archive): export a studyset as an archive to import again

Export content now asks what to export as: an archive first, a .zip
the Library's Import takes back as the person's own, for a backup or a
move to another instance; Markdown, to read elsewhere, below it. The
archive holds the studyset with everything inside it but what waits in
Recently deleted, laid out as the instance writes a release, unlinked
from Explore; dictionary cards go whole, with the person's edits. Every
file its content names is downloaded first, and an archive missing one
is not kept: the person is told how many and to try again online.

With my progress (ticked at first) adds the reviews, the answers
to learning paths' steps, the pages read in PDFs, and what a release
leaves out as only its author's: the exam prepared for, a card's report,
a PDF's reading deadline. Stars, archived studysets and the tags'
colours come along either way.

The import of v0.17.0 refuses a file it doesn't know, so what it doesn't
read goes into the files it reads, as keys it skips, and the format
stays 1: archive.json's tags, a studyset.json's archived and starred, a
step's answers, a PDF's readings. This import reads them; an archive it
can't read all of still writes nothing, its tags included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-15 18:57:16 +02:00
commit 6f3ba7b421
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -302,6 +302,16 @@
"exportedZip": "{count, plural, =1{Als Markdown mit 1 Datei exportiert (.zip).} other{Als Markdown mit {count} Dateien exportiert (.zip).}}",
"exportMissingFiles": "{count, plural, =1{1 Datei war nicht auf diesem Gerät und fehlt.} other{{count} Dateien waren nicht auf diesem Gerät und fehlen.}}",
"exportFailed": "Das Lernset konnte nicht exportiert werden.",
"exportTitle": "Exportieren",
"exportArchive": "Archiv",
"exportArchiveSubtitle": "Ein .zip, das sich wieder importieren lässt: eine Sicherung oder ein Umzug auf eine andere Instanz.",
"exportMarkdown": "Markdown",
"exportMarkdownSubtitle": "Zum Lesen anderswo. Es lässt sich nicht wieder importieren.",
"exportWithProgress": "Mit meinem Fortschritt",
"exportWithProgressSubtitle": "Wiederholungen, Antworten, gelesene Seiten, die Prüfung, auf die du dich vorbereitest, deine Meldungen und Lesefristen",
"exportConfirm": "Exportieren",
"exportedArchive": "Als Archiv exportiert (.zip).",
"exportArchiveFilesMissing": "{count, plural, =1{1 Datei ist nicht auf diesem Gerät und ließ sich nicht herunterladen.} other{{count} Dateien sind nicht auf diesem Gerät und ließen sich nicht herunterladen.}} Verbinde dich mit dem Internet und versuche es noch einmal.",
"exportQuestion": "F",
"exportAnswer": "A",
"exportHint": "Hinweis",