修订preference,将gui和cli的配置分离开

This commit is contained in:
e1732a364fed
2000-01-01 00:00:00 +00:00
parent 98d058c65f
commit 7fc046e5bc
7 changed files with 108 additions and 54 deletions

View File

@@ -146,8 +146,10 @@ func runCli_func() {
f()
}
if currentUserPreference.AutoArrange {
updateMostRecentCli(i)
if cp := currentUserPreference.Cli; cp != nil {
if cp.AutoArrange {
updateMostRecentCli(i)
}
}
}

View File

@@ -0,0 +1,6 @@
//go:build nocli
package main
// placeholder
type CliPreference struct{}

View File

@@ -4,9 +4,7 @@ package main
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
"github.com/e1732a364fed/v2ray_simple/utils"
)
@@ -18,92 +16,94 @@ var (
toggleAutoRearrangeCliCmd = &CliCmd{Name: openAutoRearrangeStr}
)
type CliPreference struct {
CliCmdOrder []int `toml:"cli_cmd_order"`
AutoArrange bool `toml:"auto_arrange"`
}
func init() {
cliCmdList = append(cliCmdList, toggleAutoRearrangeCliCmd)
toggleAutoRearrangeCliCmd.f = func() {
currentUserPreference.AutoArrange = !currentUserPreference.AutoArrange
cp := currentUserPreference.Cli
if cp == nil {
cp = new(CliPreference)
currentUserPreference.Cli = cp
}
cp.AutoArrange = !cp.AutoArrange
doWhenUpdateAutoRearrangeCli()
}
preference_loadFunclist = append(preference_loadFunclist, loadPreferences_cli)
preference_saveFunclist = append(preference_saveFunclist, savePerferences_cli)
}
func doWhenUpdateAutoRearrangeCli() {
if !currentUserPreference.AutoArrange {
cp := currentUserPreference.Cli
if cp == nil {
cp = new(CliPreference)
currentUserPreference.Cli = cp
}
if !cp.AutoArrange {
toggleAutoRearrangeCliCmd.Name = openAutoRearrangeStr
} else {
if len(currentUserPreference.CliCmdOrder) == 0 {
if len(cp.CliCmdOrder) == 0 {
initOrderList()
}
toggleAutoRearrangeCliCmd.Name = "关闭自动将最近运行的交互命令提升到首位"
}
}
func initOrderList() {
currentUserPreference.CliCmdOrder = nil
for i := range cliCmdList {
currentUserPreference.CliCmdOrder = append(currentUserPreference.CliCmdOrder, i)
cp := currentUserPreference.Cli
if cp == nil {
cp = new(CliPreference)
currentUserPreference.Cli = cp
}
cp.CliCmdOrder = nil
for i := range cliCmdList {
cp.CliCmdOrder = append(cp.CliCmdOrder, i)
}
}
func updateMostRecentCli(i int) {
cp := currentUserPreference.Cli
if cp == nil {
cp = new(CliPreference)
currentUserPreference.Cli = cp
}
utils.MoveItem(&cliCmdList, i, 0)
utils.MoveItem(&currentUserPreference.CliCmdOrder, i, 0)
}
func savePerferences_cli() {
if disablePreferenceFeature {
return
}
buf := utils.GetBuf()
defer utils.PutBuf(buf)
if err := toml.NewEncoder(buf).Encode(currentUserPreference); err != nil {
fmt.Println("err encountered during saving preferences,", err)
return
}
err := os.WriteFile(preferencesFileName, buf.Bytes(), os.ModePerm)
if err != nil {
fmt.Println("err encountered during saving preferences,", err)
return
}
utils.MoveItem(&cp.CliCmdOrder, i, 0)
}
func loadPreferences_cli() {
if disablePreferenceFeature {
cp := currentUserPreference.Cli
if cp == nil {
return
}
if !utils.FileExist(preferencesFileName) {
return
}
bs, err := os.ReadFile(preferencesFileName)
if err != nil {
fmt.Println("err encountered during loading preferences file,", err)
return
}
err = toml.Unmarshal(bs, &currentUserPreference)
if err != nil {
fmt.Println("err encountered during toml.Unmarshal preferences file,", err)
return
}
doWhenUpdateAutoRearrangeCli()
if len(currentUserPreference.CliCmdOrder) == 0 {
if len(cp.CliCmdOrder) == 0 {
return
}
if len(currentUserPreference.CliCmdOrder) <= len(cliCmdList) {
if len(cp.CliCmdOrder) <= len(cliCmdList) {
var neworder []int
var ei int
cliCmdList, neworder, ei = utils.SortByOrder(cliCmdList, currentUserPreference.CliCmdOrder)
cliCmdList, neworder, ei = utils.SortByOrder(cliCmdList, cp.CliCmdOrder)
if ei != 0 {
fmt.Println("utils.SortByOrder got ei", ei)
}
if neworder != nil {
currentUserPreference.CliCmdOrder = neworder
cp.CliCmdOrder = neworder
}
} else {

View File

@@ -26,6 +26,9 @@ var theTunStartCmds []string
var multilineEntry *ui.MultilineEntry //用于向用户提供一些随机的有用的需要复制的字符串
var entriesGroup *ui.Group //父 of multilineEntry
type GuiPreference struct {
}
func init() {
flag.BoolVar(&gui_mode, "g", true, "gui mode")

View File

@@ -0,0 +1,6 @@
//go:build !gui
package main
// placeholder
type GuiPreference struct{}

View File

@@ -4,6 +4,11 @@ package main
import (
"flag"
"fmt"
"os"
"github.com/BurntSushi/toml"
"github.com/e1732a364fed/v2ray_simple/utils"
)
/*
@@ -21,13 +26,12 @@ var (
disablePreferenceFeature bool
currentUserPreference UserPreference
preference_saveFunclist []func()
preference_loadFunclist []func()
)
type UserPreference struct {
CliCmdOrder []int `toml:"cli_cmd_order"`
AutoArrange bool `toml:"auto_arrange"`
Cli *CliPreference `toml:"cli"`
Gui *GuiPreference `toml:"gui"`
}
func init() {
@@ -36,12 +40,45 @@ func init() {
}
func savePerferences() {
for _, f := range preference_saveFunclist {
f()
if disablePreferenceFeature {
return
}
fmt.Println("Saving preferences")
buf := utils.GetBuf()
defer utils.PutBuf(buf)
if err := toml.NewEncoder(buf).Encode(currentUserPreference); err != nil {
fmt.Println("err encountered during saving preferences,", err)
return
}
err := os.WriteFile(preferencesFileName, buf.Bytes(), os.ModePerm)
if err != nil {
fmt.Println("err encountered during saving preferences,", err)
return
}
}
func loadPreferences() {
if disablePreferenceFeature {
return
}
if !utils.FileExist(preferencesFileName) {
return
}
fmt.Println("Loading preferences")
bs, err := os.ReadFile(preferencesFileName)
if err != nil {
fmt.Println("Failed loading preferences file,", err)
return
}
err = toml.Unmarshal(bs, &currentUserPreference)
if err != nil {
fmt.Println("Failed Unmarshal preferences toml,", err)
return
}
for _, f := range preference_loadFunclist {
f()
}

View File

@@ -1,5 +1,5 @@
/*
Package main 读取配置文件,然后进行代理转发, 并选择性运行 交互模式和 apiServer.
Package main 读取配置文件,然后进行代理转发, 并选择性运行 cli/gui/apiServer.
命令行参数请使用 --help / -h 查看详情,配置文件示例请参考 ../../examples/ .