This commit is contained in:
世界
2023-09-24 13:23:39 +08:00
parent 58bc9baa05
commit e65680dd55
4 changed files with 38 additions and 28 deletions
@@ -6,14 +6,14 @@ import Library
public class UIProfileUpdateTask: BGAppRefreshTask {
private static let taskSchedulerPermittedIdentifier = "\(FilePath.packageName).update_profiles"
private static var registered = false
public static func configure() async throws {
private actor Register {
private var registered = false
func configure() async throws {
if !registered {
let success = BGTaskScheduler.shared.register(forTaskWithIdentifier: taskSchedulerPermittedIdentifier, using: nil) { task in
NSLog("profile update task started")
Task {
await getAndupdateProfiles(task)
await UIProfileUpdateTask.getAndupdateProfiles(task)
}
}
if !success {
@@ -28,6 +28,12 @@ import Library
}
try scheduleUpdate(ProfileUpdateTask.calculateEarliestBeginDate(profiles))
}
}
private static let register = Register()
public static func configure() async throws {
try await register.configure()
}
private nonisolated static func getAndupdateProfiles(_ task: BGTask) async {
let profiles: [Profile]
@@ -170,6 +170,7 @@ public struct EditProfileView: View {
do {
try await Task.sleep(nanoseconds: UInt64(100 * Double(NSEC_PER_MSEC)))
try await profile.updateRemoteProfile()
await performCallback()
} catch {
alert = Alert(error)
}
@@ -189,11 +190,11 @@ public struct EditProfileView: View {
private func saveProfile() async {
do {
_ = try await ProfileManager.update(profile)
#if os(iOS) || os(tvOS)
#if os(iOS) || os(tvOS)
try await UIProfileUpdateTask.configure()
#else
#else
try await ProfileUpdateTask.configure()
#endif
#endif
} catch {
alert = Alert(error)
return
@@ -248,11 +248,11 @@ public struct NewProfileView: View {
lastUpdated: lastUpdated
))
if profileType == .remote {
#if os(iOS) || os(tvOS)
#if os(iOS) || os(tvOS)
try await UIProfileUpdateTask.configure()
#else
#else
try await ProfileUpdateTask.configure()
#endif
#endif
}
}
}
@@ -34,7 +34,7 @@ public struct ProfileView: View {
public init() {}
public var body: some View {
viewBuilder {
VStack {
if isLoading {
ProgressView().onAppear {
Task {
@@ -222,6 +222,9 @@ public struct ProfileView: View {
isLoading = false
}
do {
if !profileList.isEmpty {
profileList.removeAll()
}
profileList = try await ProfileManager.list()
} catch {
alert = Alert(error)