From af481aec3bbd9aa4110795c2759606e9bcec5567 Mon Sep 17 00:00:00 2001 From: shy Date: Mon, 22 Jan 2024 22:24:08 +0800 Subject: [PATCH] add script --- base/cli/runtime.go | 6 ++++-- base/mdb/zone.go | 5 +---- base/web/dream.go | 41 ++++++++++++++++++++++++++++------------- base/web/option.go | 4 ++-- base/web/render.go | 8 ++++++-- base/web/route.go | 11 +---------- base/web/space.go | 4 +++- core/chat/script.go | 2 +- core/code/upgrade.go | 4 ++-- 9 files changed, 48 insertions(+), 37 deletions(-) diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 34f01c2f..f870afd5 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -253,10 +253,12 @@ func init() { m.Echo("%v", string(buf)) }}, "upgrade": {Help: "升级", Hand: func(m *ice.Message, arg ...string) { - if nfs.Exists(m, ".git") && SystemFind(m, "go") != "" { + if nfs.Exists(m, ice.SRC_MAIN_GO) && nfs.Exists(m, ".git") && SystemFind(m, "go") != "" { m.Cmdy("web.code.compile") - } else { + } else if nfs.Exists(m, ice.BIN_ICE_BIN) { m.Cmdy("web.code.upgrade") + } else { + m.Cmdy("", "reboot") } }}, "reboot": {Help: "重启", Icon: "bi bi-bootstrap-reboot", Hand: func(m *ice.Message, arg ...string) { diff --git a/base/mdb/zone.go b/base/mdb/zone.go index d070ebef..93bc1ccd 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -190,10 +190,7 @@ func ZoneAction(arg ...ice.Any) ice.Actions { } func ExportZoneAction(arg ...ice.Any) ice.Actions { return ice.MergeActions(ZoneAction(arg...), ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - Config(m, IMPORTANT, ice.TRUE) - ZoneImport(m, arg) - }}, + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); ZoneImport(m, arg) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.OptionFields(""); ZoneExport(m, arg) }}, }) } diff --git a/base/web/dream.go b/base/web/dream.go index 325f3acf..61045351 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -240,38 +240,53 @@ func init() { }) }}, cli.BUILD: {Name: "build name", Hand: func(m *ice.Message, arg ...string) { - m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) - m.Cmd("", FOR_FLOW, m.Option(mdb.NAME), kit.JoinWord(cli.SH, ice.ETC_MISS_SH)) - m.Sleep3s().Cmdy(ROUTE, cli.BUILD).ProcessInner() + m.Option(ice.MSG_TITLE, kit.Keys(m.Option(ice.MSG_USERPOD), m.CommandKey(), m.ActionKey())) + compile := cli.SystemFind(m, "go") != "" + m.Cmd("", FOR_FLOW, m.Option(mdb.NAME), kit.JoinWord(cli.SH, ice.ETC_MISS_SH), func(p string) bool { + if compile && nfs.Exists(m, path.Join(p, ice.SRC_MAIN_GO)) { + return false + } else { + m.Cmd(SPACE, path.Base(p), cli.RUNTIME, UPGRADE) + return true + } + }) + // kit.If(m.Option(mdb.NAME) == "", func() { m.Sleep3s().Cmdy(ROUTE, cli.BUILD).ProcessInner() }) }}, PUBLISH: {Name: "publish name", Help: "发布", Icon: "bi bi-send-check", Hand: func(m *ice.Message, arg ...string) { m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) defer ToastProcess(m)() list := []string{cli.LINUX, cli.DARWIN, cli.WINDOWS} msg := m.Spawn(ice.Maps{ice.MSG_DAEMON: ""}) - m.Cmd(CODE_AUTOGEN, "binpack") + m.Cmd(AUTOGEN, BINPACK) kit.For(list, func(goos string) { - PushNoticeRich(m, mdb.NAME, ice.Info.NodeName, msg.Cmd(CODE_COMPILE, goos, cli.AMD64).AppendSimple()) + PushNoticeRich(m, mdb.NAME, ice.Info.NodeName, msg.Cmd(COMPILE, goos, cli.AMD64).AppendSimple()) }) DreamEach(m, m.Option(mdb.NAME), "", func(name string) { - m.Cmd(SPACE, name, CODE_AUTOGEN, "binpack") + m.Cmd(SPACE, name, AUTOGEN, BINPACK) kit.For(list, func(goos string) { - PushNoticeRich(m, mdb.NAME, name, msg.Cmd(SPACE, name, CODE_COMPILE, goos, cli.AMD64, kit.Dict(ice.MSG_USERPOD, name)).AppendSimple()) + PushNoticeRich(m, mdb.NAME, name, msg.Cmd(SPACE, name, COMPILE, goos, cli.AMD64, kit.Dict(ice.MSG_USERPOD, name)).AppendSimple()) }) }) m.ProcessHold() }}, FOR_FLOW: {Name: "forFlow name cmd*='sh etc/miss.sh'", Help: "流程", Icon: "bi bi-terminal", Hand: func(m *ice.Message, arg ...string) { + list := []string{} + DreamEach(m.Spawn(ice.Maps{ice.MSG_DAEMON: ""}), m.Option(mdb.NAME), "", func(name string) { list = append(list, name) }) m.Options(ctx.DISPLAY, PLUGIN_XTERM, cli.CMD_OUTPUT, nfs.NewWriteCloser(func(buf []byte) (int, error) { PushNoticeGrow(m.Options(ice.MSG_COUNT, "0"), strings.ReplaceAll(string(buf), lex.NL, "\r\n")) return len(buf), nil }, func() error { return nil })) - msg := mdb.HashSelects(m.Spawn(), m.Option(mdb.NAME)) GoToast(m, "", func(toast func(string, int, int)) []string { - msg.Table(func(index int, value ice.Maps) { - toast(value[mdb.NAME], index, msg.Length()) - p := path.Join(ice.USR_LOCAL_WORK, value[mdb.NAME]) - PushNoticeGrow(m, strings.ReplaceAll(kit.Format("[%s]%s$ %s\n", time.Now().Format(ice.MOD_TIME_ONLY), value[mdb.NAME], m.Option(ice.CMD)), lex.NL, "\r\n")) + kit.For(list, func(index int, name string) { + toast(name, index, len(list)) + p := path.Join(ice.USR_LOCAL_WORK, name) + switch cb := m.OptionCB("").(type) { + case func(string) bool: + if cb(p) { + return + } + } + PushNoticeGrow(m, strings.ReplaceAll(kit.Format("[%s]%s$ %s\n", time.Now().Format(ice.MOD_TIME_ONLY), name, m.Option(ice.CMD)), lex.NL, "\r\n")) 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") }) @@ -350,7 +365,7 @@ func init() { }}, }, StatsAction(), DreamAction(), mdb.ImportantHashAction( mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,icon,repos,binary,template,restart", ctx.TOOLS, kit.Simple(CODE_GIT_SEARCH, ROUTE, SPIDE), - html.BUTTON, kit.JoinWord(PORTAL, ADMIN, DESKTOP, WIKI_WORD, CODE_GIT_STATUS, CODE_VIMER, CODE_XTERM, CODE_COMPILE), + html.BUTTON, kit.JoinWord(PORTAL, ADMIN, DESKTOP, WIKI_WORD, STATUS, VIMER, XTERM, COMPILE), )), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { _dream_list(m).RewriteAppend(func(value, key string, index int) string { diff --git a/base/web/option.go b/base/web/option.go index 1a5506fd..4e140334 100644 --- a/base/web/option.go +++ b/base/web/option.go @@ -136,7 +136,7 @@ var Icons = map[string]string{ice.PROCESS: "🕑", ice.FAILURE: "❌", ice.SUCCE func toastContent(m *ice.Message, state string, arg ...ice.Any) string { if len(arg) == 0 { - return kit.JoinWord(kit.Simple(Icons[state], m.ActionKey(), state)...) + return kit.JoinWord(kit.Simple(Icons[state], kit.Select("", m.ActionKey(), m.ActionKey() != ice.LIST), state)...) } else { return kit.JoinWord(kit.Simple(Icons[state], arg)...) } @@ -156,7 +156,7 @@ func GoToast(m *ice.Message, title string, cb func(toast func(name string, count icon := Icons[ice.PROCESS] toast := func(name string, count, total int) { kit.If(total == 0, func() { total = 1 }) - Toast(m, kit.Format("%s %s %s/%s", icon, kit.JoinWord(kit.Select(m.ActionKey(), m.Option(ice.MSG_TITLE)), name), strings.TrimSuffix(kit.FmtSize(int64(count)), "B"), strings.TrimSuffix(kit.FmtSize(int64(total)), "B")), + Toast(m, kit.Format("%s %s %s/%s", icon, kit.JoinWord(kit.Select(kit.Select("", m.ActionKey(), m.ActionKey() != ice.LIST), title, m.Option(ice.MSG_TITLE)), name), strings.TrimSuffix(kit.FmtSize(int64(count)), "B"), strings.TrimSuffix(kit.FmtSize(int64(total)), "B")), "", m.OptionDefault(ice.TOAST_DURATION, "30s"), count*100/total) _total = total } diff --git a/base/web/render.go b/base/web/render.go index dd18d7a6..932d0cc8 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -158,9 +158,13 @@ func RenderVersion(m *ice.Message) string { const ( CHAT = "chat" - DESKTOP = "desktop" - COMPILE = "compile" XTERM = "xterm" + VIMER = "vimer" + DESKTOP = "desktop" + UPGRADE = "upgrade" + COMPILE = "compile" + BINPACK = "binpack" + AUTOGEN = "autogen" CODE_GIT_SERVICE = "web.code.git.service" CODE_GIT_SEARCH = "web.code.git.search" diff --git a/base/web/route.go b/base/web/route.go index 63ac8a96..16be9128 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -84,19 +84,10 @@ func init() { _route_toast(m, m.Option(SPACE), append([]string{m.Option(ctx.INDEX)}, kit.Split(m.Option(ctx.ARGS))...)...) }}, cli.BUILD: {Name: "build space", Help: "构建", Hand: func(m *ice.Message, arg ...string) { - _route_toast(m, m.Option(SPACE), m.PrefixKey(), "_build") + _route_toast(m, m.Option(SPACE), cli.RUNTIME, UPGRADE) func() { defer ToastProcess(m)(); m.Sleep3s() }() m.SetAppend().Cmdy("", "travel") }}, - "_build": {Hand: func(m *ice.Message, arg ...string) { - if _, err := nfs.DiskFile.StatFile(ice.SRC_MAIN_GO); err == nil && 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") - } - }}, "diagram": {Help: "导图", Icon: "bi bi-diagram-3", 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) }}, diff --git a/base/web/space.go b/base/web/space.go index 8bce1275..747ffea7 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -194,7 +194,9 @@ func _space_exec(m *ice.Message, name string, source, target []string, c *websoc return } m.OptionDefault(ice.MSG_COUNT, "0") - m.Option(ice.MSG_DAEMON, kit.Keys(kit.Slice(kit.Reverse(kit.Simple(source)), 0, -1), m.Option(ice.MSG_DAEMON))) + kit.If(m.Option(ice.MSG_DAEMON), func(p string) { + m.Option(ice.MSG_DAEMON, kit.Keys(kit.Slice(kit.Reverse(kit.Simple(source)), 0, -1), p)) + }) kit.If(aaa.Right(m, m.Detailv()), func() { m.TryCatch(true, func(_ *ice.Message) { m = m.Cmd() }) }) kit.If(m.Optionv(ice.MSG_ARGS) != nil, func() { m.Options(ice.MSG_ARGS, kit.Simple(m.Optionv(ice.MSG_ARGS))) }) } diff --git a/core/chat/script.go b/core/chat/script.go index e76d7869..86039374 100644 --- a/core/chat/script.go +++ b/core/chat/script.go @@ -12,7 +12,7 @@ const SCRIPT = "script" func init() { Index.MergeCommands(ice.Commands{ SCRIPT: {Name: "script zone id auto", Help: "脚本化", Icon: "script.png", Actions: ice.MergeActions( - mdb.ImportantZoneAction(mdb.FIELDS, "time,id,space,index,play,status,style"), mdb.ExportZoneAction(), + mdb.ExportZoneAction(mdb.FIELDS, "time,id,space,index,play,status,style"), ), Hand: func(m *ice.Message, arg ...string) { if mdb.ZoneSelect(m.Options(mdb.CACHE_LIMIT, "30"), arg...).Display(""); len(arg) == 0 { m.PushAction(cli.RECORD, mdb.REMOVE).Action(mdb.CREATE, cli.STOP) diff --git a/core/code/upgrade.go b/core/code/upgrade.go index 24c66ef4..1c601a57 100644 --- a/core/code/upgrade.go +++ b/core/code/upgrade.go @@ -44,7 +44,7 @@ func init() { uri := "/publish/" + kit.Format(value[nfs.FILE]) kit.If(m.Spawn().ParseLink(ice.Info.Domain).Option(ice.MSG_USERPOD), func(p string) { uri = kit.MergeURL(uri, ice.POD, p) }) dir := path.Join(kit.Format(value[nfs.PATH]), kit.Format(value[nfs.FILE])) - web.GoToast(m, m.PrefixKey(), func(toast func(name string, count, total int)) []string { + web.GoToast(m, web.DOWNLOAD, func(toast func(name string, count, total int)) []string { switch web.SpideSave(m, dir, uri, func(count, total, value int) { toast(dir, count, total) }); value[mdb.TYPE] { @@ -56,7 +56,7 @@ func init() { } return nil }) - m.Cmdy(nfs.DIR, dir, "time,size,path,hash") + m.Cmdy(nfs.DIR, dir, "time,size,path,hash").Push(web.ORIGIN, kit.MergeURL2(web.SpideOrigin(m, ice.DEV_IP), uri)) }) if web.ToastSuccess(m); m.Option(ice.EXIT) == ice.TRUE { web.Toast(m, cli.RESTART)