1
0
forked from x/icebergs

add app_search

This commit is contained in:
shaoying 2020-04-18 14:48:21 +08:00
parent 87c4f3c998
commit 2b0d1f08d7
5 changed files with 143 additions and 32 deletions

View File

@ -136,6 +136,33 @@ func dir(m *ice.Message, root string, name string, level int, deep bool, dir_typ
}
}
}
func travel(m *ice.Message, root string, name string, cb func(name string)) {
if fs, e := ioutil.ReadDir(path.Join(root, name)); e != nil {
cb(name)
} else {
for _, f := range fs {
if f.Name() == "." || f.Name() == ".." {
continue
}
if strings.HasPrefix(f.Name(), ".") {
continue
}
p := path.Join(root, name, f.Name())
if f, e = os.Lstat(p); e != nil {
m.Log("info", "%s", e)
continue
} else if (f.Mode()&os.ModeSymlink) != 0 && f.IsDir() {
continue
}
if f.IsDir() {
travel(m, root, path.Join(name, f.Name()), cb)
} else {
cb(path.Join(name, f.Name()))
}
}
}
}
var Index = &ice.Context{Name: "nfs", Help: "存储模块",
Caches: map[string]*ice.Cache{},
@ -143,6 +170,22 @@ var Index = &ice.Context{Name: "nfs", Help: "存储模块",
"trash": {Name: "trash", Help: "trash", Value: kit.Data("path", "var/trash")},
},
Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(ice.APP_SEARCH, "add", "dir", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
travel(m, "./", "", func(name string) {
if strings.Contains(name, arg[0]) {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "dir")
m.Push("favor", "./")
m.Push("id", "")
m.Push("type", "file")
m.Push("name", path.Base(name))
m.Push("text", name)
}
})
}}))
}},
"dir": {Name: "dir", Help: "目录", List: kit.List(
kit.MDB_INPUT, "text", "name", "path", "action", "auto",
kit.MDB_INPUT, "button", "name", "查看",

View File

@ -515,6 +515,61 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Conf(ice.WEB_SERVE, "meta.volcanos.repos"), m.Conf(ice.WEB_SERVE, "meta.volcanos.branch"))
m.Conf(ice.WEB_FAVOR, "meta.template", favor_template)
m.Conf(ice.WEB_SHARE, "meta.template", share_template)
m.Cmd(ice.APP_SEARCH, "add", "favor", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option("cache.limit", -2)
wg := &sync.WaitGroup{}
m.Richs(ice.WEB_FAVOR, nil, "*", func(key string, val map[string]interface{}) {
favor := kit.Format(kit.Value(val, "meta.name"))
wg.Add(1)
m.Info("routine %v", favor)
m.Gos(m, func(m *ice.Message) {
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
if favor == arg[0] || value["type"] == arg[0] ||
strings.Contains(kit.Format(value["name"]), arg[0]) || strings.Contains(kit.Format(value["text"]), arg[0]) {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "favor")
m.Push("favor", favor)
m.Push("", value, []string{"id", "type", "name", "text"})
}
})
wg.Done()
})
})
wg.Wait()
}}))
m.Cmd(ice.APP_SEARCH, "add", "story", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(ice.WEB_STORY, "head", "*", func(key string, val map[string]interface{}) {
if val["story"] == arg[0] {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "story")
m.Push("favor", val["story"])
m.Push("id", val["list"])
m.Push("type", val["scene"])
m.Push("name", val["story"])
m.Push("text", val["count"])
}
})
}}))
m.Cmd(ice.APP_SEARCH, "add", "share", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option("cache.limit", -2)
m.Grows(ice.WEB_SHARE, nil, "", "", func(index int, value map[string]interface{}) {
if value["share"] == arg[0] || value["type"] == arg[0] ||
strings.Contains(kit.Format(value["name"]), arg[0]) || strings.Contains(kit.Format(value["text"]), arg[0]) {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "share")
m.Push("favor", value["type"])
m.Push("id", value["share"])
m.Push("type", value["type"])
m.Push("name", value["name"])
m.Push("text", value["text"])
}
})
}}))
}},
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(ice.WEB_SPIDE, ice.WEB_SERVE, ice.WEB_GROUP, ice.WEB_LABEL,
@ -794,7 +849,9 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
m.Push(key, value, []string{"time", "type", "name", "text"})
if m.Option(ice.MSG_USERUA) != "" {
m.Push("link", fmt.Sprintf(`<a target="_blank" href="%s?pod=%s">%s</a>`, m.Conf(ice.WEB_SHARE, "meta.domain"), value["name"], value["name"]))
m.Push("link", fmt.Sprintf(`<a target="_blank" href="%s?pod=%s">%s</a>`,
kit.Select(m.Conf(ice.WEB_SHARE, "meta.domain"), m.Option(ice.MSG_USERWEB)),
kit.Keys(m.Option(ice.MSG_USERPOD), value["name"]), value["name"]))
}
})
m.Sort("name")
@ -1119,27 +1176,6 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
return
})
return
case "search":
m.Option("cache.limit", -2)
wg := &sync.WaitGroup{}
m.Richs(ice.WEB_FAVOR, nil, "*", func(key string, val map[string]interface{}) {
favor := kit.Format(kit.Value(val, "meta.name"))
wg.Add(1)
m.Info("routine %v", favor)
m.Gos(m, func(m *ice.Message) {
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
if strings.Contains(favor, arg[1]) || strings.Contains(kit.Format(value["name"]), arg[1]) || strings.Contains(kit.Format(value["text"]), arg[1]) {
m.Push("pod", strings.Join(kit.Simple(m.Optionv("user.pod")), "."))
m.Push("favor", favor)
m.Push("", value, []string{"id", "type", "name", "text"})
}
})
wg.Done()
})
})
wg.Wait()
return
}
m.Option("favor", arg[0])

