task_queue_info.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package cache_center
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "github.com/allanpk716/ChineseSubFinder/pkg"
  7. "github.com/allanpk716/ChineseSubFinder/pkg/cache_center/models"
  8. )
  9. func (c *CacheCenter) TaskQueueClear() error {
  10. // 没有必要删除 DB 中的数据,直接删除外部的缓存文件即可
  11. err := pkg.ClearFolder(c.taskQueueSaveRootPath)
  12. if err != nil {
  13. return err
  14. }
  15. return nil
  16. }
  17. func (c *CacheCenter) TaskQueueSave(taskPriority int, taskQueueBytes []byte) error {
  18. defer c.locker.Unlock()
  19. c.locker.Lock()
  20. var taskQueues []models.TaskQueueInfo
  21. c.db.Where("priority = ?", taskPriority).Find(&taskQueues)
  22. // 写入到本地存储
  23. saveFPath := filepath.Join(c.taskQueueSaveRootPath, fmt.Sprintf("%d", taskPriority)+".tq")
  24. err := pkg.WriteFile(saveFPath, taskQueueBytes)
  25. if err != nil {
  26. return err
  27. }
  28. relPath, err := filepath.Rel(c.taskQueueSaveRootPath, saveFPath)
  29. if err != nil {
  30. return err
  31. }
  32. if len(taskQueues) == 0 {
  33. // 不存在,需要新建
  34. nowTaskQueue := models.TaskQueueInfo{
  35. Priority: taskPriority,
  36. RelPath: relPath,
  37. }
  38. c.db.Save(&nowTaskQueue)
  39. } else {
  40. // 存在,需要更新
  41. taskQueues[0].RelPath = relPath
  42. c.db.Save(&taskQueues[0])
  43. }
  44. return nil
  45. }
  46. func (c *CacheCenter) TaskQueueRead() (map[int][]byte, error) {
  47. defer c.locker.Unlock()
  48. c.locker.Lock()
  49. var taskQueues []models.TaskQueueInfo
  50. c.db.Find(&taskQueues)
  51. outTaskQueueBytes := make(map[int][]byte, 0)
  52. for _, taskQueue := range taskQueues {
  53. oneTaskQueueFPath := filepath.Join(c.taskQueueSaveRootPath, taskQueue.RelPath)
  54. if pkg.IsFile(oneTaskQueueFPath) == false {
  55. continue
  56. }
  57. bytes, err := os.ReadFile(oneTaskQueueFPath)
  58. if err != nil {
  59. return nil, err
  60. }
  61. outTaskQueueBytes[taskQueue.Priority] = bytes
  62. }
  63. return outTaskQueueBytes, nil
  64. }