mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-12-24 13:27:56 +08:00
修订preference,将gui和cli的配置分离开
This commit is contained in:
@@ -146,8 +146,10 @@ func runCli_func() {
|
||||
f()
|
||||
}
|
||||
|
||||
if currentUserPreference.AutoArrange {
|
||||
updateMostRecentCli(i)
|
||||
if cp := currentUserPreference.Cli; cp != nil {
|
||||
if cp.AutoArrange {
|
||||
updateMostRecentCli(i)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
6
cmd/verysimple/cli_non.go
Normal file
6
cmd/verysimple/cli_non.go
Normal file
@@ -0,0 +1,6 @@
|
||||
//go:build nocli
|
||||
|
||||
package main
|
||||
|
||||
// placeholder
|
||||
type CliPreference struct{}
|
||||
@@ -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(¤tUserPreference.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, ¤tUserPreference)
|
||||
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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
6
cmd/verysimple/gui_non.go
Normal file
6
cmd/verysimple/gui_non.go
Normal file
@@ -0,0 +1,6 @@
|
||||
//go:build !gui
|
||||
|
||||
package main
|
||||
|
||||
// placeholder
|
||||
type GuiPreference struct{}
|
||||
@@ -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, ¤tUserPreference)
|
||||
if err != nil {
|
||||
fmt.Println("Failed Unmarshal preferences toml,", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, f := range preference_loadFunclist {
|
||||
f()
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Package main 读取配置文件,然后进行代理转发, 并选择性运行 交互模式和 apiServer.
|
||||
Package main 读取配置文件,然后进行代理转发, 并选择性运行 cli/gui/apiServer.
|
||||
|
||||
命令行参数请使用 --help / -h 查看详情,配置文件示例请参考 ../../examples/ .
|
||||
|
||||
|
||||
Reference in New Issue
Block a user