From b01500308897263324ce8f265891c98152b4eee1 Mon Sep 17 00:00:00 2001 From: shaoying Date: Wed, 28 Jul 2021 08:22:22 +0800 Subject: [PATCH] opt chat --- base/cli/daemon.go | 27 ++++++++++++++-- base/mdb/hash.go | 31 +++++++++++++++++++ base/mdb/list.go | 2 ++ base/mdb/mdb.go | 2 -- base/tcp/host.go | 6 ++++ core/chat/action.go | 10 +++--- core/chat/files.go | 10 +++--- core/chat/header.go | 71 ++++++++++++++++++------------------------- core/chat/location.go | 19 ++---------- core/chat/meet.go | 16 ++-------- core/chat/paste.go | 19 ++---------- core/chat/river.go | 41 +++++++++++-------------- core/chat/scan.go | 19 ++---------- core/chat/search.go | 4 +-- core/mall/asset.go | 13 +++----- core/team/task.go | 24 +++------------ misc.go | 22 ++++++++++++++ 17 files changed, 161 insertions(+), 175 deletions(-) diff --git a/base/cli/daemon.go b/base/cli/daemon.go index ffe0292e..8db0a23e 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -7,6 +7,7 @@ import ( "strings" ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) @@ -66,15 +67,35 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) { }) } +func Inputs(m *ice.Message, field, value string) bool { + switch strings.TrimPrefix(field, "extra.") { + case POD: + m.Cmdy("route") + case CTX: + m.Cmdy(ctx.CONTEXT) + case CMD: + m.Cmdy(ctx.CONTEXT, kit.Select(m.Option(CTX), m.Option(kit.Keys("extra", CTX))), ctx.COMMAND) + case ARG: + + default: + return false + } + return true +} + const ( - PID = "pid" - PWD = "pwd" DIR = "dir" ENV = "env" + PID = "pid" + PWD = "pwd" + + POD = "pod" + CTX = "ctx" CMD = "cmd" - API = "api" ARG = "arg" + RUN = "run" + API = "api" RES = "res" ERR = "err" ) diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 9ff76359..18008dfc 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -139,3 +139,34 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) { } m.Sort(kit.MDB_COUNT, "int_r") } + +func HashAction(key string, fields ...string) map[string]*ice.Action { + list := map[string]*ice.Action{ + MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(MODIFY, m.Prefix(key), "", HASH, m.OptionSimple(kit.MDB_HASH), arg) + }}, + REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(DELETE, m.Prefix(key), "", HASH, m.OptionSimple(kit.MDB_HASH)) + }}, + EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(EXPORT, m.Prefix(key), "", HASH) + }}, + IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(IMPORT, m.Prefix(key), "", HASH) + }}, + INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INPUTS, m.Prefix(key), "", HASH, arg) + }}, + } + if len(fields) == 0 { + return list + } + + res := map[string]*ice.Action{} + for _, field := range fields { + res[field] = list[field] + } + return res +} + +const HASH = "hash" diff --git a/base/mdb/list.go b/base/mdb/list.go index 9e5b0fa9..33eefc95 100644 --- a/base/mdb/list.go +++ b/base/mdb/list.go @@ -129,3 +129,5 @@ func _list_inputs(m *ice.Message, prefix, chain string, field, value string) { } m.SortIntR(kit.MDB_COUNT) } + +const LIST = "list" diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 8b84edd5..cb1d2d20 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -140,8 +140,6 @@ const ( const ( DICT = "dict" META = "meta" - HASH = "hash" - LIST = "list" ZONE = "zone" ) const ( diff --git a/base/tcp/host.go b/base/tcp/host.go index 82545f11..bb95c4ea 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -59,6 +59,12 @@ func _islocalhost(m *ice.Message, ip string) (ok bool) { return false } func IsLocalHost(m *ice.Message, ip string) bool { return _islocalhost(m, ip) } +func ReplaceLocalhost(m *ice.Message, url string) string { + if strings.Contains(url, "://"+LOCALHOST) { + url = strings.Replace(url, "://"+LOCALHOST, "://"+m.Cmd(HOST, ice.OptionFields(IP)).Append(IP), 1) + } + return url +} const ( HOSTPORT = "hostport" diff --git a/core/chat/action.go b/core/chat/action.go index dbbc31ef..31d9771a 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -103,7 +103,7 @@ func _action_share(m *ice.Message, arg ...string) { func _action_list(m *ice.Message, river, storm string) { m.Option(ice.MSG_RIVER, river) m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) { - m.Cmdy(m.Space(kit.Select(m.Option(POD), value[POD])), ctx.COMMAND, kit.Keys(value[CTX], value[CMD])) + m.Cmdy(m.Space(kit.Select(m.Option(cli.POD), value[cli.POD])), ctx.COMMAND, kit.Keys(value[cli.CTX], value[cli.CMD])) }) m.SortInt(kit.MDB_ID) } @@ -114,8 +114,8 @@ func _action_show(m *ice.Message, river, storm, index string, arg ...string) { cmds := []string{index} prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) if m.Grows(RIVER, prefix, kit.MDB_ID, index, func(index int, value map[string]interface{}) { - if cmds = kit.Simple(kit.Keys(value[CTX], value[CMD])); kit.Format(value[POD]) != "" { - m.Option(POD, value[POD]) + if cmds = kit.Simple(kit.Keys(value[cli.CTX], value[cli.CMD])); kit.Format(value[cli.POD]) != "" { + m.Option(cli.POD, value[cli.POD]) } }) == nil && m.Warn(!m.Right(cmds), ice.ErrNotRight) { return @@ -127,9 +127,9 @@ func _action_show(m *ice.Message, river, storm, index string, arg ...string) { m.Cmdy(_action_proxy(m), cmds, arg) } func _action_proxy(m *ice.Message) (proxy []string) { - if p := m.Option(POD); p != "" { + if p := m.Option(cli.POD); p != "" { proxy = append(proxy, web.SPACE, p) - m.Option(POD, "") + m.Option(cli.POD, "") } return proxy } diff --git a/core/chat/files.go b/core/chat/files.go index c871a83d..19632258 100644 --- a/core/chat/files.go +++ b/core/chat/files.go @@ -2,6 +2,7 @@ package chat import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" @@ -17,19 +18,16 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - FILES: {Name: "files hash auto upload", Help: "文件夹", Action: map[string]*ice.Action{ + FILES: {Name: "files hash auto upload", Help: "文件夹", Action: ice.MergeAction(map[string]*ice.Action{ web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)) m.Cmdy(mdb.INSERT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_TYPE, kit.Ext(up[1]), kit.MDB_NAME, up[1], kit.MDB_SIZE, up[2], kit.MDB_DATA, up[0]) }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(FILES), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction(FILES)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), m.Conf(FILES, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, arg) m.Table(func(index int, value map[string]string, head []string) { - link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], "pod", m.Option(ice.MSG_USERPOD)) + link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], cli.POD, m.Option(ice.MSG_USERPOD)) if m.PushDownload(kit.MDB_LINK, value[kit.MDB_NAME], link); len(arg) > 0 && kit.ExtIsImage(value[kit.MDB_NAME]) { m.PushImages(kit.MDB_IMAGE, link) } diff --git a/core/chat/header.go b/core/chat/header.go index ac465c98..5993e6d8 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -1,10 +1,9 @@ package chat import ( - "strings" - ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" + "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/tcp" "github.com/shylinux/icebergs/base/web" @@ -12,7 +11,7 @@ import ( kit "github.com/shylinux/toolkits" ) -func _header_check(m *ice.Message) { +func _header_check(m *ice.Message, arg ...string) { if m.Option(web.SHARE) != "" { switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) { case web.LOGIN: // 扫码登录 @@ -35,20 +34,14 @@ func _header_share(m *ice.Message, arg ...string) { share := m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg) m.Option(kit.MDB_LINK, kit.MergeURL(m.Option(ice.MSG_USERWEB), web.SHARE, share)) } - - link := m.Option(kit.MDB_LINK) - if strings.Contains(link, tcp.LOCALHOST) { - link = strings.Replace(link, tcp.LOCALHOST, m.Cmd(tcp.HOST, ice.OptionFields(tcp.IP)).Append(tcp.IP), 1) - } + link := tcp.ReplaceLocalhost(m, m.Option(kit.MDB_LINK)) m.Set(kit.MDB_NAME, kit.MDB_TEXT) m.PushQRCode(kit.MDB_TEXT, link) m.Push(kit.MDB_NAME, link) } func _header_grant(m *ice.Message, arg ...string) { - if pod := m.Option(kit.SSH_POD); pod != "" { - m.Option(kit.SSH_POD, "") - m.Cmd(web.SPACE, pod, m.Prefix(P_HEADER), kit.MDB_ACTION, GRANT, arg) + if m.PodCmd(m.Prefix("/header"), ctx.ACTION, GRANT, arg) { return // 下发命令 } @@ -58,20 +51,16 @@ func _header_grant(m *ice.Message, arg ...string) { } func _header_users(m *ice.Message, key string, arg ...string) { m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) - m.Cmdy("aaa.user", kit.MDB_ACTION, mdb.MODIFY, key, m.Option(key, arg[0])) + m.Cmdy("aaa.user", ctx.ACTION, mdb.MODIFY, key, m.Option(key, arg[0])) } const ( TITLE = "title" - CHECK = "check" - LOGIN = "login" - GRANT = "grant" - SHARE = "share" AGENT = "agent" - - LOGOUT = "logout" + CHECK = "check" + SHARE = "share" + GRANT = "grant" ) -const P_HEADER = "/header" const HEADER = "header" func init() { @@ -80,41 +69,41 @@ func init() { HEADER: {Name: HEADER, Help: "标题栏", Value: kit.Data(TITLE, "github.com/shylinux/contexts")}, }, Commands: map[string]*ice.Command{ - P_HEADER: {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ - CHECK: {Name: "check", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { - _header_check(m) - m.Echo(m.Option(ice.MSG_USERNAME)) + "/header": {Name: "/header", Help: "标题栏", Action: map[string]*ice.Action{ + AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("web.chat.wx.access", "config") }}, - LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) { + CHECK: {Name: "check", Help: "登录检查", Hand: func(m *ice.Message, arg ...string) { + _header_check(m, arg...) + }}, + SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) { + _header_share(m, arg...) + }}, + GRANT: {Name: "grant space", Help: "扫码授权", Hand: func(m *ice.Message, arg ...string) { + _header_grant(m, arg...) + }}, + + aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) { if aaa.UserLogin(m, arg[0], arg[1]) { web.RenderCookie(m, aaa.SessCreate(m, arg[0])) } m.Echo(m.Option(ice.MSG_USERNAME)) }}, - GRANT: {Name: "grant space", Help: "扫码授权", Hand: func(m *ice.Message, arg ...string) { - _header_grant(m, arg...) - }}, - SHARE: {Name: "share type", Help: "扫码登录", Hand: func(m *ice.Message, arg ...string) { - _header_share(m, arg...) - }}, - AGENT: {Name: "agent", Help: "应用宿主", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("web.chat.wx.access", "config") - }}, - LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) { + aaa.LOGOUT: {Name: "logout", Help: "退出登录", Hand: func(m *ice.Message, arg ...string) { m.Cmd(aaa.SESS, mdb.REMOVE, ice.OptionHash(m.Option(ice.MSG_SESSID))) }}, - code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.WEBPACK, mdb.CREATE, kit.MDB_NAME, m.Option(kit.MDB_NAME)) - }}, - aaa.BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { - _header_users(m, aaa.BACKGROUND, arg...) + aaa.AVATAR: {Name: "avatar", Help: "头像图片", Hand: func(m *ice.Message, arg ...string) { + _header_users(m, aaa.AVATAR, arg...) }}, aaa.USERNICK: {Name: "usernick", Help: "用户昵称", Hand: func(m *ice.Message, arg ...string) { _header_users(m, aaa.USERNICK, arg...) }}, - aaa.AVATAR: {Name: "avatar", Help: "头像图片", Hand: func(m *ice.Message, arg ...string) { - _header_users(m, aaa.AVATAR, arg...) + aaa.BACKGROUND: {Name: "background", Help: "背景图片", Hand: func(m *ice.Message, arg ...string) { + _header_users(m, aaa.BACKGROUND, arg...) + }}, + code.WEBPACK: {Name: "webpack", Help: "网页打包", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { user := m.Cmd("aaa.user", m.Option(ice.MSG_USERNAME)) diff --git a/core/chat/location.go b/core/chat/location.go index e96e5770..8f2293af 100644 --- a/core/chat/location.go +++ b/core/chat/location.go @@ -40,7 +40,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - LOCATION: {Name: "location hash auto getLocation", Help: "地理位置", Action: map[string]*ice.Action{ + LOCATION: {Name: "location hash auto getLocation", Help: "地理位置", Action: ice.MergeAction(map[string]*ice.Action{ OPENLOCATION: {Name: "openLocation", Help: "地图", Hand: func(m *ice.Message, arg ...string) {}}, GETLOCATION: {Name: "getLocation", Help: "打卡", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(LOCATION), "", mdb.HASH, arg) @@ -48,22 +48,7 @@ func init() { mdb.CREATE: {Name: "create type=text name text latitude longitude", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(LOCATION), "", mdb.HASH, arg) }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(LOCATION), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(LOCATION), "", mdb.HASH, m.OptionSimple(kit.MDB_TEXT)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(LOCATION), "", mdb.HASH) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(LOCATION), "", mdb.HASH) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INPUTS, m.Prefix(LOCATION), "", mdb.HASH, arg) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction(LOCATION)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), m.Conf(LOCATION, kit.META_FIELD)) m.Cmdy(mdb.SELECT, m.Prefix(LOCATION), "", mdb.HASH, kit.MDB_HASH, arg) m.PushAction(OPENLOCATION, mdb.REMOVE) diff --git a/core/chat/meet.go b/core/chat/meet.go index 9777131d..76a3ed5f 100644 --- a/core/chat/meet.go +++ b/core/chat/meet.go @@ -22,23 +22,11 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, - MISS: {Name: "miss name auto create", Help: "资料", Meta: kit.Dict("_trans", kit.Dict("name", "姓名")), Action: map[string]*ice.Action{ + MISS: {Name: "miss name auto create", Help: "资料", Meta: kit.Dict("_trans", kit.Dict("name", "姓名")), Action: ice.MergeAction(map[string]*ice.Action{ mdb.CREATE: {Name: "create name 照片 性别 年龄 身高 体重 籍贯 户口 学历 学校 职业 公司 年薪 资产 家境", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(MISS), "", mdb.HASH, arg) }}, - mdb.MODIFY: {Name: "modify key value", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(MISS), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(MISS), "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(MISS), "", mdb.HASH) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(MISS), "", mdb.HASH) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction(MISS)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), m.Conf(MISS, kit.META_FIELD)) m.Cmd(mdb.SELECT, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, arg).Table(func(index int, value map[string]string, head []string) { value["照片"] = kit.Format(``, value["照片"], kit.Select("100", "400", m.Option(mdb.FIELDS) == mdb.DETAIL)) diff --git a/core/chat/paste.go b/core/chat/paste.go index 7c026307..22395f9a 100644 --- a/core/chat/paste.go +++ b/core/chat/paste.go @@ -16,7 +16,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴板", Action: map[string]*ice.Action{ + PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴板", Action: ice.MergeAction(map[string]*ice.Action{ "getClipboardData": {Name: "getClipboardData", Help: "粘贴", Hand: func(m *ice.Message, arg ...string) { _trans(arg, map[string]string{"data": "text"}) m.Cmdy(mdb.INSERT, m.Prefix(PASTE), "", mdb.HASH, arg) @@ -25,22 +25,7 @@ func init() { _trans(arg, map[string]string{"data": "text"}) m.Cmdy(mdb.INSERT, m.Prefix(PASTE), "", mdb.HASH, arg) }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(PASTE), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(PASTE), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(PASTE), "", mdb.HASH) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(PASTE), "", mdb.HASH) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INPUTS, m.Prefix(PASTE), "", mdb.HASH, arg) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction(PASTE)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), m.Conf(PASTE, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, cmd, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 { m.PushScript("script", m.Append(kit.MDB_TEXT)) diff --git a/core/chat/river.go b/core/chat/river.go index f2735b4d..c33b3605 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -3,6 +3,7 @@ package chat import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/tcp" @@ -48,19 +49,13 @@ func _river_list(m *ice.Message) { }) } func _river_proxy(m *ice.Message, pod string) (proxy []string) { - if p := kit.Select(m.Option(POD), pod); p != "" { + if p := kit.Select(m.Option(cli.POD), pod); p != "" { proxy = append(proxy, web.SPACE, p) - m.Option(POD, "") + m.Option(cli.POD, "") } return proxy } -const ( - POD = "pod" - CTX = "ctx" - CMD = "cmd" - ARG = "arg" -) const ( INFO = "info" AUTH = "auth" @@ -178,9 +173,9 @@ func init() { m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg") msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID)) - cmd := kit.Keys(msg.Append(CTX), msg.Append(CMD)) + cmd := kit.Keys(msg.Append(cli.CTX), msg.Append(cli.CMD)) _action_domain(m, cmd, m.Option(kit.MDB_HASH)) - m.Cmdy(_river_proxy(msg, msg.Append(POD)), cmd, mdb.EXPORT) + m.Cmdy(_river_proxy(msg, msg.Append(cli.POD)), cmd, mdb.EXPORT) } }}, mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { @@ -188,9 +183,9 @@ func init() { m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg") msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID)) - cmd := kit.Keys(msg.Append(CTX), msg.Append(CMD)) + cmd := kit.Keys(msg.Append(cli.CTX), msg.Append(cli.CMD)) _action_domain(m, cmd, m.Option(kit.MDB_HASH)) - m.Cmdy(_river_proxy(msg, msg.Append(POD)), cmd, mdb.IMPORT) + m.Cmdy(_river_proxy(msg, msg.Append(cli.POD)), cmd, mdb.IMPORT) } }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { @@ -200,16 +195,16 @@ func init() { m.Push(kit.MDB_HASH, value[kit.MDB_HASH]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) }) - case POD: + case cli.POD: m.Cmdy(web.ROUTE) - case CTX: + case cli.CTX: m.Cmd(ctx.CONTEXT, "web").Table(func(index int, value map[string]string, head []string) { - m.Push(CTX, kit.Keys(kit.Select("", value["ups"], value["ups"] != "shy"), value[kit.MDB_NAME])) + m.Push(cli.CTX, kit.Keys(kit.Select("", value["ups"], value["ups"] != "shy"), value[kit.MDB_NAME])) m.Push(kit.MDB_HELP, value[kit.MDB_HELP]) }) - case CMD, kit.MDB_HELP: - m.Cmd(ctx.CONTEXT, m.Option(CTX), ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { - m.Push(CMD, value[kit.MDB_KEY]) + case cli.CMD, kit.MDB_HELP: + m.Cmd(ctx.CONTEXT, m.Option(cli.CTX), ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { + m.Push(cli.CMD, value[kit.MDB_KEY]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_HELP, value[kit.MDB_HELP]) }) @@ -226,12 +221,12 @@ func init() { m.Option(mdb.FIELDS, "time,id,pod,ctx,cmd,arg,display,style") msg := m.Cmd(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, kit.Select("", arg, 1)) - if len(msg.Appendv(CMD)) == 0 && len(arg) > 1 { - msg.Push(CMD, arg[1]) + if len(msg.Appendv(cli.CMD)) == 0 && len(arg) > 1 { + msg.Push(cli.CMD, arg[1]) } if len(arg) > 2 && arg[2] == "run" { - m.Cmdy(_river_proxy(m, msg.Append(POD)), kit.Keys(msg.Append(CTX), msg.Append(CMD)), arg[3:]) + m.Cmdy(_river_proxy(m, msg.Append(cli.POD)), kit.Keys(msg.Append(cli.CTX), msg.Append(cli.CMD)), arg[3:]) return // 执行命令 } if m.Copy(msg); len(arg) < 2 { @@ -243,7 +238,7 @@ func init() { // 命令插件 m.ProcessField(arg[0], arg[1], "run") m.Table(func(index int, value map[string]string, head []string) { - m.Cmdy(web.SPACE, value[POD], ctx.CONTEXT, value[CTX], ctx.COMMAND, value[CMD]) + m.Cmdy(web.SPACE, value[cli.POD], ctx.CONTEXT, value[cli.CTX], ctx.COMMAND, value[cli.CMD]) }) }}, USER: {Name: "user username auto insert invite", Help: "用户", Action: map[string]*ice.Action{ @@ -290,7 +285,7 @@ func init() { kit.Fetch(value, func(index int, value string) { m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { - m.Cmd(TOOL, mdb.INSERT, kit.MDB_HASH, h, CTX, s.Cap(ice.CTX_FOLLOW), CMD, key, kit.MDB_HELP, cmd.Help) + m.Cmd(TOOL, mdb.INSERT, kit.MDB_HASH, h, cli.CTX, s.Cap(ice.CTX_FOLLOW), cli.CMD, key, kit.MDB_HELP, cmd.Help) }) }) }) diff --git a/core/chat/scan.go b/core/chat/scan.go index f537995e..111a823f 100644 --- a/core/chat/scan.go +++ b/core/chat/scan.go @@ -16,7 +16,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "二维码", Action: map[string]*ice.Action{ + SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "二维码", Action: ice.MergeAction(map[string]*ice.Action{ "scanQRCode0": {Name: "create", Help: "本机扫码", Hand: func(m *ice.Message, arg ...string) {}}, "scanQRCode": {Name: "create", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(SCAN), "", mdb.HASH, arg) @@ -24,22 +24,7 @@ func init() { mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.INSERT, m.Prefix(SCAN), "", mdb.HASH, arg) }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.MODIFY, m.Prefix(SCAN), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, m.Prefix(SCAN), "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) - }}, - mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.EXPORT, m.Prefix(SCAN), "", mdb.HASH) - }}, - mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.IMPORT, m.Prefix(SCAN), "", mdb.HASH) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INPUTS, m.Prefix(SCAN), "", mdb.HASH, arg) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction(SCAN)), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg), m.Conf(SCAN, kit.META_FIELD)) if m.Cmdy(mdb.SELECT, m.Prefix(SCAN), "", mdb.HASH, kit.MDB_HASH, arg); len(arg) > 0 { m.PushScript("script", m.Append(kit.MDB_TEXT)) diff --git a/core/chat/search.go b/core/chat/search.go index d31efa84..03da1b46 100644 --- a/core/chat/search.go +++ b/core/chat/search.go @@ -29,7 +29,7 @@ func init() { }) }}, mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(m.Space(m.Option(POD)), mdb.RENDER, arg[1:]) + m.Cmdy(m.Space(m.Option(cli.POD)), mdb.RENDER, arg[1:]) }}, ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(ctx.COMMAND, arg) @@ -41,7 +41,7 @@ func init() { if kit.Contains(arg[1], ";") { arg = kit.Split(arg[1], ";", ";", ";") } - if m.Cmdy(m.Space(m.Option(POD)), mdb.SEARCH, arg); arg[1] == "" { + if m.Cmdy(m.Space(m.Option(cli.POD)), mdb.SEARCH, arg); arg[1] == "" { return } m.Cmd(mdb.INSERT, m.Prefix(P_SEARCH), "", mdb.HASH, diff --git a/core/mall/asset.go b/core/mall/asset.go index 5e66061b..2634bcb1 100644 --- a/core/mall/asset.go +++ b/core/mall/asset.go @@ -7,7 +7,6 @@ import ( "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" ) @@ -51,15 +50,11 @@ func _asset_insert(m *ice.Message, account string, arg ...string) { m.Cmdy(mdb.MODIFY, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount) } func _asset_inputs(m *ice.Message, field, value string) { - switch strings.TrimPrefix(field, "extra.") { - case "pod": - m.Cmdy(web.ROUTE) - case "ctx": - m.Cmdy(ctx.CONTEXT) - case "cmd": - m.Cmdy(ctx.CONTEXT, kit.Select(m.Option("ctx"), m.Option("extra.ctx")), ctx.COMMAND) - case "arg": + if cli.Inputs(m, field, value) { + return + } + switch strings.TrimPrefix(field, "extra.") { case ACCOUNT, FROM, TO: m.Cmdy(mdb.INPUTS, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, value) default: diff --git a/core/team/task.go b/core/team/task.go index 0bbf6e8e..0e6a4a19 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -5,9 +5,8 @@ import ( "time" ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/ctx" + "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" ) @@ -74,24 +73,11 @@ func _task_modify(m *ice.Message, field, value string, arg ...string) { m.Cmdy(mdb.MODIFY, m.Prefix(TASK), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), field, value, arg) } func _task_inputs(m *ice.Message, field, value string) { - switch strings.TrimPrefix(field, "extra.") { - case "pod": - m.Cmd(web.SPACE).Table(func(index int, value map[string]string, head []string) { - m.Push(field, value[kit.MDB_NAME]) - m.Push("", value, []string{kit.MDB_TYPE}) - }) - case "ctx": - m.Cmd(m.Space(m.Option("extra.pod")), ctx.CONTEXT).Table(func(index int, value map[string]string, head []string) { - m.Push(field, value[kit.MDB_NAME]) - m.Push("", value, []string{kit.MDB_HELP}) - }) - case "cmd": - m.Cmd(m.Space(m.Option("extra.pod")), ctx.CONTEXT, m.Option("extra.ctx"), ctx.COMMAND).Table(func(index int, value map[string]string, head []string) { - m.Push(field, value[kit.MDB_KEY]) - m.Push("", value, []string{kit.MDB_HELP}) - }) - case "arg": + if cli.Inputs(m, field, value) { + return + } + switch strings.TrimPrefix(field, "extra.") { case kit.MDB_ZONE: m.Cmdy(mdb.INPUTS, m.Prefix(TASK), "", mdb.HASH, field, value) default: diff --git a/misc.go b/misc.go index 8a1f82ad..04eebb4b 100644 --- a/misc.go +++ b/misc.go @@ -577,3 +577,25 @@ func (m *Message) OptionTemplate() string { }) return strings.Join(res, " ") } +func (m *Message) PodCmd(arg ...interface{}) bool { + if pod := m.Option(kit.SSH_POD); pod != "" { + m.Option(kit.SSH_POD, "") + m.Cmd(append([]interface{}{"space", pod}, arg...)) + return true + } + return false +} + +func MergeAction(list ...map[string]*Action) map[string]*Action { + if len(list) == 0 { + return nil + } + for _, item := range list[1:] { + for k, v := range item { + if _, ok := list[0][k]; !ok { + list[0][k] = v + } + } + } + return list[0] +}