Преглед на файлове

修复由于开启本地代理的情况, Clone Settings 结构出的问题

Signed-off-by: allan716 <[email protected]>
allan716 преди 3 години
родител
ревизия
17ddd43f4c

+ 27 - 15
pkg/emby_api/emby_api.go

@@ -16,10 +16,12 @@ import (
 )
 
 type EmbyApi struct {
-	log        *logrus.Logger
-	embyConfig *settings.EmbySettings
-	timeOut    time.Duration
-	client     *resty.Client
+	log                   *logrus.Logger
+	embyConfig            *settings.EmbySettings
+	maxRequestVideoNumber int
+	skipWatched           bool
+	timeOut               time.Duration
+	client                *resty.Client
 }
 
 func NewEmbyApi(log *logrus.Logger, embyConfig *settings.EmbySettings) *EmbyApi {
@@ -30,6 +32,8 @@ func NewEmbyApi(log *logrus.Logger, embyConfig *settings.EmbySettings) *EmbyApi
 	em.embyConfig.Check()
 	// 强制设置
 	em.timeOut = 5 * 60 * time.Second
+	em.maxRequestVideoNumber = embyConfig.MaxRequestVideoNumber
+	em.skipWatched = embyConfig.SkipWatched
 	// 见 https://github.com/allanpk716/ChineseSubFinder/issues/140
 	em.client = resty.New().SetTransport(&http.Transport{
 		DisableKeepAlives:   true,
@@ -39,6 +43,14 @@ func NewEmbyApi(log *logrus.Logger, embyConfig *settings.EmbySettings) *EmbyApi
 	return &em
 }
 
+func (em *EmbyApi) SetMaxRequestVideoNumber(maxValue int) {
+	em.maxRequestVideoNumber = maxValue
+}
+
+func (em *EmbyApi) SetSkipWatched(skip bool) {
+	em.skipWatched = skip
+}
+
 // RefreshRecentlyVideoInfo 字幕下载完毕一次,就可以触发一次这个。并发 6 线程去刷新
 func (em *EmbyApi) RefreshRecentlyVideoInfo() error {
 	items, err := em.GetRecentlyItems()
@@ -104,7 +116,7 @@ func (em *EmbyApi) RefreshRecentlyVideoInfo() error {
 	return nil
 }
 
-func (em EmbyApi) GetRecentItemsByUserID(userId string) (emby.EmbyRecentlyItems, error) {
+func (em *EmbyApi) GetRecentItemsByUserID(userId string) (emby.EmbyRecentlyItems, error) {
 
 	var tmpRecItems emby.EmbyRecentlyItems
 	// 获取指定用户的视频列表
@@ -112,7 +124,7 @@ func (em EmbyApi) GetRecentItemsByUserID(userId string) (emby.EmbyRecentlyItems,
 		SetQueryParams(map[string]string{
 			"api_key":          em.embyConfig.APIKey,
 			"IsUnaired":        "false",
-			"Limit":            fmt.Sprintf("%d", em.embyConfig.MaxRequestVideoNumber),
+			"Limit":            fmt.Sprintf("%d", em.maxRequestVideoNumber),
 			"Recursive":        "true",
 			"SortOrder":        "Descending",
 			"IncludeItemTypes": "Episode,Movie",
@@ -130,14 +142,14 @@ func (em EmbyApi) GetRecentItemsByUserID(userId string) (emby.EmbyRecentlyItems,
 
 // GetRecentlyItems 获取近期的视频(根据 SkipWatched 的情况,如果不跳过,那么就是获取所有用户的列表,如果是跳过,那么就会单独读取每个用户的再交叉判断)
 // 在 API 调试界面 -- ItemsService
-func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
+func (em *EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 
 	var recItems emby.EmbyRecentlyItems
 	recItems.Items = make([]emby.EmbyRecentlyItem, 0)
 	var recItemMap = make(map[string]emby.EmbyRecentlyItem)
 	var recItemExsitMap = make(map[string]emby.EmbyRecentlyItem)
 	var err error
-	if em.embyConfig.SkipWatched == false {
+	if em.skipWatched == false {
 		em.log.Debugln("Emby Setting SkipWatched = false")
 
 		// 默认是不指定某一个User的视频列表
@@ -145,7 +157,7 @@ func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 			SetQueryParams(map[string]string{
 				"api_key":          em.embyConfig.APIKey,
 				"IsUnaired":        "false",
-				"Limit":            fmt.Sprintf("%d", em.embyConfig.MaxRequestVideoNumber),
+				"Limit":            fmt.Sprintf("%d", em.maxRequestVideoNumber),
 				"Recursive":        "true",
 				"SortOrder":        "Descending",
 				"IncludeItemTypes": "Episode,Movie",
@@ -212,7 +224,7 @@ func (em EmbyApi) GetRecentlyItems() (emby.EmbyRecentlyItems, error) {
 }
 
 // GetUserIdList 获取所有的 UserId
-func (em EmbyApi) GetUserIdList() (emby.EmbyUsers, error) {
+func (em *EmbyApi) GetUserIdList() (emby.EmbyUsers, error) {
 	var recItems emby.EmbyUsers
 	_, err := em.client.R().
 		SetQueryParams(map[string]string{
@@ -228,7 +240,7 @@ func (em EmbyApi) GetUserIdList() (emby.EmbyUsers, error) {
 }
 
 // GetItemAncestors 获取父级信息,在 API 调试界面 -- LibraryService
-func (em EmbyApi) GetItemAncestors(id string) ([]emby.EmbyItemsAncestors, error) {
+func (em *EmbyApi) GetItemAncestors(id string) ([]emby.EmbyItemsAncestors, error) {
 
 	var recItems []emby.EmbyItemsAncestors
 
@@ -247,7 +259,7 @@ func (em EmbyApi) GetItemAncestors(id string) ([]emby.EmbyItemsAncestors, error)
 
 // GetItemVideoInfo 在 API 调试界面 -- UserLibraryService,如果是电影,那么是可以从 ProviderIds 得到 IMDB ID 的
 // 如果是连续剧,那么不能使用一集的ID取获取,需要是这个剧集的 ID,注意一季的ID也是不行的
-func (em EmbyApi) GetItemVideoInfo(id string) (emby.EmbyVideoInfo, error) {
+func (em *EmbyApi) GetItemVideoInfo(id string) (emby.EmbyVideoInfo, error) {
 
 	var recItem emby.EmbyVideoInfo
 
@@ -265,7 +277,7 @@ func (em EmbyApi) GetItemVideoInfo(id string) (emby.EmbyVideoInfo, error) {
 }
 
 // GetItemVideoInfoByUserId 可以拿到这个视频的选择字幕Index,配合 GetItemVideoInfo 使用。 在 API 调试界面 -- UserLibraryService
-func (em EmbyApi) GetItemVideoInfoByUserId(userId, videoId string) (emby.EmbyVideoInfoByUserId, error) {
+func (em *EmbyApi) GetItemVideoInfoByUserId(userId, videoId string) (emby.EmbyVideoInfoByUserId, error) {
 
 	var recItem emby.EmbyVideoInfoByUserId
 
@@ -283,7 +295,7 @@ func (em EmbyApi) GetItemVideoInfoByUserId(userId, videoId string) (emby.EmbyVid
 }
 
 // UpdateVideoSubList 更新字幕列表, 在 API 调试界面 -- ItemRefreshService
-func (em EmbyApi) UpdateVideoSubList(id string) error {
+func (em *EmbyApi) UpdateVideoSubList(id string) error {
 
 	_, err := em.client.R().
 		SetQueryParams(map[string]string{
@@ -298,7 +310,7 @@ func (em EmbyApi) UpdateVideoSubList(id string) error {
 }
 
 // GetSubFileData 下载字幕 subExt -> .ass or .srt , 在 API 调试界面 -- SubtitleService
-func (em EmbyApi) GetSubFileData(videoId, mediaSourceId, subIndex, subExt string) (string, error) {
+func (em *EmbyApi) GetSubFileData(videoId, mediaSourceId, subIndex, subExt string) (string, error) {
 
 	response, err := em.client.R().
 		Get(em.embyConfig.AddressUrl + "/emby/Videos/" + videoId + "/" + mediaSourceId + "/Subtitles/" + subIndex + "/Stream" + subExt)

+ 8 - 0
pkg/logic/emby_helper/embyhelper.go

@@ -40,6 +40,14 @@ func NewEmbyHelper(_log *logrus.Logger, _settings *settings.Settings) *EmbyHelpe
 	return &em
 }
 
+func (em *EmbyHelper) SetMaxRequestVideoNumber(maxValue int) {
+	em.EmbyApi.SetMaxRequestVideoNumber(maxValue)
+}
+
+func (em *EmbyHelper) SetSkipWatched(skip bool) {
+	em.EmbyApi.SetSkipWatched(skip)
+}
+
 // GetRecentlyAddVideoListWithNoChineseSubtitle 获取最近新添加的视频,且没有中文字幕的
 func (em *EmbyHelper) GetRecentlyAddVideoListWithNoChineseSubtitle(needForcedScanAndDownSub ...bool) ([]emby2.EmbyMixInfo, map[string][]emby2.EmbyMixInfo, error) {
 

+ 4 - 3
pkg/logic/scan_played_video_subinfo/scan_played_video_subinfo.go

@@ -29,7 +29,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_parser_hub"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_share_center"
 	"github.com/allanpk716/ChineseSubFinder/pkg/task_control"
-	"github.com/huandu/go-clone"
 	"github.com/sirupsen/logrus"
 	"golang.org/x/net/context"
 )
@@ -64,8 +63,9 @@ func NewScanPlayedVideoSubInfo(log *logrus.Logger, _settings *settings.Settings,
 	scanPlayedVideoSubInfo.fileDownloader = fileDownloader
 	// 参入设置信息
 	// 最大获取的视频数目设置到 100W
-	scanPlayedVideoSubInfo.settings = clone.Clone(_settings).(*settings.Settings)
-	scanPlayedVideoSubInfo.settings.EmbySettings.MaxRequestVideoNumber = 1000000
+	scanPlayedVideoSubInfo.settings = _settings
+	//scanPlayedVideoSubInfo.settings = clone.Clone(_settings).(*settings.Settings)
+	//scanPlayedVideoSubInfo.settings.EmbySettings.MaxRequestVideoNumber = 1000000
 	// 检测是否某些参数超出范围
 	scanPlayedVideoSubInfo.settings.Check()
 	// 初始化 Emby API 接口
@@ -73,6 +73,7 @@ func NewScanPlayedVideoSubInfo(log *logrus.Logger, _settings *settings.Settings,
 		scanPlayedVideoSubInfo.settings.EmbySettings.APIKey != "" {
 
 		scanPlayedVideoSubInfo.embyHelper = embyHelper.NewEmbyHelper(log, scanPlayedVideoSubInfo.settings)
+		scanPlayedVideoSubInfo.embyHelper.SetMaxRequestVideoNumber(common2.EmbyApiGetItemsLimitMax)
 	}
 
 	// 初始化任务控制

+ 2 - 2
pkg/rod_helper/rod_base.go

@@ -136,7 +136,7 @@ func NewBrowserBase(log *logrus.Logger, localChromeFPath, httpProxyURL string, l
 		//	_ = page.Close()
 		//}
 	}
-	if len(preLoadUrl) > 0 {
+	if len(preLoadUrl) > 0 && preLoadUrl[0] != "" {
 		_, _, err := HttpGetFromBrowser(browser, preLoadUrl[0], 15*time.Second)
 		if err != nil {
 			if browser != nil {
@@ -198,7 +198,7 @@ func NewBrowserBaseFromDocker(httpProxyURL, remoteDockerURL string, remoteAdbloc
 		}
 	}
 
-	if len(preLoadUrl) > 0 {
+	if len(preLoadUrl) > 0 && preLoadUrl[0] != "" {
 		_, page, err := HttpGetFromBrowser(browser, preLoadUrl[0], 15*time.Second)
 		if err != nil {
 			if browser != nil {

+ 2 - 0
pkg/settings/settings.go

@@ -113,6 +113,8 @@ func (s *Settings) Save() error {
 }
 
 func (s *Settings) GetNoPasswordSettings() *Settings {
+
+	_ = s.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
 	nowSettings := clone.Clone(s).(*Settings)
 	nowSettings.UserInfo.Password = noPassword4Show
 	return nowSettings

+ 6 - 36
pkg/something_static/something_static.go

@@ -84,43 +84,13 @@ func writeFile(saveFileFPath, enString, nowTime string) error {
 
 func GetCodeFromWeb(l *logrus.Logger, nowTimeFileNamePrix string, fileDownloader *file_downloader.FileDownloader) (string, string, error) {
 
-	// 默认的位置
-	const baseCodeFileUrl = "https://raw.githubusercontent.com/"
-	const whichProject = "allanpk716/SomeThingsStatic/"
-	desUrl := baseCodeFileUrl + whichProject + "master/" + nowTimeFileNamePrix + common.StaticFileName00
-
-	var err error
-	updateTimeString := ""
-	code := ""
-	found := false
-	count := 0
-	for {
-		if found == true {
-			break
-		}
-		count++
-		if count > 2 {
-			break
-		}
-		updateTimeString, code, err = getCodeFromWeb(l, desUrl)
-		if err != nil {
-			time.Sleep(time.Second * 5)
-			continue
-		}
-
-		found = true
-	}
-
-	if found == false {
-		getCode, err := fileDownloader.SubtitleBestApi.GetCode()
-		if err != nil {
-			return "", "", errors.New(fmt.Sprintf("get code from web failed, %v \n", err.Error()))
-		}
-		nowTT := time.Now().Format("2006-01-02")
-		return nowTT, getCode, nil
+	getCode, err := fileDownloader.SubtitleBestApi.GetCode()
+	if err != nil {
+		l.Errorln("SubtitleBestApi.GetCode", err)
+		return "", "", errors.New(fmt.Sprintf("get code from web failed, %v \n", err.Error()))
 	}
-
-	return updateTimeString, code, nil
+	nowTT := time.Now().Format("2006-01-02")
+	return nowTT, getCode, nil
 }
 
 func getCodeFromWeb(l *logrus.Logger, desUrl string) (string, string, error) {

+ 4 - 5
pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

@@ -41,7 +41,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/pkg/task_control"
 	"github.com/allanpk716/ChineseSubFinder/pkg/task_queue"
 	"github.com/emirpasic/gods/maps/treemap"
-	"github.com/huandu/go-clone"
 	"github.com/jinzhu/now"
 	"github.com/sirupsen/logrus"
 	"golang.org/x/net/context"
@@ -260,10 +259,10 @@ func (v *VideoScanAndRefreshHelper) ScanEmbyMovieAndSeries(scanVideoResult *Scan
 
 			v.log.Infoln("Forced Scan And DownSub, tmpSetting.EmbySettings.MaxRequestVideoNumber = 1000000")
 			// 如果是强制,那么就临时修改 Setting 的 Emby MaxRequestVideoNumber 参数为 1000000
-			tmpSetting := clone.Clone(v.settings).(*settings.Settings)
-			tmpSetting.EmbySettings.MaxRequestVideoNumber = common2.EmbyApiGetItemsLimitMax
-			tmpSetting.EmbySettings.SkipWatched = false
-			v.embyHelper = embyHelper.NewEmbyHelper(v.log, tmpSetting)
+			//tmpSetting := clone.Clone(v.settings).(*settings.Settings)
+			v.embyHelper = embyHelper.NewEmbyHelper(v.log, v.settings)
+			v.embyHelper.SetMaxRequestVideoNumber(common2.EmbyApiGetItemsLimitMax)
+			v.embyHelper.SetSkipWatched(false)
 		} else {
 			v.log.Infoln("Not Forced Scan And DownSub")
 			v.embyHelper = embyHelper.NewEmbyHelper(v.log, v.settings)