1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00

opt search

This commit is contained in:
shaoying 2021-01-12 20:15:07 +08:00
parent 3c0f0b7890
commit baff30a214
8 changed files with 76 additions and 12 deletions

View File

@ -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))
})
}

View File

@ -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)
}},
},
})
}

View File

@ -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 // 转发报文
}

View File

@ -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")

View File

@ -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))
}},
}})
}

View File

@ -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)

View File

@ -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() }},
},
}

12
type.go
View File

@ -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]
}