12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package cache_center
- import (
- "encoding/json"
- "errors"
- "os"
- "path/filepath"
- "time"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg/settings"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/supplier"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg/cache_center/models"
- )
- func (c *CacheCenter) DownloadFileAdd(subInfo *supplier.SubInfo) error {
- defer c.locker.Unlock()
- c.locker.Lock()
- if subInfo.FileUrl == "" {
- return errors.New("subInfo FileUrl is empty")
- }
- // 只支持秒或者小时为单位
- tmpTTL := time.Duration(settings.Get().AdvancedSettings.DownloadFileCache.TTL) * time.Second
- if settings.Get().AdvancedSettings.DownloadFileCache.Unit == "hour" {
- tmpTTL = time.Duration(settings.Get().AdvancedSettings.DownloadFileCache.TTL) * time.Hour
- } else {
- tmpTTL = time.Duration(settings.Get().AdvancedSettings.DownloadFileCache.TTL) * time.Second
- }
- b, err := json.Marshal(subInfo)
- if err != nil {
- return err
- }
- // 保存到本地文件
- todayString := time.Now().Format("2006-01-02")
- saveFPath := filepath.Join(c.downloadFileSaveRootPath, todayString, subInfo.GetUID())
- err = pkg.WriteFile(saveFPath, b)
- if err != nil {
- return err
- }
- relPath, err := filepath.Rel(c.downloadFileSaveRootPath, saveFPath)
- if err != nil {
- return err
- }
- df := models.DownloadFileInfo{
- UID: subInfo.GetUID(),
- RelPath: relPath,
- ExpirationTime: time.Now().Add(tmpTTL),
- }
- c.db.Save(&df)
- return nil
- }
- func (c *CacheCenter) DownloadFileGet(fileUrlUID string) (bool, *supplier.SubInfo, error) {
- defer c.locker.Unlock()
- c.locker.Lock()
- var dfs []models.DownloadFileInfo
- c.db.Where("uid = ?", fileUrlUID).Find(&dfs)
- if len(dfs) == 0 {
- return false, nil, nil
- }
- localFileFPath := filepath.Join(c.downloadFileSaveRootPath, dfs[0].RelPath)
- if pkg.IsFile(localFileFPath) == false {
- return false, nil, nil
- }
- bytes, err := os.ReadFile(localFileFPath)
- if err != nil {
- return false, nil, err
- }
- var subInfo supplier.SubInfo
- err = json.Unmarshal(bytes, &subInfo)
- if err != nil {
- return false, nil, err
- }
- return true, &subInfo, nil
- }
|