feat(learn): confirm the notes and files a release takes

ADR 0044, D8 and D9, its first step: before publishing to Explore, the
person confirms the notes, PDFs and other files that go. Cards and
learning paths always go.

Publish's Continue leads to a step listing them by kind, none ticked at
first but those the latest release held. Each kind is ticked whole, and
an item's menu ticks everything but it or nothing but it. What isn't
ticked goes to the server as publish's leftOut. So does whatever the
sync before publishing brings that the person never saw.

The server leaves those out of the release and its counts, and leaves
out the files only they name. leftOut is optional: released apps send
none and publish everything, as before. publish.releasedMaterial names
the notes and files of the latest release, and none for a studyset not
the caller's, as for one never published.

Whats-New: Before publishing to Explore, you choose which notes and files go with the cards and learning paths.
Whats-New-De: Vor dem Veröffentlichen auf Explore wählst du, welche Notizen und Dateien mit den Karteikarten und Lernpfaden mitgehen.

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-11 01:54:16 +01:00
commit d664115c46
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 1202 additions and 38 deletions

View file

@ -2200,5 +2200,16 @@
"readerShowSource": "Quelltext 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."
"studysetSheetMakingReadable": "Alles darin wird lesbar gemacht … Das kann eine Minute dauern; du kannst das hier solange schließen.",
"publishContinue": "Weiter",
"publishBack": "Zurück",
"publishMaterialIntro": "Karteikarten und Lernpfade gehen immer mit. Hake die Notizen und Dateien an, die mit veröffentlicht werden sollen; der Rest bleibt nur deiner.",
"publishMaterialNone": "Es enthält keine Notizen oder Dateien: seine Karteikarten und Lernpfade gehen mit.",
"publishMaterialNotes": "Notizen ({count})",
"publishMaterialPdfs": "PDFs ({count})",
"publishMaterialFiles": "Andere Dateien ({count})",
"publishMaterialAllBut": "Alles außer diesem",
"publishMaterialOnlyThis": "Nur dieses",
"publishMaterialOptions": "Damit auswählen",
"publishMaterialCount": "{count, plural, =0{Keine Notizen oder Dateien gehen mit} =1{1 Notiz oder Datei geht mit} other{{count} Notizen und Dateien gehen mit}}"
}

View file

@ -2730,5 +2730,27 @@
"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"}
"@studysetSheetMakingReadable": {"description": "Below the Private switch of a studyset's sheet while it is being made readable by the instance"},
"publishContinue": "Continue",
"@publishContinue": {"description": "The Publish sheet's button leading to the step confirming the notes and files that go"},
"publishBack": "Back",
"@publishBack": {"description": "Leaves the Publish sheet's step confirming the material, back to its form"},
"publishMaterialIntro": "Cards and learning paths always go. Tick the notes and files to publish with them; the rest stays yours alone.",
"@publishMaterialIntro": {"description": "Above the list of notes and files confirmed before publishing"},
"publishMaterialNone": "It holds no notes or files: its cards and learning paths go.",
"@publishMaterialNone": {"description": "The step confirming the material, for a studyset without notes or files"},
"publishMaterialNotes": "Notes ({count})",
"@publishMaterialNotes": {"description": "Heading of the notes to tick before publishing, ticking or unticking all of them", "placeholders": {"count": {"type": "int"}}},
"publishMaterialPdfs": "PDFs ({count})",
"@publishMaterialPdfs": {"description": "Heading of the PDFs to tick before publishing, ticking or unticking all of them", "placeholders": {"count": {"type": "int"}}},
"publishMaterialFiles": "Other files ({count})",
"@publishMaterialFiles": {"description": "Heading of the files other than PDFs (Markdown) to tick before publishing", "placeholders": {"count": {"type": "int"}}},
"publishMaterialAllBut": "Everything but this",
"@publishMaterialAllBut": {"description": "Menu item on a note or file: ticks every note and file but this one"},
"publishMaterialOnlyThis": "Nothing but this",
"@publishMaterialOnlyThis": {"description": "Menu item on a note or file: ticks only this one"},
"publishMaterialOptions": "Choose with this",
"@publishMaterialOptions": {"description": "Tooltip of a note's or file's menu in the step confirming the material"},
"publishMaterialCount": "{count, plural, =0{No notes or files go} =1{1 note or file goes} other{{count} notes and files go}}",
"@publishMaterialCount": {"description": "Below the material confirmed before publishing: how many go", "placeholders": {"count": {"type": "int"}}}
}

View file

