Allow cap deletion
This commit is contained in:
@ -35,7 +35,11 @@ final class Database: ObservableObject {
|
||||
}
|
||||
|
||||
var nextCapId: Int {
|
||||
(caps.values.max()?.id ?? 0) + 1
|
||||
var next = 1
|
||||
while caps[next] != nil {
|
||||
next += 1
|
||||
}
|
||||
return next
|
||||
}
|
||||
|
||||
@AppStorage("changed")
|
||||
@ -621,15 +625,15 @@ final class Database: ObservableObject {
|
||||
|
||||
func delete(image: CapImage) async -> Bool {
|
||||
guard hasServerAuthentication else {
|
||||
log("No authorization to set main image")
|
||||
log("No authorization to delete cap image")
|
||||
return false
|
||||
}
|
||||
guard var cap = cap(for: image.cap) else {
|
||||
log("No cap \(image.cap) to set main image")
|
||||
guard let cap = cap(for: image.cap) else {
|
||||
log("No cap \(image.cap) to delete cap image")
|
||||
return false
|
||||
}
|
||||
guard image.version < cap.imageCount else {
|
||||
log("Invalid main image \(image.version) for \(cap.id) with only \(cap.imageCount) images")
|
||||
log("Invalid image \(image.version) to delete for \(cap.id) with only \(cap.imageCount) images")
|
||||
return false
|
||||
}
|
||||
|
||||
@ -667,6 +671,43 @@ final class Database: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
func delete(cap: Int) async -> Bool {
|
||||
guard hasServerAuthentication else {
|
||||
log("No authorization to delete cap")
|
||||
return false
|
||||
}
|
||||
guard caps[cap] != nil else {
|
||||
log("No cap \(cap) to delete")
|
||||
return false
|
||||
}
|
||||
|
||||
let url = serverUrl.appendingPathComponent("delete/\(cap)")
|
||||
var request = URLRequest(url: url)
|
||||
request.httpMethod = "POST"
|
||||
request.addValue(serverAuthenticationKey, forHTTPHeaderField: "key")
|
||||
do {
|
||||
let (_, response) = try await URLSession.shared.data(for: request)
|
||||
guard let httpResponse = response as? HTTPURLResponse else {
|
||||
log("Unexpected response deleting cap \(cap): \(response)")
|
||||
return false
|
||||
}
|
||||
guard httpResponse.statusCode == 200 else {
|
||||
log("Failed to delete cap \(cap): Response \(httpResponse.statusCode)")
|
||||
return false
|
||||
}
|
||||
|
||||
// Delete cached images
|
||||
images.removeCachedImages(for: cap)
|
||||
// Delete cap
|
||||
caps[cap] = nil
|
||||
log("Deleted cap \(cap)")
|
||||
return true
|
||||
} catch {
|
||||
log("Failed to delete cap \(cap): \(error)")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Classification
|
||||
|
||||
/// The compiled recognition model on disk
|
||||
|
Reference in New Issue
Block a user