diff --git a/configs/config.go b/configs/config.go index 10a7a7e..2baa224 100644 --- a/configs/config.go +++ b/configs/config.go @@ -45,6 +45,7 @@ type Basic struct { CauseStop string `json:"cause_stop"` } +// Get config from json file func GetConfig() (config Config, err error) { content, err := os.ReadFile("config.json") if err != nil { diff --git a/internal/bilibili.go b/internal/bilibili.go index 607c83d..9ff96a8 100644 --- a/internal/bilibili.go +++ b/internal/bilibili.go @@ -12,6 +12,7 @@ import ( "github.com/ssdomei232/goodBaby/configs" ) +// check tmp dir exist func EnsureTmpDirectory() error { _, err := os.Stat("tmp") if os.IsNotExist(err) { @@ -29,41 +30,41 @@ func EnsureTmpDirectory() error { } func isCookiesExpired(cookiesString string) bool { - // 解析cookie中的过期时间 + // parase expires date from cookie string lines := strings.SplitSeq(cookiesString, "\n") for line := range lines { if strings.Contains(line, "Expires=") { // 提取过期时间字符串 expireStr := "" - parts := strings.Split(line, ";") - for _, part := range parts { + parts := strings.SplitSeq(line, ";") + for part := range parts { part = strings.TrimSpace(part) - if strings.HasPrefix(part, "Expires=") { - expireStr = strings.TrimPrefix(part, "Expires=") + if after, ok := strings.CutPrefix(part, "Expires="); ok { + expireStr = after break } } if expireStr != "" { - // 解析过期时间 + // phrase expirres date expireTime, err := http.ParseTime(expireStr) if err != nil { log.Printf("解析过期时间失败: %v", err) - return true // 如果解析失败,认为已过期 + return true // if phrase failed, cookie expired } - // 比较过期时间和当前时间 + // compare expires date and now if time.Now().After(expireTime) { - return true // 已过期 + return true // expired } } } } - return false // 未过期 + return false // not expired } -// 二维码登录 +// Qrcode login func LoginWithQRCode(biliClient *bilibili.Client) { qrCode, err := biliClient.GetQRCode() if err != nil { @@ -86,11 +87,11 @@ func LoginWithQRCode(biliClient *bilibili.Client) { log.Println("登录成功") - // 保存新获取的cookie + // save new cookie saveCookies(biliClient) } -// 保存cookie到文件 +// save cookie to file func saveCookies(client *bilibili.Client) { cookiesString := client.GetCookiesString() err := os.WriteFile("tmp/cookies.txt", []byte(cookiesString), 0644) diff --git a/main.go b/main.go index 004c924..a5cd2c2 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ var biliClient *bilibili.Client var cookieCheckTimer *time.Ticker func init() { + // Get COnfig config, err := configs.GetConfig() if err != nil { log.Printf("获取配置文件失败: %v", err) @@ -38,15 +39,15 @@ func init() { duration = time.Duration(config.DisconnectDuration) * time.Hour } - // 检查并创建tmp目录 + // Check and create tmp dir if err := internal.EnsureTmpDirectory(); err != nil { log.Printf("创建tmp目录失败: %v", err) } - // 初始化bilibili客户端 + // Init Bilibili Clinet biliClient = bilibili.New() initBilibili() - startCookieChecker() // 启动定期检查cookie有效性 + startCookieChecker() // Check Bilibili cookie internal.InitTimerManager(duration) timer = time.NewTimer(duration) @@ -69,12 +70,8 @@ func trigger(config configs.Config) { func main() { r := gin.Default() - - // 设置嵌入的模板 templFS, _ := fs.Sub(templateFiles, "templates") r.SetHTMLTemplate(loadTemplates(templFS)) - - // 提供嵌入的静态文件 staticFS, _ := fs.Sub(staticFiles, "static") r.StaticFS("/static", http.FS(staticFS)) @@ -89,18 +86,18 @@ func indexPage(c *gin.Context) { } func initBilibili() { - // 尝试加载已存储的cookie + // try cached cookie if !internal.LoadCookies(biliClient) { - // 如果没有有效cookie,则进行二维码登录 + // if cookie check failed, request qrcode login internal.LoginWithQRCode(biliClient) } else { log.Println("使用已存储的有效cookie登录") } } -// 启动cookie定期检查 +// Enable periodic cookie checks func startCookieChecker() { - // 每小时检查一次cookie有效性 + // check cookie per hour cookieCheckTimer = time.NewTicker(1 * time.Hour) go func() { for { @@ -133,7 +130,7 @@ func handleSignal(c *gin.Context) { log.Println("触发信号") } -// loadTemplates 从嵌入的文件系统加载模板 +// loadTemplates loads templates from the embedded file system func loadTemplates(filesystem fs.FS) *template.Template { templ := template.Must(template.New("").ParseFS(filesystem, "*.html")) return templ