123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package cache_center
- import (
- "fmt"
- "os"
- "path/filepath"
- "sync"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg/cache_center/models"
- "github.com/sirupsen/logrus"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- )
- type CacheCenter struct {
- Log *logrus.Logger
- centerFolder string
- downloadFileSaveRootPath string
- taskQueueSaveRootPath string
- dbFPath string
- cacheName string
- db *gorm.DB
- locker sync.Mutex
- }
- func NewCacheCenter(cacheName string, Log *logrus.Logger) *CacheCenter {
- c := CacheCenter{}
- c.Log = Log
- var err error
- c.centerFolder, err = pkg.GetRootCacheCenterFolder()
- if err != nil {
- panic(err)
- }
- c.taskQueueSaveRootPath = filepath.Join(c.centerFolder, taskQueueFolderName, cacheName)
- c.downloadFileSaveRootPath = filepath.Join(c.centerFolder, downloadFilesFolderName, cacheName)
- c.dbFPath = filepath.Join(c.centerFolder, cacheName+"_"+dbFileName)
- c.db, err = gorm.Open(sqlite.Open(c.dbFPath), &gorm.Config{})
- if err != nil {
- panic(fmt.Sprintf("failed to connect database, %s", err.Error()))
- }
- // 迁移 schema
- err = c.db.AutoMigrate(&models.DailyDownloadInfo{}, &models.TaskQueueInfo{}, &models.DownloadFileInfo{})
- if err != nil {
- panic(fmt.Sprintf("db AutoMigrate error, %s", err.Error()))
- }
- return &c
- }
- func (c *CacheCenter) GetName() string {
- return c.cacheName
- }
- func (c *CacheCenter) Close() {
- defer c.locker.Unlock()
- c.locker.Lock()
- sqlDB, err := c.db.DB()
- if err != nil {
- return
- }
- err = sqlDB.Close()
- if err != nil {
- return
- }
- }
- func DelDb(cacheName string) {
- centerFolder, err := pkg.GetRootCacheCenterFolder()
- if err != nil {
- return
- }
- dbFPath := filepath.Join(centerFolder, cacheName+"_"+dbFileName)
- if pkg.IsFile(dbFPath) == true {
- err = os.Remove(dbFPath)
- if err != nil {
- return
- }
- }
- taskQueueSaveRootPath := filepath.Join(centerFolder, taskQueueFolderName, cacheName)
- err = pkg.ClearFolder(taskQueueSaveRootPath)
- if err != nil {
- return
- }
- downloadFileSaveRootPath := filepath.Join(centerFolder, downloadFilesFolderName, cacheName)
- err = pkg.ClearFolder(downloadFileSaveRootPath)
- if err != nil {
- return
- }
- }
- const (
- taskQueueFolderName = "task_queue"
- downloadFilesFolderName = "download_files"
- dbFileName = "cache_center.db"
- )
|