feat(learn): search ranks titles first; privacy changes show progress

- The Library's search lists titles starting with what is typed first,
  then titles holding it as a word, then secondary titles, rather than
  by the shelves' recency.
- The offer to make every studyset private is gone: each studyset's
  lock already says and changes it, and new ones are private.
- Making a studyset private or not from its sheet flips the switch as
  soon as the person agrees and says that everything in it is being
  written anew, rather than standing still for a minute.
- Jellyfin's password can be shown while typed.

Whats-New: Searching the library lists title matches first; changing a studyset's privacy shows its progress; Jellyfin's password can be shown.
Whats-New-De: Die Suche in der Bibliothek zeigt Treffer im Titel zuerst; das Ändern der Privatsphäre eines Lernsets zeigt den Fortschritt; das Jellyfin-Passwort lässt sich anzeigen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-10 22:39:10 +01:00
commit 1cc27ef0d6
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 276 additions and 235 deletions

View file

@ -2077,10 +2077,6 @@
"@cardMovePrivateBody": {"placeholders": {"title": {"type": "String"}}},
"cardMovePrivateAction": "Privat machen und verschieben",
"privacyKeysMissing": "Melde dich auf diesem Gerät mit deinem Passwort an: Was du hier hinzufügst oder änderst, wäre privat.",
"libraryOfferPrivateTitle": "Deine Lernsets privat machen?",
"libraryOfferPrivateBody": "Neue Lernsets sind privat: Ende-zu-Ende-verschlüsselt, sodass nur deine Geräte sie lesen können. Die, die du vorher gemacht hast, bleiben für die Instanz lesbar, bis du sie auch privat machst. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.",
"libraryOfferPrivateAction": "Alle privat machen",
"libraryOfferPrivateLater": "Jetzt nicht",
"exportReadableNote": "Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen.",
"studysetVisibilityReadable": "Nicht privat, nicht veröffentlicht",
"studysetShareReadable": "Teilen: nicht privat",
@ -2202,5 +2198,7 @@
"markdownToShareToday": "heute bis {percent} %",
"markdownDeadlinesProgress": "{furthest} %/{target} % · {when}",
"readerShowSource": "Quelltext zeigen",
"readerShowFormatted": "Formatiert zeigen"
"readerShowFormatted": "Formatiert zeigen",
"studysetSheetMakingPrivate": "Alles darin wird verschlüsselt … Das kann eine Minute dauern; du kannst das hier solange schließen.",
"studysetSheetMakingReadable": "Alles darin wird lesbar gemacht … Das kann eine Minute dauern; du kannst das hier solange schließen."
}

View file

@ -2490,10 +2490,6 @@
"@cardMovePrivateBody": {"placeholders": {"title": {"type": "String"}}},
"cardMovePrivateAction": "Make private and move",
"privacyKeysMissing": "Sign in with your password on this device: what you add or change here would be private.",
"libraryOfferPrivateTitle": "Make your studysets private?",
"libraryOfferPrivateBody": "New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance's backups stay readable until those expire.",
"libraryOfferPrivateAction": "Make all private",
"libraryOfferPrivateLater": "Not now",
"exportReadableNote": "The archive isn't encrypted: whoever has the file can read it.",
"studysetVisibilityReadable": "Not private, not published",
"studysetShareReadable": "Share: not private",
@ -2730,5 +2726,9 @@
"readerShowSource": "Show the source text",
"@readerShowSource": {"description": "Tooltip: shows a Markdown file as written, rather than formatted"},
"readerShowFormatted": "Show it formatted",
"@readerShowFormatted": {"description": "Tooltip: shows a Markdown file formatted again, after its source text"}
"@readerShowFormatted": {"description": "Tooltip: shows a Markdown file formatted again, after its source text"},
"studysetSheetMakingPrivate": "Encrypting everything in it… This can take a minute; you can close this meanwhile.",
"@studysetSheetMakingPrivate": {"description": "Below the Private switch of a studyset's sheet while it is being made private"},
"studysetSheetMakingReadable": "Making everything in it readable… This can take a minute; you can close this meanwhile.",
"@studysetSheetMakingReadable": {"description": "Below the Private switch of a studyset's sheet while it is being made readable by the instance"}
}

