From 678962d4ca3045bd869930efef0a196a0f8a29ba Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sat, 20 May 2023 19:39:01 +0430 Subject: some fix and prune for tgbot --- web/web.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index 1795e1d4..bd1c4721 100644 --- a/web/web.go +++ b/web/web.go @@ -453,7 +453,7 @@ func (s *Server) Stop() error { if s.cron != nil { s.cron.Stop() } - if s.tgbotService.IsRunnging() { + if s.tgbotService.IsRunning() { s.tgbotService.Stop() } var err1 error -- cgit v1.2.3 From 92eaff9608f924f7a78a7837daecec6cfb252b50 Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sat, 20 May 2023 19:43:59 +0430 Subject: replace new localizer to web.go --- web/web.go | 101 ++++++------------------------------------------------------- 1 file changed, 10 insertions(+), 91 deletions(-) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index bd1c4721..afac077f 100644 --- a/web/web.go +++ b/web/web.go @@ -18,16 +18,14 @@ import ( "x-ui/util/common" "x-ui/web/controller" "x-ui/web/job" + "x-ui/web/locale" "x-ui/web/network" "x-ui/web/service" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" - "github.com/nicksnyder/go-i18n/v2/i18n" - "github.com/pelletier/go-toml/v2" "github.com/robfig/cron/v3" - "golang.org/x/text/language" ) //go:embed assets/* @@ -202,13 +200,16 @@ func (s *Server) initRouter() (*gin.Engine, error) { c.Header("Cache-Control", "max-age=31536000") } }) - err = s.initI18n(engine) + + // init i18n + err = locale.InitLocalizer(i18nFS, &s.settingService) if err != nil { return nil, err } + // set static files and template if config.IsDebug() { - // for develop + // for development files, err := s.getHtmlFiles() if err != nil { return nil, err @@ -216,12 +217,12 @@ func (s *Server) initRouter() (*gin.Engine, error) { engine.LoadHTMLFiles(files...) engine.StaticFS(basePath+"assets", http.FS(os.DirFS("web/assets"))) } else { - // for prod - t, err := s.getHtmlTemplate(engine.FuncMap) + // for production + template, err := s.getHtmlTemplate(engine.FuncMap) if err != nil { return nil, err } - engine.SetHTMLTemplate(t) + engine.SetHTMLTemplate(template) engine.StaticFS(basePath+"assets", http.FS(&wrapAssetsFS{FS: assetsFS})) } @@ -239,87 +240,6 @@ func (s *Server) initRouter() (*gin.Engine, error) { return engine, nil } -func (s *Server) initI18n(engine *gin.Engine) error { - bundle := i18n.NewBundle(language.SimplifiedChinese) - bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal) - err := fs.WalkDir(i18nFS, "translation", func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - if d.IsDir() { - return nil - } - data, err := i18nFS.ReadFile(path) - if err != nil { - return err - } - _, err = bundle.ParseMessageFileBytes(data, path) - return err - }) - if err != nil { - return err - } - - findI18nParamNames := func(key string) []string { - names := make([]string, 0) - keyLen := len(key) - for i := 0; i < keyLen-1; i++ { - if key[i:i+2] == "{{" { // 判断开头 "{{" - j := i + 2 - isFind := false - for ; j < keyLen-1; j++ { - if key[j:j+2] == "}}" { // 结尾 "}}" - isFind = true - break - } - } - if isFind { - names = append(names, key[i+3:j]) - } - } - } - return names - } - - var localizer *i18n.Localizer - - I18n := func(key string, params ...string) (string, error) { - names := findI18nParamNames(key) - if len(names) != len(params) { - return "", common.NewError("find names:", names, "---------- params:", params, "---------- num not equal") - } - templateData := map[string]interface{}{} - for i := range names { - templateData[names[i]] = params[i] - } - return localizer.Localize(&i18n.LocalizeConfig{ - MessageID: key, - TemplateData: templateData, - }) - } - - engine.FuncMap["i18n"] = I18n - - engine.Use(func(c *gin.Context) { - //accept := c.GetHeader("Accept-Language") - - var lang string - - if cookie, err := c.Request.Cookie("lang"); err == nil { - lang = cookie.Value - } else { - lang = c.GetHeader("Accept-Language") - } - - localizer = i18n.NewLocalizer(bundle, lang) - c.Set("localizer", localizer) - c.Set("I18n", I18n) - c.Next() - }) - - return nil -} - func (s *Server) startTask() { err := s.xrayService.RestartXray(true) if err != nil { @@ -346,7 +266,7 @@ func (s *Server) startTask() { if (err == nil) && (isTgbotenabled) { runtime, err := s.settingService.GetTgbotRuntime() if err != nil || runtime == "" { - logger.Errorf("Add NewStatsNotifyJob error[%s],Runtime[%s] invalid,wil run default", err, runtime) + logger.Errorf("Add NewStatsNotifyJob error[%s], Runtime[%s] invalid, will run default", err, runtime) runtime = "@daily" } logger.Infof("Tg notify enabled,run at %s", runtime) @@ -361,7 +281,6 @@ func (s *Server) startTask() { if (err == nil) && (cpuThreshold > 0) { s.cron.AddJob("@every 10s", job.NewCheckCpuJob()) } - } else { s.cron.Remove(entry) } -- cgit v1.2.3 From 4865754b3d3d2d6a3296c8b07bb69a7f0bb0c489 Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sat, 20 May 2023 19:46:05 +0430 Subject: add localizer middleware to web.go --- web/web.go | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index afac077f..d917dc7a 100644 --- a/web/web.go +++ b/web/web.go @@ -207,6 +207,13 @@ func (s *Server) initRouter() (*gin.Engine, error) { return nil, err } + // Apply locale middleware for i18n + webI18nFunc := func(key string, params ...string) string { + return locale.I18n(locale.Web, key, params...) + } + engine.FuncMap["i18n"] = webI18nFunc + engine.Use(locale.LocalizerMiddleware()) + // set static files and template if config.IsDebug() { // for development -- cgit v1.2.3 From 4dfe527f203cbae9b90e77e876fcfd90803bcb26 Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sat, 20 May 2023 20:08:01 +0430 Subject: init i18n in tgbot --- web/web.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index d917dc7a..908fefc5 100644 --- a/web/web.go +++ b/web/web.go @@ -367,7 +367,7 @@ func (s *Server) Start() (err error) { isTgbotenabled, err := s.settingService.GetTgbotenabled() if (err == nil) && (isTgbotenabled) { tgBot := s.tgbotService.NewTgbot() - tgBot.Start() + tgBot.Start(i18nFS) } return nil -- cgit v1.2.3 From 8c5648eb09b0d6d1479f102156e8a548ed478caa Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sat, 20 May 2023 20:29:28 +0430 Subject: FIX callback query and BUTTON_DATA_INVALID error with hashStorage --- web/web.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index 908fefc5..b15731fc 100644 --- a/web/web.go +++ b/web/web.go @@ -283,6 +283,9 @@ func (s *Server) startTask() { return } + // check for Telegram bot callback query hash storage reset + s.cron.AddJob("@every 2m", job.NewCheckHashStorageJob()) + // Check CPU load and alarm to TgBot if threshold passes cpuThreshold, err := s.settingService.GetTgCpu() if (err == nil) && (cpuThreshold > 0) { -- cgit v1.2.3 From d9b1b200cebb82087037d505f13151dd425577a6 Mon Sep 17 00:00:00 2001 From: Hamidreza Ghavami <70919649+hamid-gh98@users.noreply.github.com> Date: Sun, 21 May 2023 03:29:27 +0430 Subject: rename I18n to I18nWeb --- web/web.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'web/web.go') diff --git a/web/web.go b/web/web.go index b15731fc..1a631d38 100644 --- a/web/web.go +++ b/web/web.go @@ -208,10 +208,10 @@ func (s *Server) initRouter() (*gin.Engine, error) { } // Apply locale middleware for i18n - webI18nFunc := func(key string, params ...string) string { + i18nWebFunc := func(key string, params ...string) string { return locale.I18n(locale.Web, key, params...) } - engine.FuncMap["i18n"] = webI18nFunc + engine.FuncMap["i18n"] = i18nWebFunc engine.Use(locale.LocalizerMiddleware()) // set static files and template -- cgit v1.2.3