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 }