Der Serienname ist jetzt der Weg zur Serie
Unter dem Folgentitel stand „S2 E1" als Text, und wer zur Serie wollte, musste darunter eine Knopfreihe finden. Jetzt steht dort „Serienname · Staffel 2 · Episode 1", und Serienname wie Staffel führen dorthin, wohin sie zeigen. Der Name steht ohnehin da — dann soll er auch der Weg sein. `HeroBanner` nimmt dafür wahlweise eine fertige Zeile entgegen statt eines Textes. Gebaut wird sie beim Aufrufer, weil nur der weiß, wohin ein Teil führt; die Gestaltung kennt keine Ziele. Die Knopfreihe bleibt bei Staffeln, wo sie der einzige Weg nach oben ist, und entfällt bei Folgen. Beim Entfernen eines Downloads gibt es keine Rückfrage mehr. Sie stand da, weil „löschen" nach etwas Endgültigem klingt — es ist aber nur die heruntergeladene Kopie, der Titel bleibt auf dem Server. Wer nach links wischt und auf „Löschen" tippt, hat zweimal gesagt, was er will. Und das Umschalten sieht jetzt nach Umzug aus: die Seitenleiste klappt nach oben weg, die Leiste oben schiebt sich seitwärts herein — und zurück genauso. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
34593d9973
commit
be4b961641
@@ -10,7 +10,6 @@ struct DownloadsView: View {
|
||||
@Environment(NetworkConditions.self) private var network
|
||||
@Environment(\.flixyAccent) private var accent
|
||||
|
||||
@State private var itemPendingRemoval: DownloadItem?
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
@@ -27,22 +26,13 @@ struct DownloadsView: View {
|
||||
.background(Color.flixyCanvas)
|
||||
.navigationTitle(Text("sidebar.downloads"))
|
||||
.flixyInlineTitle()
|
||||
.confirmationDialog(
|
||||
Text("downloads.removeConfirm"),
|
||||
isPresented: Binding(
|
||||
get: { itemPendingRemoval != nil },
|
||||
set: { if !$0 { itemPendingRemoval = nil } }
|
||||
),
|
||||
titleVisibility: .visible
|
||||
) {
|
||||
Button("action.delete", role: .destructive) {
|
||||
if let item = itemPendingRemoval {
|
||||
Task { await downloads.cancel(item) }
|
||||
}
|
||||
itemPendingRemoval = nil
|
||||
}
|
||||
Button("action.cancel", role: .cancel) { itemPendingRemoval = nil }
|
||||
}
|
||||
// Keine Rückfrage beim Entfernen.
|
||||
//
|
||||
// Sie stand hier, weil „löschen" nach etwas Endgültigem klingt. Es ist
|
||||
// aber nur die heruntergeladene Kopie: der Titel bleibt auf dem Server
|
||||
// und ist mit einem Tippen wieder da. Wer nach links wischt und auf
|
||||
// „Löschen" tippt, hat zweimal gesagt, was er will — ein drittes Mal
|
||||
// zu fragen ist keine Vorsicht, sondern Aufhalten.
|
||||
}
|
||||
|
||||
/// Was die Übertragung gerade aufhält.
|
||||
@@ -72,7 +62,7 @@ struct DownloadsView: View {
|
||||
DownloadRow(
|
||||
item: item,
|
||||
hold: hold,
|
||||
onRemove: { itemPendingRemoval = item }
|
||||
onRemove: { Task { await downloads.cancel(item) } }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -82,7 +72,7 @@ struct DownloadsView: View {
|
||||
Section(group.title) {
|
||||
ForEach(group.items) { item in
|
||||
// Fertige Downloads wartet nichts mehr auf.
|
||||
DownloadRow(item: item, hold: .none, onRemove: { itemPendingRemoval = item })
|
||||
DownloadRow(item: item, hold: .none, onRemove: { Task { await downloads.cancel(item) } })
|
||||
.contentShape(.rect)
|
||||
.onTapGesture { play(item) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user