project-tidyup - menuhandler and tests #90
							
								
								
									
										74
									
								
								handlers/application/language.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								handlers/application/language.go
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||||
|  | } | ||||||
| @ -5,7 +5,6 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"path" | 	"path" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
| 
 | 
 | ||||||
| 	"gopkg.in/leonelquinteros/gotext.v1" | 	"gopkg.in/leonelquinteros/gotext.v1" | ||||||
| 
 | 
 | ||||||
| @ -17,7 +16,6 @@ import ( | |||||||
| 	"git.defalsify.org/vise.git/persist" | 	"git.defalsify.org/vise.git/persist" | ||||||
| 	"git.defalsify.org/vise.git/resource" | 	"git.defalsify.org/vise.git/resource" | ||||||
| 	"git.defalsify.org/vise.git/state" | 	"git.defalsify.org/vise.git/state" | ||||||
| 	commonlang "git.grassecon.net/grassrootseconomics/common/lang" |  | ||||||
| 	"git.grassecon.net/grassrootseconomics/common/pin" | 	"git.grassecon.net/grassrootseconomics/common/pin" | ||||||
| 	"git.grassecon.net/grassrootseconomics/sarafu-api/remote" | 	"git.grassecon.net/grassrootseconomics/sarafu-api/remote" | ||||||
| 	"git.grassecon.net/grassrootseconomics/sarafu-vise/internal/sms" | 	"git.grassecon.net/grassrootseconomics/sarafu-vise/internal/sms" | ||||||
| @ -158,34 +156,6 @@ func codeFromCtx(ctx context.Context) string { | |||||||
| 	return code | 	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) { | func (h *MenuHandlers) CheckAccountCreated(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
| 	var res resource.Result | 	var res resource.Result | ||||||
| 	flag_language_set, _ := h.flagManager.GetFlag("flag_language_set") | 	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 | 	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
 | // ClearTemporaryValue empties the DATA_TEMPORARY_VALUE at the main menu to prevent
 | ||||||
| // previously stored data from being accessed
 | // previously stored data from being accessed
 | ||||||
| func (h *MenuHandlers) ClearTemporaryValue(ctx context.Context, sym string, input []byte) (resource.Result, error) { | func (h *MenuHandlers) ClearTemporaryValue(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user