subtitles.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package v1
  2. import (
  3. "fmt"
  4. "net/http"
  5. "path/filepath"
  6. "strconv"
  7. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/manual_upload_sub_2_local"
  8. "github.com/ChineseSubFinder/ChineseSubFinder/pkg"
  9. backend2 "github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/backend"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // RefreshMediaServerSubList 刷新媒体服务器的字幕列表
  13. func (cb *ControllerBase) RefreshMediaServerSubList(c *gin.Context) {
  14. var err error
  15. defer func() {
  16. // 统一的异常处理
  17. cb.ErrorProcess(c, "RefreshMediaServerSubList", err)
  18. }()
  19. err = cb.videoScanAndRefreshHelper.RefreshMediaServerSubList()
  20. if err != nil {
  21. cb.log.Errorln("RefreshMediaServerSubList", err)
  22. return
  23. }
  24. c.JSON(http.StatusOK, backend2.ReplyCommon{Message: "ok"})
  25. return
  26. }
  27. // ManualUploadSubtitle2Local 人工上传字幕到本地
  28. func (cb *ControllerBase) ManualUploadSubtitle2Local(c *gin.Context) {
  29. var err error
  30. defer func() {
  31. // 统一的异常处理
  32. cb.ErrorProcess(c, "ManualUploadSubtitle2Local", err)
  33. }()
  34. videoFPath, ok := c.GetPostForm("video_f_path")
  35. if ok == false {
  36. err = fmt.Errorf("GetPostForm video_f_path failed")
  37. cb.log.Errorln(err)
  38. return
  39. }
  40. file, err := c.FormFile("file")
  41. if err != nil {
  42. err = fmt.Errorf("FormFile failed, err: %v", err)
  43. cb.log.Errorln(err)
  44. return
  45. }
  46. basePath, err := pkg.GetManualSubUploadCacheFolder()
  47. if err != nil {
  48. err = fmt.Errorf("GetManualSubUploadCacheFolder failed, err: %v", err)
  49. cb.log.Errorln(err)
  50. return
  51. }
  52. filename := filepath.Join(basePath, filepath.Base(file.Filename))
  53. if err = c.SaveUploadedFile(file, filename); err != nil {
  54. err = fmt.Errorf("SaveUploadedFile failed, err: %v", err)
  55. cb.log.Errorln(err)
  56. return
  57. }
  58. cb.cronHelper.Downloader.ManualUploadSub2Local.Add(&manual_upload_sub_2_local.Job{
  59. VideoFPath: videoFPath,
  60. SubFPath: filename,
  61. })
  62. c.JSON(http.StatusOK, backend2.ReplyCommon{Message: "ok"})
  63. return
  64. }
  65. // ListManualUploadSubtitle2LocalJob 列举人工上传字幕到本地的任务列表
  66. func (cb *ControllerBase) ListManualUploadSubtitle2LocalJob(c *gin.Context) {
  67. var err error
  68. defer func() {
  69. // 统一的异常处理
  70. cb.ErrorProcess(c, "ListManualUploadSubtitle2LocalJob", err)
  71. }()
  72. listJob := cb.cronHelper.Downloader.ManualUploadSub2Local.ListJob()
  73. c.JSON(http.StatusOK, manual_upload_sub_2_local.Reply{
  74. Jobs: listJob,
  75. })
  76. return
  77. }
  78. // IsManualUploadSubtitle2LocalJobInQueue 人工上传字幕到本地的任务是否在列表中,或者说是在执行中
  79. func (cb *ControllerBase) IsManualUploadSubtitle2LocalJobInQueue(c *gin.Context) {
  80. var err error
  81. defer func() {
  82. // 统一的异常处理
  83. cb.ErrorProcess(c, "IsManualUploadSubtitle2LocalJobInQueue", err)
  84. }()
  85. job := manual_upload_sub_2_local.Job{}
  86. err = c.ShouldBindJSON(&job)
  87. if err != nil {
  88. return
  89. }
  90. found := cb.cronHelper.Downloader.ManualUploadSub2Local.IsJobInQueue(&manual_upload_sub_2_local.Job{
  91. VideoFPath: job.VideoFPath,
  92. })
  93. c.JSON(http.StatusOK, backend2.ReplyCommon{Message: strconv.FormatBool(found)})
  94. return
  95. }
  96. // ManualUploadSubtitleResult 人工上传字幕到本地的任务的结果,成功 ok,不存在空,其他是失败
  97. func (cb *ControllerBase) ManualUploadSubtitleResult(c *gin.Context) {
  98. var err error
  99. defer func() {
  100. // 统一的异常处理
  101. cb.ErrorProcess(c, "ManualUploadSubtitleResult", err)
  102. }()
  103. job := manual_upload_sub_2_local.Job{}
  104. err = c.ShouldBindJSON(&job)
  105. if err != nil {
  106. return
  107. }
  108. result := cb.cronHelper.Downloader.ManualUploadSub2Local.JobResult(&manual_upload_sub_2_local.Job{
  109. VideoFPath: job.VideoFPath,
  110. })
  111. c.JSON(http.StatusOK, backend2.ReplyCommon{Message: result})
  112. return
  113. }