From 130cc0d7b3cb3281f8f86e4ba7378f9013c93b09 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 30 Apr 2024 06:13:21 +0200 Subject: [PATCH] 100 broken files at a time --- internal/torrent/repair.go | 49 ++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/internal/torrent/repair.go b/internal/torrent/repair.go index 8540a84..dcd4136 100644 --- a/internal/torrent/repair.go +++ b/internal/torrent/repair.go @@ -210,36 +210,33 @@ func (t *TorrentManager) repair(torrent *Torrent) { t.log.Infof("Repairing by downloading 2 batches of the %d broken files of torrent %s", len(brokenFiles), t.GetKey(torrent)) oldTorrentIDs := torrent.DownloadedIDs.Union(torrent.InProgressIDs).ToSlice() - // divide the broken files into 2 groups - group1 := make([]*File, 0) - group2 := make([]*File, 0) - for idx, file := range brokenFiles { - if idx%2 == 0 { - group1 = append(group1, file) - } else { - group2 = append(group2, file) - } - } - brokenFileIDs1 := getFileIDs(group1) - redownloadedInfo1, err1 := t.redownloadTorrent(torrent, brokenFileIDs1) - if err1 != nil { - t.log.Warnf("Cannot repair torrent %s by downloading broken files (error=%s) giving up", t.GetKey(torrent), err1.Error()) - return - } - if redownloadedInfo1 != nil { - brokenFileIDs2 := getFileIDs(group2) - redownloadedInfo2, err2 := t.redownloadTorrent(torrent, brokenFileIDs2) - if err2 != nil { - t.log.Warnf("Cannot repair torrent %s by downloading broken files (error=%s) giving up", t.GetKey(torrent), err2.Error()) - return - } - if redownloadedInfo2 != nil { - for _, oldId := range oldTorrentIDs { - t.fixerAddCommand(oldId, "replaced") + + group := make([]*File, 0) + for _, file := range brokenFiles { + group = append(group, file) + if len(group) == 100 { + brokenFileIDs := getFileIDs(group) + _, err := t.redownloadTorrent(torrent, brokenFileIDs) + if err != nil { + t.log.Warnf("Cannot repair torrent %s by downloading broken files (error=%s) giving up", t.GetKey(torrent), err.Error()) + return } + group = make([]*File, 0) + } + } + + if len(group) > 0 { + brokenFileIDs := getFileIDs(group) + _, err := t.redownloadTorrent(torrent, brokenFileIDs) + if err != nil { + t.log.Warnf("Cannot repair torrent %s by downloading broken files (error=%s) giving up", t.GetKey(torrent), err.Error()) return } } + + for _, oldId := range oldTorrentIDs { + t.fixerAddCommand(oldId, "replaced") + } } }