Name und Passwort zuerst, und Blätter in Fenstergrösse

**Die Anmeldung.** Sobald ein Jellyfin-Server Quick Connect anbietet,
sprang der Weg von selbst in den Code-Fluss. Gut gemeint — dabei läuft
kein Passwort durch diese App —, aber am Alltag vorbei: der Code will in
einem zweiten Gerät bestätigt werden, und wer im Zug sitzt, hat das
nicht offen. Ein Passwortspeicher füllt dagegen beide Felder in einer
Sekunde. Der Code bleibt als Knopf darunter erreichbar.

**Die Blätter.** Wieder `#if os(macOS)`, das auf dem Mac nie greift, weil
dort der iOS-Bau läuft. Filter, Spurwahl und Qualitätsblatt bekamen
deshalb eine Blattkante in iPhone-Höhe — ein schmaler Streifen, der in
einem grossen Fenster unten im Nichts klebt. Jetzt zur Laufzeit
entschieden: auf dem Mac volle Höhe, sonst wie bisher.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-27 18:27:38 +02:00
co-authored by Claude Opus 5
parent 8ff74ed4fa
commit 4abce1c8b9
2 changed files with 20 additions and 15 deletions
+11 -4
View File
@@ -89,11 +89,18 @@ final class JellyfinSignInModel {
address = candidate.absoluteString address = candidate.absoluteString
offersQuickConnect = await authenticator.supportsQuickConnect() offersQuickConnect = await authenticator.supportsQuickConnect()
if offersQuickConnect { // **Name und Passwort zuerst.**
await beginQuickConnect() //
} else { // Hier sprang der Weg bisher von selbst in den Code-Fluss, sobald
// der Server ihn anbietet. Das war gut gemeint — dabei läuft kein
// Passwort durch diese App —, geht aber am Alltag vorbei: der Code
// muss in einem zweiten Gerät bestätigt werden, und wer gerade im
// Zug sitzt, hat das nicht offen. Ein Passwortspeicher füllt
// dagegen beide Felder in einer Sekunde.
//
// Der Code bleibt erreichbar: `offersQuickConnect` steuert den
// Knopf darunter, und der steht schon da.
step = .credentials step = .credentials
}
return return
} }
@@ -51,20 +51,18 @@ extension View {
/// Auf dem Mac ist ein Blatt ein Fenster: dort zählt keine Rastung, /// Auf dem Mac ist ein Blatt ein Fenster: dort zählt keine Rastung,
/// sondern eine vernünftige Mindestgröße. /// sondern eine vernünftige Mindestgröße.
public func flixyMediumSheet() -> some View { public func flixyMediumSheet() -> some View {
#if os(iOS) // **Zur Laufzeit, nicht beim Übersetzen.** Der `#else`-Zweig für
presentationDetents([.medium]) // macOS griff nie: auf dem Mac läuft der iOS-Bau, und damit bekam ein
#else // grosses Fenster eine Blattkante in iPhone-Höhe — ein schmaler
frame(minWidth: 420, minHeight: 460) // Streifen, der unten im Nichts klebt.
#endif presentationDetents(FlixyPlatform.isMac ? [.large] : [.medium])
} }
/// Dasselbe, aber auf Wunsch bis zur vollen Höhe aufziehbar. /// Dasselbe, aber auf Wunsch bis zur vollen Höhe aufziehbar.
public func flixyResizableSheet() -> some View { public func flixyResizableSheet() -> some View {
#if os(iOS) // Siehe oben. Auf dem Mac gibt es kein „halb aufgezogen": ein Fenster
presentationDetents([.medium, .large]) // hat die Höhe, die es hat, und eine Liste soll sie nutzen.
#else presentationDetents(FlixyPlatform.isMac ? [.large] : [.medium, .large])
frame(minWidth: 460, minHeight: 520)
#endif
} }
/// Ein Formular, das auf beiden Seiten gleich aussieht. /// Ein Formular, das auf beiden Seiten gleich aussieht.