@ -12985,6 +12985,72 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Making everything in it readable… This can take a minute; you can close this meanwhile.'**
String get studysetSheetMakingReadable;
/// The Publish sheet's button leading to the step confirming the notes and files that go
///
/// In en, this message translates to:
/// **'Continue'**
String get publishContinue;
/// Leaves the Publish sheet's step confirming the material, back to its form
///
/// In en, this message translates to:
/// **'Back'**
String get publishBack;
/// Above the list of notes and files confirmed before publishing
///
/// In en, this message translates to:
/// **'Cards and learning paths always go. Tick the notes and files to publish with them; the rest stays yours alone.'**
String get publishMaterialIntro;
/// The step confirming the material, for a studyset without notes or files
///
/// In en, this message translates to:
/// **'It holds no notes or files: its cards and learning paths go.'**
String get publishMaterialNone;
/// Heading of the notes to tick before publishing, ticking or unticking all of them
///
/// In en, this message translates to:
/// **'Notes ({count})'**
String publishMaterialNotes(int count);
/// Heading of the PDFs to tick before publishing, ticking or unticking all of them
///
/// In en, this message translates to:
/// **'PDFs ({count})'**
String publishMaterialPdfs(int count);
/// Heading of the files other than PDFs (Markdown) to tick before publishing
///
/// In en, this message translates to:
/// **'Other files ({count})'**
String publishMaterialFiles(int count);
/// Menu item on a note or file: ticks every note and file but this one
///
/// In en, this message translates to:
/// **'Everything but this'**
String get publishMaterialAllBut;
/// Menu item on a note or file: ticks only this one
///
/// In en, this message translates to:
/// **'Nothing but this'**
String get publishMaterialOnlyThis;
/// Tooltip of a note's or file's menu in the step confirming the material
///
/// In en, this message translates to:
/// **'Choose with this'**
String get publishMaterialOptions;
/// Below the material confirmed before publishing: how many go
///
/// In en, this message translates to:
/// **'{count, plural, =0{No notes or files go} =1{1 note or file goes} other{{count} notes and files go}}'**
String publishMaterialCount(int count);
}
class _AppLocalizationsDelegate

View file

@ -8318,4 +8318,54 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get studysetSheetMakingReadable =>
'Alles darin wird lesbar gemacht … Das kann eine Minute dauern; du kannst das hier solange schließen.';
@override
String get publishContinue => 'Weiter';
@override
String get publishBack => 'Zurück';
@override
String get publishMaterialIntro =>
'Karteikarten und Lernpfade gehen immer mit. Hake die Notizen und Dateien an, die mit veröffentlicht werden sollen; der Rest bleibt nur deiner.';
@override
String get publishMaterialNone =>
'Es enthält keine Notizen oder Dateien: seine Karteikarten und Lernpfade gehen mit.';
@override
String publishMaterialNotes(int count) {
return 'Notizen ($count)';
}
@override
String publishMaterialPdfs(int count) {
return 'PDFs ($count)';
}
@override
String publishMaterialFiles(int count) {
return 'Andere Dateien ($count)';
}
@override
String get publishMaterialAllBut => 'Alles außer diesem';
@override
String get publishMaterialOnlyThis => 'Nur dieses';
@override
String get publishMaterialOptions => 'Damit auswählen';
@override
String publishMaterialCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Notizen und Dateien gehen mit',
one: '1 Notiz oder Datei geht mit',
zero: 'Keine Notizen oder Dateien gehen mit',
);
return '$_temp0';
}
}

View file

@ -8244,6 +8244,56 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get studysetSheetMakingReadable =>
'Making everything in it readable… This can take a minute; you can close this meanwhile.';
@override
String get publishContinue => 'Continue';
@override
String get publishBack => 'Back';
@override
String get publishMaterialIntro =>
'Cards and learning paths always go. Tick the notes and files to publish with them; the rest stays yours alone.';
@override
String get publishMaterialNone =>
'It holds no notes or files: its cards and learning paths go.';
@override
String publishMaterialNotes(int count) {
return 'Notes ($count)';
}
@override
String publishMaterialPdfs(int count) {
return 'PDFs ($count)';
}
@override
String publishMaterialFiles(int count) {
return 'Other files ($count)';
}
@override
String get publishMaterialAllBut => 'Everything but this';
@override
String get publishMaterialOnlyThis => 'Nothing but this';
@override
String get publishMaterialOptions => 'Choose with this';
@override
String publishMaterialCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count notes and files go',
one: '1 note or file goes',
zero: 'No notes or files go',
);
return '$_temp0';
}
}
/// The translations for English, as used in the United Kingdom (`en_GB`).