Display statistics for password

This commit is contained in:
Markus Thielker 2025-01-19 19:43:45 +01:00
parent 91e535243a
commit fe2f48d2f8
No known key found for this signature in database
2 changed files with 39 additions and 0 deletions

View file

@ -63,6 +63,15 @@ struct DetailView: View {
elapsedTime = -1 elapsedTime = -1
} }
} }
HStack {
Spacer()
Text("Attempts: \(viewModel.statistics.totalCount)")
Spacer()
Text("Successful: \(viewModel.statistics.successCount) (\(viewModel.statistics.successRate, specifier: "%.2f")%)")
Spacer()
Text("Avg. time: \(viewModel.statistics.averageTime, specifier: "%.2f")s")
Spacer()
}
} }
.padding() .padding()
} }

View file

@ -8,6 +8,13 @@
import Foundation import Foundation
import SwiftData import SwiftData
struct PasswordAttemptStatistics {
let totalCount: Int
let successCount: Int
let successRate: Double
let averageTime: Double
}
class DetailViewModel: ObservableObject { class DetailViewModel: ObservableObject {
let passwordID: UUID let passwordID: UUID
@ -19,6 +26,29 @@ class DetailViewModel: ObservableObject {
@Published var passwordKC: PasswordKC @Published var passwordKC: PasswordKC
@Published var passwordAttempts: [PasswordAttempt] @Published var passwordAttempts: [PasswordAttempt]
var statistics: PasswordAttemptStatistics {
guard !passwordAttempts.isEmpty else {
return PasswordAttemptStatistics(
totalCount: 0,
successCount: 0,
successRate: 0.00,
averageTime: 0.00
)
}
let totalCount = passwordAttempts.count
let successCount = passwordAttempts.filter { $0.isSuccessful }.count
let successRate = Double(successCount) / Double(totalCount) * 100
let averageTime = passwordAttempts.count > 0 ? passwordAttempts.reduce(0) { $0 + $1.typingTime } / Double(passwordAttempts.count) : 0
return PasswordAttemptStatistics(
totalCount: totalCount,
successCount: successCount,
successRate: successRate,
averageTime: averageTime
)
}
@MainActor @MainActor
init(context: ModelContext, passwordID id: UUID) { init(context: ModelContext, passwordID id: UUID) {
self.context = context self.context = context