Modify: OneDrive file URL cache will refreshed after file is updated

feat-album
HFO4 4 years ago
parent d9cff24c75
commit a93b964d8b

@ -152,8 +152,13 @@ func (handler Driver) Source(
isDownload bool, isDownload bool,
speed int, speed int,
) (string, error) { ) (string, error) {
cacheKey := fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path)
if file, ok := ctx.Value(fsctx.FileModelCtx).(model.File); ok {
cacheKey = fmt.Sprintf("onedrive_source_file_%d_%d", file.UpdatedAt.Unix(), file.ID)
}
// 尝试从缓存中查找 // 尝试从缓存中查找
if cachedURL, ok := cache.Get(fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path)); ok { if cachedURL, ok := cache.Get(cacheKey); ok {
return handler.replaceSourceHost(cachedURL.(string)) return handler.replaceSourceHost(cachedURL.(string))
} }
@ -162,7 +167,7 @@ func (handler Driver) Source(
if err == nil { if err == nil {
// 写入新的缓存 // 写入新的缓存
cache.Set( cache.Set(
fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path), cacheKey,
res.DownloadURL, res.DownloadURL,
model.GetIntSetting("onedrive_source_timeout", 1800), model.GetIntSetting("onedrive_source_timeout", 1800),
) )

@ -2,6 +2,7 @@ package onedrive
import ( import (
"context" "context"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -150,6 +151,21 @@ func TestDriver_Source(t *testing.T) {
asserts.Equal("res", res) asserts.Equal("res", res)
} }
// 命中缓存 上下文存在文件 成功
{
file := model.File{}
file.ID = 1
file.UpdatedAt = time.Now()
ctx := context.WithValue(context.Background(), fsctx.FileModelCtx, file)
handler.Client.Credential.ExpiresIn = time.Now().Add(time.Duration(100) * time.Hour).Unix()
handler.Client.Credential.AccessToken = "1"
cache.Set(fmt.Sprintf("onedrive_source_file_%d_1", file.UpdatedAt.Unix()), "res", 0)
res, err := handler.Source(ctx, "123.jpg", url.URL{}, 0, true, 0)
cache.Deletes([]string{"0_123.jpg"}, "onedrive_source_")
asserts.NoError(err)
asserts.Equal("res", res)
}
// 成功 // 成功
{ {
handler.Client.Credential.ExpiresIn = time.Now().Add(time.Duration(100) * time.Hour).Unix() handler.Client.Credential.ExpiresIn = time.Now().Add(time.Duration(100) * time.Hour).Unix()

Loading…
Cancel
Save