1.0.2 - Widget and Photos fixes
This commit is contained in:
@@ -32,6 +32,27 @@ class ClimbingDataManager: ObservableObject {
|
||||
static let activeSession = "openclimb_active_session"
|
||||
}
|
||||
|
||||
// Widget data models
|
||||
private struct WidgetAttempt: Codable {
|
||||
let id: String
|
||||
let sessionId: String
|
||||
let problemId: String
|
||||
let timestamp: Date
|
||||
let result: String
|
||||
}
|
||||
|
||||
private struct WidgetSession: Codable {
|
||||
let id: String
|
||||
let gymId: String
|
||||
let date: Date
|
||||
let status: String
|
||||
}
|
||||
|
||||
private struct WidgetGym: Codable {
|
||||
let id: String
|
||||
let name: String
|
||||
}
|
||||
|
||||
init() {
|
||||
_ = ImageManager.shared
|
||||
loadAllData()
|
||||
@@ -97,8 +118,13 @@ class ClimbingDataManager: ObservableObject {
|
||||
private func saveGyms() {
|
||||
if let data = try? encoder.encode(gyms) {
|
||||
userDefaults.set(data, forKey: Keys.gyms)
|
||||
// Share with widget
|
||||
sharedUserDefaults?.set(data, forKey: Keys.gyms)
|
||||
// Share with widget - convert to widget format
|
||||
let widgetGyms = gyms.map { gym in
|
||||
WidgetGym(id: gym.id.uuidString, name: gym.name)
|
||||
}
|
||||
if let widgetData = try? encoder.encode(widgetGyms) {
|
||||
sharedUserDefaults?.set(widgetData, forKey: Keys.gyms)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,16 +139,37 @@ class ClimbingDataManager: ObservableObject {
|
||||
private func saveSessions() {
|
||||
if let data = try? encoder.encode(sessions) {
|
||||
userDefaults.set(data, forKey: Keys.sessions)
|
||||
// Share with widget
|
||||
sharedUserDefaults?.set(data, forKey: Keys.sessions)
|
||||
// Share with widget - convert to widget format
|
||||
let widgetSessions = sessions.map { session in
|
||||
WidgetSession(
|
||||
id: session.id.uuidString,
|
||||
gymId: session.gymId.uuidString,
|
||||
date: session.date,
|
||||
status: session.status.rawValue
|
||||
)
|
||||
}
|
||||
if let widgetData = try? encoder.encode(widgetSessions) {
|
||||
sharedUserDefaults?.set(widgetData, forKey: Keys.sessions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func saveAttempts() {
|
||||
if let data = try? encoder.encode(attempts) {
|
||||
userDefaults.set(data, forKey: Keys.attempts)
|
||||
// Share with widget
|
||||
sharedUserDefaults?.set(data, forKey: Keys.attempts)
|
||||
// Share with widget - convert to widget format
|
||||
let widgetAttempts = attempts.map { attempt in
|
||||
WidgetAttempt(
|
||||
id: attempt.id.uuidString,
|
||||
sessionId: attempt.sessionId.uuidString,
|
||||
problemId: attempt.problemId.uuidString,
|
||||
timestamp: attempt.timestamp,
|
||||
result: attempt.result.rawValue
|
||||
)
|
||||
}
|
||||
if let widgetData = try? encoder.encode(widgetAttempts) {
|
||||
sharedUserDefaults?.set(widgetData, forKey: Keys.attempts)
|
||||
}
|
||||
// Update widget timeline
|
||||
updateWidgetTimeline()
|
||||
}
|
||||
@@ -1020,8 +1067,14 @@ extension ClimbingDataManager {
|
||||
private func updateLiveActivityForActiveSession() {
|
||||
guard let activeSession = activeSession,
|
||||
activeSession.status == .active,
|
||||
let _ = gym(withId: activeSession.gymId)
|
||||
let gym = gym(withId: activeSession.gymId)
|
||||
else {
|
||||
print("⚠️ Live Activity update skipped - no active session or gym")
|
||||
if let session = activeSession {
|
||||
print(" Session ID: \(session.id)")
|
||||
print(" Session Status: \(session.status)")
|
||||
print(" Gym ID: \(session.gymId)")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1040,6 +1093,16 @@ extension ClimbingDataManager {
|
||||
elapsedInterval = 0
|
||||
}
|
||||
|
||||
print("🔄 Live Activity Update Debug:")
|
||||
print(" Session ID: \(activeSession.id)")
|
||||
print(" Gym: \(gym.name)")
|
||||
print(" Total attempts in session: \(totalAttempts)")
|
||||
print(" Completed problems: \(completedProblems)")
|
||||
print(" Elapsed time: \(elapsedInterval) seconds")
|
||||
print(
|
||||
" All attempts for session: \(attemptsForSession.map { "\($0.result) - Problem: \($0.problemId)" })"
|
||||
)
|
||||
|
||||
Task {
|
||||
await LiveActivityManager.shared.updateLiveActivity(
|
||||
elapsed: elapsedInterval,
|
||||
@@ -1061,6 +1124,14 @@ extension ClimbingDataManager {
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Debug function to manually trigger widget data update
|
||||
func debugUpdateWidgetData() {
|
||||
// Force save all data to widget
|
||||
saveGyms()
|
||||
saveSessions()
|
||||
saveAttempts()
|
||||
}
|
||||
|
||||
private func validateImportData(_ importData: ClimbDataExport) throws {
|
||||
if importData.gyms.isEmpty {
|
||||
throw NSError(
|
||||
|
||||
Reference in New Issue
Block a user