diff --git a/base/ctx/command.go b/base/ctx/command.go index 43bdf202..315dc640 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -69,6 +69,9 @@ func init() { if _, ok := cmd.Actions[RUN]; !ok { cmd.Actions[RUN] = &ice.Action{Hand: Run} } + if _, ok := cmd.Actions[mdb.INPUTS]; !ok { + cmd.Actions[mdb.INPUTS] = &ice.Action{Hand: func(m *ice.Message, arg ...string) { mdb.HashInputs(m, arg) }} + } }) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { diff --git a/base/ssh/render.go b/base/ssh/render.go index e40c0d2b..1d789dfc 100644 --- a/base/ssh/render.go +++ b/base/ssh/render.go @@ -18,7 +18,11 @@ func Render(m *ice.Message, cmd string, arg ...ice.Any) (res string) { return res default: if res = m.Result(); res == "" { - res = m.TableEchoWithStatus().Result() + if m.IsCliUA() { + res = m.TableEchoWithStatus().Result() + } else { + res = m.TableEcho().Result() + } } } if fmt.Fprint(m.O, res); !strings.HasSuffix(res, lex.NL) { diff --git a/base/web/dream.go b/base/web/dream.go index f28c35ee..fa08e304 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -150,6 +150,18 @@ func init() { m.Cmdy(SPACE, m.Option(mdb.NAME), SPACE, mdb.INPUTS, arg) return } + switch m.Option(ctx.ACTION) { + case nfs.CAT: + switch arg[0] { + case nfs.FILE: + m.Options(nfs.DIR_TYPE, nfs.TYPE_CAT, ice.MSG_FIELDS, nfs.PATH) + m.Cmdy(nfs.DIR, "src/") + m.Cmdy(nfs.DIR, "etc/") + m.Cmdy(nfs.DIR, "") + return + } + return + } switch arg[0] { case mdb.NAME, nfs.TEMPLATE: _dream_list(m).Cut("name,status,time") @@ -165,9 +177,10 @@ func init() { } }}, mdb.CREATE: {Name: "create name*=hi icon@icon repos binary template", Hand: func(m *ice.Message, arg ...string) { - m.OptionDefault(mdb.ICON, nfs.USR_ICONS_ICEBERGS) - m.Option(nfs.REPOS, kit.Select("", kit.Slice(kit.Split(m.Option(nfs.REPOS)), -1), 0)) 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)) }) + m.OptionDefault(nfs.REPOS, mdb.Config(m, nfs.REPOS)+m.Option(mdb.NAME)) + m.Option(nfs.REPOS, kit.Select("", kit.Slice(kit.Split(m.Option(nfs.REPOS)), -1), 0)) + m.OptionDefault(mdb.ICON, nfs.USR_ICONS_ICEBERGS) if mdb.HashCreate(m); !m.IsCliUA() { _dream_start(m, m.OptionDefault(mdb.NAME, path.Base(m.Option(nfs.REPOS)))) } @@ -239,6 +252,7 @@ func init() { m.Push(mdb.NAME, value[mdb.NAME]) m.Push(mdb.TEXT, m.Cmdx(SPACE, value[mdb.NAME], nfs.CAT, m.Option(nfs.FILE))) }) + m.StatusTimeCount(nfs.FILE, m.Option(nfs.FILE)) }}, ice.CMD: {Name: "cmd cmd*", Help: "命令", Hand: func(m *ice.Message, arg ...string) { GoToast(m, "", func(toast func(string, int, int)) []string { diff --git a/base/web/serve.go b/base/web/serve.go index bf755eb0..0f2b8a9a 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -12,6 +12,7 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" + "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" @@ -226,7 +227,7 @@ func init() { cli.Opens(m, mdb.Config(m, cli.OPEN)) }) }}, - }, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { + }, gdb.EventsAction(SERVE_START), mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).Options(ice.MSG_ACTION, "").StatusTimeCount(kit.Dict(ice.MAIN, mdb.Config(m, ice.MAIN))) }}, }) diff --git a/core/chat/header.go b/core/chat/header.go index b6fbb19e..1ed0829b 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -89,6 +89,7 @@ func init() { return } m.Options("volcano", web.UserHost(m), nfs.VERSION, web.RenderVersion(m)) + m.Options(ice.MSG_USERWEB, tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB))) m.Options(ice.MSG_USERWEB, kit.MergeURL(m.Option(ice.MSG_USERWEB), web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN))) m.Cmdy(aaa.EMAIL, aaa.SEND, arg, aaa.CONTENT, nfs.Template(m, "email.html")) }}, diff --git a/core/chat/macos/desktop.css b/core/chat/macos/desktop.css index e7c8841a..83583f77 100644 --- a/core/chat/macos/desktop.css +++ b/core/chat/macos/desktop.css @@ -4,7 +4,7 @@ fieldset.macos.desktop>div.output>fieldset.macos { background-color:var(--plugin fieldset.macos.desktop>div.output>fieldset.macos>div.output { background-color:transparent; } fieldset.macos.desktop>div.output>fieldset.macos.menu { line-height:25px; border-radius:0; height:25px; width:100%; position:absolute; top:0; overflow:hidden; } fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu:hover { background-color:var(--hover-bg-color); } -fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu.create { font-size:24px; line-height:20px; height:25px; } +fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu.icon { font-size:24px; line-height:20px; height:25px; padding:0 10px; } fieldset.macos.desktop>div.output>fieldset.macos.menu>div.output { overflow:hidden; } fieldset.macos.desktop>div.output>fieldset.macos.dock { border:var(--box-border); border-radius:20px; position:absolute; bottom:10px; transition:margin-left 0.3s; } fieldset.macos.desktop>div.output>fieldset.macos.searchs { position:absolute; z-index:100; } diff --git a/core/chat/macos/menu.js b/core/chat/macos/menu.js index 1f49509d..6116bc82 100644 --- a/core/chat/macos/menu.js +++ b/core/chat/macos/menu.js @@ -6,6 +6,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.page.style(can, can._ou return {view: [html.ITEM], list: [{img: can.page.drawText(can, item.name||item.index, 25, 0, 20)}], onclick: function(event) { can.sup.onexport.record(can, item) }} }), [ {view: [html.MENU, "", can.ConfSpace()||can.misc.Search(can, ice.POD)||location.host], onclick: function(event) { can.sup.onexport.record(can, html.DESKTOP) }}, - {view: [[html.MENU, mdb.CREATE], "", can.page.unicode.create], onclick: function(event) { can.sup.onexport.record(can, mdb.CREATE) }}, + {view: [[html.MENU, mdb.ICON, web.REFRESH], "", can.page.unicode.refresh], onclick: function(event) { can.user.reload(true) }}, + {view: [[html.MENU, mdb.ICON, mdb.CREATE], "", can.page.unicode.create], onclick: function(event) { can.sup.onexport.record(can, mdb.CREATE) }}, ])) }}) diff --git a/core/chat/oauth/server.go b/core/chat/oauth/server.go index 5508ecf3..22056e2b 100644 --- a/core/chat/oauth/server.go +++ b/core/chat/oauth/server.go @@ -2,8 +2,6 @@ package oauth import "shylinux.com/x/ice" -type Server struct { - ice.Hash -} +type Server struct{ ice.Hash } func init() { ice.ChatCtxCmd(Client{}) } diff --git a/core/code/binpack.go b/core/code/binpack.go index 6c86b525..54a668bd 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -50,7 +50,10 @@ func _binpack_all(m *ice.Message) { defer fmt.Fprintln(w, nfs.Template(m, "binpack_end.go")) defer fmt.Fprint(w, lex.TB) nfs.OptionFiles(m, nfs.DiskFile) - kit.For([]string{ice.USR_VOLCANOS, ice.USR_INTSHELL, ice.SRC}, func(p string) { _binpack_dir(m, w, p) }) + kit.If(m.Option(ice.MSG_USERPOD) == "", func() { + kit.For([]string{ice.USR_VOLCANOS, ice.USR_INTSHELL}, func(p string) { _binpack_dir(m, w, p) }) + }) + kit.For([]string{ice.SRC}, func(p string) { _binpack_dir(m, w, p) }) kit.For([]string{ ice.ETC_MISS_SH, ice.ETC_INIT_SHY, ice.ETC_LOCAL_SHY, ice.ETC_EXIT_SHY, ice.ETC_PATH, ice.README_MD, ice.MAKEFILE, ice.LICENSE, ice.GO_MOD, ice.GO_SUM, diff --git a/core/code/install.go b/core/code/install.go index 571c7097..3dd68486 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -27,11 +27,12 @@ func _install_path(m *ice.Message, link string) string { return p } } -func _install_download(m *ice.Message) { - link := m.Option(web.LINK) +func _install_download(m *ice.Message, arg ...string) { + link := kit.Select(m.Option(web.LINK), arg, 0) name := path.Base(kit.ParseURL(link).Path) // file := path.Join(kit.Select(ice.USR_INSTALL, m.Option(nfs.PATH)), name) - file := path.Join(ice.USR_INSTALL, name) + file := path.Join(kit.Select(ice.USR_INSTALL, arg, 1), name) + // file := path.Join(ice.USR_INSTALL, name) defer m.Cmdy(nfs.DIR, file) if nfs.Exists(m, file) { return @@ -170,7 +171,7 @@ const INSTALL = "install" func init() { Index.MergeCommands(ice.Commands{ INSTALL: {Name: "install name port path:text auto download", Help: "安装", Actions: ice.MergeActions(ice.Actions{ - web.DOWNLOAD: {Name: "download link* path", Hand: func(m *ice.Message, arg ...string) { _install_download(m) }}, + web.DOWNLOAD: {Name: "download link* path", Hand: func(m *ice.Message, arg ...string) { _install_download(m, arg...) }}, cli.BUILD: {Name: "build link*", Hand: func(m *ice.Message, arg ...string) { web.PushStream(m) if err := _install_build(m, arg...); m.Warn(err != "", err) { diff --git a/core/team/plan.go b/core/team/plan.go index c27fda7a..e0f2509f 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -32,7 +32,7 @@ func _plan_scope(m *ice.Message, arg ...string) (begin_time, end_time time.Time) return begin_time, end_time } func _plan_list(m *ice.Message, begin_time, end_time string) { - m.Options(mdb.CACHE_LIMIT, "-1").OptionFields("begin_time,close_time,zone,id,level,status,score,type,name,text,extra") + m.Options(mdb.CACHE_LIMIT, "-1").OptionFields("begin_time,end_time,zone,id,status,level,score,type,name,text,extra") m.Cmd(mdb.SELECT, m.Prefix(TASK), "", mdb.ZONE, mdb.FOREACH, func(key string, fields []string, value, val ice.Map) { if begin_time <= kit.Format(value[BEGIN_TIME]) && kit.Format(value[BEGIN_TIME]) < end_time { m.Push(key, value, fields, val).PushButton(_task_action(m, value[STATUS], mdb.PLUGIN)) diff --git a/core/team/task.go b/core/team/task.go index e8a1fced..571ba266 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -32,7 +32,7 @@ func _task_modify(m *ice.Message, field, value string, arg ...string) { case PROCESS: arg = append(arg, BEGIN_TIME, m.Time()) case CANCEL, FINISH: - arg = append(arg, CLOSE_TIME, m.Time()) + arg = append(arg, END_TIME, m.Time()) } } mdb.ZoneModify(m, field, value, arg) @@ -51,7 +51,6 @@ const ( ) const ( BEGIN_TIME = "begin_time" - CLOSE_TIME = "close_time" END_TIME = "end_time" STATUS = "status" @@ -78,7 +77,7 @@ func init() { } kit.If(arg[0] == mdb.ZONE, func() { m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE))) }) }}, - mdb.INSERT: {Name: "insert space zone* type=once,step,week name* text begin_time@date close_time@date", Hand: func(m *ice.Message, arg ...string) { + mdb.INSERT: {Name: "insert space zone* type=once,step,week name* text begin_time@date end_time@date", Hand: func(m *ice.Message, arg ...string) { if space, arg := arg[1], arg[2:]; space != "" { m.Cmdy(web.SPACE, space, TASK, mdb.INSERT, web.SPACE, "", arg) } else { @@ -89,7 +88,7 @@ func init() { CANCEL: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, CANCEL) }}, BEGIN: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, PROCESS) }}, END: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, FINISH) }}, - }, mdb.ExportZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) { + }, mdb.ExportZoneAction(mdb.FIELDS, "begin_time,end_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) { if mdb.ZoneSelect(m, arg...); len(arg) > 0 && arg[0] != "" { status := map[string]int{} m.Table(func(value ice.Maps) { m.PushButton(_task_action(m, value[STATUS])) }) diff --git a/misc/git/repos.go b/misc/git/repos.go index ff1af97c..f219866e 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -440,10 +440,11 @@ func init() { } }}, INIT: {Name: "init origin* path", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(nfs.DEFS, kit.Path(".git/config"), kit.Format(nfs.Template(m, CONFIG), m.Option(ORIGIN))) - m.Cmd(nfs.DEFS, kit.Path(".gitignore"), nfs.Template(m, IGNORE)) + m.OptionDefault(nfs.PATH, kit.Path("")) + m.Cmd(nfs.DEFS, path.Join(m.Option(nfs.PATH), ".git/config"), kit.Format(nfs.Template(m, CONFIG), m.Option(ORIGIN))) + m.Cmd(nfs.DEFS, path.Join(m.Option(nfs.PATH), ".gitignore"), nfs.Template(m, IGNORE)) git.PlainInit(m.Option(nfs.PATH), false) - _repos_insert(m, kit.Path("")) + _repos_insert(m, m.Option(nfs.PATH)) m.ProcessRefresh() }}, REMOTE: {Hand: func(m *ice.Message, arg ...string) { @@ -595,16 +596,6 @@ func init() { web.DREAM_TRASH: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.REMOVE, kit.Dict(REPOS, m.Option(mdb.NAME))) }}, - web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { - if !kit.IsIn(m.Option(mdb.TYPE), web.WORKER, web.SERVER) { - return - } else if !nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, m.Option(mdb.NAME), ".git")) { - return - } else { - m.PushButton(kit.Dict(m.CommandKey(), "源码")) - } - }}, - web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, []string{}, arg...) }}, }, aaa.RoleAction(REMOTE), web.DreamAction(), mdb.HashAction(mdb.SHORT, REPOS, mdb.FIELD, "time,repos,branch,version,message,origin"), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { mdb.HashSelect(m, arg...).Sort(REPOS).PushAction(STATUS, mdb.REMOVE).Action(STATUS, PULL, PUSH, CLONE) @@ -635,3 +626,6 @@ func ReposList(m *ice.Message) *ice.Message { func ReposClone(m *ice.Message, arg ...string) *ice.Message { return m.Cmdy(web.CODE_GIT_REPOS, CLONE, arg) } +func ReposInit(m *ice.Message, arg ...string) *ice.Message { + return m.Cmdy(web.CODE_GIT_REPOS, INIT, arg) +} diff --git a/misc/git/status.go b/misc/git/status.go index d15b0a12..b69a10dc 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -76,6 +76,7 @@ func init() { text = append(text, list[0]+" ---") } } + m.PushButton(kit.Dict(m.CommandKey(), "源码")) m.Push(mdb.TEXT, strings.Join(text, ", ")) }}, }, aaa.RoleAction(), web.DreamAction(), Prefix(REPOS)), Hand: func(m *ice.Message, arg ...string) { diff --git a/misc/github/github.go b/misc/github/github.go new file mode 100644 index 00000000..56fbe446 --- /dev/null +++ b/misc/github/github.go @@ -0,0 +1,10 @@ +package code + +import ( + ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/core/code" +) + +var Index = &ice.Context{Name: "github", Help: "github"} + +func init() { code.Index.Merge(Index) } diff --git a/misc/misc.shy b/misc/misc.shy index fecad734..204415f1 100644 --- a/misc/misc.shy +++ b/misc/misc.shy @@ -4,9 +4,9 @@ websocket webview qrcode xterm -git - ssh + +git vim bash tmux