From 534d8d30fc2da997899f3dea350b5ef06c49ccd7 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Mon, 5 Sep 2022 16:40:51 +0800 Subject: [PATCH] feat: skip generate lang if no changes --- cmd/lang.go | 45 +++++++++++++++++++++++++++++++++++++++++++-- pkg/utils/json.go | 4 ++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/cmd/lang.go b/cmd/lang.go index 6b15a291..41b39e15 100644 --- a/cmd/lang.go +++ b/cmd/lang.go @@ -6,7 +6,9 @@ package cmd import ( "fmt" + "io" "os" + "reflect" "strings" _ "github.com/alist-org/alist/v3/drivers" @@ -14,6 +16,7 @@ import ( "github.com/alist-org/alist/v3/internal/conf" "github.com/alist-org/alist/v3/internal/op" "github.com/alist-org/alist/v3/pkg/utils" + log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -34,6 +37,43 @@ func convert(s string) string { return firstUpper(ans) } +func writeFile(name string, data interface{}) { + f, err := os.Open(fmt.Sprintf("../alist-web/src/lang/en/%s.json", name)) + if err != nil { + log.Errorf("failed to open %s.json: %+v", name, err) + return + } + content, err := io.ReadAll(f) + if err != nil { + log.Errorf("failed to read %s.json: %+v", name, err) + return + } + oldData := make(map[string]interface{}) + newData := make(map[string]interface{}) + err = utils.Json.Unmarshal(content, &oldData) + if err != nil { + log.Errorf("failed to unmarshal %s.json: %+v", name, err) + return + } + content, err = utils.Json.Marshal(data) + if err != nil { + log.Errorf("failed to marshal json: %+v", err) + return + } + err = utils.Json.Unmarshal(content, &newData) + if err != nil { + log.Errorf("failed to unmarshal json: %+v", err) + return + } + if reflect.DeepEqual(oldData, newData) { + log.Infof("%s.json no changed, skip", name) + } else { + log.Infof("%s.json changed, update file", name) + //log.Infof("old: %+v\nnew:%+v", oldData, data) + utils.WriteJsonToFile(fmt.Sprintf("lang/%s.json", name), data) + } +} + func generateDriversJson() { drivers := make(Drivers) drivers["drivers"] = make(KV[interface{}]) @@ -58,7 +98,7 @@ func generateDriversJson() { } drivers[k] = items } - utils.WriteJsonToFile("lang/drivers.json", drivers) + writeFile("drivers", drivers) } func generateSettingsJson() { @@ -78,7 +118,8 @@ func generateSettingsJson() { settingsLang[fmt.Sprintf("%ss", setting.Key)] = options } } - utils.WriteJsonToFile("lang/settings.json", settingsLang) + writeFile("settings", settingsLang) + //utils.WriteJsonToFile("lang/settings.json", settingsLang) } // langCmd represents the lang command diff --git a/pkg/utils/json.go b/pkg/utils/json.go index 5dea3650..5489775e 100644 --- a/pkg/utils/json.go +++ b/pkg/utils/json.go @@ -1,7 +1,7 @@ package utils import ( - "io/ioutil" + "os" json "github.com/json-iterator/go" log "github.com/sirupsen/logrus" @@ -16,7 +16,7 @@ func WriteJsonToFile(dst string, data interface{}) bool { log.Errorf("failed convert Conf to []byte:%s", err.Error()) return false } - err = ioutil.WriteFile(dst, str, 0777) + err = os.WriteFile(dst, str, 0777) if err != nil { log.Errorf("failed to write json file:%s", err.Error()) return false