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:
co-authored by
Claude Opus 5
parent
8ff74ed4fa
commit
4abce1c8b9
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user