From b9aae610db421f80ebd308a8aac3cd9e678fbc3a Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Thu, 3 Jul 2025 16:43:43 +0300 Subject: [PATCH] added language.go for language related functions --- handlers/application/language.go | 74 +++++++++++++++++++++++++++++ handlers/application/menuhandler.go | 63 ------------------------ 2 files changed, 74 insertions(+), 63 deletions(-) create mode 100644 handlers/application/language.go diff --git a/handlers/application/language.go b/handlers/application/language.go new file mode 100644 index 0000000..dcbe985 --- /dev/null +++ b/handlers/application/language.go @@ -0,0 +1,74 @@ +package application + +import ( + "context" + "fmt" + "strings" + + "git.defalsify.org/vise.git/db" + "git.defalsify.org/vise.git/resource" + "git.defalsify.org/vise.git/state" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" + commonlang "git.grassecon.net/grassrootseconomics/common/lang" +) + +// SetLanguage sets the language across the menu. +func (h *MenuHandlers) SetLanguage(ctx context.Context, sym string, input []byte) (resource.Result, error) { + var res resource.Result + + symbol, _ := h.st.Where() + code := strings.Split(symbol, "_")[1] + + // TODO: Use defaultlanguage from config + if !commonlang.IsValidISO639(code) { + //Fallback to english instead? + code = "eng" + } + err := h.persistLanguageCode(ctx, code) + if err != nil { + return res, err + } + res.Content = code + res.FlagSet = append(res.FlagSet, state.FLAG_LANG) + languageSetFlag, err := h.flagManager.GetFlag("flag_language_set") + if err != nil { + logg.ErrorCtxf(ctx, "Error setting the languageSetFlag", "error", err) + return res, err + } + res.FlagSet = append(res.FlagSet, languageSetFlag) + + return res, nil +} + +// persistLanguageCode persists the selected ISO 639 language code +func (h *MenuHandlers) persistLanguageCode(ctx context.Context, code string) error { + store := h.userdataStore + sessionId, ok := ctx.Value("SessionId").(string) + if !ok { + return fmt.Errorf("missing session") + } + err := store.WriteEntry(ctx, sessionId, storedb.DATA_SELECTED_LANGUAGE_CODE, []byte(code)) + if err != nil { + logg.ErrorCtxf(ctx, "failed to persist language code", "key", storedb.DATA_SELECTED_LANGUAGE_CODE, "value", code, "error", err) + return err + } + return h.persistInitialLanguageCode(ctx, sessionId, code) +} + +// persistInitialLanguageCode receives an initial language code and persists it to the store +func (h *MenuHandlers) persistInitialLanguageCode(ctx context.Context, sessionId string, code string) error { + store := h.userdataStore + _, err := store.ReadEntry(ctx, sessionId, storedb.DATA_INITIAL_LANGUAGE_CODE) + if err == nil { + return nil + } + if !db.IsNotFound(err) { + return err + } + err = store.WriteEntry(ctx, sessionId, storedb.DATA_INITIAL_LANGUAGE_CODE, []byte(code)) + if err != nil { + logg.ErrorCtxf(ctx, "failed to persist initial language code", "key", storedb.DATA_INITIAL_LANGUAGE_CODE, "value", code, "error", err) + return err + } + return nil +} diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 4ab6a8e..648cc76 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -5,7 +5,6 @@ import ( "fmt" "path" "strconv" - "strings" "gopkg.in/leonelquinteros/gotext.v1" @@ -17,7 +16,6 @@ import ( "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - commonlang "git.grassecon.net/grassrootseconomics/common/lang" "git.grassecon.net/grassrootseconomics/common/pin" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" "git.grassecon.net/grassrootseconomics/sarafu-vise/internal/sms" @@ -158,34 +156,6 @@ func codeFromCtx(ctx context.Context) string { return code } -// SetLanguage sets the language across the menu. -func (h *MenuHandlers) SetLanguage(ctx context.Context, sym string, input []byte) (resource.Result, error) { - var res resource.Result - - symbol, _ := h.st.Where() - code := strings.Split(symbol, "_")[1] - - // TODO: Use defaultlanguage from config - if !commonlang.IsValidISO639(code) { - //Fallback to english instead? - code = "eng" - } - err := h.persistLanguageCode(ctx, code) - if err != nil { - return res, err - } - res.Content = code - res.FlagSet = append(res.FlagSet, state.FLAG_LANG) - languageSetFlag, err := h.flagManager.GetFlag("flag_language_set") - if err != nil { - logg.ErrorCtxf(ctx, "Error setting the languageSetFlag", "error", err) - return res, err - } - res.FlagSet = append(res.FlagSet, languageSetFlag) - - return res, nil -} - func (h *MenuHandlers) CheckAccountCreated(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result flag_language_set, _ := h.flagManager.GetFlag("flag_language_set") @@ -463,39 +433,6 @@ func (h *MenuHandlers) ShowBlockedAccount(ctx context.Context, sym string, input return res, nil } -// persistInitialLanguageCode receives an initial language code and persists it to the store -func (h *MenuHandlers) persistInitialLanguageCode(ctx context.Context, sessionId string, code string) error { - store := h.userdataStore - _, err := store.ReadEntry(ctx, sessionId, storedb.DATA_INITIAL_LANGUAGE_CODE) - if err == nil { - return nil - } - if !db.IsNotFound(err) { - return err - } - err = store.WriteEntry(ctx, sessionId, storedb.DATA_INITIAL_LANGUAGE_CODE, []byte(code)) - if err != nil { - logg.ErrorCtxf(ctx, "failed to persist initial language code", "key", storedb.DATA_INITIAL_LANGUAGE_CODE, "value", code, "error", err) - return err - } - return nil -} - -// persistLanguageCode persists the selected ISO 639 language code -func (h *MenuHandlers) persistLanguageCode(ctx context.Context, code string) error { - store := h.userdataStore - sessionId, ok := ctx.Value("SessionId").(string) - if !ok { - return fmt.Errorf("missing session") - } - err := store.WriteEntry(ctx, sessionId, storedb.DATA_SELECTED_LANGUAGE_CODE, []byte(code)) - if err != nil { - logg.ErrorCtxf(ctx, "failed to persist language code", "key", storedb.DATA_SELECTED_LANGUAGE_CODE, "value", code, "error", err) - return err - } - return h.persistInitialLanguageCode(ctx, sessionId, code) -} - // ClearTemporaryValue empties the DATA_TEMPORARY_VALUE at the main menu to prevent // previously stored data from being accessed func (h *MenuHandlers) ClearTemporaryValue(ctx context.Context, sym string, input []byte) (resource.Result, error) {