From bf328c2629f27c2335633d6ecdaf5774bce01f9c Mon Sep 17 00:00:00 2001 From: Rune Olsen Date: Tue, 28 Jul 2026 12:56:37 +0200 Subject: [PATCH] Fix Swift 6 warnings in usage stats and folder deletion UsageStats/ModelUsageStat/ConversationUsageStat need explicit nonisolated inits under this project's SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor setting, same as Message/Conversation. deleteFolder also discarded FolderRecord.deleteOne's Bool result implicitly via the write closure's return value. --- oAI/Models/UsageStats.swift | 56 +++++++++++++++++++++++++++--- oAI/Services/DatabaseService.swift | 2 +- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/oAI/Models/UsageStats.swift b/oAI/Models/UsageStats.swift index a35fa7d..8a7f520 100644 --- a/oAI/Models/UsageStats.swift +++ b/oAI/Models/UsageStats.swift @@ -24,13 +24,29 @@ import Foundation struct UsageStats: Sendable { - var totalMessages: Int = 0 - var totalTokens: Int = 0 - var totalCost: Double = 0.0 - var hasCostData: Bool = false + var totalMessages: Int + var totalTokens: Int + var totalCost: Double + var hasCostData: Bool var firstMessageDate: Date? var lastMessageDate: Date? + nonisolated init( + totalMessages: Int = 0, + totalTokens: Int = 0, + totalCost: Double = 0.0, + hasCostData: Bool = false, + firstMessageDate: Date? = nil, + lastMessageDate: Date? = nil + ) { + self.totalMessages = totalMessages + self.totalTokens = totalTokens + self.totalCost = totalCost + self.hasCostData = hasCostData + self.firstMessageDate = firstMessageDate + self.lastMessageDate = lastMessageDate + } + var totalTokensDisplay: String { if totalTokens >= 1_000_000 { return String(format: "%.1fM", Double(totalTokens) / 1_000_000) @@ -55,6 +71,22 @@ struct ModelUsageStat: Identifiable, Sendable { var hasCostData: Bool var lastUsed: Date + nonisolated init( + modelId: String, + messageCount: Int, + totalTokens: Int, + totalCost: Double, + hasCostData: Bool, + lastUsed: Date + ) { + self.modelId = modelId + self.messageCount = messageCount + self.totalTokens = totalTokens + self.totalCost = totalCost + self.hasCostData = hasCostData + self.lastUsed = lastUsed + } + var totalTokensDisplay: String { if totalTokens >= 1_000_000 { return String(format: "%.1fM", Double(totalTokens) / 1_000_000) @@ -79,6 +111,22 @@ struct ConversationUsageStat: Identifiable, Sendable { var totalCost: Double var hasCostData: Bool + nonisolated init( + conversationId: UUID, + name: String, + messageCount: Int, + totalTokens: Int, + totalCost: Double, + hasCostData: Bool + ) { + self.conversationId = conversationId + self.name = name + self.messageCount = messageCount + self.totalTokens = totalTokens + self.totalCost = totalCost + self.hasCostData = hasCostData + } + var totalTokensDisplay: String { if totalTokens >= 1_000_000 { return String(format: "%.1fM", Double(totalTokens) / 1_000_000) diff --git a/oAI/Services/DatabaseService.swift b/oAI/Services/DatabaseService.swift index 9fdeee3..ea5d112 100644 --- a/oAI/Services/DatabaseService.swift +++ b/oAI/Services/DatabaseService.swift @@ -639,7 +639,7 @@ final class DatabaseService: Sendable { nonisolated func deleteFolder(id: UUID) throws { try dbQueue.write { db in - try FolderRecord.deleteOne(db, key: id.uuidString) + _ = try FolderRecord.deleteOne(db, key: id.uuidString) } }