Files
musenalm/controllers/settings_helpers.go
Simon Martens 82c3c9c1e3 +FTS5 Rebuild
2026-01-30 16:22:19 +01:00

79 lines
1.9 KiB
Go

package controllers
import (
"encoding/json"
"strings"
"github.com/Theodor-Springmann-Stiftung/musenalm/helpers/functions"
"github.com/pocketbase/pocketbase/tools/types"
)
func parseSettingString(value any) (string, bool) {
switch v := value.(type) {
case string:
return strings.TrimSpace(v), true
case []byte:
if len(v) == 0 {
return "", false
}
var parsed string
if err := json.Unmarshal(v, &parsed); err == nil {
return strings.TrimSpace(parsed), true
}
return strings.TrimSpace(string(v)), true
case json.RawMessage:
if len(v) == 0 {
return "", false
}
var parsed string
if err := json.Unmarshal(v, &parsed); err == nil {
return strings.TrimSpace(parsed), true
}
return strings.TrimSpace(string(v)), true
default:
return "", false
}
}
func formatSettingDateTime(value any) (string, bool) {
if value == nil {
return "", false
}
if dt, err := types.ParseDateTime(value); err == nil && !dt.IsZero() {
return functions.GermanShortDateTime(dt), true
}
if raw, ok := parseSettingString(value); ok {
clean := strings.Trim(raw, "\"")
if dt, err := types.ParseDateTime(clean); err == nil && !dt.IsZero() {
return functions.GermanShortDateTime(dt), true
}
if clean != "" {
return clean, true
}
}
return "", false
}
func parseSettingDateTime(value any) (types.DateTime, bool) {
if value == nil {
return types.DateTime{}, false
}
if dt, err := types.ParseDateTime(value); err == nil && !dt.IsZero() {
return dt, true
}
if raw, ok := parseSettingString(value); ok {
clean := strings.Trim(raw, "\"")
if dt, err := types.ParseDateTime(clean); err == nil && !dt.IsZero() {
return dt, true
}
}
return types.DateTime{}, false
}
func formatSettingGermanDateTime(value any) (string, bool) {
if dt, ok := parseSettingDateTime(value); ok {
return functions.GermanDate(dt) + " " + functions.GermanTime(dt), true
}
return "", false
}