config.go 3.6 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1
package configUtils
2 3

import (
aaronchen2k2k's avatar
aaronchen2k2k 已提交
4
	"fmt"
5
	"github.com/easysoft/zentaoatf/src/model"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6 7
	commonUtils "github.com/easysoft/zentaoatf/src/utils/common"
	"github.com/easysoft/zentaoatf/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	"github.com/easysoft/zentaoatf/src/utils/display"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9 10 11 12
	fileUtils "github.com/easysoft/zentaoatf/src/utils/file"
	"github.com/easysoft/zentaoatf/src/utils/i118"
	"github.com/easysoft/zentaoatf/src/utils/log"
	stringUtils "github.com/easysoft/zentaoatf/src/utils/string"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13
	"github.com/easysoft/zentaoatf/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
14
	"github.com/fatih/color"
15 16
	"gopkg.in/yaml.v2"
	"io/ioutil"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17 18 19 20 21
	"os"
	"reflect"
	"regexp"
	"strings"
	"sync"
22 23
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25 26
func InitConfig() {
	// preference from yaml
	vari.Config = getInst()
27

aaronchen2k2k's avatar
aaronchen2k2k 已提交
28 29
	// screen size
	InitScreenSize()
30

aaronchen2k2k's avatar
aaronchen2k2k 已提交
31 32 33 34 35
	// internationalization
	i118Utils.InitI118(vari.Config.Language)

	if strings.Index(os.Args[0], "atf") > -1 && (len(os.Args) > 1 && os.Args[1] != "set") {
		PrintCurrConfig()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
36
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
38

aaronchen2k2k's avatar
aaronchen2k2k 已提交
39 40
func ConfigFromStdin() {
	configSite := ""
41

aaronchen2k2k's avatar
aaronchen2k2k 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
	language := ""
	url := ""
	account := ""
	password := ""

	fmt.Printf(i118Utils.I118Prt.Sprintf("begin_config"))

	language = getInput("enter_language", "(english|chinese|e|c")
	if strings.Index(strings.ToLower(language), "e") == 0 {
		language = "en"
	} else {
		language = "zh"
	}

	configSite = getInput("config_zentao_site", "yes|no|y|n")
	if strings.Index(configSite, "y") != 0 {
		os.Exit(1)
	}

	url = getInput("enter_url", "http://.*")

	account = getInput("enter_account", ".[2,]")

	password = getInput("enter_password", ".[6,]")
66

aaronchen2k2k's avatar
aaronchen2k2k 已提交
67 68
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
func getInput(msg string, regx string) string {
	var ret string

	for {
		fmt.Printf(i118Utils.I118Prt.Sprintf(msg))
		fmt.Scanf("%s", &ret)

		ret = strings.ToLower(ret)
		if ret == "exit" {
			return ""
		}

		if regx == "" {
			return ret
		}

		pass, _ := regexp.MatchString(regx, ret)
		if pass {
			return ret
		}
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
90 91
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
92 93 94 95 96 97 98 99
func SetLanguage(lang string, dumb bool) {
	buf, _ := ioutil.ReadFile(constant.ConfigFile)
	yaml.Unmarshal(buf, &vari.Config)

	vari.Config.Language = lang

	data, _ := yaml.Marshal(&vari.Config)
	ioutil.WriteFile(constant.ConfigFile, data, 0666)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
100

aaronchen2k2k's avatar
aaronchen2k2k 已提交
101 102 103 104 105 106
	// re-init language resource
	i118Utils.InitI118(vari.Config.Language)

	if !dumb {
		logUtils.PrintToCmd(color.CyanString(i118Utils.I118Prt.Sprintf("set_config", i118Utils.I118Prt.Sprintf("language"),
			i118Utils.I118Prt.Sprintf(vari.Config.Language))))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
108 109 110 111
}

func PrintCurrConfig() {
	color.Cyan(i118Utils.I118Prt.Sprintf("current_config", ""))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
112

aaronchen2k2k's avatar
aaronchen2k2k 已提交
113 114 115 116 117 118 119 120 121 122 123
	val := reflect.ValueOf(vari.Config)
	typeOfS := val.Type()
	for i := 0; i < reflect.ValueOf(vari.Config).NumField(); i++ {
		val := val.Field(i)
		name := typeOfS.Field(i).Name

		if !vari.RunFromCui && (name == "Width" || name == "Height" || name == "WorkHistories") {
			continue
		}
		fmt.Printf("  %s: %v \n", typeOfS.Field(i).Name, val.Interface())
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
124
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
125

aaronchen2k2k's avatar
aaronchen2k2k 已提交
126 127 128
func PrintConfigToView() {
	cmdView, _ := vari.Cui.View("cmd")
	fmt.Fprintln(cmdView, color.CyanString(i118Utils.I118Prt.Sprintf("current_config", "")))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
129

aaronchen2k2k's avatar
aaronchen2k2k 已提交
130 131 132 133 134 135
	val := reflect.ValueOf(vari.Config)
	typeOfS := val.Type()
	for i := 0; i < reflect.ValueOf(vari.Config).NumField(); i++ {
		val := val.Field(i)
		fmt.Fprintln(cmdView, fmt.Sprintf("  %s: %v", typeOfS.Field(i).Name, val.Interface()))
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
136
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
137 138

func InitScreenSize() {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
	w, _ := display.GetScreenSize()
	vari.ScreenWidth = w
}

func getInst() model.Config {
	var once sync.Once
	once.Do(func() {
		vari.Config = model.Config{}
		if fileUtils.FileExist(constant.ConfigFile) {
			buf, _ := ioutil.ReadFile(constant.ConfigFile)
			yaml.Unmarshal(buf, &vari.Config)
		} else { // init
			vari.Config.Language = "en"

			data, _ := yaml.Marshal(&vari.Config)
			ioutil.WriteFile(constant.ConfigFile, data, 0666)
		}
	})
	return vari.Config
aaronchen2k2k's avatar
aaronchen2k2k 已提交
158
}