From 1d992b0bd2f3d878b0587573ed57acc5be9bf59f Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Thu, 29 Feb 2024 15:39:07 +0100 Subject: [PATCH] Fix upload of failed images, missing caps --- Caps/Data/Database.swift | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/Caps/Data/Database.swift b/Caps/Data/Database.swift index dea54d2..3ef6acb 100644 --- a/Caps/Data/Database.swift +++ b/Caps/Data/Database.swift @@ -89,10 +89,14 @@ final class Database: ObservableObject { pendingImageUploadStorage = newValue.map { cap, images in "\(cap)-\(images.map { "\($0)" }.joined(separator: ":"))" }.joined(separator: ";") - pendingImageUploadCount = newValue.values.reduce(0) { $0 + $1.count } + updatePendingImageUploadCount(imageUploads: newValue) } } - + + private func updatePendingImageUploadCount(imageUploads: [Int: [Int]]) { + pendingImageUploadCount = imageUploads.values.reduce(0) { $0 + $1.count } + } + @Published private(set) var pendingImageUploadCount = 0 @@ -171,6 +175,7 @@ final class Database: ObservableObject { ensureFolderExistence(gridStorageFolder) loadCaps() + updatePendingImageUploadCount(imageUploads: imageUploads) } func mainImage(for cap: Int) -> Int { @@ -587,7 +592,7 @@ final class Database: ObservableObject { continue } guard await upload(imageAt: url, for: cap) else { - log("Failed to upload image \(url.lastPathComponent)") + //log("Failed to upload image \(url.lastPathComponent)") continue } log("Uploaded image \(image) for cap \(cap)") @@ -614,10 +619,10 @@ final class Database: ObservableObject { log("No image data found for image \(url.lastPathComponent) (Cap \(cap))") return false } - let url = serverUrl + let serverUrl = serverUrl .appendingPathComponent("image") .appendingPathComponent("\(cap)") - var request = URLRequest(url: url) + var request = URLRequest(url: serverUrl) request.addValue(serverAuthenticationKey, forHTTPHeaderField: "key") request.httpMethod = "POST" do { @@ -627,7 +632,15 @@ final class Database: ObservableObject { return false } guard httpResponse.statusCode == 200 else { - log("Failed to upload image \(url.path): Response \(httpResponse.statusCode)") + if httpResponse.statusCode == 410 { + log("Missing cap for image \(url.lastPathComponent), reupload cap") + // Missing cap, force upload + DispatchQueue.main.async { + self.changedCaps.insert(cap) + } + } else { + log("Failed to upload image \(url.lastPathComponent): Response \(httpResponse.statusCode)") + } return false } return true