base_router.go 6.0 KB

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