diff --git a/base/web/dream.go b/base/web/dream.go index 25f34700..4e6323c0 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -1,7 +1,6 @@ package web import ( - "net/http" "os" "path" "regexp" @@ -22,7 +21,7 @@ import ( kit "shylinux.com/x/toolkits" ) -func _dream_list(m *ice.Message, simple bool) *ice.Message { +func _dream_list(m *ice.Message) *ice.Message { list := m.CmdMap(SPACE, mdb.NAME) mdb.HashSelects(m.Spawn()).Table(func(value ice.Maps, index int, head []string) { if value[aaa.ACCESS] == aaa.PRIVATE && (m.Option(ice.FROM_SPACE) != "" || !aaa.IsTechOrRoot(m)) { @@ -32,46 +31,35 @@ func _dream_list(m *ice.Message, simple bool) *ice.Message { value[ice.MAIN] = space[ice.MAIN] value[mdb.ICONS] = space[mdb.ICONS] m.Push("", value, kit.Slice(head, 0, -1)) - if m.IsCliUA() || simple { - m.Push(mdb.TYPE, space[mdb.TYPE]).Push(cli.STATUS, cli.START) - m.Push(nfs.MODULE, space[nfs.MODULE]).Push(nfs.VERSION, space[nfs.VERSION]) - // m.Push(mdb.TEXT, DreamStat(m, value[mdb.NAME])) - m.Push(mdb.TEXT, "") - button := []ice.Any{PORTAL, DESKTOP, ADMIN, WORD, OPEN} - kit.If(aaa.IsTechOrRoot(m), func() { button = append(button, cli.STOP) }) - m.PushButton(button...) - } else { - msg := gdb.Event(m.Spawn(value, space), DREAM_TABLES) - kit.If(aaa.IsTechOrRoot(m), func() { msg.Copy(m.Spawn().PushButton(cli.STOP)) }) - m.Push(mdb.TYPE, space[mdb.TYPE]).Push(cli.STATUS, cli.START) - m.Push(nfs.MODULE, space[nfs.MODULE]).Push(nfs.VERSION, space[nfs.VERSION]) - m.Push(mdb.TEXT, space[nfs.MODULE]+"\n"+msg.Append(mdb.TEXT)) - m.PushButton(strings.Join(msg.Appendv(ctx.ACTION), "")) - } + m.Push(mdb.TYPE, space[mdb.TYPE]).Push(cli.STATUS, cli.START) + m.Push(nfs.MODULE, space[nfs.MODULE]).Push(nfs.VERSION, space[nfs.VERSION]) + button := []ice.Any{PORTAL, DESKTOP, ADMIN, WORD} + text := space[nfs.MODULE] + kit.If(m.Option(ice.DREAM_SIMPLE) != ice.TRUE && aaa.IsTechOrRoot(m), func() { + kit.If(m.IsDebug(), func() { + button = append(button, VIMER, STATUS, COMPILE, cli.RUNTIME, XTERM) + text += "\n" + DreamStat(m, value[mdb.NAME]) + }) + button = append(button, "settings", cli.STOP) + }) + m.Push(mdb.TEXT, text) + m.PushButton(append(button, OPEN)...) } else if aaa.IsTechOrRoot(m) { m.Push("", value, kit.Slice(head, 0, -1)) + m.Push(nfs.MODULE, "").Push(nfs.VERSION, "").Push(mdb.TEXT, "") if m.Push(mdb.TYPE, WORKER); nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, value[mdb.NAME])) { - m.Push(cli.STATUS, cli.STOP).Push(nfs.MODULE, "").Push(nfs.VERSION, "").Push(mdb.TEXT, "") - kit.If(aaa.IsTechOrRoot(m), func() { m.PushButton(cli.START, nfs.TRASH) }, func() { m.PushButton() }) + m.Push(cli.STATUS, cli.STOP).PushButton(cli.START, nfs.TRASH) } else { - m.Push(cli.STATUS, cli.BEGIN).Push(nfs.MODULE, "").Push(nfs.VERSION, "").Push(mdb.TEXT, "") - kit.If(aaa.IsTechOrRoot(m), func() { m.PushButton(cli.START, mdb.REMOVE) }, func() { m.PushButton() }) + m.Push(cli.STATUS, cli.BEGIN).PushButton(cli.START, mdb.REMOVE) } } }) m.RewriteAppend(func(value, key string, index int) string { if key == mdb.TIME { if space, ok := list[m.Appendv(mdb.NAME)[index]]; ok { - value = space[mdb.TIME] + return space[mdb.TIME] } - } - return value - }) - return m -} -func _dream_list_icon(m *ice.Message) { - m.RewriteAppend(func(value, key string, index int) string { - if key == mdb.ICONS { + } else if key == mdb.ICONS { if kit.HasPrefix(value, HTTP, nfs.PS) { return value } else if nfs.ExistsFile(m, path.Join(ice.USR_LOCAL_WORK, m.Appendv(mdb.NAME)[index], value)) { @@ -82,34 +70,32 @@ func _dream_list_icon(m *ice.Message) { } return value }) + return m } -func _dream_list_more(m *ice.Message, simple bool) *ice.Message { +func _dream_list_more(m *ice.Message) *ice.Message { field := kit.Split(mdb.Config(m, mdb.FIELD) + ",type,status,module,version,text") m.Cmds(SPACE).Table(func(value ice.Maps) { value[nfs.REPOS] = "https://" + value[nfs.MODULE] value[aaa.ACCESS] = kit.Select("", value[aaa.USERROLE], value[aaa.USERROLE] != aaa.VOID) value[mdb.STATUS] = cli.START - button := []ice.Any{PORTAL, DESKTOP, ADMIN, WORD, VIMER, STATUS, COMPILE, cli.RUNTIME, XTERM, OPEN} + button := []ice.Any{PORTAL, DESKTOP, ADMIN, WORD} + kit.If(m.IsDebug(), func() { button = append(button, VIMER, STATUS, COMPILE, cli.RUNTIME, XTERM) }) switch value[mdb.TYPE] { case ORIGIN: value[mdb.TEXT] = kit.JoinLine(value[nfs.MODULE], value[mdb.TEXT]) - button = append(button, "gettoken") - if value[aaa.ACCESS] == "" { - defer m.PushButton(PORTAL, OPEN) - } else { - defer m.PushButton(button...) - } + button = append(button, GETTOKEN, OPEN) + kit.If(value[aaa.ACCESS] == "", func() { button = []ice.Any{PORTAL, OPEN} }) case SERVER: - button = append(button, "settoken") value[mdb.TEXT] = kit.JoinLine(value[nfs.MODULE], value[mdb.TEXT]) - defer m.PushButton(button...) + button = append(button, SETTOKEN, OPEN) case aaa.LOGIN: value[mdb.TEXT] = kit.JoinWord(value[AGENT], value[cli.SYSTEM], value[aaa.IP], kit.Format(PublicIP(m, value[aaa.IP]))) - defer m.PushButton(GRANT) + button = []ice.Any{GRANT} default: return } m.Push("", value, field) + m.PushButton(button...) }) return m } @@ -207,6 +193,8 @@ const ( STOPALL = "stopall" FOR_EACH = "forEach" FOR_FLOW = "forFlow" + GETTOKEN = "gettoken" + SETTOKEN = "settoken" DREAM_INPUTS = "dream.inputs" DREAM_CREATE = "dream.create" @@ -216,7 +204,6 @@ const ( DREAM_STOP = "dream.stop" DREAM_OPEN = "dream.open" DREAM_CLOSE = "dream.close" - DREAM_TABLES = "dream.tables" DREAM_ACTION = "dream.action" @@ -237,66 +224,28 @@ func init() { 每个空间都自带软件开发工具,也可以随时编程添加新的功能。 `, 200.0) }}, - html.BUTTON: {Hand: func(m *ice.Message, arg ...string) { - mdb.Config(m, html.BUTTON, kit.Join(arg)) - }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if mdb.IsSearchPreview(m, arg) { mdb.HashSelects(m.Spawn()).Table(func(value ice.Maps) { m.PushSearch(mdb.TYPE, WORKER, mdb.TEXT, m.MergePod(value[mdb.NAME]), value) }) } }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { - switch m.Option(ctx.ACTION) { - case mdb.CREATE: - switch arg[0] { - case mdb.NAME: - _dream_list(m, true).Cut("name,status,time") - case mdb.ICONS: - mdb.HashInputs(m, arg) - case nfs.REPOS: - defer ctx.DisplayInputKey(m, ctx.STYLE, "_nameicon") - m.Cmd(STORE).Table(func(value ice.Maps) { - m.Spawn().SplitIndex(m.Cmdx(SPIDE, value[mdb.NAME], SPIDE_RAW, http.MethodGet, C(DREAM))).Table(func(value ice.Maps) { - m.PushRecord(value, mdb.ICONS, nfs.REPOS, nfs.VERSION, mdb.NAME) - }) - }) - case nfs.BINARY: - defer ctx.DisplayInputKey(m, ctx.STYLE, "_nameicon") - m.Cmd(STORE).Table(func(val ice.Maps) { - m.Spawn().SplitIndex(m.Cmdx(SPIDE, val[mdb.NAME], SPIDE_RAW, http.MethodGet, S(), cli.GOOS, runtime.GOOS, cli.GOARCH, runtime.GOARCH)).Table(func(value ice.Maps) { - m.Push(mdb.ICONS, value[mdb.ICONS]) - m.Push(arg[0], val[ORIGIN]+S(value[mdb.NAME])).Push(nfs.SIZE, value[nfs.SIZE]).Push(mdb.TIME, value[mdb.TIME]) - }) - }) + switch arg[0] { + case mdb.NAME: + DreamEach(m, "", kit.Select(cli.START, cli.STOP, m.Option(ctx.ACTION) == STARTALL), func(name string) { m.Push(arg[0], name) }) + case tcp.NODENAME: + m.Cmdy(SPACE, m.Option(mdb.NAME), SPACE, ice.INFO).CutTo(mdb.NAME, arg[0]) + case aaa.USERNAME: + if aaa.IsTechOrRoot(m) && m.Option(ctx.ACTION) == GRANT { + m.Cmdy(aaa.USER).Cut(aaa.USERNAME, aaa.USERNICK).Option(ice.TABLE_CHECKBOX, ice.FALSE) + } else { + m.Push(arg[0], m.Option(ice.MSG_USERNAME)) + m.Push(arg[0], m.Option(tcp.NODENAME)) } - case STARTALL: - DreamEach(m, "", cli.STOP, func(name string) { m.Push(arg[0], name) }) - case tcp.SEND: - m.Cmd(SPACE, func(value ice.Maps) { - kit.If(kit.IsIn(value[mdb.TYPE], SERVER), func() { m.Push(arg[0], value[mdb.NAME]) }) - }) + case nfs.REPOS: + case nfs.BINARY: default: - switch arg[0] { - case mdb.NAME: - DreamEach(m, "", cli.START, func(name string) { m.Push(arg[0], name) }) - case ctx.CMDS: - m.Cmdy(ctx.COMMAND) - case nfs.FILE: - m.Options(nfs.DIR_TYPE, nfs.TYPE_CAT, ice.MSG_FIELDS, nfs.PATH) - m.Cmdy(nfs.DIR, nfs.SRC).Cmdy(nfs.DIR, nfs.ETC).Cmdy(nfs.DIR, "") - case tcp.NODENAME: - m.Cmdy(SPACE, m.Option(mdb.NAME), SPACE, ice.INFO).CutTo(mdb.NAME, tcp.NODENAME) - case aaa.USERNAME: - if aaa.IsTechOrRoot(m) && m.Option(ctx.ACTION) == GRANT { - m.Cmdy(aaa.USER).Cut(aaa.USERNAME, aaa.USERNICK) - m.Option(ice.TABLE_CHECKBOX, ice.FALSE) - } else { - m.Push(arg[0], m.Option(ice.MSG_USERNAME)) - m.Push(arg[0], m.Option(tcp.NODENAME)) - } - default: - gdb.Event(m, DREAM_INPUTS, arg) - } + gdb.Event(m, DREAM_INPUTS, arg) } }}, nfs.SCAN: {Hand: func(m *ice.Message, arg ...string) { @@ -309,12 +258,9 @@ func init() { }}, mdb.CREATE: {Name: "create name*=hi repos binary", Hand: func(m *ice.Message, arg ...string) { kit.If(!strings.Contains(m.Option(mdb.NAME), "-") || !strings.HasPrefix(m.Option(mdb.NAME), "20"), func() { m.Option(mdb.NAME, m.Time("20060102-")+m.Option(mdb.NAME)) }) - kit.If(mdb.Config(m, nfs.BINARY), func(p string) { m.OptionDefault(nfs.BINARY, p+m.Option(mdb.NAME)) }) - kit.If(mdb.Config(m, nfs.REPOS), func(p string) { m.OptionDefault(nfs.REPOS, p+m.Option(mdb.NAME)) }) m.Option(nfs.REPOS, kit.Select("", kit.Split(m.Option(nfs.REPOS)), -1)) if mdb.HashCreate(m); ice.Info.Important == true { _dream_start(m, m.Option(mdb.NAME)) - StreamPushRefreshConfirm(m, m.Trans("refresh for new space ", "刷新列表查看新空间 ")+m.Option(mdb.NAME)) SpaceEvent(m, OPS_DREAM_CREATE, m.Option(mdb.NAME), m.OptionSimple(mdb.NAME, nfs.REPOS, nfs.BINARY)...) } }}, @@ -342,9 +288,8 @@ func init() { m.Cmd(SPACE, path.Base(p), cli.RUNTIME, UPGRADE) return true } - }) - m.Sleep("3s") - // kit.If(m.Option(mdb.NAME) == "", func() { m.Sleep("5s").Cmdy(ROUTE, cli.BUILD).ProcessInner() }) + }).Sleep3s() + m.ProcessHold() }}, PUBLISH: {Name: "publish name", Hand: func(m *ice.Message, arg ...string) { m.Option(ice.MSG_TITLE, kit.Keys(m.Option(ice.MSG_USERPOD0), m.Option(ice.MSG_USERPOD), m.CommandKey(), m.ActionKey())) @@ -367,8 +312,7 @@ func init() { list := []string{cli.AMD64} kit.If(goos == cli.DARWIN, func() { list = append(list, cli.ARM64) }) kit.For(list, func(arch string) { - PushNoticeRich(m.Options(ice.MSG_COUNT, "0", ice.LOG_DISABLE, ice.TRUE), mdb.NAME, name, - msg.Cmd(SPACE, name, COMPILE, goos, arch, kit.Dict(ice.MSG_USERPOD, name)).AppendSimple()) + PushNoticeRich(m.Options(ice.MSG_COUNT, "0", ice.LOG_DISABLE, ice.TRUE), mdb.NAME, name, msg.Cmd(SPACE, name, COMPILE, goos, arch, kit.Dict(ice.MSG_USERPOD, name)).AppendSimple()) }) }) }) @@ -385,57 +329,37 @@ func init() { if cb, ok := m.OptionCB("").(func(string) bool); ok && cb(p) { return } - defer PushNoticeGrow(msg, "\r\n\r\n\r\n") - PushNoticeGrow(msg, kit.Format("[%s]%s$ %s\r\n", time.Now().Format(ice.MOD_TIME_ONLY), name, m.Option(ice.CMD))) + defer PushNoticeGrow(msg, "\r\n\r\n") + PushNoticeGrow(msg, kit.Format("\033[33m[%s]%s$\033[0m %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() }) }}, - ctx.CMDS: {Name: "cmds name cmds*", Help: "命令", Icon: "bi bi-terminal", Hand: func(m *ice.Message, arg ...string) { - DreamEach(m, m.Option(mdb.NAME), "", func(name string) { - m.Push(mdb.NAME, name).Push(mdb.TEXT, m.Cmdx(SPACE, name, kit.Split(m.Option(ctx.CMDS)))) - }).StatusTimeCount(m.OptionSimple(ctx.CMDS)).ProcessInner() - }}, - nfs.FILE: {Name: "file name file*", Help: "文件", Icon: "bi bi-file-earmark-code", Hand: func(m *ice.Message, arg ...string) { - DreamEach(m, m.Option(mdb.NAME), "", func(name string) { - m.Push(mdb.NAME, name).Push(mdb.TEXT, m.Cmdx(SPACE, name, nfs.CAT, m.Option(nfs.FILE))) - }).StatusTimeCount(m.OptionSimple(nfs.FILE)).ProcessInner() - }}, - cli.START: {Hand: func(m *ice.Message, arg ...string) { _dream_start(m, m.Option(mdb.NAME)) gdb.Event(m, DREAM_START, arg) }}, cli.STOP: {Hand: func(m *ice.Message, arg ...string) { - defer ToastProcess(m)() gdb.Event(m, DREAM_STOP, arg) m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP) m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT).Sleep3s() }}, - cli.RUNTIME: {Hand: func(m *ice.Message, arg ...string) { - ProcessPodCmd(m, m.Option(mdb.NAME), "", nil, arg...) - }}, nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { gdb.Event(m, DREAM_TRASH, arg) nfs.Trash(m, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME))) }}, - nfs.COPY: {Name: "copy to*", Help: "复制", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("", mdb.CREATE, mdb.NAME, m.Option(nfs.TO), nfs.BINARY, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME), ice.BIN_ICE_BIN)) + cli.RUNTIME: {Hand: func(m *ice.Message, arg ...string) { + ProcessPodCmd(m, m.Option(mdb.NAME), "", nil, arg...) }}, - tcp.SEND: {Name: "send to*", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(SPACE, m.Option(nfs.TO), DREAM, mdb.CREATE, m.OptionSimple(mdb.NAME, mdb.ICONS, nfs.REPOS, nfs.BINARY)) - m.Cmd(SPACE, m.Option(nfs.TO), DREAM, cli.START, m.OptionSimple(mdb.NAME)) - ProcessIframe(m, "", m.MergePod(kit.Keys(m.Option(nfs.TO), m.Option(mdb.NAME)))) - }}, - "settings": {Name: "settings restart=manual,always access=public,private", Help: "设置", Style: "danger", Hand: func(m *ice.Message, arg ...string) { + "settings": {Name: "settings restart=manual,always access=public,private", Help: "设置", Style: html.DANGER, Hand: func(m *ice.Message, arg ...string) { kit.If(m.Option(cli.RESTART) == "manual", func() { m.Option(cli.RESTART, "") }) kit.If(m.Option(aaa.ACCESS) == aaa.PUBLIC, func() { m.Option(aaa.ACCESS, "") }) mdb.HashModify(m, m.OptionSimple(mdb.NAME, cli.RESTART, aaa.ACCESS)) }}, - "settoken": {Name: "settoken nodename* username*", Help: "令牌", Style: "danger", Hand: func(m *ice.Message, arg ...string) { + SETTOKEN: {Name: "settoken nodename* username*", Help: "令牌", Style: html.DANGER, Hand: func(m *ice.Message, arg ...string) { token := m.Cmdx(TOKEN, mdb.CREATE, mdb.TYPE, SERVER, mdb.NAME, m.Option(aaa.USERNAME), mdb.TEXT, m.Option(tcp.NODENAME)) m.Cmd(SPACE, m.Option(mdb.NAME), SPIDE, DEV_CREATE_TOKEN, ice.Maps{CLIENT_NAME: ice.DEV, TOKEN: token}) }}, - "gettoken": {Help: "令牌", Style: "danger", Hand: func(m *ice.Message, arg ...string) { + GETTOKEN: {Help: "令牌", Style: html.DANGER, Hand: func(m *ice.Message, arg ...string) { m.Options(m.Cmd(SPIDE, m.Option(mdb.NAME)).AppendSimple()).Cmdy(SPIDE, mdb.DEV_REQUEST) }}, GRANT: {Name: "grant username", Hand: func(m *ice.Message, arg ...string) { @@ -444,7 +368,7 @@ func init() { } m.Cmd(CHAT_GRANT, aaa.CONFIRM, kit.Dict(SPACE, m.Option(mdb.NAME))) }}, - OPEN: {Style: "notice", Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) { + OPEN: {Style: html.NOTICE, Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) { if strings.HasSuffix(m.Option(ice.MAIN), ".portal") || kit.HasPrefixList(arg, ctx.RUN) { if !kit.HasPrefixList(arg, ctx.RUN) { defer m.Push(TITLE, m.Option(mdb.NAME)) @@ -474,17 +398,15 @@ func init() { button := []ice.Any{} if aaa.IsTechOrRoot(m) { switch m.Option(mdb.TYPE) { - case WORKER: - button = append(button, OPEN, "settings") + case ORIGIN: + button = append(button, DREAM, GETTOKEN) case SERVER: - button = append(button, DREAM, OPEN, "settoken") - default: - button = append(button, DREAM, OPEN, "gettoken") + button = append(button, DREAM, SETTOKEN) + case WORKER: + button = append(button, "settings") } - } else { - button = append(button, OPEN) } - m.PushButton(button...) + m.PushButton(append(button, OPEN)...) }}, SERVE_START: {Hand: func(m *ice.Message, arg ...string) { for _, cmd := range kit.Reverse(kit.Split(mdb.Config(m, html.BUTTON))) { @@ -499,7 +421,7 @@ func init() { }) }}, STATS_TABLES: {Hand: func(m *ice.Message, arg ...string) { - if msg := _dream_list(m.Spawn(), true); msg.Length() > 0 { + if msg := _dream_list(m.Spawn()); 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(), cli.START), stat[cli.START], "", "已启动空间") @@ -511,6 +433,8 @@ func init() { m.Cmd(SPACE).Table(func(value ice.Maps, index int, head []string) { kit.If(value[mdb.TYPE] == m.ActionKey(), func() { m.PushRecord(value, head...) }) }) + m.SortStrR(mdb.NAME) + kit.If(len(arg) > 0, func() { m.Cut(arg...) }) }}, SERVER: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(SPACE).Table(func(value ice.Maps, index int, head []string) { @@ -546,49 +470,27 @@ func init() { }, StatsAction(), DreamAction(), DreamTablesAction(), mdb.ImportantHashAction( mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,main,icons,repos,binary,template,restart,access", html.BUTTON, kit.JoinWord(PORTAL, DESKTOP, ADMIN, WORD, VIMER, STATUS, COMPILE, XTERM, DREAM), - ONLINE, ice.TRUE, )), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { - simple := m.Option(ice.DREAM_SIMPLE) == ice.TRUE || m.Option(ice.MSG_DEBUG) != ice.TRUE - if ice.Info.NodeType != WORKER { - _dream_list(m, simple) - _dream_list_icon(m) - if m.Length() == 0 { - m.EchoInfoButton(m.Trans("please scan or create new dream", "请扫描或创建新空间"), mdb.CREATE, nfs.SCAN) - return - } + if ice.Info.NodeType == WORKER { + return } - if !m.IsCliUA() && aaa.IsTechOrRoot(m) { - _dream_list_more(m, simple) - } else { - msg := m.Spawn(kit.Dict(ice.MSG_USERROLE, aaa.TECH)) - m.Cmds(SPACE).Table(func(value ice.Maps) { - if value[mdb.TYPE] == SERVER { - if p := ProxyDomain(msg, value[mdb.NAME]); p != "" { - value[mdb.TEXT] = p - m.PushRecord(value, mdb.TIME, mdb.TYPE, mdb.NAME, mdb.ICONS, nfs.MODULE, nfs.VERSION, mdb.TEXT) - m.PushButton(PORTAL, DESKTOP) - } - } - }) + if _dream_list(m); m.Length() == 0 { + m.EchoInfoButton(m.Trans("please scan or create new dream", "请扫描或创建新空间"), mdb.CREATE, nfs.SCAN) + return } - if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) || m.IsCliUA() { + if _dream_list_more(m); !aaa.IsTechOrRoot(m) || m.IsCliUA() { m.Action() } else if m.IsDebug() && cli.SystemFindGo(m) { m.Action(mdb.CREATE, STARTALL, STOPALL, cli.BUILD, PUBLISH) } else { m.Action(mdb.CREATE, STARTALL, STOPALL) } - m.Sort("type,status,name", []string{aaa.LOGIN, WORKER, SERVER, ORIGIN}, []string{cli.START, cli.STOP, cli.BEGIN}, ice.STR_R) m.StatusTimeCountStats(mdb.TYPE, mdb.STATUS) - ctx.DisplayTableCard(m) - // kit.If(!aaa.IsTechOrRoot(m), func() { m.Options(ice.MSG_TOOLKIT, "", ice.MSG_ONLINE, ice.FALSE) }) - // kit.If(!m.IsDebug(), func() { m.Options(ice.MSG_TOOLKIT, "") }) - m.Options(ice.MSG_TOOLKIT, "web.code.compose.insight") + m.Sort("type,status,name", []string{aaa.LOGIN, WORKER, SERVER, ORIGIN}, []string{cli.START, cli.STOP, cli.BEGIN}, ice.STR_R) + ctx.DisplayTableCard(m.Options(ice.MSG_TOOLKIT, "web.code.compose.insight")) } else if arg[0] == ctx.ACTION { gdb.Event(m, DREAM_ACTION, arg) - } else { - mdb.HashSelects(m, arg[0]).PushAction(PORTAL, DESKTOP, ADMIN, OPEN, mdb.REMOVE) } }}, })