1
0

base_router.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package backend
  2. import (
  3. "fmt"
  4. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/pre_job"
  5. "net/http"
  6. "github.com/arl/statsviz"
  7. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/tmdb_api"
  8. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/settings"
  9. "github.com/ChineseSubFinder/ChineseSubFinder/internal/backend/controllers/base"
  10. v1 "github.com/ChineseSubFinder/ChineseSubFinder/internal/backend/controllers/v1"
  11. "github.com/ChineseSubFinder/ChineseSubFinder/internal/backend/middle"
  12. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/cron_helper"
  13. "github.com/gin-gonic/gin"
  14. )
  15. func InitRouter(
  16. router *gin.Engine,
  17. cronHelper *cron_helper.CronHelper,
  18. restartSignal chan interface{},
  19. preJob *pre_job.PreJob,
  20. ) (*base.ControllerBase, *v1.ControllerBase) {
  21. // ----------------------------------------------
  22. // 设置 TMDB API 的本地 Client,用户自己的 API Key
  23. var err error
  24. var tmdbApi *tmdb_api.TmdbApi
  25. if settings.Get().AdvancedSettings.TmdbApiSettings.Enable == true &&
  26. settings.Get().AdvancedSettings.TmdbApiSettings.ApiKey != "" {
  27. tmdbApi, err = tmdb_api.NewTmdbHelper(cronHelper.Logger, settings.Get().AdvancedSettings.TmdbApiSettings.ApiKey, settings.Get().AdvancedSettings.TmdbApiSettings.UseAlternateBaseURL)
  28. if err != nil {
  29. cronHelper.Logger.Panicln("NewTmdbHelper", err)
  30. }
  31. if tmdbApi.Alive() == false {
  32. // 如果 tmdbApi 不可用,那么就不使用
  33. cronHelper.Logger.Errorln("tmdbApi.Alive() == false")
  34. tmdbApi = nil
  35. }
  36. }
  37. cronHelper.FileDownloader.MediaInfoDealers.SetTmdbHelperInstance(tmdbApi)
  38. // ----------------------------------------------
  39. cbBase := base.NewControllerBase(cronHelper.FileDownloader, restartSignal, preJob)
  40. cbV1 := v1.NewControllerBase(cronHelper, restartSignal)
  41. // --------------------------------------------------
  42. // 静态文件服务器
  43. // 添加电影的
  44. for i, path := range settings.Get().CommonSettings.MoviePaths {
  45. nowUrl := "/movie_dir_" + fmt.Sprintf("%d", i)
  46. cbV1.SetPathUrlMapItem(path, nowUrl)
  47. router.StaticFS(nowUrl, http.Dir(path))
  48. }
  49. // 添加连续剧的
  50. for i, path := range settings.Get().CommonSettings.SeriesPaths {
  51. nowUrl := "/series_dir_" + fmt.Sprintf("%d", i)
  52. cbV1.SetPathUrlMapItem(path, nowUrl)
  53. router.StaticFS(nowUrl, http.Dir(path))
  54. }
  55. // --------------------------------------------------
  56. // 性能监视
  57. if settings.Get().AdvancedSettings.DebugMode == true {
  58. // 如果是 DebugMode 那么开启性能监控
  59. router.GET("/debug/statsviz/*filepath", func(context *gin.Context) {
  60. if context.Param("filepath") == "/ws" {
  61. statsviz.Ws(context.Writer, context.Request)
  62. return
  63. }
  64. statsviz.IndexAtRoot("/debug/statsviz").ServeHTTP(context.Writer, context.Request)
  65. })
  66. }
  67. // --------------------------------------------------
  68. // 基础的路由
  69. router.GET("/system-status", cbBase.SystemStatusHandler)
  70. router.POST("/pre-job", cbBase.PreJobHandler)
  71. router.POST("/setup", cbBase.SetupHandler)
  72. router.POST("/login", cbBase.LoginHandler)
  73. router.POST("/logout", middle.CheckAuth(), cbBase.LogoutHandler)
  74. router.POST("/change-pwd", middle.CheckAuth(), cbBase.ChangePwdHandler)
  75. router.POST("/check-path", cbBase.CheckPathHandler)
  76. router.POST("/check-emby-path", cbBase.CheckEmbyPathHandler)
  77. router.POST("/check-proxy", cbBase.CheckProxyHandler)
  78. router.POST("/check-cron", cbBase.CheckCronHandler)
  79. router.GET("/def-settings", cbBase.DefSettingsHandler)
  80. router.POST("/check-emby-settings", cbBase.CheckEmbySettingsHandler)
  81. router.POST("/check-tmdb-api-settings", cbBase.CheckTmdbApiHandler)
  82. // v1路由: /v1/xxx
  83. GroupV1 := router.Group("/" + cbV1.GetVersion())
  84. {
  85. GroupV1.Use(middle.CheckAuth())
  86. GroupV1.GET("/settings", cbV1.SettingsHandler)
  87. GroupV1.PUT("/settings", cbV1.SettingsHandler)
  88. GroupV1.POST("/daemon/start", cbV1.DaemonStartHandler)
  89. GroupV1.POST("/daemon/stop", cbV1.DaemonStopHandler)
  90. GroupV1.GET("/daemon/status", cbV1.DaemonStatusHandler)
  91. GroupV1.GET("/jobs/list", cbV1.JobsListHandler)
  92. GroupV1.POST("/jobs/change-job-status", cbV1.ChangeJobStatusHandler)
  93. GroupV1.POST("/jobs/log", cbV1.JobLogHandler)
  94. //GroupV1.POST("/video/list/refresh", cbV1.RefreshVideoListHandler)
  95. GroupV1.GET("/video/list/refresh-status", cbV1.RefreshVideoListStatusHandler)
  96. //GroupV1.GET("/video/list", cbV1.VideoListHandler)
  97. GroupV1.POST("/video/list/add", cbV1.VideoListAddHandler)
  98. GroupV1.POST("/video/list/refresh_main_list", cbV1.RefreshMainList)
  99. GroupV1.GET("/video/list/video_main_list", cbV1.VideoMainList)
  100. GroupV1.POST("/video/list/movie_poster", cbV1.MoviePoster)
  101. GroupV1.POST("/video/list/series_poster", cbV1.SeriesPoster)
  102. GroupV1.POST("/video/list/one_movie_subs", cbV1.OneMovieSubs)
  103. GroupV1.POST("/video/list/one_series_subs", cbV1.OneSeriesSubs)
  104. GroupV1.POST("/video/list/scan_skip_info", cbV1.ScanSkipInfo)
  105. GroupV1.PUT("/video/list/scan_skip_info", cbV1.ScanSkipInfo)
  106. GroupV1.POST("/subtitles/refresh_media_server_sub_list", cbV1.RefreshMediaServerSubList)
  107. GroupV1.POST("/subtitles/manual_upload_2_local", cbV1.ManualUploadSubtitle2Local)
  108. GroupV1.POST("/subtitles/manual_upload_result", cbV1.ManualUploadSubtitleResult)
  109. GroupV1.GET("/subtitles/list_manual_upload_2_local_job", cbV1.ListManualUploadSubtitle2LocalJob)
  110. GroupV1.POST("/subtitles/is_manual_upload_2_local_in_queue", cbV1.IsManualUploadSubtitle2LocalJobInQueue)
  111. GroupV1.POST("/subtitles/get_generate_upload_url_info", cbV1.GetGenerateUploadURLHandle)
  112. GroupV1.POST("/preview/clean_up", cbV1.PreviewCleanUp)
  113. GroupV1.GET("/preview/playlist/:videofpathbase64", cbV1.HlsPlaylist)
  114. GroupV1.GET("/preview/segments/:resolution/:segment/:videofpathbase64", cbV1.HlsSegment)
  115. GroupV1.POST("/preview/search_other_web", cbV1.PreviewSearchOtherWeb)
  116. GroupV1.POST("/preview/video_f_path_2_imdb_info", cbV1.PreviewVideoFPath2IMDBInfo)
  117. }
  118. GroupAPIV1 := router.Group("/api/v1")
  119. {
  120. GroupAPIV1.Use(middle.CheckApiAuth())
  121. GroupAPIV1.POST("/add-job", cbV1.AddJobHandler)
  122. GroupAPIV1.GET("/job-status", cbV1.GetJobStatusHandler)
  123. GroupAPIV1.POST("/change-job-status", cbV1.ChangeJobStatusHandler)
  124. GroupAPIV1.POST("/add-video-played-info", cbV1.AddVideoPlayedInfoHandler)
  125. GroupAPIV1.DELETE("/del-video-played-info", cbV1.DelVideoPlayedInfoHandler)
  126. }
  127. return cbBase, cbV1
  128. }