Feat: cache for OneDrive META request

This commit is contained in:
HFO4
2020-03-18 09:35:00 +08:00
parent 96983ddc70
commit 0eb04ed0ea
5 changed files with 30 additions and 29 deletions

View File

@@ -3,7 +3,9 @@ package onedrive
import (
"context"
"errors"
"fmt"
model "github.com/HFO4/cloudreve/models"
"github.com/HFO4/cloudreve/pkg/cache"
"github.com/HFO4/cloudreve/pkg/filesystem/fsctx"
"github.com/HFO4/cloudreve/pkg/filesystem/response"
"github.com/HFO4/cloudreve/pkg/request"
@@ -101,8 +103,20 @@ func (handler Driver) Source(
isDownload bool,
speed int,
) (string, error) {
// 尝试从缓存中查找
if cachedURL, ok := cache.Get(fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path)); ok {
return cachedURL.(string), nil
}
// 缓存不存在,重新获取
res, err := handler.Client.Meta(ctx, "", path)
if err == nil {
// 写入新的缓存
cache.Set(
fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path),
res.DownloadURL,
model.GetIntSetting("onedrive_source_timeout", 1800),
)
return res.DownloadURL, nil
}
return "", err