From 7886ed69a20f39f1b73f78738c42dc82a8677843 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 25 May 2024 16:02:18 +0200 Subject: [PATCH] Verify if downloadable --- internal/torrent/manager.go | 8 ++++---- internal/torrent/repair.go | 32 ++++++++++++++++---------------- internal/universal/downloader.go | 4 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/internal/torrent/manager.go b/internal/torrent/manager.go index c2dbccc..81d00e2 100644 --- a/internal/torrent/manager.go +++ b/internal/torrent/manager.go @@ -93,12 +93,12 @@ func NewTorrentManager(cfg config.ConfigInterface, api *realdebrid.RealDebrid, w } // proxy function -func (t *TorrentManager) UnrestrictLinkUntilOk(link string) *realdebrid.Download { +func (t *TorrentManager) UnrestrictLinkUntilOk(link string, checkFirstByte bool) *realdebrid.Download { if strings.HasPrefix(link, "https://real-debrid.com/d/") && t.DownloadMap.Has(link[0:39]) { ret, _ := t.DownloadMap.Get(link[0:39]) return ret } - ret, err := t.api.UnrestrictLink(link, t.Config.ShouldServeFromRclone()) + ret, err := t.api.UnrestrictLink(link, checkFirstByte) t.DownloadMap.Set(ret.Link[0:39], ret) if err != nil { t.log.Warnf("Cannot unrestrict link %s: %v", link, err) @@ -108,11 +108,11 @@ func (t *TorrentManager) UnrestrictLinkUntilOk(link string) *realdebrid.Download return ret } -func (t *TorrentManager) UnrestrictFileUntilOk(file *File) *realdebrid.Download { +func (t *TorrentManager) UnrestrictFileUntilOk(file *File, checkFirstByte bool) *realdebrid.Download { if !file.State.Is("ok_file") { return nil } - return t.UnrestrictLinkUntilOk(file.Link) + return t.UnrestrictLinkUntilOk(file.Link, checkFirstByte) } func (t *TorrentManager) GetKey(torrent *Torrent) string { diff --git a/internal/torrent/repair.go b/internal/torrent/repair.go index 8508eb7..020cb61 100644 --- a/internal/torrent/repair.go +++ b/internal/torrent/repair.go @@ -177,7 +177,7 @@ func (t *TorrentManager) repair(torrent *Torrent) { if !file.State.Is("ok_file") { return } - if t.UnrestrictFileUntilOk(file) == nil { + if t.UnrestrictFileUntilOk(file, true) == nil { file.State.Event(context.Background(), "break_file") } }) @@ -292,7 +292,7 @@ func (t *TorrentManager) assignLinks(torrent *Torrent) bool { torrent.UnassignedLinks.Each(func(link string) bool { // unrestrict each unassigned link that was filled out during torrent init - unrestrict := t.UnrestrictLinkUntilOk(link) + unrestrict := t.UnrestrictLinkUntilOk(link, true) if unrestrict == nil { expiredCount++ return false // next unassigned link @@ -393,19 +393,6 @@ func (t *TorrentManager) redownloadTorrent(torrent *Torrent, selection []string) prevState := t.latestState resp, err := t.api.AddMagnetHash(torrent.Hash) if err != nil { - if strings.Contains(err.Error(), "infringing") { - t.markAsUnfixable(torrent, "infringing torrent") - } else if strings.Contains(err.Error(), "unsupported") { - t.markAsUnfixable(torrent, "unsupported torrent") - } else if strings.Contains(err.Error(), "unavailable") { - t.markAsUnfixable(torrent, "unavailable torrent") - } else if strings.Contains(err.Error(), "invalid") { - t.markAsUnfixable(torrent, "invalid torrent") - } else if strings.Contains(err.Error(), "big") { - t.markAsUnfixable(torrent, "torrent too big") - } else if strings.Contains(err.Error(), "allowed") { - t.markAsUnfixable(torrent, "torrent not allowed") - } if strings.Contains(err.Error(), "timeout") { newState := t.getCurrentState() if prevState.Eq(newState) { @@ -413,6 +400,19 @@ func (t *TorrentManager) redownloadTorrent(torrent *Torrent, selection []string) } newTorrentID = t.latestState.FirstTorrentId } else { + if strings.Contains(err.Error(), "infringing") { + t.markAsUnfixable(torrent, "infringing torrent") + } else if strings.Contains(err.Error(), "unsupported") { + t.markAsUnfixable(torrent, "unsupported torrent") + } else if strings.Contains(err.Error(), "unavailable") { + t.markAsUnfixable(torrent, "unavailable torrent") + } else if strings.Contains(err.Error(), "invalid") { + t.markAsUnfixable(torrent, "invalid torrent") + } else if strings.Contains(err.Error(), "big") { + t.markAsUnfixable(torrent, "torrent too big") + } else if strings.Contains(err.Error(), "allowed") { + t.markAsUnfixable(torrent, "torrent not allowed") + } return nil, fmt.Errorf("cannot add magnet of torrent %s (hash=%s): %v", t.GetKey(torrent), torrent.Hash, err) } } @@ -590,7 +590,7 @@ func (t *TorrentManager) isStillBroken(info *realdebrid.TorrentInfo, brokenFiles // check if the broken files can now be unrestricted for _, oldFile := range brokenFiles { for idx, newFile := range selectedFiles { - if oldFile.ID == newFile.ID && t.UnrestrictFileUntilOk(selectedFiles[idx]) == nil { + if oldFile.ID == newFile.ID && t.UnrestrictFileUntilOk(selectedFiles[idx], true) == nil { return true } } diff --git a/internal/universal/downloader.go b/internal/universal/downloader.go index a2d1a81..995d88a 100644 --- a/internal/universal/downloader.go +++ b/internal/universal/downloader.go @@ -61,7 +61,7 @@ func (dl *Downloader) DownloadFile( return } - unrestrict := torMgr.UnrestrictFileUntilOk(file) + unrestrict := torMgr.UnrestrictFileUntilOk(file, cfg.ShouldServeFromRclone()) if unrestrict == nil { log.Warnf("File %s cannot be unrestricted (link=%s)", fileName, file.Link) if err := file.State.Event(context.Background(), "break_file"); err != nil { @@ -104,7 +104,7 @@ func (dl *Downloader) DownloadLink( log *logutil.Logger, ) { // log.Debugf("Opening file %s (%s)", fileName, link) - unrestrict := torMgr.UnrestrictLinkUntilOk(link) + unrestrict := torMgr.UnrestrictLinkUntilOk(link, cfg.ShouldServeFromRclone()) if unrestrict == nil { log.Warnf("File %s cannot be unrestricted (link=%s)", fileName, link) http.Error(resp, "File is not available", http.StatusInternalServerError)