From a63f5600b7d11fcf42b8b0b35cecb0a6599de972 Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 18 Feb 2024 12:30:56 +0800 Subject: [PATCH] add some --- base/ctx/process.go | 28 +++++++++++++++------------- base/nfs/dir.go | 2 -- base/web/dream.go | 20 +++++++++++--------- base/web/process.go | 3 +-- base/web/space.go | 12 +++++------- base/web/toast.go | 2 +- core/chat/favor.go | 2 +- core/code/compile.go | 2 +- core/code/publish.go | 2 +- core/code/vimer.go | 6 ++++-- core/wiki/word.go | 7 +++---- logs.go | 9 +++++---- misc/git/status.go | 11 ++++++++--- misc/ssh/relay/relay.go | 6 +++--- 14 files changed, 59 insertions(+), 53 deletions(-) diff --git a/base/ctx/process.go b/base/ctx/process.go index 88320295..052def83 100644 --- a/base/ctx/process.go +++ b/base/ctx/process.go @@ -28,27 +28,29 @@ func _process_args(m *ice.Message, args ice.Any) []string { return nil } func ProcessField(m *ice.Message, cmd string, args ice.Any, arg ...string) *ice.Message { - if cmd = kit.Select(m.ActionKey(), cmd); !kit.HasPrefixList(arg, RUN) { - defer kit.If(m.IsMetaKey(), func() { m.Push(STYLE, html.FLOAT) }) - defer m.Push(ARGS, kit.Format(_process_args(m, args))) - defer m.ProcessField(ACTION, m.ActionKey(), RUN) - defer m.Options(ice.MSG_INDEX, m.PrefixKey()) - if PodCmd(m, COMMAND, cmd) { - m.Push(ice.SPACE, m.Option(ice.MSG_USERPOD)) - } else { - m.Cmdy(COMMAND, cmd) + if cmd = kit.Select(m.ActionKey(), cmd); kit.HasPrefixList(arg, RUN) { + if !PodCmd(m, cmd, arg[1:]) && aaa.Right(m, cmd, arg[1:]) { + m.Cmdy(cmd, arg[1:]) } - } else if !PodCmd(m, cmd, arg[1:]) && aaa.Right(m, cmd, arg[1:]) { - m.Cmdy(cmd, arg[1:]) + return m } + args = kit.Format(_process_args(m, args)) + if PodCmd(m, COMMAND, cmd) { + m.Push(ice.SPACE, m.Option(ice.MSG_USERPOD)) + } else { + m.Cmdy(COMMAND, cmd) + } + if m.Push(ARGS, args); m.IsMetaKey() { + m.Push(STYLE, html.FLOAT) + } + m.ProcessField(ACTION, m.ActionKey(), RUN) return m } func ProcessFloat(m *ice.Message, cmd string, args ice.Any, arg ...string) *ice.Message { if m.IsMetaKey() { m.ProcessOpen(path.Join("/c/", cmd, path.Join(_process_args(m, args)...))) return m - } - if !kit.HasPrefixList(arg, RUN) { + } else if !kit.HasPrefixList(arg, RUN) { defer m.Push(STYLE, html.FLOAT) } return ProcessField(m, cmd, args, arg...) diff --git a/base/nfs/dir.go b/base/nfs/dir.go index 5272d3ba..7e79e368 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -96,8 +96,6 @@ func _dir_list(m *ice.Message, root string, dir string, level int, deep bool, di case mdb.LINK: if isDir { m.Push(mdb.LINK, "") - } else if strings.Contains(p, "ice.windows.") { - m.PushDownload(mdb.LINK, "ice.exe", p) } else { m.PushDownload(mdb.LINK, p) } diff --git a/base/web/dream.go b/base/web/dream.go index 12096640..76f79aa1 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -24,7 +24,7 @@ import ( func _dream_list(m *ice.Message, simple bool) *ice.Message { list := m.CmdMap(SPACE, mdb.NAME) - mdb.HashSelect(m).Table(func(value ice.Maps) { + mdb.HashSelects(m).Table(func(value ice.Maps) { if space, ok := list[value[mdb.NAME]]; ok { if m.IsCliUA() || simple { m.Push(mdb.TYPE, space[mdb.TYPE]).Push(cli.STATUS, cli.START) @@ -128,7 +128,7 @@ func _dream_start(m *ice.Message, name string) { cli.CTX_OPS, HostPort(m, tcp.LOCALHOST, m.Cmdv(SERVE, tcp.PORT)), cli.CTX_LOG, ice.VAR_LOG_BOOT_LOG, cli.CTX_PID, ice.VAR_LOG_ICE_PID, cli.CTX_ROOT, kit.Path(""), cli.PATH, cli.BinPath(p, ""), cli.USER, ice.Info.Username, )...), cli.CMD_OUTPUT, path.Join(p, ice.VAR_LOG_BOOT_LOG), mdb.CACHE_CLEAR_ONEXIT, ice.TRUE) - kit.If(m.Option(nfs.BINARY) == "" && cli.SystemFind(m, "go") == "", func(p string) { m.Option(nfs.BINARY, SpideOrigin(m, ice.DEV_IP)+S(name)) }) + kit.If(m.Option(nfs.BINARY) == "" && !cli.SystemFindGo(m), func(p string) { m.Option(nfs.BINARY, S(name)) }) kit.If(m.Option(nfs.BINARY), func(p string) { _dream_binary(m, p) }) kit.If(m.Option(nfs.TEMPLATE), func(p string) { _dream_template(m, p) }) bin := kit.Select(kit.Path(os.Args[0]), cli.SystemFind(m, ice.ICE_BIN, nfs.PWD+path.Join(p, ice.BIN), nfs.PWD+ice.BIN)) @@ -341,9 +341,9 @@ func init() { if cb, ok := m.OptionCB("").(func(string) bool); ok && cb(p) { return } + defer PushNoticeGrow(m, "\r\n\r\n\r\n") PushNoticeGrow(m, kit.Format("[%s]%s$ %s\r\n", time.Now().Format(ice.MOD_TIME_ONLY), name, m.Option(ice.CMD))) m.Cmd(cli.SYSTEM, kit.Split(m.Option(ice.CMD)), kit.Dict(cli.CMD_DIR, p)).Sleep300ms() - PushNoticeGrow(m, "\r\n\r\n\r\n") }) }}, ctx.CMDS: {Name: "cmds name cmds*", Help: "命令", Icon: "bi bi-terminal", Hand: func(m *ice.Message, arg ...string) { @@ -399,12 +399,12 @@ func init() { } }}, STATS_TABLES: {Hand: func(m *ice.Message, arg ...string) { - if msg := _dream_list(m, true); msg.Length() > 0 { + if msg := _dream_list(m.Spawn(), true); msg.Length() > 0 { stat := map[string]int{} msg.Table(func(value ice.Maps) { stat[value[mdb.TYPE]]++; stat[value[mdb.STATUS]]++ }) - PushStats(m, kit.Keys(m.CommandKey(), MASTER), stat[MASTER], "", "已连接服务") - PushStats(m, kit.Keys(m.CommandKey(), SERVER), stat[SERVER], "", "已连接机器") PushStats(m, kit.Keys(m.CommandKey(), cli.START), stat[cli.START], "", "已启动空间") + PushStats(m, kit.Keys(m.CommandKey(), SERVER), stat[SERVER], "", "已连接机器") + PushStats(m, kit.Keys(m.CommandKey(), MASTER), stat[MASTER], "", "已连接服务") } }}, }, StatsAction(), DreamAction(), DreamTablesAction(), mdb.ImportantHashAction( @@ -440,9 +440,11 @@ func init() { }) } -func DreamTablesAction() ice.Actions { +func DreamTablesAction(arg ...string) ice.Actions { return ice.Actions{ice.CTX_INIT: {Hand: DreamWhiteHandle}, - DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { m.PushButton(kit.Dict(m.CommandKey(), m.Commands("").Help)) }}, + DREAM_TABLES: {Hand: func(m *ice.Message, _ ...string) { + m.PushButton(kit.Dict(m.CommandKey(), kit.Select(m.Commands("").Help, arg, 0))) + }}, DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { DreamProcess(m, "", nil, arg...) }}, } } @@ -481,7 +483,7 @@ func DreamEach(m *ice.Message, name string, status string, cb func(string)) *ice } msg := m.Spawn() m.Cmds(DREAM).Table(func(value ice.Maps) { - if value[mdb.STATUS] == kit.Select(cli.START, status) && (value[mdb.NAME] == name || reg.MatchString(kit.Format("%s:%s=%s@%d", value[mdb.NAME], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION]))) { + if value[mdb.STATUS] == kit.Select(cli.START, status) && value[mdb.TYPE] == WORKER && (value[mdb.NAME] == name || reg.MatchString(kit.Format("%s:%s=%s@%d", value[mdb.NAME], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION]))) { msg.Push(mdb.NAME, value[mdb.NAME]) } }) diff --git a/base/web/process.go b/base/web/process.go index 1f1de3a1..40ba5f8d 100644 --- a/base/web/process.go +++ b/base/web/process.go @@ -11,8 +11,7 @@ func ProcessIframe(m *ice.Message, title, link string, arg ...string) *ice.Messa if m.IsMetaKey() { m.ProcessOpen(link) return m - } - if !kit.HasPrefixList(arg, ctx.RUN) { + } else if !kit.HasPrefixList(arg, ctx.RUN) { defer m.Push(TITLE, title) } return ctx.ProcessFloat(m, CHAT_IFRAME, link, arg...) diff --git a/base/web/space.go b/base/web/space.go index 51528091..88d3faee 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -381,14 +381,12 @@ func init() { ice.Info.AdminCmd = AdminCmd ctx.PodCmd = func(m *ice.Message, arg ...ice.Any) bool { Upload(m) - for _, key := range []string{ice.POD} { - if pod := m.Option(key); pod != "" { - if ls := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); len(ls) > 1 { - m.Cmd(SPACE, pod, SPIDE, ice.DEV, CACHE, SHARE_CACHE+ls[0]) - } - m.Options(key, []string{}, ice.MSG_USERPOD, pod).Cmdy(append(kit.List(ice.SPACE, pod), arg...)...) - return true + if pod := m.Option(ice.POD); pod != "" { + if ls := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); len(ls) > 1 { + m.Cmd(SPACE, pod, SPIDE, ice.DEV, CACHE, SHARE_CACHE+ls[0]) } + m.Options(ice.POD, []string{}, ice.MSG_USERPOD, pod).Cmdy(append(kit.List(ice.SPACE, pod), arg...)...) + return true } return false } diff --git a/base/web/toast.go b/base/web/toast.go index ae74f297..7ef18a51 100644 --- a/base/web/toast.go +++ b/base/web/toast.go @@ -97,13 +97,13 @@ func GoToast(m *ice.Message, cb func(toast func(name string, count, total int)) icon = Icons[ice.FAILURE] m.Option(ice.TOAST_DURATION, cli.TIME_30s) toast(kit.JoinWord(list...), len(list), _total) + m.Sleep(m.Option(ice.TOAST_DURATION)) } else { icon = Icons[ice.SUCCESS] m.Option(ice.TOAST_DURATION, cli.TIME_3s) toast(ice.SUCCESS, _total, _total) } Count(m, kit.FuncName(1), toastTitle(m), kit.FmtDuration(time.Now().Sub(begin))) - m.Sleep(m.Option(ice.TOAST_DURATION)) return m } func Toast(m *ice.Message, text string, arg ...ice.Any) *ice.Message { // [title [duration [progress [hash]]]] diff --git a/core/chat/favor.go b/core/chat/favor.go index df8c0a9b..9d94b321 100644 --- a/core/chat/favor.go +++ b/core/chat/favor.go @@ -132,7 +132,7 @@ func FavorPreview(m *ice.Message, arg ...string) { case ctx.INDEX: index = msg.Append(mdb.NAME) case nfs.SHY: - index = web.WIKI_WORD + index = web.WORD } web.ProcessPodCmd(m, m.Option(web.SPACE), index, args, arg...) } diff --git a/core/code/compile.go b/core/code/compile.go index 57cdcf6c..a2a8266e 100644 --- a/core/code/compile.go +++ b/core/code/compile.go @@ -86,7 +86,7 @@ const COMPILE = "compile" func init() { Index.MergeCommands(ice.Commands{ - COMPILE: {Name: "compile arch=amd64,386,arm,arm64,mipsle os=linux,darwin,windows src=src/main.go@key run binpack webpack devpack install", Help: "构建", Icon: "go.png", Actions: ice.MergeActions(ice.Actions{ + COMPILE: {Name: "compile arch=amd64,386,arm,arm64,mipsle os=linux,darwin,windows file=src/main.go@key run binpack webpack devpack install", Help: "构建", Icon: "go.png", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { cli.IsAlpine(m, GO, "go git") }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { switch arg[0] { diff --git a/core/code/publish.go b/core/code/publish.go index 2e52fc42..627afb82 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -28,7 +28,7 @@ func _publish_list(m *ice.Message, arg ...string) *ice.Message { m.Option(nfs.DIR_REG, kit.Select("", arg, 0)) defer m.Table(func(value ice.Maps) { if p := value[nfs.PATH]; strings.Contains(p, "ice.windows.") { - m.PushDownload(mdb.LINK, "ice.exe", p) + m.PushDownload(mdb.LINK, "ice.exe", "/publish/"+p) } else { m.Push(mdb.LINK, kit.MergeURL2(web.UserHost(m), "/publish/"+p)) } diff --git a/core/code/vimer.go b/core/code/vimer.go index 2b34e43d..d6620d76 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -74,7 +74,7 @@ func init() { }}, }) Index.MergeCommands(ice.Commands{ - VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编程", Icon: "vimer.png", Role: aaa.VOID, Meta: kit.Dict( + VIMER: {Name: "vimer path=src/ file=main.go line=1 list", Help: "编辑器", Icon: "vimer.png", Role: aaa.VOID, Meta: kit.Dict( ctx.STYLE, INNER, ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict(cli.MAIN, "程序")), ), Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { @@ -207,10 +207,12 @@ func init() { chat.FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) { kit.If(m.Option(mdb.TYPE) == nfs.FILE, func() { ctx.ProcessField(m, m.PrefixKey(), nfs.SplitPath(m, m.Option(mdb.TEXT))) }) }}, - }, ctx.ConfAction(ctx.TOOLS, "xterm,compile,runtime"), chat.FavorAction(), web.DreamTablesAction()), Hand: func(m *ice.Message, arg ...string) { + }, ctx.ConfAction(ctx.TOOLS, "xterm,compile,runtime"), chat.FavorAction(), web.DreamTablesAction("编程")), Hand: func(m *ice.Message, arg ...string) { if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION { if web.IsLocalHost(m) { m.Action(nfs.SAVE, COMPILE, mdb.SHOW, ice.APP) + } else if m.IsMobileUA() { + m.Action(nfs.SAVE, COMPILE) } else { m.Action(nfs.SAVE, COMPILE, mdb.SHOW) } diff --git a/core/wiki/word.go b/core/wiki/word.go index 8bcefec6..db2886e2 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -25,7 +25,7 @@ const WORD = "word" func init() { Index.MergeCommands(ice.Commands{ - WORD: {Name: "word path=src/main.shy@key auto play favor", Help: "文档", Icon: "Books.png", Role: aaa.VOID, Actions: ice.MergeActions(ice.Actions{ + WORD: {Name: "word path=src/main.shy@key auto play favor", Help: "上下文", Icon: "Books.png", Role: aaa.VOID, Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { WordAlias(m, NAVMENU, TITLE, NAVMENU) WordAlias(m, PREMENU, TITLE, PREMENU) @@ -68,12 +68,11 @@ func init() { code.COMPLETE: {Hand: func(m *ice.Message, arg ...string) { kit.If(kit.IsIn(kit.Split(m.Option(mdb.TEXT))[0], IMAGE, VIDEO, AUDIO), func() { m.Cmdy(FEEL).CutTo(nfs.PATH, mdb.NAME) }) }}, - // "favor": {Help: "收藏", Icon: "bi bi-star", Hand: func(m *ice.Message, arg ...string) { - "favor": {Help: "收藏", Hand: func(m *ice.Message, arg ...string) { + "favor": {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.CHAT_FAVOR, mdb.CREATE, mdb.TYPE, nfs.SHY, mdb.NAME, path.Base(arg[0]), mdb.TEXT, arg[0]) m.ProcessHold("favor success") }}, - }, WikiAction("", nfs.SHY), web.DreamTablesAction(), mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path")), Hand: func(m *ice.Message, arg ...string) { + }, WikiAction("", nfs.SHY), web.DreamTablesAction("文档"), mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path")), Hand: func(m *ice.Message, arg ...string) { if len(arg) > 0 && !strings.HasPrefix(arg[0], nfs.USR_LEARNING_PORTAL) { mdb.HashCreate(m.Spawn(), nfs.PATH, arg[0]) } diff --git a/logs.go b/logs.go index b4f63077..4b8b62cf 100644 --- a/logs.go +++ b/logs.go @@ -153,13 +153,14 @@ func (m *Message) WarnAlreadyExists(err Any, arg ...Any) bool { return m.Warn(err, ErrAlreadyExists, kit.Simple(arg...), logs.FileLineMeta(2)) } func (m *Message) ErrorNotImplement(arg ...Any) *Message { - m.Error(true, append(kit.List(ErrNotImplement), arg...)...) + m.Error(true, append(kit.List(ErrNotImplement), append(arg, logs.FileLineMeta(2)))...) return m } func (m *Message) Error(err bool, arg ...Any) bool { - if err { - str, meta := m.join(arg...) - m.log(LOG_ERROR, m.FormatChain()).log(LOG_ERROR, str, meta).log(LOG_ERROR, m.FormatStack(2, 100)).error(arg...) + if m.Warn(err, arg...) { + str, _ := m.join(arg...) + m.error(arg...) + panic(str) return true } return false diff --git a/misc/git/status.go b/misc/git/status.go index 0e3837da..6e10e9c8 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -31,7 +31,7 @@ const STATUS = "status" func init() { Index.MergeCommands(ice.Commands{ - STATUS: {Name: "status repos:text auto", Help: "源码", Icon: "git.png", Role: aaa.VOID, Meta: kit.Dict( + STATUS: {Name: "status repos:text auto", Help: "源代码", Icon: "git.png", Role: aaa.VOID, Meta: kit.Dict( ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict("actions", "操作", "message", "信息", "remote", "远程库")), ), Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: web.DreamWhiteHandle}, @@ -57,7 +57,7 @@ func init() { }}, web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { if !nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME), _GIT)) { - m.Push(mdb.TEXT, "").PushButton(kit.Dict(m.CommandKey(), m.Commands("").Help)) + m.Push(mdb.TEXT, "").PushButton(kit.Dict(m.CommandKey(), "源码")) return } text := []string{} @@ -94,7 +94,12 @@ func init() { m.EchoInfoButton(nfs.Template(m, "init.html"), INIT) } else if len(arg) == 0 { kit.If(config != nil, func() { m.Option(aaa.EMAIL, kit.Select(mdb.Config(m, aaa.EMAIL), config.User.Email)) }) - m.Cmdy(REPOS, STATUS).Action(PULL, PUSH, INSTEADOF, mdb.DEV_REQUEST, ctx.CONFIG, STASH) + m.Cmdy(REPOS, STATUS) + if m.IsMobileUA() { + m.Action(PULL, PUSH) + } else { + m.Action(PULL, PUSH, INSTEADOF, mdb.DEV_REQUEST, ctx.CONFIG, STASH) + } kit.If(!m.IsCliUA(), func() { m.Cmdy(code.PUBLISH, ice.CONTEXTS, ice.DEV) }) ctx.Toolkit(m) } else { diff --git a/misc/ssh/relay/relay.go b/misc/ssh/relay/relay.go index d4ad22a1..19a5daf8 100644 --- a/misc/ssh/relay/relay.go +++ b/misc/ssh/relay/relay.go @@ -64,10 +64,10 @@ type relay struct { field string `data:"time,machine,username,host,port,portal,dream,module,version,commitTime,compileTime,bootTime,go,git,package,shell,kernel,arch,ncpu,vcpu,mhz,mem,disk,network,listen,socket,proc,vendor"` statsTables string `name:"statsTables" event:"stats.tables"` create string `name:"create machine* username* host* port*=22"` - stats string `name:"stats machine" help:"采集" icon:"bi bi-pc-display"` + stats string `name:"stats machine" help:"采集" icon:"bi bi-card-list"` dream string `name:"dream" help:"空间" icon:"bi bi-grid-3x3-gap"` - forEach string `name:"forEach machine cmd*:textarea=pwd" help:"遍历" icon:"bi bi-card-list"` - forFlow string `name:"forFlow machine cmd*:textarea=pwd" help:"流程" icon:"bi bi-terminal"` + forEach string `name:"forEach machine cmd*:textarea=pwd"` + forFlow string `name:"forFlow machine cmd*:textarea=pwd"` pubkey string `name:"pubkey" help:"公钥" icon:"bi bi-person-vcard"` publish string `name:"publish" help:"发布" icon:"bi bi-send-check"` list string `name:"list machine auto" help:"机器" icon:"relay.png"`