This commit is contained in:
@@ -12,11 +12,15 @@ struct VideoListView: View {
|
||||
@State private var showDownloadPanel = false
|
||||
@State private var downloadResults: [(video: VideoItem, playInfos: [PlayInfo])] = []
|
||||
|
||||
private let pageSizes = [20, 50, 100]
|
||||
private let pageSizes = [10, 20, 50, 100]
|
||||
@State private var pageSizeIndex = 0
|
||||
private var pageSize: Int { pageSizes[pageSizeIndex] }
|
||||
@State private var pageNo = 1
|
||||
private var totalPages: Int { max(1, (filteredVideos.count + pageSize - 1) / pageSize) }
|
||||
private var currentPageSelectedCount: Int {
|
||||
let currentPageIds = Set(displayVideos.map(\.videoId))
|
||||
return selectedVideos.intersection(currentPageIds).count
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
@@ -54,10 +58,10 @@ struct VideoListView: View {
|
||||
.disabled(selectedVideos.isEmpty || isLoading)
|
||||
|
||||
Button("全选") {
|
||||
if selectedVideos.count == displayVideos.count {
|
||||
if selectedVideos.count == filteredVideos.count {
|
||||
selectedVideos.removeAll()
|
||||
} else {
|
||||
selectedVideos = Set(displayVideos.map(\.videoId))
|
||||
selectedVideos = Set(filteredVideos.map(\.videoId))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,6 +169,15 @@ struct VideoListView: View {
|
||||
HStack {
|
||||
Text("共 \(filteredVideos.count) 条,已选 \(selectedVideos.count) 个")
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
if !selectedVideos.isEmpty {
|
||||
Button("取消选择") {
|
||||
selectedVideos.removeAll()
|
||||
}
|
||||
.buttonStyle(.borderless)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
Picker("每页", selection: $pageSizeIndex) {
|
||||
@@ -277,7 +290,7 @@ struct VideoListView: View {
|
||||
loadingStatus = ""
|
||||
var results: [(video: VideoItem, playInfos: [PlayInfo])] = []
|
||||
var errors: [String] = []
|
||||
let selected = displayVideos.filter { selectedVideos.contains($0.videoId) }
|
||||
let selected = filteredVideos.filter { selectedVideos.contains($0.videoId) }
|
||||
for (index, video) in selected.enumerated() {
|
||||
loadingStatus = "正在获取下载地址 (\(index + 1)/\(selected.count))「\(video.title)」..."
|
||||
let playInfos = await fetchPlayInfoWithRetry(videoId: video.videoId, title: video.title, maxRetries: 3)
|
||||
|
||||
Reference in New Issue
Block a user