fix network

This commit is contained in:
JinJiangHuang
2026-03-10 21:37:51 +08:00
parent 76ed32ccf3
commit fac70d7496
7 changed files with 383 additions and 37 deletions
+27 -4
View File
@@ -1,14 +1,15 @@
import Foundation
import SwiftUI
import Combine
/// ViewModel
@MainActor
class HomeViewModel: ObservableObject {
///
/// ""
@Published var sorts: [MovieSort.SortData] = []
///
@Published var selectedSort: MovieSort.SortData?
///
/// ""
@Published var homeVideos: [Movie.Video] = []
///
@Published var categoryVideos: [Movie.Video] = []
@@ -23,6 +24,13 @@ class HomeViewModel: ObservableObject {
/// 访
private let sourceService = SourceService.shared
///
private var lastLoadFailedDueToNetwork = false
private var networkRestoredCancellable: AnyCancellable?
init() {
setupNetworkRestoredAutoRetry()
}
///
func loadSorts() async {
@@ -33,23 +41,38 @@ class HomeViewModel: ObservableObject {
do {
let result = try await sourceService.getSort(sourceBean: source)
// UI Android
// "" UI Android
var allSorts = [MovieSort.SortData.home()]
allSorts.append(contentsOf: result.sorts)
self.sorts = allSorts
self.homeVideos = result.homeVideos
lastLoadFailedDueToNetwork = false
if selectedSort == nil {
selectedSort = allSorts.first
}
} catch {
errorMessage = error.localizedDescription
lastLoadFailedDueToNetwork = error.isNetworkConnectionError
}
isLoading = false
}
///
private func setupNetworkRestoredAutoRetry() {
networkRestoredCancellable = NetworkMonitor.shared.networkRestoredPublisher
.sink { [weak self] in
guard let self else { return }
Task { @MainActor [weak self] in
guard let self else { return }
guard self.lastLoadFailedDueToNetwork || (self.sorts.isEmpty && self.homeVideos.isEmpty) else { return }
await self.refresh()
}
}
}
///
func selectSort(_ sort: MovieSort.SortData) {
//
@@ -89,7 +112,7 @@ class HomeViewModel: ObservableObject {
} else {
categoryVideos.append(contentsOf: videos)
}
//
// ""
currentPage = page
hasMore = !videos.isEmpty
} catch {