View file

@ -12242,30 +12242,6 @@ abstract class AppLocalizations {
/// **'Sign in with your password on this device: what you add or change here would be private.'**
String get privacyKeysMissing;
/// No description provided for @libraryOfferPrivateTitle.
///
/// In en, this message translates to:
/// **'Make your studysets private?'**
String get libraryOfferPrivateTitle;
/// No description provided for @libraryOfferPrivateBody.
///
/// In en, this message translates to:
/// **'New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance\'s backups stay readable until those expire.'**
String get libraryOfferPrivateBody;
/// No description provided for @libraryOfferPrivateAction.
///
/// In en, this message translates to:
/// **'Make all private'**
String get libraryOfferPrivateAction;
/// No description provided for @libraryOfferPrivateLater.
///
/// In en, this message translates to:
/// **'Not now'**
String get libraryOfferPrivateLater;
/// No description provided for @exportReadableNote.
///
/// In en, this message translates to:
@ -12997,6 +12973,18 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Show it formatted'**
String get readerShowFormatted;
/// Below the Private switch of a studyset's sheet while it is being made private
///
/// In en, this message translates to:
/// **'Encrypting everything in it… This can take a minute; you can close this meanwhile.'**
String get studysetSheetMakingPrivate;
/// Below the Private switch of a studyset's sheet while it is being made readable by the instance
///
/// In en, this message translates to:
/// **'Making everything in it readable… This can take a minute; you can close this meanwhile.'**
String get studysetSheetMakingReadable;
}
class _AppLocalizationsDelegate

View file

@ -7888,19 +7888,6 @@ class AppLocalizationsDe extends AppLocalizations {
String get privacyKeysMissing =>
'Melde dich auf diesem Gerät mit deinem Passwort an: Was du hier hinzufügst oder änderst, wäre privat.';
@override
String get libraryOfferPrivateTitle => 'Deine Lernsets privat machen?';
@override
String get libraryOfferPrivateBody =>
'Neue Lernsets sind privat: Ende-zu-Ende-verschlüsselt, sodass nur deine Geräte sie lesen können. Die, die du vorher gemacht hast, bleiben für die Instanz lesbar, bis du sie auch privat machst. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.';
@override
String get libraryOfferPrivateAction => 'Alle privat machen';
@override
String get libraryOfferPrivateLater => 'Jetzt nicht';
@override
String get exportReadableNote =>
'Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen.';
@ -8323,4 +8310,12 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get readerShowFormatted => 'Formatiert zeigen';
@override
String get studysetSheetMakingPrivate =>
'Alles darin wird verschlüsselt … Das kann eine Minute dauern; du kannst das hier solange schließen.';
@override
String get studysetSheetMakingReadable =>
'Alles darin wird lesbar gemacht … Das kann eine Minute dauern; du kannst das hier solange schließen.';
}

View file

@ -7816,19 +7816,6 @@ class AppLocalizationsEn extends AppLocalizations {
String get privacyKeysMissing =>
'Sign in with your password on this device: what you add or change here would be private.';
@override
String get libraryOfferPrivateTitle => 'Make your studysets private?';
@override
String get libraryOfferPrivateBody =>
'New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance\'s backups stay readable until those expire.';
@override
String get libraryOfferPrivateAction => 'Make all private';
@override
String get libraryOfferPrivateLater => 'Not now';
@override
String get exportReadableNote =>
'The archive isn\'t encrypted: whoever has the file can read it.';
@ -8249,6 +8236,14 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get readerShowFormatted => 'Show it formatted';
@override
String get studysetSheetMakingPrivate =>
'Encrypting everything in it… This can take a minute; you can close this meanwhile.';
@override
String get studysetSheetMakingReadable =>
'Making everything in it readable… This can take a minute; you can close this meanwhile.';
}
/// The translations for English, as used in the United Kingdom (`en_GB`).