From 92e1eacf57d4f84b20ebbd222fc70b23b440ef2e Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Fri, 31 Jan 2025 14:52:20 +0100 Subject: [PATCH] Improve progress updating, fix warnings --- Caps.xcodeproj/project.pbxproj | 12 ++ .../xcshareddata/swiftpm/Package.resolved | 7 +- .../UserInterfaceState.xcuserstate | Bin 115721 -> 119356 bytes Caps/Data/Database.swift | 193 +++++------------- Caps/Download/ClassifierProgress.swift | 19 ++ .../Download/ClassifierProgressDelegate.swift | 5 + .../Download/ClassifierProgressObserver.swift | 20 ++ Caps/Preview Content/Database+Mock.swift | 32 +++ Caps/Views/ClassifierDownloadView.swift | 10 +- 9 files changed, 154 insertions(+), 144 deletions(-) create mode 100644 Caps/Download/ClassifierProgress.swift create mode 100644 Caps/Download/ClassifierProgressDelegate.swift create mode 100644 Caps/Download/ClassifierProgressObserver.swift create mode 100644 Caps/Preview Content/Database+Mock.swift diff --git a/Caps.xcodeproj/project.pbxproj b/Caps.xcodeproj/project.pbxproj index 918fe13..1f5b6cb 100644 --- a/Caps.xcodeproj/project.pbxproj +++ b/Caps.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ E25AAC94283D88A4006E9E7F /* Cap.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25AAC93283D88A4006E9E7F /* Cap.swift */; }; E25AAC96283E14DF006E9E7F /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25AAC95283E14DF006E9E7F /* Database.swift */; }; E25AAC9B283E3395006E9E7F /* CapRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25AAC9A283E3395006E9E7F /* CapRowView.swift */; }; + E29E17C92D4D0ABF00E0EE54 /* Database+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E29E17C82D4D0ABF00E0EE54 /* Database+Mock.swift */; }; E2EA00C3283E672A00F7B269 /* SFSafeSymbols in Frameworks */ = {isa = PBXBuildFile; productRef = E2EA00C2283E672A00F7B269 /* SFSafeSymbols */; }; E2EA00C5283EA72000F7B269 /* SortCriteria.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2EA00C4283EA72000F7B269 /* SortCriteria.swift */; }; E2EA00C7283EAA0100F7B269 /* SortSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2EA00C6283EAA0100F7B269 /* SortSelectionView.swift */; }; @@ -78,6 +79,7 @@ E25AAC95283E14DF006E9E7F /* Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Database.swift; sourceTree = ""; }; E25AAC9A283E3395006E9E7F /* CapRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CapRowView.swift; sourceTree = ""; }; E268C72D29BF2D8400D813A0 /* ISSUES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ISSUES.md; sourceTree = ""; }; + E29E17C82D4D0ABF00E0EE54 /* Database+Mock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Database+Mock.swift"; sourceTree = ""; }; E2EA00C4283EA72000F7B269 /* SortCriteria.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortCriteria.swift; sourceTree = ""; }; E2EA00C6283EAA0100F7B269 /* SortSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortSelectionView.swift; sourceTree = ""; }; E2EA00CB283EB43E00F7B269 /* SortCaseRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortCaseRowView.swift; sourceTree = ""; }; @@ -100,6 +102,10 @@ E2ED70992A73D86F00067808 /* String+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + E29E17C32D4D0A9300E0EE54 /* Download */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Download; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ E25AAC75283D855D006E9E7F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -133,6 +139,7 @@ E25AAC7A283D855D006E9E7F /* Caps */ = { isa = PBXGroup; children = ( + E29E17C32D4D0A9300E0EE54 /* Download */, E25AAC7B283D855D006E9E7F /* CapsApp.swift */, E25AAC7D283D855D006E9E7F /* ContentView.swift */, E2EA00CF283EDD2C00F7B269 /* Camera */, @@ -149,6 +156,7 @@ E25AAC81283D855F006E9E7F /* Preview Content */ = { isa = PBXGroup; children = ( + E29E17C82D4D0ABF00E0EE54 /* Database+Mock.swift */, E25AAC82283D855F006E9E7F /* Preview Assets.xcassets */, ); path = "Preview Content"; @@ -234,6 +242,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + E29E17C32D4D0A9300E0EE54 /* Download */, + ); name = Caps; packageProductDependencies = ( E2EA00C2283E672A00F7B269 /* SFSafeSymbols */, @@ -332,6 +343,7 @@ E25AAC8D283D86CF006E9E7F /* Logger.swift in Sources */, E2ED709A2A73D86F00067808 /* String+Extensions.swift in Sources */, E20D105028574E190019BD91 /* CapImage.swift in Sources */, + E29E17C92D4D0ABF00E0EE54 /* Database+Mock.swift in Sources */, E2EA00ED2841170100F7B269 /* UIImage+Extensions.swift in Sources */, E20D105228589AAC0019BD91 /* FileManager+Extensions.swift in Sources */, 882C955E2AE7F0DE00657886 /* ClassifierDownloadView.swift in Sources */, diff --git a/Caps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Caps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9d32ecf..6bc3c18 100644 --- a/Caps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Caps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,12 +1,13 @@ { + "originHash" : "c78617470808606280f24ff566c34cb1b032779babfb39f1ddbcda602b363bd4", "pins" : [ { "identity" : "bottom-sheet", "kind" : "remoteSourceControl", "location" : "https://github.com/weitieda/bottom-sheet", "state" : { - "revision" : "4e074d49f3148577ac66cf47b85a99d016480d01", - "version" : "1.0.10" + "revision" : "6b21007153365235418f3943a960a1f9546592e0", + "version" : "1.0.12" } }, { @@ -19,5 +20,5 @@ } } ], - "version" : 2 + "version" : 3 } diff --git a/Caps.xcodeproj/project.xcworkspace/xcuserdata/ch.xcuserdatad/UserInterfaceState.xcuserstate b/Caps.xcodeproj/project.xcworkspace/xcuserdata/ch.xcuserdatad/UserInterfaceState.xcuserstate index 65ecd566c36dedbcd2aad6eb3e4ee1eba3984328..a8dbc4a624ec41d1309a658f99c8f0236c230d4e 100644 GIT binary patch literal 119356 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 Int { caps[cap]?.mainImage ?? 0 } @@ -358,9 +364,7 @@ final class Database: ObservableObject { } else { oldCap.update(with: cap) let save = oldCap - DispatchQueue.main.async { - self.caps[cap.id] = save - } + self.caps[cap.id] = save updates += 1 } } @@ -394,9 +398,7 @@ final class Database: ObservableObject { log("Classifier version has an invalid value '\(string)'") return false } - DispatchQueue.main.async { - self.storedServerClassifierVersion = serverVersion - } + self.storedServerClassifierVersion = serverVersion return true } @@ -409,19 +411,16 @@ final class Database: ObservableObject { log("Downloading classifier") let progress = ClassifierProgress() - DispatchQueue.main.async { - self.classifierDownloadProgress = progress - } + self.classifierDownloadProgress = progress defer { - DispatchQueue.main.async { - self.classifierDownloadProgress = nil - } + self.classifierDownloadProgress = nil } let tempUrl: URL let response: URLResponse do { - (tempUrl, response) = try await URLSession.shared.download(from: serverClassifierUrl, delegate: progress) + progressObserver.delegate = self + (tempUrl, response) = try await URLSession.shared.download(from: serverClassifierUrl, delegate: progressObserver) } catch { log("Failed to download classifier version: \(error)") return false @@ -439,14 +438,14 @@ final class Database: ObservableObject { log("Failed to replace classifier: \(error)") return false } - DispatchQueue.main.async { - self.storedLocalClassifierVersion = self.serverClassifierVersion - log("Downloaded classifier \(self.localClassifierVersion)") - self.classifier = nil - } + + self.storedLocalClassifierVersion = self.serverClassifierVersion + log("Downloaded classifier \(self.localClassifierVersion)") + self.classifier = nil + return true } - + @discardableResult func downloadClassifierClasses() async -> Bool { guard let serverClassifierClassesUrl else { @@ -509,9 +508,7 @@ final class Database: ObservableObject { func save(newCap name: String) -> Cap { let cap = Cap(id: nextCapId, name: name) caps[cap.id] = cap - DispatchQueue.main.async { - self.changedCaps.insert(cap.id) - } + self.changedCaps.insert(cap.id) return cap } @@ -526,17 +523,11 @@ final class Database: ObservableObject { } log("Saved image \(cap.imageCount) for cap \(capId)") if imageUploads[capId] != nil { - DispatchQueue.main.async { - self.imageUploads[capId]!.append(cap.imageCount) - } + self.imageUploads[capId]!.append(cap.imageCount) } else { - DispatchQueue.main.async { - self.imageUploads[capId] = [cap.imageCount] - } - } - DispatchQueue.main.async { - self.caps[capId]!.imageCount += 1 + self.imageUploads[capId] = [cap.imageCount] } + self.caps[capId]!.imageCount += 1 return true } @@ -558,14 +549,10 @@ final class Database: ObservableObject { return } log("Starting upload timer") - DispatchQueue.main.async { - self.uploadTimer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: self.uploadTimerElapsed) - } - } - - private func uploadTimerElapsed(timer: Timer) { - Task { - await uploadAll() + self.uploadTimer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { _ in + Task { + await self.uploadAll() + } } } @@ -574,22 +561,16 @@ final class Database: ObservableObject { log("Already uploading") return } - DispatchQueue.main.async { - self.isUploading = true - } + self.isUploading = true defer { - DispatchQueue.main.async { - self.isUploading = false - } + self.isUploading = false } guard !changedCaps.isEmpty || pendingImageUploadCount > 0 else { return } log("Starting uploads") let uploaded = await uploadAllChangedCaps() - DispatchQueue.main.async { - self.changedCaps.subtract(uploaded) - } + self.changedCaps.subtract(uploaded) await uploadAllImages() log("Uploads finished") } @@ -622,14 +603,10 @@ final class Database: ObservableObject { } log("Uploaded image \(image) for cap \(cap)") let remaining = imageUploads[cap]?.filter { $0 != image } - if let r = remaining, !r.isEmpty { - DispatchQueue.main.async { - self.imageUploads[cap] = r - } + if let remaining, !remaining.isEmpty { + self.imageUploads[cap] = remaining } else { - DispatchQueue.main.async { - self.imageUploads[cap] = nil - } + self.imageUploads[cap] = nil } } } @@ -664,9 +641,7 @@ final class Database: ObservableObject { if httpResponse.statusCode == 410 { log("Missing cap for image \(url.lastPathComponent), reupload cap") // Missing cap, force upload - DispatchQueue.main.async { - self.changedCaps.insert(cap) - } + self.changedCaps.insert(cap) } else { log("Failed to upload image \(url.lastPathComponent): Response \(httpResponse.statusCode)") } @@ -736,9 +711,7 @@ final class Database: ObservableObject { log("Failed to upload cap \(cap.id): Response \(httpResponse.statusCode)") return false } - DispatchQueue.main.async { - self.changedCaps.remove(cap.id) - } + self.changedCaps.remove(cap.id) return true } catch { log("Failed to upload cap \(cap.id): \(error)") @@ -761,10 +734,8 @@ final class Database: ObservableObject { } cap.mainImage = version let finalCap = cap - DispatchQueue.main.async { - self.caps[capId] = finalCap - log("Set main image \(version) for \(capId)") - } + self.caps[capId] = finalCap + log("Set main image \(version) for \(capId)") return finalCap } @@ -852,9 +823,7 @@ final class Database: ObservableObject { // Delete cached images images.removeCachedImages(for: cap) // Delete cap - DispatchQueue.main.async { - self.caps[cap] = nil - } + self.caps[cap] = nil log("Deleted cap \(cap)") return true } catch { @@ -888,19 +857,24 @@ final class Database: ObservableObject { log("Image removed") return } - DispatchQueue.global().async { + Task { guard let classifier = self.getClassifier() else { return } log("Image classification started") - classifier.recognize(image: image) { matches in - DispatchQueue.main.async { - self.matches = matches ?? [:] + let matches = await withCheckedContinuation { continuation in + classifier.recognize(image: image) { matches in + continuation.resume(returning: matches) } } + self.update(matches: matches ?? [:]) } } - + + func update(matches: [Int : Float]) { + self.matches = matches + } + func canClassify(cap id: Int) -> Bool { classifierClasses.contains(id) } @@ -1027,68 +1001,13 @@ final class Database: ObservableObject { } } -extension Database { - - final class ClassifierProgress: NSObject, ObservableObject { - - @Published - var bytesLoaded: Double - - @Published - var total: Double - - var percentage: Double { - guard total > 0 else { - return 0.0 +extension Database: ClassifierProgressDelegate { + + nonisolated func classifierProgress(_ progress: ClassifierProgress) { + Task { + await MainActor.run { + self.classifierDownloadProgress = progress } - return bytesLoaded * 100 / total - } - - init(bytesLoaded: Double = 0, total: Double = 0) { - self.bytesLoaded = bytesLoaded - self.total = total } } } - -extension Database.ClassifierProgress: URLSessionDownloadDelegate { - - func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { - - } - - func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { - DispatchQueue.main.async { - self.bytesLoaded = Double(totalBytesWritten) - self.total = Double(totalBytesExpectedToWrite) - } - } -} - -extension Database { - - static var mock: Database { - let db = Database() - db.serverPath = "https://caps.christophhagen.de" - db.caps = [ - Cap(id: 123, name: "My new cap"), - Cap(id: 234, name: "My favorite cap"), - Cap(id: 345, name: "My oldest cap"), - Cap(id: 456, name: "My new cap"), - Cap(id: 567, name: "My favorite cap"), - Cap(id: 678, name: "My oldest cap"), - ].reduce(into: [:]) { $0[$1.id] = $1 } - db.image = UIImage(systemSymbol: .photo) - return db - } - - static var largeMock: Database { - let db = Database() - db.serverPath = "https://caps.christophhagen.de" - db.caps = (1..<500) - .map { Cap(id: $0, name: "Cap \($0)") } - .reduce(into: [:]) { $0[$1.id] = $1 } - db.image = UIImage(systemSymbol: .photo) - return db - } -} diff --git a/Caps/Download/ClassifierProgress.swift b/Caps/Download/ClassifierProgress.swift new file mode 100644 index 0000000..3e2932c --- /dev/null +++ b/Caps/Download/ClassifierProgress.swift @@ -0,0 +1,19 @@ + +struct ClassifierProgress { + + let bytesLoaded: Double + + let total: Double + + var percentage: Double { + guard total > 0 else { + return 0.0 + } + return bytesLoaded * 100 / total + } + + init(bytesLoaded: Double = 0, total: Double = 0) { + self.bytesLoaded = bytesLoaded + self.total = total + } +} diff --git a/Caps/Download/ClassifierProgressDelegate.swift b/Caps/Download/ClassifierProgressDelegate.swift new file mode 100644 index 0000000..30091bf --- /dev/null +++ b/Caps/Download/ClassifierProgressDelegate.swift @@ -0,0 +1,5 @@ + +protocol ClassifierProgressDelegate: AnyObject { + + func classifierProgress(_ progress: ClassifierProgress) +} diff --git a/Caps/Download/ClassifierProgressObserver.swift b/Caps/Download/ClassifierProgressObserver.swift new file mode 100644 index 0000000..7116a97 --- /dev/null +++ b/Caps/Download/ClassifierProgressObserver.swift @@ -0,0 +1,20 @@ +import Foundation + +final class ClassifierProgressObserver: NSObject { + + weak var delegate: ClassifierProgressDelegate? +} + + +extension ClassifierProgressObserver: URLSessionDownloadDelegate { + + func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { + + } + + func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { + delegate?.classifierProgress(.init( + bytesLoaded: Double(totalBytesWritten), + total: Double(totalBytesExpectedToWrite))) + } +} diff --git a/Caps/Preview Content/Database+Mock.swift b/Caps/Preview Content/Database+Mock.swift new file mode 100644 index 0000000..c9222a6 --- /dev/null +++ b/Caps/Preview Content/Database+Mock.swift @@ -0,0 +1,32 @@ +import UIKit + +extension Database { + + static var mock: Database { + let caps = [ + Cap(id: 123, name: "My new cap"), + Cap(id: 234, name: "My favorite cap"), + Cap(id: 345, name: "My oldest cap"), + Cap(id: 456, name: "My new cap"), + Cap(id: 567, name: "My favorite cap"), + Cap(id: 678, name: "My oldest cap"), + ].reduce(into: [:]) { $0[$1.id] = $1 } + + let db = Database(caps: caps) + db.serverPath = "https://caps.christophhagen.de" + + db.image = UIImage(systemSymbol: .photo) + return db + } + + static var largeMock: Database { + let caps = (1..<500) + .map { Cap(id: $0, name: "Cap \($0)") } + .reduce(into: [:]) { $0[$1.id] = $1 } + + let db = Database(caps: caps) + db.serverPath = "https://caps.christophhagen.de" + db.image = UIImage(systemSymbol: .photo) + return db + } +} diff --git a/Caps/Views/ClassifierDownloadView.swift b/Caps/Views/ClassifierDownloadView.swift index 755d003..35d6ee6 100644 --- a/Caps/Views/ClassifierDownloadView.swift +++ b/Caps/Views/ClassifierDownloadView.swift @@ -2,9 +2,8 @@ import SwiftUI struct ClassifierDownloadView: View { - @ObservedObject - var progress: Database.ClassifierProgress - + let progress: ClassifierProgress + var body: some View { VStack { ProgressView("Downloading classifier...", value: progress.bytesLoaded, total: Double(progress.total)) @@ -19,5 +18,8 @@ struct ClassifierDownloadView: View { } #Preview { - ClassifierDownloadView(progress: .init(bytesLoaded: 12_300_000, total: 24_500_000)) + ClassifierDownloadView(progress: .init( + bytesLoaded: 12_300_000, + total: 24_500_000) + ) }