From 935621186b9daf6e8f76059bc0a092717859c42e Mon Sep 17 00:00:00 2001 From: shylinux Date: Fri, 28 Jul 2023 22:49:18 +0800 Subject: [PATCH] opt web.route --- base/cli/runtime.go | 14 ++++- base/cli/system.go | 10 --- base/ctx/command.go | 2 +- base/mdb/hash.go | 1 + base/mdb/mdb.go | 1 + base/mdb/search.go | 10 +-- base/nfs/dir.go | 1 + base/tcp/host.go | 6 +- base/web/broad.go | 2 +- base/web/count.go | 33 +++++++++- base/web/dream.go | 2 +- base/web/render.go | 1 + base/web/route.go | 142 ++++++++++++++++++++++++++----------------- base/web/space.go | 11 ++-- base/web/spide.go | 2 +- core/chat/action.go | 6 +- core/code/upgrade.go | 2 +- core/code/vimer.go | 2 +- init.go | 18 ++++-- misc/coder/server.go | 2 +- misc/tmux/session.go | 9 --- 21 files changed, 172 insertions(+), 105 deletions(-) diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 0eb12611..c9b677af 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -240,9 +240,17 @@ func init() { nfs.PATH: {Hand: func(m *ice.Message, arg ...string) { kit.For(_path_split(os.Getenv(PATH)), func(p string) { m.Push(nfs.PATH, p) }) }}, - "chain": {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.FormatChain()) }}, - "upgrade": {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.upgrade") }}, - RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(ice.EXIT, 1) }}, + "chain": {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.FormatChain()) }}, + "upgrade": {Hand: func(m *ice.Message, arg ...string) { + if nfs.Exists(m, ".git") { + m.Cmdy("web.code.compile") + } else { + m.Cmdy("web.code.upgrade") + } + }}, + RESTART: {Hand: func(m *ice.Message, arg ...string) { + m.Go(func() { m.Sleep("30ms", ice.EXIT, 1) }) + }}, aaa.ROLE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.ROLE, func(value ice.Maps) { m.Push(mdb.KEY, kit.Keys(value[aaa.ROLE], value[mdb.ZONE], value[mdb.KEY])) }) ctx.DisplayStorySpide(m.Options(nfs.DIR_ROOT, "ice."), mdb.FIELD, mdb.KEY, lex.SPLIT, nfs.PT) diff --git a/base/cli/system.go b/base/cli/system.go index bab9685d..601c360c 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -156,16 +156,6 @@ func init() { SYSTEM: {Name: "system cmd", Help: "系统命令", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if runtime.GOOS == DARWIN && tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) { - if mdb.IsSearchPreview(m, arg, nil) { - return - list := map[string]bool{"Terminal.app": true, "Docker.app": true, "Google Chrome.app": true} - for _, p := range strings.Split(m.Cmdx("", nfs.SH, "-c", `ps aux|grep /Applications/|grep -v Cache|grep -v Helper|grep -v Widget|grep -v Extension|grep -v Chrome|grep -v com.app|grep -v grep|grep -o "[^/]*.app"|sort|uniq`), lex.NL) { - list[p] = true - } - for p := range list { - m.PushSearch(mdb.TYPE, OPENS, mdb.TEXT, p) - } - } if arg[0] == m.CommandKey() && arg[1] == OPENS { for _, p := range []string{"/Applications", "/System/Applications", "/System/Applications/Utilities"} { m.Cmd(nfs.DIR, p, mdb.NAME, func(value ice.Maps) { m.PushSearch(mdb.TEXT, path.Join(p, value[mdb.NAME]), value) }) diff --git a/base/ctx/command.go b/base/ctx/command.go index 001a3799..b75bc946 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -76,7 +76,7 @@ func init() { }).Cmd(nfs.SAVE, nfs.TAGS, m.Result()) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { - if len(arg) > 0 && arg[0] != "" { + if len(arg) > 0 && arg[0] != "" && arg[0] != ice.EXIT { m.Cmdy(arg).Search(arg[0], func(key string, cmd *ice.Command) { m.Cut(kit.Format(kit.Value(cmd.List, kit.Format("%d.name", len(arg)-1)))) }) diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 28558822..93b77ffc 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -203,6 +203,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message { m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m)) } m.Cmdy(SELECT, m.PrefixKey(), "", HASH, HashShort(m), arg, logs.FileLineMeta(-1)) + kit.If(Config(m, SORT), func(sort string) { m.Sort(sort) }) if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() { return m.StatusTimeCount() } diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index afa81684..e1002c27 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -125,6 +125,7 @@ const ( NEXT = "next" PREV = "prev" + SORT = "sort" JSON = "json" CSV = "csv" SUB = "sub" diff --git a/base/mdb/search.go b/base/mdb/search.go index d98b0a6f..d3a828b8 100644 --- a/base/mdb/search.go +++ b/base/mdb/search.go @@ -16,11 +16,13 @@ func init() { return nil }) } -func IsSearchPreview(m *ice.Message, arg []string, cb func() []string) bool { +func IsSearchPreview(m *ice.Message, arg []string, cb ...func() []string) bool { if arg[0] == FOREACH && arg[1] == "" { - if cb != nil { - if args := cb(); len(args) > 0 { - m.PushSearch(TYPE, kit.Select("", args, 0), NAME, kit.Select("", args, 1), TEXT, kit.Select("", args, 2)) + for _, cb := range cb { + if cb != nil { + if args := cb(); len(args) > 0 { + m.PushSearch(TYPE, kit.Select("", args, 0), NAME, kit.Select("", args, 1), TEXT, kit.Select("", args, 2)) + } } } return true diff --git a/base/nfs/dir.go b/base/nfs/dir.go index a7313b81..e2cde662 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -144,6 +144,7 @@ const ( USR_LOCAL_WORK = ice.USR_LOCAL_WORK SRC_DOCUMENT = ice.SRC_DOCUMENT REQUIRE = "/require/" + PATHNAME = "pathname" TYPE_ALL = "all" TYPE_BIN = "bin" diff --git a/base/tcp/host.go b/base/tcp/host.go index 42f13b7a..489545ca 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -57,7 +57,7 @@ func init() { mdb.HashCreate(m, mdb.TYPE, m.ActionKey(), m.OptionSimple(mdb.NAME, mdb.TEXT)) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { ip := m.Cmdv(HOST, GATEWAY, aaa.IP) m.PushSearch(mdb.TYPE, GATEWAY, mdb.NAME, ip, mdb.TEXT, "http://"+ip) } @@ -86,8 +86,6 @@ func init() { }) } +func Address(host, port string) string { return fmt.Sprintf("%s:%s", host, port) } func IsLocalHost(m *ice.Message, ip string) bool { return m.Cmdx(HOST, ISLOCAL, ip) == ice.OK } func PublishLocalhost(m *ice.Message, url string) string { return m.Cmdx(HOST, PUBLISH, url) } -func Address(host, port string) string { - return fmt.Sprintf("%s:%s", host, port) -} diff --git a/base/web/broad.go b/base/web/broad.go index 2f8fe379..77c742d9 100644 --- a/base/web/broad.go +++ b/base/web/broad.go @@ -40,7 +40,7 @@ func init() { Index.MergeCommands(ice.Commands{ BROAD: {Name: "broad hash auto", Help: "广播", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { host, domain := m.Cmdv(tcp.HOST, aaa.IP), UserWeb(m).Hostname() m.Cmds("", func(value ice.Maps) { switch kit.If(value[tcp.HOST] == host, func() { value[tcp.HOST] = domain }); value[mdb.TYPE] { diff --git a/base/web/count.go b/base/web/count.go index 8012fb7e..44bc93c2 100644 --- a/base/web/count.go +++ b/base/web/count.go @@ -2,6 +2,7 @@ package web import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" kit "shylinux.com/x/toolkits" ) @@ -11,10 +12,40 @@ const COUNT = "count" func init() { Index.MergeCommands(ice.Commands{ COUNT: &ice.Command{Name: "count hash auto", Help: "计数", Actions: ice.MergeActions(ice.Actions{ + mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { + if mdb.IsSearchPreview(m, arg) { + count, limit, list := 0, 5, map[string]bool{} + mdb.HashSelect(m.Spawn(kit.Dict(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD)))).Sort(mdb.TIME, "time_r").Table(func(value ice.Maps) { + switch value[mdb.TYPE] { + case ctx.ACTION: + if list[value[mdb.NAME]] { + break + } + if count++; count <= limit { + list[value[mdb.NAME]] = true + m.PushSearch(mdb.TYPE, ice.CMD, value) + } + } + }) + count, limit = 0, 5 + mdb.HashSelect(m.Spawn(kit.Dict(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD)))).Sort(mdb.COUNT, "int_r").Table(func(value ice.Maps) { + switch value[mdb.TYPE] { + case ctx.ACTION: + if list[value[mdb.NAME]] { + break + } + if count++; count <= limit { + list[value[mdb.NAME]] = true + m.PushSearch(mdb.TYPE, ice.CMD, value) + } + } + }) + } + }}, mdb.CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) { mdb.HashSelectUpdate(m, mdb.HashCreate(m), func(value ice.Map) { value[mdb.COUNT] = kit.Int(value[mdb.COUNT]) + 1 }) }}, - }, mdb.HashAction(mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text")), Hand: func(m *ice.Message, arg ...string) { + }, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text")), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).Sort("type,name,text", "str", "str", "str") }}, }) diff --git a/base/web/dream.go b/base/web/dream.go index 7ea62ad0..0c94e5a0 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -118,7 +118,7 @@ func init() { Index.MergeCommands(ice.Commands{ DREAM: {Name: "dream name@key auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { m.Cmds("", func(value ice.Maps) { m.PushSearch(mdb.TEXT, m.MergePod(value[mdb.NAME]), value) }) } }}, diff --git a/base/web/render.go b/base/web/render.go index 48735d84..9af6f7af 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -170,6 +170,7 @@ const ( CODE_VIMER = "web.code.vimer" CODE_XTERM = "web.code.xterm" CODE_COMPILE = "web.code.compile" + CODE_UPGRADE = "web.code.upgrade" CODE_GIT_SERVICE = "web.code.git.service" CODE_GIT_STATUS = "web.code.git.status" CODE_GIT_REPOS = "web.code.git.repos" diff --git a/base/web/route.go b/base/web/route.go index 34baf05e..9fa7e335 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -1,86 +1,116 @@ package web import ( + "regexp" + ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/tcp" kit "shylinux.com/x/toolkits" ) +func _route_push(m *ice.Message, space string, msg *ice.Message) *ice.Message { + return msg.Table(func(index int, value ice.Maps, head []string) { + value[SPACE], head = space, append(head, SPACE) + m.Push("", value, head) + }) +} +func _route_match(m *ice.Message, space string, cb func(ice.Maps, int, []ice.Maps)) { + reg, err := regexp.Compile(space) + if m.Warn(err) { + return + } + list := []ice.Maps{} + mdb.HashSelect(m.Spawn()).Table(func(value ice.Maps) { + if value[SPACE] == space { + list = append(list, value) + } else if reg.MatchString(kit.Format("%s:%s=%s@%s", value[SPACE], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION])) { + list = append(list, value) + } + }) + for i, item := range list { + cb(item, i, list) + } + m.StatusTimeCount() +} +func _route_toast(m *ice.Message, space string, args ...string) { + GoToast(m, "", func(toast func(string, int, int)) (list []string) { + count, total := 0, 1 + _route_match(m, space, func(value ice.Maps, i int, _list []ice.Maps) { + count, total = i, len(_list) + toast(value[SPACE], count, total) + if msg := _route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""})); msg.IsErr() || !cli.IsSuccess(msg) { + list = append(list, value[SPACE]+": "+msg.Result()) + } + }) + m.StatusTimeCount(ice.CMD, kit.Join(args, lex.SP), ice.SUCCESS, kit.Format("%d/%d", total-len(list), total)) + return + }) +} + const ROUTE = "route" func init() { Index.MergeCommands(ice.Commands{ - ROUTE: {Name: "route space auto travel spide cmds compile", Help: "路由表", Actions: ice.MergeActions(ice.Actions{ + ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel", Help: "路由表", Actions: ice.MergeActions(ice.Actions{ ice.MAIN: {Help: "首页", Hand: func(m *ice.Message, arg ...string) { ctx.ProcessField(m, CHAT_IFRAME, m.MergePod(kit.Select(m.Option(SPACE), arg, 0)), arg...) }}, - "compile": {Hand: func(m *ice.Message, arg ...string) { - args := []string{CODE_VIMER, "compile"} - GoToast(m, "", func(toast func(string, int, int)) (list []string) { - msg := m.Cmd("") - count, total := 0, msg.Length() - msg.Table(func(value ice.Maps) { - if toast(value[SPACE], count, total); value[SPACE] == "" { - - } else if msg := m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""}); !cli.IsSuccess(msg) { - list = append(list, value[SPACE]) - } - count++ - }) - toast(ice.Info.NodeName, count, total) - if msg := m.Cmd(args, ice.Maps{ice.MSG_DAEMON: ""}); cli.IsSuccess(msg) { - list = append(list, ice.Info.NodeName) - } - return - }) - }}, - "cmds": {Name: "cmds index* args", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - args := []string{m.Option(ctx.INDEX)} - kit.If(m.Option(ctx.ARGS), func() { args = append(args, kit.Split(m.Option(ctx.ARGS))...) }) - GoToast(m, "", func(toast func(string, int, int)) (list []string) { - push := func(space string, msg *ice.Message) { - if msg.IsErr() { - list = append(list, space) - } else { - msg.Table(func(index int, val ice.Maps, head []string) { - val[SPACE], head = space, append(head, SPACE) - m.Push("", val, head) - }) - } - } - msg := m.Cmd("") - count, total := 0, msg.Length() - msg.Table(func(value ice.Maps) { - if toast(value[SPACE], count, total); value[SPACE] != "" { - push(value[SPACE], m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""})) - } - count++ - }) - toast(ice.Info.NodeName, count, total) - push("", m.Cmd(args)) - m.StatusTimeCount(ice.SUCCESS, kit.Format("%d/%d", total-len(list), total)) - return - }) - }}, "spide": {Help: "导图", Hand: func(m *ice.Message, arg ...string) { ctx.DisplayStorySpide(m.Cmdy(""), nfs.DIR_ROOT, ice.Info.NodeName, mdb.FIELD, SPACE, lex.SPLIT, nfs.PT, ctx.ACTION, ice.MAIN) }}, + "cmds": {Name: "cmds space index* args", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + _route_toast(m, m.Option(SPACE), append([]string{m.Option(ctx.INDEX)}, kit.Split(m.Option(ctx.ARGS))...)...) + }}, + "build": {Name: "build space", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + _route_toast(m, m.Option(SPACE), m.PrefixKey(), "_build") + }}, + "_build": {Hand: func(m *ice.Message, arg ...string) { + if nfs.Exists(m, ".git") { + m.Cmdy(CODE_VIMER, "compile") + } else if ice.Info.NodeType == SERVER { + m.Cmdy(CODE_UPGRADE) + } else { + m.Cmdy(ice.EXIT, "1") + } + }}, "travel": {Help: "遍历", Hand: func(m *ice.Message, arg ...string) { - m.Push(mdb.TIME, ice.Info.Make.Time) - m.Push("md5", ice.Info.Hash) - m.Push(nfs.SIZE, ice.Info.Size) - m.Push(nfs.MODULE, ice.Info.Make.Module) - m.Push(nfs.VERSION, ice.Info.Make.Versions()) + kit.For(kit.Split(m.OptionDefault(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD))), func(key string) { + switch key { + case mdb.TIME: + m.Push(key, ice.Info.Make.Time) + case nfs.MODULE: + m.Push(key, ice.Info.Make.Module) + case nfs.VERSION: + m.Push(key, ice.Info.Make.Versions()) + case "md5": + m.Push(key, ice.Info.Hash) + case nfs.SIZE: + m.Push(key, kit.Format("%s/%s", ice.Info.Size, kit.Split(m.Cmdx(cli.SYSTEM, "du", "-sh"))[0])) + case mdb.TYPE: + m.Push(key, ice.Info.NodeType) + case nfs.PATH: + m.Push(key, kit.Path("")) + case tcp.HOSTNAME: + m.Push(key, ice.Info.Hostname) + default: + m.Push(key, "") + } + }) PushPodCmd(m, "", m.ActionKey()) m.Table(func(value ice.Maps) { kit.If(value[SPACE], func() { mdb.HashCreate(m.Spawn(), kit.Simple(value)) }) }) m.StatusTimeCount() }}, - }, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,module,version,md5,size", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) { - if mdb.HashSelect(m, arg...).Sort(SPACE); len(arg) > 0 { + }, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 1 { + _route_match(m, arg[0], func(value ice.Maps, i int, list []ice.Maps) { + _route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], arg[1:])) + }) + } else if mdb.HashSelect(m, arg...); len(arg) > 0 { m.EchoIFrame(m.MergePod(arg[0])) } }}, diff --git a/base/web/space.go b/base/web/space.go index aecfcd44..0cfb43eb 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -50,7 +50,7 @@ func _space_fork(m *ice.Message) { addr := kit.Select(m.R.RemoteAddr, m.R.Header.Get(ice.MSG_USERADDR)) name := kit.ReplaceAll(kit.Select(addr, m.Option(mdb.NAME)), "[", "_", "]", "_", nfs.DF, "_", nfs.PT, "_") text := kit.Select(addr, m.Option(mdb.TEXT)) - if kit.IsIn(m.Option(mdb.TYPE), CHROME) && m.Option(mdb.NAME) != "chrome" || !(ice.Info.Localhost && tcp.IsLocalHost(m, m.R.RemoteAddr) || + if kit.IsIn(m.Option(mdb.TYPE), CHROME) && m.Option(mdb.NAME) != CHROME || !(ice.Info.Localhost && tcp.IsLocalHost(m, m.R.RemoteAddr) || m.Option(TOKEN) != "" && m.Cmdv(TOKEN, m.Option(TOKEN), mdb.TIME) > m.Time()) { name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.NAME), m.Option(mdb.TEXT)) } @@ -73,16 +73,17 @@ func _space_fork(m *ice.Message) { } func _space_handle(m *ice.Message, safe bool, name string, c *websocket.Conn) { defer m.Cost(SPACE, name) + m.Option(ice.MSG_USERROLE, "") for { _, b, e := c.ReadMessage() if e != nil { break } msg := m.Spawn(b) - if safe { // 下行命令 + if safe { // 下行权限 msg.OptionDefault(ice.MSG_USERROLE, aaa.UserRole(msg, msg.Option(ice.MSG_USERNAME))) - } else { // 上行请求 - msg.Option(ice.MSG_USERROLE, aaa.VOID) + } else { // 上行权限 + kit.If(msg.Option(ice.MSG_USERROLE), func() { msg.Option(ice.MSG_USERROLE, aaa.VOID) }) } source, target := kit.Simple(msg.Optionv(ice.MSG_SOURCE), name), kit.Simple(msg.Optionv(ice.MSG_TARGET)) msg.Log(tcp.RECV, "%v->%v %v %v", source, target, msg.Detailv(), msg.FormatsMeta(nil)) @@ -188,7 +189,7 @@ func init() { m.Cmd("", m.Option(mdb.NAME), ice.EXIT) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { m.Cmds("", func(value ice.Maps) { switch value[mdb.TYPE] { case MASTER: diff --git a/base/web/spide.go b/base/web/spide.go index b7d75126..923d7244 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -256,7 +256,7 @@ func init() { m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY])) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.DEV, mdb.TEXT, mdb.HashSelectField(m, ice.DEV, CLIENT_ORIGIN)) m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.COM, mdb.TEXT, mdb.HashSelectField(m, ice.COM, CLIENT_ORIGIN)) m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.SHY, mdb.TEXT, mdb.HashSelectField(m, ice.SHY, CLIENT_ORIGIN)) diff --git a/core/chat/action.go b/core/chat/action.go index 045b3811..3626b837 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -21,7 +21,11 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) { }).Length() == 0, ice.ErrNotRight, index, arg) { return } - m.Cmd(web.COUNT, mdb.CREATE, ACTION, index, kit.Join(arg), kit.Dict(ice.LOG_DISABLE, ice.TRUE)) + if len(arg) > 0 && arg[0] == ctx.ACTION { + m.Cmd(web.COUNT, mdb.CREATE, ACTION, index, "", kit.Dict(ice.LOG_DISABLE, ice.TRUE)) + } else { + m.Cmd(web.COUNT, mdb.CREATE, ACTION, index, kit.Join(arg), kit.Dict(ice.LOG_DISABLE, ice.TRUE)) + } kit.If(!ctx.PodCmd(m, index, arg), func() { m.Cmdy(index, arg) }) } func _action_auth(m *ice.Message, share string) *ice.Message { diff --git a/core/code/upgrade.go b/core/code/upgrade.go index 92922957..3c1d443e 100644 --- a/core/code/upgrade.go +++ b/core/code/upgrade.go @@ -27,7 +27,7 @@ func init() { ), mdb.META, kit.Dict(mdb.FIELD, "type,file,path"))}, }, Commands: ice.Commands{ UPGRADE: {Name: "upgrade item=target,config,binary,source,compile run restart", Help: "升级", Actions: ice.MergeActions(ice.Actions{ - cli.RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Sleep300ms(ice.EXIT, 1) }) }}, + cli.RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Sleep30ms(ice.EXIT, 1) }) }}, }), Hand: func(m *ice.Message, arg ...string) { mdb.ZoneSelect(m.Spawn(), kit.Select(nfs.TARGET, arg, 0)).Table(func(value ice.Maps) { if kit.Select("", arg, 0) == COMPILE { diff --git a/core/code/vimer.go b/core/code/vimer.go index 7b7e7ddf..ae096b28 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -60,7 +60,7 @@ func init() { Index.MergeCommands(ice.Commands{ VIMER: {Name: "vimer path=src/@key file=main.go line=1 list", Help: "编辑器", Meta: kit.Dict(ctx.STYLE, INNER), Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg, nil) { + if mdb.IsSearchPreview(m, arg) { m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SH) m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SHY) m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_GO) diff --git a/init.go b/init.go index a61d87ee..0a1af9b5 100644 --- a/init.go +++ b/init.go @@ -58,12 +58,20 @@ var Index = &Context{Name: ICE, Help: "冰山模块", Commands: Commands{ m.Cmd(SOURCE, ETC_INIT_SHY) loadImportant(m) }}, - QUIT: {Hand: func(m *Message, arg ...string) { os.Exit(0) }}, + QUIT: {Hand: func(m *Message, arg ...string) { + m.Go(func() { + m.Sleep("10ms") + os.Exit(0) + }) + }}, EXIT: {Hand: func(m *Message, arg ...string) { - m.root.Option(EXIT, kit.Select("0", arg, 0)) - m.Cmd(SOURCE, ETC_EXIT_SHY) - m.Cmd(CTX_EXIT) - removeImportant(m) + m.Go(func() { + m.Sleep("10ms") + m.root.Option(EXIT, kit.Select("0", arg, 0)) + m.Cmd(SOURCE, ETC_EXIT_SHY) + m.Cmd(CTX_EXIT) + removeImportant(m) + }) }}, CTX_EXIT: {Hand: func(m *Message, arg ...string) { defer m.Target().Close(m.Spawn(), arg...) diff --git a/misc/coder/server.go b/misc/coder/server.go index f7b51318..3e4b1486 100644 --- a/misc/coder/server.go +++ b/misc/coder/server.go @@ -23,7 +23,7 @@ type server struct { } func (s server) Search(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m.Message, arg, nil) { + if mdb.IsSearchPreview(m.Message, arg) { s.Code.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir")), "") m.Table(func(value ice.Maps) { m.PushSearch(mdb.TYPE, value[cli.STATUS], mdb.NAME, value[nfs.PATH], mdb.TEXT, value[mdb.LINK]) diff --git a/misc/tmux/session.go b/misc/tmux/session.go index 5772612e..f23c2011 100644 --- a/misc/tmux/session.go +++ b/misc/tmux/session.go @@ -10,7 +10,6 @@ import ( "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" - "shylinux.com/x/icebergs/base/ssh" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" @@ -83,14 +82,6 @@ func init() { }, Commands: ice.Commands{ SESSION: {Name: "session session window pane cmds auto", Help: "会话", Actions: ice.MergeActions(ice.Actions{ web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.CREATE) }}, - mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - return - if mdb.IsSearchPreview(m, arg, nil) { - m.Cmd("", ice.OptionFields(""), func(value ice.Maps) { - m.PushSearch(mdb.TYPE, ssh.SHELL, mdb.NAME, value[SESSION], mdb.TEXT, "tmux attach -t "+value[SESSION], value) - }) - } - }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { if m.Option(ctx.ACTION) == SCRIPT { m.Cmdy(SCRIPT, mdb.INPUTS, arg)