Finalize all repair fixes
This commit is contained in:
@@ -40,10 +40,6 @@ func HandleGetRequest(w http.ResponseWriter, r *http.Request, t *torrent.Torrent
|
||||
}
|
||||
return
|
||||
}
|
||||
if data, exists := cache.Get(requestPath); exists {
|
||||
streamFileToResponse(data, w, r, t, c, log)
|
||||
return
|
||||
}
|
||||
|
||||
baseDirectory := segments[len(segments)-3]
|
||||
accessKey := segments[len(segments)-2]
|
||||
@@ -62,9 +58,15 @@ func HandleGetRequest(w http.ResponseWriter, r *http.Request, t *torrent.Torrent
|
||||
http.Error(w, "File not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
if data, exists := cache.Get(requestPath); exists {
|
||||
streamFileToResponse(torrent, data, w, r, t, c, log)
|
||||
return
|
||||
}
|
||||
|
||||
if file.Link == "" {
|
||||
// This is a dead file, serve an alternate file
|
||||
log.Errorf("File %s is no longer available", filename)
|
||||
log.Errorf("File %s is not yet available, zurg is repairing the torrent", filename)
|
||||
streamErrorVideo("https://www.youtube.com/watch?v=bGTqwt6vdcY", w, r, t, c, log)
|
||||
return
|
||||
}
|
||||
@@ -72,8 +74,8 @@ func HandleGetRequest(w http.ResponseWriter, r *http.Request, t *torrent.Torrent
|
||||
|
||||
resp := t.UnrestrictUntilOk(link)
|
||||
if resp == nil {
|
||||
log.Errorf("The link cannot be unrestricted, file %s is no longer available", file.Path)
|
||||
// TODO: maybe repair the torrent?
|
||||
go t.Repair(torrent.AccessKey)
|
||||
log.Errorf("File %s is no longer available, torrent is marked for repair", file.Path)
|
||||
streamErrorVideo("https://www.youtube.com/watch?v=gea_FJrtFVA", w, r, t, c, log)
|
||||
return
|
||||
} else if resp.Filename != filename {
|
||||
@@ -88,10 +90,10 @@ func HandleGetRequest(w http.ResponseWriter, r *http.Request, t *torrent.Torrent
|
||||
}
|
||||
}
|
||||
cache.Add(requestPath, resp.Download)
|
||||
streamFileToResponse(resp.Download, w, r, t, c, log)
|
||||
streamFileToResponse(torrent, resp.Download, w, r, t, c, log)
|
||||
}
|
||||
|
||||
func streamFileToResponse(url string, w http.ResponseWriter, r *http.Request, t *torrent.TorrentManager, c config.ConfigInterface, log *zap.SugaredLogger) {
|
||||
func streamFileToResponse(torrent *torrent.Torrent, url string, w http.ResponseWriter, r *http.Request, t *torrent.TorrentManager, c config.ConfigInterface, log *zap.SugaredLogger) {
|
||||
// Create a new request for the file download.
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil {
|
||||
@@ -105,19 +107,25 @@ func streamFileToResponse(url string, w http.ResponseWriter, r *http.Request, t
|
||||
req.Header.Add("Range", r.Header.Get("Range"))
|
||||
}
|
||||
|
||||
// Create a custom HTTP client with a timeout.
|
||||
// Create a custom HTTP client
|
||||
client := zurghttp.NewHTTPClient(c.GetToken(), 10)
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
log.Errorf("Error downloading file %v", err)
|
||||
log.Errorf("Error downloading file %v ; torrent is marked for repair", err)
|
||||
if torrent != nil {
|
||||
go t.Repair(torrent.AccessKey)
|
||||
}
|
||||
streamErrorVideo("https://www.youtube.com/watch?v=FSSd8cponAA", w, r, t, c, log)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusPartialContent {
|
||||
log.Errorf("Received a nonOK status code %d", resp.StatusCode)
|
||||
log.Errorf("Received a %s status code ; torrent is marked for repair", resp.Status)
|
||||
if torrent != nil {
|
||||
go t.Repair(torrent.AccessKey)
|
||||
}
|
||||
streamErrorVideo("https://www.youtube.com/watch?v=BcseUxviVqE", w, r, t, c, log)
|
||||
return
|
||||
}
|
||||
@@ -138,5 +146,5 @@ func streamErrorVideo(link string, w http.ResponseWriter, r *http.Request, t *to
|
||||
http.Error(w, "REAL-DEBRID IS DOWN", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
streamFileToResponse(resp.Download, w, r, t, c, log)
|
||||
streamFileToResponse(nil, resp.Download, w, r, t, c, log)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user