diff --git a/base/aaa/email.go b/base/aaa/email.go index cbabf5f2..8ca6edaa 100644 --- a/base/aaa/email.go +++ b/base/aaa/email.go @@ -24,7 +24,11 @@ func init() { DF = ": " ) Index.MergeCommands(ice.Commands{ - EMAIL: {Name: "email name auto create", Help: "邮件", Actions: ice.MergeActions(ice.Actions{ + EMAIL: {Name: "email name auto create website", Help: "邮件", Actions: ice.MergeActions(ice.Actions{ + "website": {Help: "邮箱", Hand: func(m *ice.Message, arg ...string) { + // m.ProcessOpen(m.Cmdv("web.spide", EMAIL, "client.url")) + m.EchoIFrame(m.Cmdv("web.spide", EMAIL, "client.url")).ProcessInner() + }}, SEND: {Name: "send to*='shylinux@163.com' subject*=hi content*:textarea=hello", Help: "发送", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd("", m.OptionDefault(mdb.NAME, ADMIN)) if m.Warn(msg.Append(SERVICE) == "", ice.ErrNotValid, SERVICE) { diff --git a/base/cli/runtime.go b/base/cli/runtime.go index d4a19dab..c5c1c187 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -126,6 +126,7 @@ const ( const ( CTX_SHY = "ctx_shy" CTX_COM = "ctx_com" + CTX_HUB = "ctx_hub" CTX_DEV = "ctx_dev" CTX_OPS = "ctx_ops" CTX_ARG = "ctx_arg" @@ -137,7 +138,7 @@ const ( CTX_DAEMON = "ctx_daemon" ) -var ENV_LIST = []string{TZ, LANG, TERM, SHELL, CTX_SHY, CTX_COM, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_DAEMON} +var ENV_LIST = []string{TZ, LANG, TERM, SHELL, CTX_SHY, CTX_HUB, CTX_COM, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_DAEMON} const ( HOSTNAME = "hostname" diff --git a/base/ctx/command.go b/base/ctx/command.go index 9ab9ac39..47d701e3 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -105,7 +105,9 @@ func CmdInputs(m *ice.Message, arg ...string) { case INDEX: m.Cmdy(COMMAND, mdb.SEARCH, COMMAND, ice.OptionFields(INDEX)) case ARGS: - m.Cmdy(m.Option(INDEX)) + if m.Cmdy(m.Option(INDEX), mdb.INPUTS, arg); m.Length() == 0 { + m.Cmdy(m.Option(INDEX)) + } } } func PodCmd(m *ice.Message, arg ...ice.Any) bool { diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 8dc2cfab..653165f0 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -177,9 +177,15 @@ func HashKey(m *ice.Message) string { return HashShort(m) } func HashShort(m *ice.Message) string { + if m.Option(SHORT) != "" { + return m.Option(SHORT) + } return kit.Select(HASH, Config(m, SHORT), Config(m, SHORT) != UNIQ) } func HashField(m *ice.Message) string { + if m.Option(FIELD) != "" { + return m.Option(FIELD) + } return kit.Select(HASH_FIELD, Config(m, FIELD)) // return kit.Select(HASH_FIELD, Config(m, FIELD), Config(m, FIELDS)) } @@ -210,7 +216,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message { } else { m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m)) } - m.Cmdy(SELECT, m.PrefixKey(), "", HASH, HashShort(m), arg, logs.FileLineMeta(-1)) + m.Cmdy(SELECT, m.PrefixKey(), m.Option(SUBKEY), HASH, HashShort(m), arg, logs.FileLineMeta(-1)) kit.If(Config(m, SORT), func(sort string) { m.Sort(sort) }) if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() { return m.StatusTimeCount() diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 858c41ba..bf910992 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -121,6 +121,8 @@ const ( RANDOM = "random" OFFEND = "offend" OFFSET = "offset" + SUBKEY = "subkey" + ORDER = "order" ICON = "icon" PAGE = "page" diff --git a/base/nfs/save.go b/base/nfs/save.go index 603b1dcc..5bcc191e 100644 --- a/base/nfs/save.go +++ b/base/nfs/save.go @@ -121,6 +121,11 @@ func Append(m *ice.Message, p string, cb ice.Any) { } } func Save(m *ice.Message, w io.Writer, s string, cb ice.Any) { + switch content := m.Optionv(CONTENT).(type) { + case io.Reader: + io.Copy(w, content) + return + } if n, e := fmt.Fprint(w, s); !m.Warn(e) { switch cb := cb.(type) { case func(int): diff --git a/base/web/route.go b/base/web/route.go index 0a7f7dbc..5e88172b 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -56,7 +56,7 @@ const ROUTE = "route" func init() { Index.MergeCommands(ice.Commands{ - ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel prunes", Help: "路由表", Actions: ice.MergeActions(ice.Actions{ + ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel monitor prunes", Help: "路由表", Actions: ice.MergeActions(ice.Actions{ ice.MAIN: {Help: "首页", Hand: func(m *ice.Message, arg ...string) { ctx.ProcessField(m, CHAT_IFRAME, m.MergePod(kit.Select(m.Option(SPACE), arg, 0)), arg...) }}, @@ -113,7 +113,9 @@ func init() { PushPodCmd(m, "", m.ActionKey()) m.Table(func(value ice.Maps) { kit.If(value[SPACE], func() { mdb.HashCreate(m.Spawn(), kit.Simple(value)) }) }) m.ProcessRefresh() - // m.StatusTimeCount() + }}, + "monitor": {Help: "监控", Hand: func(m *ice.Message, arg ...string) { + m.ProcessOpen(m.Cmdv(SPIDE, "monitor", CLIENT_URL)) }}, }, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) { if len(arg) > 1 { diff --git a/base/web/share.go b/base/web/share.go index 7460b821..26cba2ca 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -152,6 +152,8 @@ func ShareLocalFile(m *ice.Message, arg ...string) { } else if p := kit.Path(ice.USR_LOCAL_WORK, m.Option(ice.POD), p); nfs.Exists(m, p) { m.RenderDownload(p) return + } else { + m.Debug("what %v %v", p, nfs.Exists(m, p)) } pp := path.Join(ice.VAR_PROXY, m.Option(ice.POD), p) cache, size := time.Now().Add(-time.Hour*24), int64(0) diff --git a/base/web/space.go b/base/web/space.go index d1afc75f..79d8399f 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -127,7 +127,7 @@ func _space_exec(m *ice.Message, source, target []string, c *websocket.Conn) { } func _space_echo(m *ice.Message, source, target []string, c *websocket.Conn) { if m.Options(ice.MSG_SOURCE, source, ice.MSG_TARGET, target[1:]); !m.Warn(c.WriteMessage(1, []byte(m.FormatMeta()))) { - m.Log(tcp.SEND, "%v->%v %v %v", source, target, m.Detailv(), m.FormatsMeta(nil)) + // m.Log(tcp.SEND, "%v->%v %v %v", source, target, m.Detailv(), m.FormatsMeta(nil)) } } func _space_send(m *ice.Message, name string, arg ...string) (h string) { diff --git a/base/web/spide.go b/base/web/spide.go index cd0f32b4..2cc07681 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -258,16 +258,17 @@ func init() { m.Cmd("", mdb.CREATE, ice.OPS, kit.Select("http://127.0.0.1:9020", conf[cli.CTX_OPS])) m.Cmd("", mdb.CREATE, ice.DEV, kit.Select(kit.Select("https://contexts.com.cn", ice.Info.Make.Domain), conf[cli.CTX_DEV])) m.Cmd("", mdb.CREATE, ice.COM, kit.Select("https://contexts.com.cn", conf[cli.CTX_COM])) + m.Cmd("", mdb.CREATE, ice.HUB, kit.Select("https://repos.shylinux.com", conf[cli.CTX_HUB])) m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY])) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { - mdb.HashSelectValue(m, func(value ice.Map) { m.Push(kit.Select(ORIGIN, arg, 0), value[ORIGIN]) }) + mdb.HashSelectValue(m.Spawn(), func(value ice.Map) { m.Push(kit.Select(ORIGIN, arg, 0), kit.Value(value, CLIENT_ORIGIN)) }) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if mdb.IsSearchPreview(m, arg) { - m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.DEV, mdb.TEXT, mdb.HashSelectField(m, ice.DEV, CLIENT_ORIGIN)) - m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.COM, mdb.TEXT, mdb.HashSelectField(m, ice.COM, CLIENT_ORIGIN)) - m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.SHY, mdb.TEXT, mdb.HashSelectField(m, ice.SHY, CLIENT_ORIGIN)) + mdb.HashSelectValue(m.Spawn(), func(value ice.Map) { + m.PushSearch(mdb.TYPE, LINK, mdb.NAME, kit.Value(value, CLIENT_NAME), mdb.TEXT, kit.Value(value, CLIENT_ORIGIN), value) + }) } }}, mdb.CREATE: {Name: "create name link", Hand: func(m *ice.Message, arg ...string) { _spide_create(m, m.Option(mdb.NAME), m.Option(LINK)) }}, diff --git a/conf.go b/conf.go index 95eee5ea..99553b39 100644 --- a/conf.go +++ b/conf.go @@ -34,6 +34,7 @@ const ( MISC = "misc" SHY = "shy" + HUB = "hub" COM = "com" DEV = "dev" APP = "app" diff --git a/core/chat/header.go b/core/chat/header.go index acecb04a..ae0ae937 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -91,6 +91,7 @@ func init() { }, ctx.ConfAction(SSO, "")), Hand: func(m *ice.Message, arg ...string) { m.Option("language.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.LANGUAGE), nfs.FILE).Appendv(nfs.FILE)) m.Option("theme.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.THEME), nfs.FILE).Appendv(nfs.FILE)) + m.Option("spide.hub", m.Cmdv(web.SPIDE, ice.HUB, web.CLIENT_URL)) if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) { return } diff --git a/core/chat/iframe.go b/core/chat/iframe.go index 0f382c1d..9421eadc 100644 --- a/core/chat/iframe.go +++ b/core/chat/iframe.go @@ -50,9 +50,9 @@ func init() { switch arg[0] { case mdb.NAME: m.Push(arg[0], web.UserWeb(m).Host) - case mdb.LINK: + case mdb.LINK, ctx.ARGS: m.Push(arg[0], m.Option(ice.MSG_USERWEB)) - m.Copy(m.Cmd(web.SPIDE).CutTo("client.url", arg[0])) + m.Copy(m.Cmd(web.SPIDE).CutTo(web.CLIENT_URL, arg[0])) } } }}, diff --git a/misc/git/status.go b/misc/git/status.go index 48fdacd0..3a222d3a 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -89,6 +89,7 @@ func _status_list(m *ice.Message) (files, adds, dels int, last string) { } const ( + GITEA = "gitea" OAUTH = "oauth" DIFF = "diff" OPT = "opt" @@ -166,17 +167,18 @@ func init() { } m.Push(mdb.TEXT, strings.Join(text, ", ")) }}, + GITEA: {Help: "资源", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.Cmdv("web.spide", ice.HUB, web.CLIENT_URL)) }}, }, aaa.RoleAction(), web.DreamAction(), Prefix(REPOS), mdb.ImportantHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) > 0 && arg[0] == ctx.ACTION { m.Cmdy(REPOS, arg) } else if config, err := config.LoadConfig(config.GlobalScope); err == nil && config.User.Email == "" && mdb.Config(m, aaa.EMAIL) == "" { m.Action(CONFIGS).Echo("please config email and name. ").EchoButton(CONFIGS) } else if !nfs.Exists(m, ".git") { - m.Action("init").Echo("please init repos. ").EchoButton("init") + m.Action(INIT).Echo("please init repos. ").EchoButton(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, "oauth", CONFIGS) - m.Cmdy(code.PUBLISH, ice.CONTEXTS, "dev") + m.Cmdy(REPOS, STATUS).Action(PULL, PUSH, INSTEADOF, OAUTH, CONFIGS, GITEA) + m.Cmdy(code.PUBLISH, ice.CONTEXTS, ice.DEV) } else { m.Cmdy(REPOS, arg[0], MASTER, INDEX, m.Cmdv(REPOS, arg[0], MASTER, INDEX, nfs.FILE)) } diff --git a/option.go b/option.go index a082bf11..79427e0a 100644 --- a/option.go +++ b/option.go @@ -111,5 +111,7 @@ func (m *Message) ProcessHold(text ...Any) { m.Process(PROCESS_HOLD, text...) func (m *Message) ProcessBack() { m.Process(PROCESS_BACK) } func (m *Message) ProcessRich(arg ...Any) { m.Process(PROCESS_RICH, arg...) } func (m *Message) ProcessGrow(arg ...Any) { m.Process(PROCESS_GROW, arg...) } -func (m *Message) ProcessOpen(url string) { m.Process(PROCESS_OPEN, url) } -func (m *Message) ProcessClose() { m.Process(PROCESS_CLOSE) } +func (m *Message) ProcessOpen(url string) { + kit.If(url, func() { m.Process(PROCESS_OPEN, url) }) +} +func (m *Message) ProcessClose() { m.Process(PROCESS_CLOSE) }