mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-07-18 17:38:07 +08:00
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package thunder_browser
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/OpenListTeam/OpenList/drivers/thunder_browser"
|
|
"github.com/OpenListTeam/OpenList/internal/op"
|
|
"github.com/OpenListTeam/OpenList/pkg/singleflight"
|
|
"github.com/OpenListTeam/go-cache"
|
|
)
|
|
|
|
var taskCache = cache.NewMemCache(cache.WithShards[[]thunder_browser.OfflineTask](16))
|
|
var taskG singleflight.Group[[]thunder_browser.OfflineTask]
|
|
|
|
func (t *ThunderBrowser) GetTasks(thunderDriver *thunder_browser.ThunderBrowser) ([]thunder_browser.OfflineTask, error) {
|
|
key := op.Key(thunderDriver, "/drive/v1/task")
|
|
if !t.refreshTaskCache {
|
|
if tasks, ok := taskCache.Get(key); ok {
|
|
return tasks, nil
|
|
}
|
|
}
|
|
t.refreshTaskCache = false
|
|
tasks, err, _ := taskG.Do(key, func() ([]thunder_browser.OfflineTask, error) {
|
|
ctx := context.Background()
|
|
tasks, err := thunderDriver.OfflineList(ctx, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 添加缓存 10s
|
|
if len(tasks) > 0 {
|
|
taskCache.Set(key, tasks, cache.WithEx[[]thunder_browser.OfflineTask](time.Second*10))
|
|
} else {
|
|
taskCache.Del(key)
|
|
}
|
|
return tasks, nil
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return tasks, nil
|
|
}
|
|
|
|
func (t *ThunderBrowser) GetTasksExpert(thunderDriver *thunder_browser.ThunderBrowserExpert) ([]thunder_browser.OfflineTask, error) {
|
|
key := op.Key(thunderDriver, "/drive/v1/task")
|
|
if !t.refreshTaskCache {
|
|
if tasks, ok := taskCache.Get(key); ok {
|
|
return tasks, nil
|
|
}
|
|
}
|
|
t.refreshTaskCache = false
|
|
tasks, err, _ := taskG.Do(key, func() ([]thunder_browser.OfflineTask, error) {
|
|
ctx := context.Background()
|
|
tasks, err := thunderDriver.OfflineList(ctx, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 添加缓存 10s
|
|
if len(tasks) > 0 {
|
|
taskCache.Set(key, tasks, cache.WithEx[[]thunder_browser.OfflineTask](time.Second*10))
|
|
} else {
|
|
taskCache.Del(key)
|
|
}
|
|
return tasks, nil
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return tasks, nil
|
|
}
|