Add job for monitoring bw limit status of tokens
This commit is contained in:
@@ -38,7 +38,7 @@ func NewRealDebrid(apiClient, unrestrictClient, downloadClient *zurghttp.HTTPCli
|
||||
|
||||
rd := &RealDebrid{
|
||||
UnrestrictMap: cmap.New[cmap.ConcurrentMap[string, *Download]](),
|
||||
TokenManager: NewDownloadTokenManager(downloadTokens),
|
||||
TokenManager: NewDownloadTokenManager(downloadTokens, log),
|
||||
torrentsCache: []Torrent{},
|
||||
verifiedLinks: cmap.New[int64](),
|
||||
apiClient: apiClient,
|
||||
@@ -69,8 +69,8 @@ func (rd *RealDebrid) UnrestrictAndVerify(link string) (*Download, error) {
|
||||
}
|
||||
|
||||
// check if the link is already unrestricted
|
||||
tokenMap, ok := rd.UnrestrictMap.Get(token)
|
||||
if ok && tokenMap.Has(link) {
|
||||
tokenMap, _ := rd.UnrestrictMap.Get(token)
|
||||
if tokenMap.Has(link) {
|
||||
download, _ := tokenMap.Get(link)
|
||||
// check if the link is in the verified links cache
|
||||
if expiry, ok := rd.verifiedLinks.Get(download.ID); ok && expiry > time.Now().Unix() {
|
||||
@@ -78,8 +78,8 @@ func (rd *RealDebrid) UnrestrictAndVerify(link string) (*Download, error) {
|
||||
}
|
||||
|
||||
err := rd.downloadClient.VerifyLink(download.Download)
|
||||
if utils.IsBWLimitExceeded(err) {
|
||||
rd.TokenManager.SetTokenAsExpired(token)
|
||||
if utils.IsBytesLimitReached(err) {
|
||||
rd.TokenManager.SetTokenAsExpired(token, "bandwidth limit exceeded")
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
@@ -94,12 +94,13 @@ func (rd *RealDebrid) UnrestrictAndVerify(link string) (*Download, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
download.Token = token
|
||||
|
||||
tokenMap.Set(link, download)
|
||||
|
||||
err = rd.downloadClient.VerifyLink(download.Download)
|
||||
if utils.IsBWLimitExceeded(err) {
|
||||
rd.TokenManager.SetTokenAsExpired(token)
|
||||
if utils.IsBytesLimitReached(err) {
|
||||
rd.TokenManager.SetTokenAsExpired(token, "bandwidth limit exceeded")
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
@@ -404,3 +405,35 @@ func (rd *RealDebrid) AvailabilityCheck(hashes []string) (AvailabilityResponse,
|
||||
func (rd *RealDebrid) DownloadFile(req *http.Request) (*http.Response, error) {
|
||||
return rd.downloadClient.Do(req)
|
||||
}
|
||||
|
||||
// MonitorExpiredTokens is a permanent job for monitoring expired tokens if they are still expired
|
||||
func (rd *RealDebrid) MonitorExpiredTokens() {
|
||||
sleepPeriod := 5 * time.Minute
|
||||
rd.workerPool.Submit(func() {
|
||||
for {
|
||||
expiredTokens := rd.TokenManager.GetExpiredTokens()
|
||||
for _, token := range expiredTokens {
|
||||
tokenMap, _ := rd.UnrestrictMap.Get(token)
|
||||
stillExpired := true
|
||||
skipAll := false
|
||||
tokenMap.IterCb(func(key string, download *Download) {
|
||||
if skipAll {
|
||||
return
|
||||
}
|
||||
err := rd.downloadClient.VerifyLink(download.Download)
|
||||
if err != nil {
|
||||
skipAll = utils.IsBytesLimitReached(err)
|
||||
return
|
||||
}
|
||||
stillExpired = false
|
||||
skipAll = true
|
||||
rd.verifiedLinks.Set(download.ID, time.Now().Unix()+60*60*24)
|
||||
})
|
||||
if !stillExpired {
|
||||
rd.TokenManager.SetTokenAsUnexpired(token)
|
||||
}
|
||||
}
|
||||
time.Sleep(sleepPeriod)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user