diff --git a/base/mdb/search.go b/base/mdb/search.go index 4f0d36bf..01fe085d 100644 --- a/base/mdb/search.go +++ b/base/mdb/search.go @@ -31,7 +31,6 @@ func init() { for _, k := range strings.Split(arg[0], ",") { for _, kk := range strings.Split(arg[1], ",") { m.Richs(SEARCH, nil, k, func(key string, value map[string]interface{}) { - m.Debug("what %v --- %v %v ", k, kk, key) m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), SEARCH, k, kk, kit.Select("", arg, 2)) }) } diff --git a/base/ssh/scripts.go b/base/ssh/scripts.go index 5e05a826..f4f0d628 100644 --- a/base/ssh/scripts.go +++ b/base/ssh/scripts.go @@ -14,6 +14,7 @@ import ( "io" "os" "path" + "reflect" "strings" "time" ) @@ -22,10 +23,10 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) { switch arg := kit.Simple(args...); cmd { case ice.RENDER_VOID: case ice.RENDER_RESULT: - fmt.Fprintf(msg.O, msg.Result()) + fmt.Fprint(msg.O, msg.Result()) case ice.RENDER_QRCODE: - fmt.Fprintf(msg.O, msg.Cmdx(cli.PYTHON, "qrcode", kit.Format(args[0], args[1:]...))) + fmt.Fprint(msg.O, msg.Cmdx(cli.PYTHON, "qrcode", kit.Format(args[0], args[1:]...))) case ice.RENDER_DOWNLOAD: if f, e := os.Open(arg[0]); e == nil { @@ -43,8 +44,8 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) { args = append(args, "length:", len(res)) // 输出结果 - if fmt.Fprintf(msg.O, res); !strings.HasSuffix(res, "\n") { - fmt.Fprintf(msg.O, "\n") + if fmt.Fprint(msg.O, res); !strings.HasSuffix(res, "\n") { + fmt.Fprint(msg.O, "\n") } } } @@ -386,6 +387,18 @@ func init() { cb() } }}, + + "hi": {Name: "hi", Help: "hi", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + cb := func() { + + } + + t := reflect.TypeOf(cb) + v := reflect.ValueOf(cb) + m.Echo("what %#v", t.Kind()) + m.Echo("what %#v", t) + m.Echo("what %v", v) + }}, }, }) } diff --git a/base/web/space.go b/base/web/space.go index 654f7940..fd2087eb 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -151,7 +151,7 @@ func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *w } else if msg.Richs(SPACE, nil, target[0], func(key string, value map[string]interface{}) { if s, ok := value[tcp.SOCKET].(*websocket.Conn); ok { socket, source, target = s, source, target[1:] - _space_echo(msg, source, target, socket, target[0]) + _space_echo(msg, source, target, socket, kit.Select("", target)) return // 转发报文 } diff --git a/core/chat/chat.go b/core/chat/chat.go index 0f88124f..1f3a3767 100644 --- a/core/chat/chat.go +++ b/core/chat/chat.go @@ -13,6 +13,7 @@ const CHAT = "chat" var Index = &ice.Context{Name: CHAT, Help: "聊天中心", Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(mdb.SEARCH, mdb.CREATE, P_SEARCH, m.Prefix(P_SEARCH)) m.Cmd(mdb.SEARCH, mdb.CREATE, EMAIL, m.Prefix(EMAIL)) m.Load() m.Cmd(web.SERVE, aaa.WHITE, "header", "river", "action", "footer") diff --git a/core/chat/search.go b/core/chat/search.go index 63858d08..50e0ce34 100644 --- a/core/chat/search.go +++ b/core/chat/search.go @@ -2,22 +2,41 @@ package chat import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) -const SEARCHS = "searchs" +const P_SEARCH = "/search" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - SEARCHS: {Name: "searchs", Help: "搜索", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, + P_SEARCH: {Name: "/search", Help: "搜索", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, }, Commands: map[string]*ice.Command{ - "/search": {Name: "/search", Help: "搜索引擎", Action: map[string]*ice.Action{ + P_SEARCH: {Name: "/search", Help: "搜索引擎", Action: map[string]*ice.Action{ mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(m.Space(m.Option(POD)), mdb.RENDER, arg[1:]) }}, + mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { + if arg[0] != P_SEARCH && arg[0] != kit.MDB_FOREACH { + return + } + m.Richs(P_SEARCH, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { + if value = kit.GetMeta(value); arg[1] != "" && !kit.Contains(value[kit.MDB_NAME], arg[1]) { + return + } + m.PushSearch(kit.SSH_CMD, P_SEARCH, value) + }) + }}, + ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == "run" { + m.Cmdy(arg[1:]) + return + } + m.Cmdy(ctx.COMMAND, arg) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if kit.Contains(arg[1], ";") { arg = kit.Split(arg[1], ";", ";", ";") @@ -26,8 +45,8 @@ func init() { if m.Cmdy(m.Space(m.Option(POD)), mdb.SEARCH, arg); arg[1] == "" { return } - m.Cmd(mdb.INSERT, m.Prefix(SEARCHS), "", mdb.HASH, - "name", arg[1], "type", arg[0], "text", kit.Select("", arg, 2)) + m.Cmd(mdb.INSERT, m.Prefix(P_SEARCH), "", mdb.HASH, + kit.MDB_NAME, arg[1], kit.MDB_TYPE, arg[0], kit.MDB_TEXT, kit.Select("", arg, 2)) }}, }}) } diff --git a/core/team/task.go b/core/team/task.go index 9270c1e3..5e8166e5 100644 --- a/core/team/task.go +++ b/core/team/task.go @@ -107,6 +107,19 @@ func _task_inputs(m *ice.Message, field, value string) { m.Cmdy(mdb.INPUTS, TASK, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, field, value) } } +func _task_search(m *ice.Message, kind, name, text string) { + if kind != TASK && kind != kit.MDB_FOREACH { + return + } + + m.Cmd(mdb.SELECT, m.Prefix(TASK), "", mdb.ZONE, kit.MDB_FOREACH, func(key string, value map[string]interface{}, val map[string]interface{}) { + if name != "" && !kit.Contains(value[kit.MDB_NAME], name) { + return + } + m.PushSearch(kit.SSH_CMD, TASK, kit.MDB_TYPE, val[kit.MDB_ZONE], kit.MDB_NAME, kit.Format(value[kit.MDB_ID]), + kit.MDB_TEXT, kit.Format("%v:%v", value[kit.MDB_NAME], value[kit.MDB_TEXT]), value) + }) +} var TaskField = struct{ LEVEL, STATUS, SCORE, BEGIN_TIME, CLOSE_TIME string }{ LEVEL: "level", @@ -163,6 +176,9 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { _task_inputs(m, kit.Select("", arg, 0), kit.Select("", arg, 1)) }}, + mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { + _task_search(m, arg[0], arg[1], arg[2]) + }}, gdb.BEGIN: {Name: "begin", Help: "开始", Hand: func(m *ice.Message, arg ...string) { _task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), TaskField.STATUS, TaskStatus.PROCESS) diff --git a/core/team/team.go b/core/team/team.go index 6054b0e9..1cf5b084 100644 --- a/core/team/team.go +++ b/core/team/team.go @@ -2,6 +2,7 @@ package team import ( ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/web" ) @@ -9,7 +10,10 @@ const TEAM = "team" var Index = &ice.Context{Name: TEAM, Help: "团队中心", Commands: map[string]*ice.Command{ - ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(mdb.SEARCH, mdb.CREATE, TASK, m.Prefix(TASK)) + m.Load() + }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, }, } diff --git a/type.go b/type.go index 4e5d2718..ab8bf5aa 100644 --- a/type.go +++ b/type.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "reflect" "runtime" "sort" "strings" @@ -618,6 +619,17 @@ func (m *Message) Search(key string, cb interface{}) *Message { func (m *Message) _hand(arg ...interface{}) *Message { list := kit.Simple(arg...) + if len(arg) > 0 { + switch cb := arg[len(arg)-1]; cbs := cb.(type) { + case string: + default: + if reflect.Func == reflect.TypeOf(cbs).Kind() { + m.Optionv(list[0]+".cb", cbs) + list = list[:len(list)-1] + } + } + } + if len(list) == 0 && m.Hand == false { list = m.meta[MSG_DETAIL] }