Forráskód Böngészése

实现后台对应的 api 功能

Signed-off-by: allan716 <[email protected]>
allan716 3 éve
szülő
commit
9e47fe4159

+ 2 - 0
.gitignore

@@ -67,3 +67,5 @@ TestData/
 /internal/dao/*.db
 /internal/pkg/strcut_json/*.json
 /internal/backend/settings.db
+/internal/pkg/settings/testfile.json
+/internal/types/backend/reply_check_proxy.json

+ 22 - 1
internal/backend/controllers/v1/path_things.go

@@ -1,6 +1,11 @@
 package v1
 
-import "github.com/gin-gonic/gin"
+import (
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
+	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
+	"github.com/gin-gonic/gin"
+	"net/http"
+)
 
 func (cb ControllerBase) CheckPathHandler(c *gin.Context) {
 	var err error
@@ -8,4 +13,20 @@ func (cb ControllerBase) CheckPathHandler(c *gin.Context) {
 		// 统一的异常处理
 		cb.ErrorProcess(c, "CheckPathHandler", err)
 	}()
+
+	reqCheckPath := backend.ReqCheckPath{}
+	err = c.ShouldBindJSON(&reqCheckPath)
+	if err != nil {
+		return
+	}
+
+	if my_util.IsDir(reqCheckPath.Path) == true {
+		c.JSON(http.StatusOK, backend.ReplyCheckPath{
+			Valid: true,
+		})
+	} else {
+		c.JSON(http.StatusOK, backend.ReplyCheckPath{
+			Valid: false,
+		})
+	}
 }

+ 33 - 1
internal/backend/controllers/v1/proxy.go

@@ -1,6 +1,17 @@
 package v1
 
-import "github.com/gin-gonic/gin"
+import (
+	subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/shooter"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/subhd"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/xunlei"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/zimuku"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
+	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
+	"github.com/gin-gonic/gin"
+	"github.com/huandu/go-clone"
+	"net/http"
+)
 
 func (cb ControllerBase) CheckProxyHandler(c *gin.Context) {
 	var err error
@@ -9,4 +20,25 @@ func (cb ControllerBase) CheckProxyHandler(c *gin.Context) {
 		cb.ErrorProcess(c, "CheckProxyHandler", err)
 	}()
 
+	reqCheckProxy := backend.ReqCheckProxy{}
+	err = c.ShouldBindJSON(&reqCheckProxy)
+	if err != nil {
+		return
+	}
+
+	tmpSettings := clone.Clone(*settings.GetSettings()).(settings.Settings)
+
+	// 使用提交过来的这个代理地址,测试多个字幕网站的可用性
+	subSupplierHub := subSupplier.NewSubSupplierHub(
+		tmpSettings,
+		zimuku.NewSupplier(tmpSettings),
+		xunlei.NewSupplier(tmpSettings),
+		shooter.NewSupplier(tmpSettings),
+		subhd.NewSupplier(tmpSettings),
+	)
+
+	outStatus := subSupplierHub.CheckSubSiteStatus()
+
+	c.JSON(http.StatusOK, outStatus)
+
 }

+ 3 - 3
internal/backend/controllers/v1/settings.go

@@ -20,7 +20,7 @@ func (cb ControllerBase) SettingsHandler(c *gin.Context) {
 			// 回复没有密码的 settings
 			c.JSON(http.StatusOK, settings.GetSettings().GetNoPasswordSettings())
 		}
-	case "PATH":
+	case "PUT":
 		{
 			// 修改设置,这里不允许修改密码
 			reqSetupInfo := backend.ReqSettings{}
@@ -43,9 +43,9 @@ func (cb ControllerBase) SettingsHandler(c *gin.Context) {
 			if err != nil {
 				return
 			}
-			c.JSON(http.StatusOK, backend.ReplyCommon{Message: "Settings Save Success`"})
+			c.JSON(http.StatusOK, backend.ReplyCommon{Message: "Settings Save Success"})
 		}
 	default:
-		c.JSON(http.StatusNoContent, backend.ReplyCommon{Message: "Settings Request.Method Error`"})
+		c.JSON(http.StatusNoContent, backend.ReplyCommon{Message: "Settings Request.Method Error"})
 	}
 }

+ 1 - 1
internal/backend/routers/base_router.go

@@ -24,7 +24,7 @@ func InitRouter(router *gin.Engine) {
 		GroupV1.Use(middle.CheckAuth())
 
 		GroupV1.GET("/settings", cbV1.SettingsHandler)
-		GroupV1.PATCH("/settings", cbV1.SettingsHandler)
+		GroupV1.PUT("/settings", cbV1.SettingsHandler)
 
 		GroupV1.POST("/check-proxy", cbV1.CheckProxyHandler)
 

+ 4 - 13
internal/logic/pre_download_process/pre_download_proces.go

@@ -103,13 +103,13 @@ func (p *PreDownloadProcess) Check() *PreDownloadProcess {
 	if settings.GetSettings().AdvancedSettings.ProxySettings.UseHttpProxy == false {
 
 		log_helper.GetLogger().Infoln("UseHttpProxy = false")
-		// 如果使用代理,那么默认需要检测 baidu 的连通性
+		// 如果使用代理,那么默认需要检测 baidu 的连通性
 		proxySpeed, proxyStatus, err := url_connectedness_helper.UrlConnectednessTest(url_connectedness_helper.BaiduUrl, "")
 		if err != nil {
-			p.gError = errors.New("UrlConnectednessTest Target Site " + url_connectedness_helper.GoogleUrl + ", " + err.Error())
+			p.gError = errors.New("UrlConnectednessTest Target Site " + url_connectedness_helper.BaiduUrl + ", " + err.Error())
 			return p
 		} else {
-			log_helper.GetLogger().Infoln("UrlConnectednessTest Target Site", url_connectedness_helper.GoogleUrl, "Speed:", proxySpeed, "Status:", proxyStatus)
+			log_helper.GetLogger().Infoln("UrlConnectednessTest Target Site", url_connectedness_helper.BaiduUrl, "Speed:", proxySpeed, "Status:", proxyStatus)
 		}
 	} else {
 
@@ -125,16 +125,7 @@ func (p *PreDownloadProcess) Check() *PreDownloadProcess {
 	}
 	// ------------------------------------------------------------------------
 	// 测试提供字幕的网站是有效的
-	log_helper.GetLogger().Infoln("Check Sub Supplier Start...")
-	for _, supplier := range p.subSupplierHub.Suppliers {
-		bAlive, speed := supplier.CheckAlive()
-		if bAlive == false {
-			log_helper.GetLogger().Warningln(supplier.GetSupplierName(), "Check Alive = false")
-		} else {
-			log_helper.GetLogger().Infoln(supplier.GetSupplierName(), "Check Alive = true, Speed =", speed, "ms")
-		}
-	}
-	log_helper.GetLogger().Infoln("Check Sub Supplier End")
+	p.subSupplierHub.CheckSubSiteStatus()
 	// ------------------------------------------------------------------------
 	// 判断文件夹是否存在
 	if len(settings.GetSettings().CommonSettings.MoviePaths) < 1 {

+ 29 - 0
internal/logic/sub_supplier/subSupplierHub.go

@@ -9,6 +9,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/emby"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/series"
 	"github.com/sirupsen/logrus"
@@ -155,6 +156,34 @@ func (d SubSupplierHub) DownloadSub4SeriesFromEmby(seriesDirPath string, seriesL
 	return seriesInfo, organizeSubFiles, nil
 }
 
+// CheckSubSiteStatus 检测多个字幕提供的网站是否是有效的
+func (d SubSupplierHub) CheckSubSiteStatus() backend.ReplyCheckStatus {
+
+	outStatus := backend.ReplyCheckStatus{
+		SubSiteStatus: make([]backend.SiteStatus, 0),
+	}
+
+	// 测试提供字幕的网站是有效的
+	d.log.Infoln("Check Sub Supplier Start...")
+	for _, supplier := range d.Suppliers {
+		bAlive, speed := supplier.CheckAlive()
+		if bAlive == false {
+			d.log.Warningln(supplier.GetSupplierName(), "Check Alive = false")
+		} else {
+			d.log.Infoln(supplier.GetSupplierName(), "Check Alive = true, Speed =", speed, "ms")
+		}
+
+		outStatus.SubSiteStatus = append(outStatus.SubSiteStatus, backend.SiteStatus{
+			Name:  supplier.GetSupplierName(),
+			Valid: bAlive,
+			Speed: speed,
+		})
+	}
+	d.log.Infoln("Check Sub Supplier End")
+
+	return outStatus
+}
+
 func (d SubSupplierHub) dlSubFromSeriesInfo(seriesDirPath string, index int, seriesInfo *series.SeriesInfo, err error) (map[string][]string, error) {
 	// 下载好的字幕
 	subInfos := seriesHelper.DownloadSubtitleInAllSiteByOneSeries(d.Suppliers, seriesInfo, index)

+ 1 - 1
internal/pkg/settings/developer_settings.go

@@ -1,7 +1,7 @@
 package settings
 
 type DeveloperSettings struct {
-	BarkServerUrl string `json:"bark_server_url"` // Bark 服务器的地址
+	BarkServerAddress string `json:"bark_server_address"` // Bark 服务器的地址
 }
 
 func NewDeveloperSettings() *DeveloperSettings {

+ 10 - 10
internal/pkg/settings/emby_settings.go

@@ -3,20 +3,20 @@ package settings
 import "github.com/allanpk716/ChineseSubFinder/internal/common"
 
 type EmbySettings struct {
-	Enable                 bool              `json:"enable"`                   // 是否启用
-	AddressUrl             string            `json:"address_url"`              // 内网服务器的 url
-	APIKey                 string            `json:"api_key"`                  // API key
-	MaxRequestVideoNumber  int               `json:"max_request_video_number"` // 最大请求获取视频的数量
-	SkipWatched            bool              `json:"skip_watched"`             // 是否跳过已经观看的
-	MovieDirectoryMapping  map[string]string `json:"movie_directory_mapping"`  // 电影目录的映射,一旦 common setting 的目录修改,需要提示用户确认映射
-	SeriesDirectoryMapping map[string]string `json:"series_directory_mapping"` // 连续剧目录的映射,一旦 common setting 的目录修改,需要提示用户确认映射
+	Enable                bool              `json:"enable"`                   // 是否启用
+	AddressUrl            string            `json:"address_url"`              // 内网服务器的 url
+	APIKey                string            `json:"api_key"`                  // API key
+	MaxRequestVideoNumber int               `json:"max_request_video_number"` // 最大请求获取视频的数量
+	SkipWatched           bool              `json:"skip_watched"`             // 是否跳过已经观看的
+	MoviePathsMapping     map[string]string `json:"movie_paths_mapping"`      // 电影目录的映射,一旦 common setting 的目录修改,需要提示用户确认映射
+	SeriesPathsMapping    map[string]string `json:"series_paths_mapping"`     // 连续剧目录的映射,一旦 common setting 的目录修改,需要提示用户确认映射
 }
 
 func NewEmbySettings() *EmbySettings {
 	return &EmbySettings{
-		MaxRequestVideoNumber:  500,
-		MovieDirectoryMapping:  make(map[string]string, 0),
-		SeriesDirectoryMapping: make(map[string]string, 0),
+		MaxRequestVideoNumber: 500,
+		MoviePathsMapping:     make(map[string]string, 0),
+		SeriesPathsMapping:    make(map[string]string, 0),
 	}
 }
 

+ 66 - 0
internal/pkg/settings/settings_test.go

@@ -0,0 +1,66 @@
+package settings
+
+import (
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/strcut_json"
+	"reflect"
+	"testing"
+)
+
+func TestNewSettings(t *testing.T) {
+
+	inSettings := Settings{
+		UserInfo: &UserInfo{
+			Username: "abcd",
+			Password: "123456",
+		},
+		CommonSettings: &CommonSettings{
+			ScanInterval:     "12h",
+			Threads:          12,
+			RunScanAtStartUp: true,
+			MoviePaths:       []string{"aaa", "bbb"},
+			SeriesPaths:      []string{"ccc", "ddd"},
+		},
+		AdvancedSettings: &AdvancedSettings{
+			ProxySettings: &ProxySettings{
+				UseHttpProxy:     true,
+				HttpProxyAddress: "123",
+			},
+			DebugMode:                  true,
+			SaveFullSeasonTmpSubtitles: true,
+			SubTypePriority:            1,
+			SubNameFormatter:           1,
+			SaveMultiSub:               true,
+			CustomVideoExts:            []string{"aaa", "bbb"},
+			FixTimeLine:                true,
+		},
+		EmbySettings: &EmbySettings{
+			Enable:                true,
+			AddressUrl:            "123456",
+			APIKey:                "api123",
+			MaxRequestVideoNumber: 1000,
+			SkipWatched:           true,
+			MoviePathsMapping:     map[string]string{"aa": "123", "bb": "456"},
+			SeriesPathsMapping:    map[string]string{"aab": "123", "bbc": "456"},
+		},
+		DeveloperSettings: &DeveloperSettings{
+			BarkServerUrl: "bark",
+		},
+	}
+
+	err := strcut_json.ToFile(fileName, inSettings)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	outSettings := NewSettings()
+	err = strcut_json.ToStruct(fileName, &outSettings)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if reflect.DeepEqual(inSettings.UserInfo, outSettings.UserInfo) == false {
+		t.Fatal("inSettings Write And Read Not The Same")
+	}
+}
+
+const fileName = "testfile.json"

+ 0 - 64
internal/pkg/strcut_json/struct_json_test.go

@@ -1,64 +0,0 @@
-package strcut_json
-
-import (
-	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
-	"reflect"
-	"testing"
-)
-
-func TestToFile(t *testing.T) {
-
-	inSettings := settings.Settings{
-		UserInfo: &settings.UserInfo{
-			Username: "abcd",
-			Password: "123456",
-		},
-		CommonSettings: &settings.CommonSettings{
-			UseHttpProxy:     true,
-			HttpProxyAddress: "123",
-			ScanInterval:     "12h",
-			Threads:          12,
-			RunScanAtStartUp: true,
-			MoviePaths:       []string{"aaa", "bbb"},
-			SeriesPaths:      []string{"ccc", "ddd"},
-		},
-		AdvancedSettings: &settings.AdvancedSettings{
-			DebugMode:                  true,
-			SaveFullSeasonTmpSubtitles: true,
-			SubTypePriority:            1,
-			SubNameFormatter:           1,
-			SaveMultiSub:               true,
-			CustomVideoExts:            []string{"aaa", "bbb"},
-			FixTimeLine:                true,
-		},
-		EmbySettings: &settings.EmbySettings{
-			Enable:                 true,
-			AddressUrl:             "123456",
-			APIKey:                 "api123",
-			MaxRequestVideoNumber:  1000,
-			SkipWatched:            true,
-			MovieDirectoryMapping:  map[string]string{"aa": "123", "bb": "456"},
-			SeriesDirectoryMapping: map[string]string{"aab": "123", "bbc": "456"},
-		},
-		DeveloperSettings: &settings.DeveloperSettings{
-			BarkServerUrl: "bark",
-		},
-	}
-
-	err := ToFile(fileName, inSettings)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	outSettings := settings.NewSettings()
-	err = ToStruct(fileName, &outSettings)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	if reflect.DeepEqual(inSettings.UserInfo, outSettings.UserInfo) == false {
-		t.Fatal("inSettings Write And Read Not The Same")
-	}
-}
-
-const fileName = "testfile.json"

+ 5 - 0
internal/types/backend/reply_check_path.go

@@ -0,0 +1,5 @@
+package backend
+
+type ReplyCheckPath struct {
+	Valid bool `json:"valid"`
+}

+ 11 - 0
internal/types/backend/reply_check_proxy.go

@@ -0,0 +1,11 @@
+package backend
+
+type ReplyCheckStatus struct {
+	SubSiteStatus []SiteStatus `json:"sub_site_status"`
+}
+
+type SiteStatus struct {
+	Name  string `json:"name"`
+	Valid bool   `json:"valid"`
+	Speed int64  `json:"speed"`
+}

+ 2 - 1
internal/types/backend/reply_system_status.go

@@ -1,5 +1,6 @@
 package backend
 
 type ReplySystemStatus struct {
-	IsSetup bool `json:"is_setup"` // 是否进行给初始化设置(引导设置),设置用户名什么的
+	IsSetup bool   `json:"is_setup"` // 是否进行给初始化设置(引导设置),设置用户名什么的
+	Version string `json:"version"`  // 系统的版本 v0.0.0
 }

+ 5 - 0
internal/types/backend/req_check_path.go

@@ -0,0 +1,5 @@
+package backend
+
+type ReqCheckPath struct {
+	Path string `json:"path"  binding:"required"`
+}

+ 5 - 0
internal/types/backend/req_check_proxy.go

@@ -0,0 +1,5 @@
+package backend
+
+type ReqCheckProxy struct {
+	HttpProxyUrl string `json:"http_proxy_url"  binding:"required"`
+}