View File

@ -34,6 +34,7 @@ const ( // MSG
MSG_USERUA = "user.ua"
MSG_USERURL = "user.url"
MSG_USERPOD = "user.pod"
MSG_USERWEB = "user.web"
MSG_USERNICK = "user.nick"
MSG_USERNAME = "user.name"
MSG_USERROLE = "user.role"

View File

@ -4,6 +4,8 @@ import (
"github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/web"
"github.com/shylinux/toolkits"
"sync"
)
var Index = &ice.Context{Name: "chat", Help: "聊天中心",
@ -85,12 +87,14 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}),
"fe", "volcanos",
)},
"search": {Name: "search", Help: "search", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
},
Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load()
m.Watch(ice.SYSTEM_INIT, m.Prefix("init"))
m.Watch(ice.USER_CREATE, m.Prefix("auto"))
}},
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save("river")
@ -196,12 +200,32 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}
}},
"search": {Name: "search label=some word=启动流程 auto", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) < 2 {
m.Cmdy(ice.WEB_LABEL, arg)
return
"search": {Name: "search label kind word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] {
case "add":
if m.Richs("search", nil, arg[1], nil) == nil {
m.Rich("search", nil, kit.Data(kit.MDB_NAME, arg[1]))
}
m.Richs("search", nil, arg[1], func(key string, value map[string]interface{}) {
m.Grow("search", kit.Keys(kit.MDB_HASH, key), kit.Dict(
kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3:],
))
})
case "get":
wg := &sync.WaitGroup{}
m.Richs("search", nil, arg[1], func(key string, value map[string]interface{}) {
wg.Add(1)
m.Gos(m, func(m *ice.Message) {
m.Grows("search", kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
m.Cmdy(value[kit.MDB_TEXT], arg[2:])
})
wg.Done()
})
})
wg.Wait()
default:
m.Cmdy(ice.WEB_LABEL, arg[0], arg[1], "web.chat.search", "get", arg[2:])
}
m.Cmdy(ice.WEB_LABEL, arg[0], "*", "favor", "search", arg[1:])
}},
"commend": {Name: "commend label=some word=请求响应 auto", Help: "推荐引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) < 2 {

17
type.go
View File

@ -19,6 +19,7 @@ import (
"strconv"
"strings"
"sync"
"sync/atomic"
"time"
)
@ -56,7 +57,7 @@ type Context struct {
server Server
wg *sync.WaitGroup
id int
id int64
}
type Server interface {
Spawn(m *Message, c *Context, arg ...string) Server
@ -65,9 +66,8 @@ type Server interface {
Close(m *Message, arg ...string) bool
}
func (c *Context) ID() int {
c.id++
return c.id
func (c *Context) ID() int64 {
return atomic.AddInt64(&c.id, 1)
}
func (c *Context) Cap(key string, arg ...interface{}) string {
if len(arg) > 0 {
@ -314,7 +314,7 @@ func (m *Message) Formats(key string) string {
}
func (m *Message) Spawns(arg ...interface{}) *Message {
msg := m.Spawn(arg...)
msg.code = m.target.root.ID()
msg.code = int(m.target.root.ID())
m.messages = append(m.messages, msg)
return msg
}
@ -1573,6 +1573,13 @@ func (m *Message) Show(cmd string, arg ...string) bool {
return false
}
var count = int32(0)
func (m *Message) AddCmd(cmd *Command) string {
name := fmt.Sprintf("_cb_%d", atomic.AddInt32(&count, 1))
m.target.Commands[name] = cmd
return kit.Keys(m.target.Cap(CTX_FOLLOW), name)
}
func (m *Message) Cmdy(arg ...interface{}) *Message {
msg := m.Cmd(arg...)
m.Copy(msg)