controller_base.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package v1
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/backend/controllers/base"
  4. "github.com/allanpk716/ChineseSubFinder/internal/logic/cron_helper"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg/lock"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/video_scan_and_refresh_helper"
  7. "github.com/allanpk716/ChineseSubFinder/internal/types/backend"
  8. "github.com/gin-gonic/gin"
  9. "github.com/sirupsen/logrus"
  10. "net/http"
  11. )
  12. type ControllerBase struct {
  13. log *logrus.Logger
  14. cronHelper *cron_helper.CronHelper
  15. StaticFileSystemBackEnd *base.StaticFileSystemBackEnd
  16. videoScanAndRefreshHelper *video_scan_and_refresh_helper.VideoScanAndRefreshHelper
  17. videoScanAndRefreshHelperIsRunning bool
  18. videoScanAndRefreshHelperLocker lock.Lock
  19. videoScanAndRefreshHelperErrMessage string
  20. MovieInfos []backend.MovieInfo
  21. SeasonInfos []backend.SeasonInfo
  22. }
  23. func NewControllerBase(log *logrus.Logger, cronHelper *cron_helper.CronHelper) *ControllerBase {
  24. cb := &ControllerBase{
  25. log: log,
  26. cronHelper: cronHelper,
  27. StaticFileSystemBackEnd: base.NewStaticFileSystemBackEnd(log),
  28. // 这里因为不进行任务的添加,仅仅是扫描,所以 downloadQueue 可以为 nil
  29. videoScanAndRefreshHelper: video_scan_and_refresh_helper.NewVideoScanAndRefreshHelper(cronHelper.FileDownloader, nil),
  30. videoScanAndRefreshHelperLocker: lock.NewLock(),
  31. MovieInfos: make([]backend.MovieInfo, 0),
  32. SeasonInfos: make([]backend.SeasonInfo, 0),
  33. }
  34. err := cb.loadVideoListCache()
  35. if err != nil {
  36. cb.log.Errorln("loadVideoListCache", err)
  37. }
  38. return cb
  39. }
  40. func (cb *ControllerBase) Close() {
  41. cb.cronHelper.Stop()
  42. cb.videoScanAndRefreshHelper.Cancel()
  43. cb.videoScanAndRefreshHelperLocker.Close()
  44. }
  45. func (cb ControllerBase) GetVersion() string {
  46. return "v1"
  47. }
  48. func (cb *ControllerBase) ErrorProcess(c *gin.Context, funcName string, err error) {
  49. if err != nil {
  50. cb.log.Errorln(funcName, err.Error())
  51. c.JSON(http.StatusInternalServerError, backend.ReplyCommon{Message: err.Error()})
  52. }
  53. }