mirror of
https://github.com/passepartoutvpn/passepartout-apple.git
synced 2025-02-17 05:12:18 +00:00
Clear previous remote import task (#888)
Previous task was never nil-ed out on completion.
This commit is contained in:
parent
a3dad4e445
commit
e82dac3152
@ -380,7 +380,9 @@ private extension ProfileManager {
|
|||||||
if waitingObservers.contains(.remote) {
|
if waitingObservers.contains(.remote) {
|
||||||
waitingObservers.remove(.remote) // @Published
|
waitingObservers.remove(.remote) // @Published
|
||||||
}
|
}
|
||||||
importRemoteProfiles(result)
|
Task { [weak self] in
|
||||||
|
await self?.importRemoteProfiles(result)
|
||||||
|
}
|
||||||
|
|
||||||
objectWillChange.send()
|
objectWillChange.send()
|
||||||
}
|
}
|
||||||
@ -404,11 +406,18 @@ private extension ProfileManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func importRemoteProfiles(_ profiles: [Profile]) {
|
func importRemoteProfiles(_ profiles: [Profile]) async {
|
||||||
guard !profiles.isEmpty else {
|
guard !profiles.isEmpty else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let previousTask = remoteImportTask {
|
||||||
|
pp_log(.App.profiles, .info, "Cancel ongoing remote import...")
|
||||||
|
previousTask.cancel()
|
||||||
|
await previousTask.value
|
||||||
|
remoteImportTask = nil
|
||||||
|
}
|
||||||
|
|
||||||
pp_log(.App.profiles, .info, "Start importing remote profiles: \(profiles.map(\.id)))")
|
pp_log(.App.profiles, .info, "Start importing remote profiles: \(profiles.map(\.id)))")
|
||||||
assert(profiles.count == Set(profiles.map(\.id)).count, "Remote repository must not have duplicates")
|
assert(profiles.count == Set(profiles.map(\.id)).count, "Remote repository must not have duplicates")
|
||||||
|
|
||||||
@ -426,18 +435,11 @@ private extension ProfileManager {
|
|||||||
let remotelyDeletedIds = Set(allProfiles.keys).subtracting(Set(allRemoteProfiles.keys))
|
let remotelyDeletedIds = Set(allProfiles.keys).subtracting(Set(allRemoteProfiles.keys))
|
||||||
let mirrorsRemoteRepository = mirrorsRemoteRepository
|
let mirrorsRemoteRepository = mirrorsRemoteRepository
|
||||||
|
|
||||||
let previousTask = remoteImportTask
|
|
||||||
remoteImportTask = Task.detached { [weak self] in
|
remoteImportTask = Task.detached { [weak self] in
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if let previousTask {
|
|
||||||
pp_log(.App.profiles, .info, "Cancel ongoing remote import...")
|
|
||||||
previousTask.cancel()
|
|
||||||
await previousTask.value
|
|
||||||
}
|
|
||||||
|
|
||||||
var idsToRemove: [Profile.ID] = []
|
var idsToRemove: [Profile.ID] = []
|
||||||
if !remotelyDeletedIds.isEmpty {
|
if !remotelyDeletedIds.isEmpty {
|
||||||
pp_log(.App.profiles, .info, "Will \(mirrorsRemoteRepository ? "delete" : "retain") local profiles not present in remote repository: \(remotelyDeletedIds)")
|
pp_log(.App.profiles, .info, "Will \(mirrorsRemoteRepository ? "delete" : "retain") local profiles not present in remote repository: \(remotelyDeletedIds)")
|
||||||
@ -480,6 +482,8 @@ private extension ProfileManager {
|
|||||||
// yield a little bit
|
// yield a little bit
|
||||||
try? await Task.sleep(for: .milliseconds(100))
|
try? await Task.sleep(for: .milliseconds(100))
|
||||||
}
|
}
|
||||||
|
await remoteImportTask?.value
|
||||||
|
remoteImportTask = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func reloadFilteredProfiles(with search: String) {
|
func reloadFilteredProfiles(with search: String) {
|
||||||
|
Loading…
Reference in New Issue
Block a user