Files

83 lines
1.8 KiB
Go
Raw Permalink Normal View History

2025-12-21 09:15:08 +01:00
package pdfrender
import (
"os"
"path/filepath"
"regexp"
"strings"
"time"
)
// SanitizeFilename removes or replaces characters that are problematic in filenames
func SanitizeFilename(name string) string {
// Replace umlauts
replacements := map[string]string{
"ä": "ae", "Ä": "Ae",
"ö": "oe", "Ö": "Oe",
"ü": "ue", "Ü": "Ue",
"ß": "ss",
}
result := name
for old, new := range replacements {
result = strings.ReplaceAll(result, old, new)
}
// Replace problematic characters with underscore
reg := regexp.MustCompile(`[^a-zA-Z0-9_.-]+`)
result = reg.ReplaceAllString(result, "_")
// Remove consecutive underscores
reg = regexp.MustCompile(`_+`)
result = reg.ReplaceAllString(result, "_")
// Trim underscores from start and end
result = strings.Trim(result, "_")
return result
}
// GenerateExportFilename creates a filename from character name and timestamp
func GenerateExportFilename(charName string, timestamp time.Time) string {
sanitizedName := SanitizeFilename(charName)
timeStr := timestamp.Format("20060102_150405")
return sanitizedName + "_" + timeStr + ".pdf"
}
// EnsureExportTempDir creates the export temp directory if it doesn't exist
func EnsureExportTempDir(dir string) error {
return os.MkdirAll(dir, 0755)
}
// CleanupOldFiles removes files older than maxAge from the directory
// Returns the number of files deleted
func CleanupOldFiles(dir string, maxAge time.Duration) (int, error) {
entries, err := os.ReadDir(dir)
if err != nil {
return 0, err
}
count := 0
cutoff := time.Now().Add(-maxAge)
for _, entry := range entries {
if entry.IsDir() {
continue
}
filePath := filepath.Join(dir, entry.Name())
info, err := entry.Info()
if err != nil {
continue
}
if info.ModTime().Before(cutoff) {
if err := os.Remove(filePath); err == nil {
count++
}
}
}
return count, nil
}