Files
ddc/internal/jobs/restore.go
T
2026-10-25 20:24:50 -04:00

52 lines
1.1 KiB
Go
Executable File

package jobs
import (
"os"
"path/filepath"
"regexp"
"time"
"ddc/internal/files"
)
var jobIDPattern = regexp.MustCompile(`^[0-9a-f]{32}$`)
func (manager *Manager) RestoreExisting() error {
entries, err := os.ReadDir(manager.settings.DownloadDir)
if err != nil {
return err
}
for _, entry := range entries {
if !entry.IsDir() || !jobIDPattern.MatchString(entry.Name()) {
continue
}
directory := filepath.Join(manager.settings.DownloadDir, entry.Name())
os.Remove(filepath.Join(directory, files.PartFileName))
createdAt := time.Now()
if info, err := entry.Info(); err == nil {
createdAt = info.ModTime()
}
job := manager.newJob(entry.Name(), directory, createdAt)
job.status = StatusReady
job.fileName = firstEntryName(directory, entry.Name())
manager.store(job)
}
return nil
}
func firstEntryName(directory, fallback string) string {
entries, err := os.ReadDir(directory)
if err != nil {
return fallback
}
for _, entry := range entries {
if entry.Name() != files.PartFileName {
return entry.Name()
}
}
return fallback
}