forked from firka/firka
Enhance time formatting by adding language detection for compact time and seasonal break methods
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
import Foundation
|
||||
import ActivityKit
|
||||
|
||||
struct TimeFormatHelper {
|
||||
static func compactTime(remaining: TimeInterval) -> String {
|
||||
let lang = Locale.current.languageCode ?? "hu"
|
||||
static func compactTime(remaining: TimeInterval, labels: TimetableActivityAttributes.ContentState.Labels?) -> String {
|
||||
let lang = detectLanguage(from: labels)
|
||||
|
||||
let hours = Int(max(0, remaining)) / 3600
|
||||
let minutes = (Int(max(0, remaining)) % 3600) / 60
|
||||
@@ -14,8 +15,8 @@ struct TimeFormatHelper {
|
||||
}
|
||||
}
|
||||
|
||||
static func compactSeasonalBreak(from message: String) -> String {
|
||||
let lang = Locale.current.languageCode ?? "hu"
|
||||
static func compactSeasonalBreak(from message: String, labels: TimetableActivityAttributes.ContentState.Labels?) -> String {
|
||||
let lang = detectLanguage(from: labels)
|
||||
|
||||
let components = message.split(separator: " ")
|
||||
let number = components.first.map(String.init) ?? ""
|
||||
@@ -31,12 +32,34 @@ struct TimeFormatHelper {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Language Detection
|
||||
|
||||
private static func detectLanguage(from labels: TimetableActivityAttributes.ContentState.Labels?) -> String {
|
||||
guard let labels = labels else {
|
||||
return Locale.current.languageCode ?? "hu"
|
||||
}
|
||||
|
||||
if let text = labels.remainingLabel ?? labels.cancelledText {
|
||||
let lower = text.lowercased()
|
||||
|
||||
if lower.contains("time") || lower.contains("remaining") || lower.contains("cancelled") {
|
||||
return "en"
|
||||
} else if lower.contains("verbleibende") || lower.contains("zeit") || lower.contains("entfallen") {
|
||||
return "de"
|
||||
} else {
|
||||
return "hu"
|
||||
}
|
||||
}
|
||||
|
||||
return Locale.current.languageCode ?? "hu"
|
||||
}
|
||||
|
||||
// MARK: - Private Helpers
|
||||
|
||||
private static func shortHours(_ hours: Int, language: String) -> String {
|
||||
switch language {
|
||||
case "en": return "\(hours)h"
|
||||
case "de": return "\(hours)h"
|
||||
case "de": return "\(hours)td"
|
||||
case "hu": return "\(hours)ó"
|
||||
default: return "\(hours)h"
|
||||
}
|
||||
@@ -45,7 +68,7 @@ struct TimeFormatHelper {
|
||||
private static func shortMinutes(_ minutes: Int, language: String) -> String {
|
||||
switch language {
|
||||
case "en": return "\(minutes)m"
|
||||
case "de": return "\(minutes)m"
|
||||
case "de": return "\(minutes)Min"
|
||||
case "hu": return "\(minutes)p"
|
||||
default: return "\(minutes)m"
|
||||
}
|
||||
@@ -54,7 +77,7 @@ struct TimeFormatHelper {
|
||||
private static func shortDays(_ days: Int, language: String) -> String {
|
||||
switch language {
|
||||
case "en": return "\(days)d"
|
||||
case "de": return "\(days)d"
|
||||
case "de": return "\(days)T"
|
||||
case "hu": return "\(days)n"
|
||||
default: return "\(days)d"
|
||||
}
|
||||
|
||||
@@ -245,7 +245,10 @@ struct TimetableLiveActivity: Widget {
|
||||
} compactTrailing: {
|
||||
if mode == "seasonalBreak" {
|
||||
// Seasonal break: static short format from backend message
|
||||
let compactText = TimeFormatHelper.compactSeasonalBreak(from: context.state.message ?? "")
|
||||
let compactText = TimeFormatHelper.compactSeasonalBreak(
|
||||
from: context.state.message ?? "",
|
||||
labels: context.state.labels
|
||||
)
|
||||
|
||||
Text(compactText)
|
||||
.font(.system(size: 12, weight: .semibold, design: .rounded))
|
||||
@@ -259,10 +262,12 @@ struct TimetableLiveActivity: Widget {
|
||||
.font(.system(size: 12, weight: .semibold))
|
||||
.frame(width: 50)
|
||||
} else {
|
||||
// Dynamic short format for lesson/break/beforeSchool/newYearEve
|
||||
TimelineView(.periodic(from: context.state.currentTime, by: 60.0)) { timeline in
|
||||
let remaining = context.state.endTime.timeIntervalSince(timeline.date)
|
||||
let compactText = TimeFormatHelper.compactTime(remaining: remaining)
|
||||
let compactText = TimeFormatHelper.compactTime(
|
||||
remaining: remaining,
|
||||
labels: context.state.labels
|
||||
)
|
||||
|
||||
Text(compactText)
|
||||
.font(.system(size: 12, weight: .semibold, design: .rounded))
|
||||
|
||||
Reference in New Issue
Block a user