diff --git a/downloader/downloader.go b/downloader/downloader.go index 63aa5b09e..0afafabb9 100644 --- a/downloader/downloader.go +++ b/downloader/downloader.go @@ -506,6 +506,23 @@ func (d *Downloader) createMagnetLinkWithInfoHash(ctx context.Context, hash *pro return false, nil } +func seedableFiles(snapDir string) ([]string, error) { + files, err := seedableSegmentFiles(snapDir) + if err != nil { + return nil, fmt.Errorf("seedableSegmentFiles: %w", err) + } + files2, err := seedableHistorySnapshots(snapDir, "history") + if err != nil { + return nil, fmt.Errorf("seedableHistorySnapshots: %w", err) + } + files = append(files, files2...) + files2, err = seedableHistorySnapshots(snapDir, "warm") + if err != nil { + return nil, fmt.Errorf("seedableHistorySnapshots: %w", err) + } + files = append(files, files2...) + return files, nil +} func (d *Downloader) addSegments(ctx context.Context) error { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() @@ -517,17 +534,12 @@ func (d *Downloader) addSegments(ctx context.Context) error { if err != nil { return fmt.Errorf("AddTorrentFiles: %w", err) } - files, err := seedableSegmentFiles(d.SnapDir()) - if err != nil { - return fmt.Errorf("seedableSegmentFiles: %w", err) - } - files2, err := seedableHistorySnapshots(d.SnapDir()) - if err != nil { - return fmt.Errorf("seedableHistorySnapshots: %w", err) - } - files = append(files, files2...) g, ctx := errgroup.WithContext(ctx) i := atomic.Int64{} + files, err := seedableFiles(d.SnapDir()) + if err != nil { + return err + } for _, f := range files { f := f g.Go(func() error { diff --git a/downloader/util.go b/downloader/util.go index 415c653c9..d37bcaa39 100644 --- a/downloader/util.go +++ b/downloader/util.go @@ -151,8 +151,8 @@ func seedableSegmentFiles(dir string) ([]string, error) { var historyFileRegex = regexp.MustCompile("^([[:lower:]]+).([0-9]+)-([0-9]+).(v|ef)$") -func seedableHistorySnapshots(dir string) ([]string, error) { - historyDir := filepath.Join(dir, "history") +func seedableHistorySnapshots(dir, subDir string) ([]string, error) { + historyDir := filepath.Join(dir, subDir) dir2.MustExist(historyDir) files, err := os.ReadDir(historyDir) if err != nil { @@ -234,15 +234,10 @@ func BuildTorrentFilesIfNeed(ctx context.Context, snapDir string) ([]string, err logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() - files, err := seedableSegmentFiles(snapDir) + files, err := seedableFiles(snapDir) if err != nil { return nil, err } - files2, err := seedableHistorySnapshots(snapDir) - if err != nil { - return nil, err - } - files = append(files, files2...) errs := make(chan error, len(files)*2) wg := &sync.WaitGroup{}