feat(explore): the Explore tab, and adding a published studyset as a copy

Explore lists what is published on the instance as the old app's feed:
search over titles and authors, filters for languages and kinds of
content, the newest release first, the next page only when asked for;
each studyset opens a summary with all of it. Anonymous people explore
too.

Add to library makes a copy in the app, as an import: through the
person's own repositories, the files among their own files, the tags by
name among their own tags, everything read first, so a release in a
schema this app doesn't know is refused whole. The server never writes
into a learner's space. Every item of a copy names where it came from
(publication, item, release: card schema 9, note 3, step 3, path 2,
PDF 2, studyset 5), merged per side like the rest, for later releases to
be taken from there.

The Publish sheet takes a studyset off Explore again, after asking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-09 23:15:28 +02:00
commit f4af6cfd3a
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -5186,4 +5186,133 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get publishLocationCopied => 'Adresse kopiert.';
@override
String get publishedField => 'Veröffentlichung';
@override
String publishedVersion(int version) {
return 'v$version';
}
@override
String get exploreSearch => 'Titel und Namen durchsuchen';
@override
String get exploreLanguages => 'Sprachen';
@override
String get exploreAnyLanguage => 'Alle';
@override
String exploreLanguagePair(String front, String back) {
return '$front → $back';
}
@override
String get exploreKinds => 'Inhalt';
@override
String exploreKindsChosen(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Arten Inhalt',
one: '1 Art Inhalt',
);
return '$_temp0';
}
@override
String get exploreKindCards => 'Karteikarten';
@override
String get exploreKindNotes => 'Notizen';
@override
String get exploreKindPaths => 'Lernpfade';
@override
String get exploreKindPdfs => 'PDFs';
@override
String get exploreKindsIntro => 'Nur Lernsets, die all das enthalten.';
@override
String get exploreClearFilters => 'Filter zurücksetzen';
@override
String get exploreNothingMatches => 'Nichts Veröffentlichtes passt dazu.';
@override
String exploreBy(String author) {
return 'von $author';
}
@override
String exploreRelease(int version, String date) {
return 'v$version · $date';
}
@override
String exploreLatestRelease(int version, String date) {
return 'Neueste Veröffentlichung: v$version · $date';
}
@override
String get exploreAddToLibrary => 'Zur Bibliothek hinzufügen';
@override
String get exploreInLibrary => 'In deiner Bibliothek';
@override
String explorePercent(int percent) {
return '$percent %';
}
@override
String get exploreAdded => 'Zu deiner Bibliothek hinzugefügt.';
@override
String get exploreOpen => 'Öffnen';
@override
String get exploreNeedsNewerApp =>
'Dieses Lernset braucht eine neuere Version der App.';
@override
String get exploreFailed =>
'Deine Instanz war nicht erreichbar. Versuche es noch einmal.';
@override
String get exploreUnreachable => 'Entdecken ist gerade nicht erreichbar.';
@override
String get exploreRetry => 'Erneut versuchen';
@override
String get exploreMore => 'Mehr anzeigen';
@override
String get exploreNoDescription => 'Keine Beschreibung.';
@override
String get exploreReadLicence => 'Lizenz lesen';
@override
String get publishWithdraw => 'Aus Entdecken nehmen';
@override
String get publishWithdrawTitle => 'Aus Entdecken nehmen?';
@override
String get publishWithdrawMessage =>
'Niemand kann es dann noch hinzufügen, und Kopien bekommen keine Aktualisierungen. Seine Veröffentlichungen bleiben, wie sie sind; veröffentlichst du es wieder, ist es zurück.';
@override
String get publishWithdrawn =>
'Zurückgezogen · Kopien bekommen keine Aktualisierungen';
@override
String get publishWithdrawnDone => 'Aus Entdecken genommen.';
}