Display statistics for password
This commit is contained in:
parent
91e535243a
commit
fe2f48d2f8
2 changed files with 39 additions and 0 deletions
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue