|  | @@ -43,16 +43,24 @@ func NewCronHelper(fileDownloader *file_downloader.FileDownloader) *CronHelper {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	var err error
 | 
	
		
			
				|  |  | +	// ----------------------------------------------
 | 
	
		
			
				|  |  |  	// 扫描已播放
 | 
	
		
			
				|  |  |  	ch.scanPlayedVideoSubInfo, err = scan_played_video_subinfo.NewScanPlayedVideoSubInfo(ch.log, ch.Settings)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  |  		ch.log.Panicln(err)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	// ----------------------------------------------
 | 
	
		
			
				|  |  |  	// 字幕扫描器
 | 
	
		
			
				|  |  |  	ch.videoScanAndRefreshHelper = video_scan_and_refresh_helper.NewVideoScanAndRefreshHelper(
 | 
	
		
			
				|  |  |  		ch.FileDownloader,
 | 
	
		
			
				|  |  |  		ch.DownloadQueue)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	// ----------------------------------------------
 | 
	
		
			
				|  |  | +	// 初始化下载者,里面的两个 func 需要使用定时器启动 SupplierCheck QueueDownloader
 | 
	
		
			
				|  |  | +	ch.downloader = downloader.NewDownloader(
 | 
	
		
			
				|  |  | +		sub_formatter.GetSubFormatter(ch.log, ch.Settings.AdvancedSettings.SubNameFormatter),
 | 
	
		
			
				|  |  | +		ch.FileDownloader, ch.DownloadQueue)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	return &ch
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -72,11 +80,6 @@ func (ch *CronHelper) Start(runImmediately bool) {
 | 
	
		
			
				|  |  |  	ch.stopping = false
 | 
	
		
			
				|  |  |  	ch.cronLock.Unlock()
 | 
	
		
			
				|  |  |  	// ----------------------------------------------
 | 
	
		
			
				|  |  | -	// 初始化下载者,里面的两个 func 需要使用定时器启动 SupplierCheck QueueDownloader
 | 
	
		
			
				|  |  | -	ch.downloader = downloader.NewDownloader(
 | 
	
		
			
				|  |  | -		sub_formatter.GetSubFormatter(ch.log, ch.Settings.AdvancedSettings.SubNameFormatter),
 | 
	
		
			
				|  |  | -		ch.FileDownloader, ch.DownloadQueue)
 | 
	
		
			
				|  |  | -	// ----------------------------------------------
 | 
	
		
			
				|  |  |  	// 判断扫描任务的时间间隔是否符合要求,不符合则重写默认值
 | 
	
		
			
				|  |  |  	_, err := cron.ParseStandard(ch.Settings.CommonSettings.ScanInterval)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
	
		
			
				|  | @@ -113,35 +116,59 @@ func (ch *CronHelper) Start(runImmediately bool) {
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  |  		ch.log.Panicln("CronHelper QueueDownloader, Cron entryID:", ch.entryIDScanPlayedVideoSubInfo, "Error:", err)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	ch.downloader.SupplierCheck()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// 是否在定时器开启前先执行一次任务
 | 
	
		
			
				|  |  | -	if runImmediately == true {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		ch.log.Infoln("First Time scanVideoProcessAdd2DownloadQueue Start")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ch.Settings.SpeedDevMode == false {
 | 
	
		
			
				|  |  | -			ch.scanVideoProcessAdd2DownloadQueue()
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		ch.log.Infoln("First Time scanVideoProcessAdd2DownloadQueue End")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +	// ----------------------------------------------
 | 
	
		
			
				|  |  | +	// 启动一次字幕源有效性检测
 | 
	
		
			
				|  |  | +	ch.cronLock.Lock()
 | 
	
		
			
				|  |  | +	if ch.cronHelperRunning == true && ch.stopping == false {
 | 
	
		
			
				|  |  | +		ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +		ch.downloader.SupplierCheck()
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  | -		ch.log.Infoln("RunAtStartup: false, so will not Run At Startup")
 | 
	
		
			
				|  |  | +		ch.cronLock.Unlock()
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	// ----------------------------------------------
 | 
	
		
			
				|  |  | +	if runImmediately == true {
 | 
	
		
			
				|  |  | +		// 是否在定时器开启前先执行一次视频扫描任务
 | 
	
		
			
				|  |  | +		ch.cronLock.Lock()
 | 
	
		
			
				|  |  | +		if ch.cronHelperRunning == true && ch.stopping == false {
 | 
	
		
			
				|  |  | +			ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +			//----------------------------------------------
 | 
	
		
			
				|  |  | +			// 没有停止,那么继续扫描
 | 
	
		
			
				|  |  | +			ch.log.Infoln("First Time scanVideoProcessAdd2DownloadQueue Start")
 | 
	
		
			
				|  |  | +			if ch.Settings.SpeedDevMode == false {
 | 
	
		
			
				|  |  | +				ch.scanVideoProcessAdd2DownloadQueue()
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			ch.log.Infoln("First Time scanVideoProcessAdd2DownloadQueue End")
 | 
	
		
			
				|  |  | +			//----------------------------------------------
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +			ch.log.Infoln("CronHelper is stopping, not start scanVideoProcessAdd2DownloadQueue")
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ch.log.Infoln("CronHelper Start...")
 | 
	
		
			
				|  |  | -	ch.c.Start()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// 只有定时任务 start 之后才能拿到信息
 | 
	
		
			
				|  |  | -	if len(ch.c.Entries()) > 0 {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// 不会马上启动扫描,那么就需要设置当前的时间,且为 waiting
 | 
	
		
			
				|  |  | -		tttt := ch.c.Entry(ch.entryIDScanVideoProcess).Next.Format("2006-01-02 15:04:05")
 | 
	
		
			
				|  |  | -		ch.log.Infoln("Next Sub Scan Will Process At:", tttt)
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  | -		ch.log.Errorln("Can't get cron jobs, will not send SubScanJobStatus")
 | 
	
		
			
				|  |  | +		// 如果不是立即执行,那么就等待定时器开启
 | 
	
		
			
				|  |  | +		ch.cronLock.Lock()
 | 
	
		
			
				|  |  | +		if ch.cronHelperRunning == true && ch.stopping == false {
 | 
	
		
			
				|  |  | +			ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +			//----------------------------------------------
 | 
	
		
			
				|  |  | +			ch.log.Infoln("CronHelper Start...")
 | 
	
		
			
				|  |  | +			ch.c.Start()
 | 
	
		
			
				|  |  | +			//----------------------------------------------
 | 
	
		
			
				|  |  | +			// 只有定时任务 start 之后才能拿到信息
 | 
	
		
			
				|  |  | +			if len(ch.c.Entries()) > 0 {
 | 
	
		
			
				|  |  | +				// 不会马上启动扫描,那么就需要设置当前的时间,且为 waiting
 | 
	
		
			
				|  |  | +				tttt := ch.c.Entry(ch.entryIDScanVideoProcess).Next.Format("2006-01-02 15:04:05")
 | 
	
		
			
				|  |  | +				ch.log.Infoln("Next Sub Scan Will Process At:", tttt)
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				ch.log.Errorln("Can't get cron jobs, will not send SubScanJobStatus")
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			ch.log.Infoln("RunAtStartup: false, so will not Run At Startup")
 | 
	
		
			
				|  |  | +			//----------------------------------------------
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +			ch.log.Infoln("CronHelper is stopping, not start CronHelper")
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		//----------------------------------------------
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -175,13 +202,15 @@ func (ch *CronHelper) Stop() {
 | 
	
		
			
				|  |  |  	case <-time.After(5 * time.Minute):
 | 
	
		
			
				|  |  |  		ch.log.Warningln("Wait over 5 min, CronHelper is timeout")
 | 
	
		
			
				|  |  |  	case <-nowContext.Done():
 | 
	
		
			
				|  |  | -		ch.log.Infoln("CronHelper.Stop() Done.")
 | 
	
		
			
				|  |  | +		ch.log.Infoln("CronHelper.Stop() context<-Done.")
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ch.cronLock.Lock()
 | 
	
		
			
				|  |  |  	ch.cronHelperRunning = false
 | 
	
		
			
				|  |  |  	ch.stopping = false
 | 
	
		
			
				|  |  |  	ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	ch.log.Infoln("CronHelper.Stop() Done.")
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (ch *CronHelper) scanPlayedVideoSub() {
 | 
	
	
		
			
				|  | @@ -233,9 +262,6 @@ func (ch *CronHelper) CronRunningStatusString() string {
 | 
	
		
			
				|  |  |  func (ch *CronHelper) scanVideoProcessAdd2DownloadQueue() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	defer func() {
 | 
	
		
			
				|  |  | -		ch.cronLock.Lock()
 | 
	
		
			
				|  |  | -		ch.cronLock.Unlock()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		// 下载完后,应该继续是等待
 | 
	
		
			
				|  |  |  		tttt := ch.c.Entry(ch.entryIDScanVideoProcess).Next.Format("2006-01-02 15:04:05")
 | 
	
		
			
				|  |  |  		ch.log.Infoln("Next Sub Scan Will Process At:", tttt)
 |