1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-02-18 12:30:56 +08:00
parent d33f38d7e7
commit a63f5600b7
14 changed files with 59 additions and 53 deletions

View File

@ -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...)

View File

@ -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)
}

View File

@ -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])
}
})

View File

@ -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...)

View File

@ -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
}

View File

@ -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]]]]

View File

@ -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...)
}

View File

@ -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] {

View File

@ -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))
}

View File

@ -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)
}

View File

@ -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])
}

View File

@ -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

View File

@ -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 {

View File

@ -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"`