mirror of
https://shylinux.com/x/icebergs
synced 2025-06-26 18:37:29 +08:00
opt chrome
This commit is contained in:
parent
ea23534857
commit
c43212865a
@ -109,7 +109,7 @@ func init() {
|
|||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
USER: {Name: "user username auto create", Help: "用户", Action: ice.MergeAction(map[string]*ice.Action{
|
USER: {Name: "user username auto create", Help: "用户", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, USER, m.PrefixKey())
|
m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
UserRoot(ice.Pulse)
|
UserRoot(ice.Pulse)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
@ -37,7 +38,7 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
|||||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, ERROR, ERROR, e)
|
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, ERROR, ERROR, e)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), kit.MDB_ARGS, cmd.Args)
|
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), ctx.ARGS, cmd.Args)
|
||||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, STOP)
|
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, STOP)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +78,7 @@ const (
|
|||||||
BENCH = "bench"
|
BENCH = "bench"
|
||||||
PPROF = "pprof"
|
PPROF = "pprof"
|
||||||
|
|
||||||
|
TIMEOUT = "timeout"
|
||||||
STATUS = "status"
|
STATUS = "status"
|
||||||
ERROR = "error"
|
ERROR = "error"
|
||||||
START = "start"
|
START = "start"
|
||||||
|
@ -112,6 +112,7 @@ const (
|
|||||||
LIGHT = 127
|
LIGHT = 127
|
||||||
)
|
)
|
||||||
const (
|
const (
|
||||||
|
COLOR = "color"
|
||||||
BLACK = "black"
|
BLACK = "black"
|
||||||
RED = "red"
|
RED = "red"
|
||||||
GREEN = "green"
|
GREEN = "green"
|
||||||
|
@ -53,8 +53,8 @@ func _runtime_init(m *ice.Message) {
|
|||||||
ice.Info.UserName = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME))
|
ice.Info.UserName = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME))
|
||||||
|
|
||||||
// 启动次数
|
// 启动次数
|
||||||
count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT))) + 1
|
count := kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT))) + 1
|
||||||
m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT), count)
|
m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT), count)
|
||||||
|
|
||||||
// 节点信息
|
// 节点信息
|
||||||
m.Conf(RUNTIME, kit.Keys(NODE, mdb.TIME), m.Time())
|
m.Conf(RUNTIME, kit.Keys(NODE, mdb.TIME), m.Time())
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
@ -69,7 +70,7 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) {
|
|||||||
|
|
||||||
// 执行命令
|
// 执行命令
|
||||||
if e := cmd.Run(); !m.Warn(e, ice.ErrNotFound, cmd.Args) {
|
if e := cmd.Run(); !m.Warn(e, ice.ErrNotFound, cmd.Args) {
|
||||||
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), kit.MDB_ARGS, cmd.Args)
|
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), ctx.ARGS, cmd.Args)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Push(mdb.TIME, m.Time())
|
m.Push(mdb.TIME, m.Time())
|
||||||
|
@ -15,21 +15,21 @@ func _command_list(m *ice.Message, name string) {
|
|||||||
continue // 内部命令
|
continue // 内部命令
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Push(kit.MDB_KEY, k)
|
m.Push(mdb.KEY, k)
|
||||||
m.Push(kit.MDB_NAME, v.Name)
|
m.Push(mdb.NAME, v.Name)
|
||||||
m.Push(kit.MDB_HELP, v.Help)
|
m.Push(mdb.HELP, v.Help)
|
||||||
}
|
}
|
||||||
m.Sort(kit.MDB_KEY)
|
m.Sort(mdb.KEY)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 命令详情
|
// 命令详情
|
||||||
m.Spawn(m.Source()).Search(name, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
|
m.Spawn(m.Source()).Search(name, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
|
||||||
m.Push(kit.MDB_INDEX, kit.Keys(s.Cap(ice.CTX_FOLLOW), key))
|
m.Push(mdb.INDEX, kit.Keys(s.Cap(ice.CTX_FOLLOW), key))
|
||||||
m.Push(kit.MDB_NAME, kit.Format(cmd.Name))
|
m.Push(mdb.NAME, kit.Format(cmd.Name))
|
||||||
m.Push(kit.MDB_HELP, kit.Format(cmd.Help))
|
m.Push(mdb.HELP, kit.Format(cmd.Help))
|
||||||
m.Push(kit.MDB_META, kit.Format(cmd.Meta))
|
m.Push(mdb.META, kit.Format(cmd.Meta))
|
||||||
m.Push(kit.MDB_LIST, kit.Format(cmd.List))
|
m.Push(mdb.LIST, kit.Format(cmd.List))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _command_search(m *ice.Message, kind, name, text string) {
|
func _command_search(m *ice.Message, kind, name, text string) {
|
||||||
@ -65,6 +65,8 @@ func CmdAction(fields ...string) map[string]*ice.Action {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
ACTION = "action"
|
ACTION = "action"
|
||||||
|
INDEX = "index"
|
||||||
|
ARGS = "args"
|
||||||
)
|
)
|
||||||
const COMMAND = "command"
|
const COMMAND = "command"
|
||||||
|
|
||||||
@ -72,7 +74,7 @@ func init() {
|
|||||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||||
COMMAND: {Name: "command key auto", Help: "命令", Action: map[string]*ice.Action{
|
COMMAND: {Name: "command key auto", Help: "命令", Action: map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, COMMAND, m.PrefixKey())
|
m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == COMMAND || arg[1] != "" {
|
if arg[0] == COMMAND || arg[1] != "" {
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,10 +13,10 @@ func _context_list(m *ice.Message, sub *ice.Context, name string) {
|
|||||||
if name != "" && name != ice.ICE && !strings.HasPrefix(s.Cap(ice.CTX_FOLLOW), name+ice.PT) {
|
if name != "" && name != ice.ICE && !strings.HasPrefix(s.Cap(ice.CTX_FOLLOW), name+ice.PT) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Push(kit.MDB_NAME, s.Cap(ice.CTX_FOLLOW))
|
m.Push(mdb.NAME, s.Cap(ice.CTX_FOLLOW))
|
||||||
m.Push(kit.MDB_STATUS, s.Cap(ice.CTX_STATUS))
|
m.Push(mdb.STATUS, s.Cap(ice.CTX_STATUS))
|
||||||
m.Push(kit.MDB_STREAM, s.Cap(ice.CTX_STREAM))
|
m.Push(mdb.STREAM, s.Cap(ice.CTX_STREAM))
|
||||||
m.Push(kit.MDB_HELP, s.Help)
|
m.Push(mdb.HELP, s.Help)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func Inputs(m *ice.Message, field string) bool {
|
func Inputs(m *ice.Message, field string) bool {
|
||||||
@ -25,7 +26,7 @@ func Inputs(m *ice.Message, field string) bool {
|
|||||||
case ice.CTX:
|
case ice.CTX:
|
||||||
m.Cmdy(CONTEXT)
|
m.Cmdy(CONTEXT)
|
||||||
case ice.CMD:
|
case ice.CMD:
|
||||||
m.Cmdy(CONTEXT, kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(kit.MDB_EXTRA, ice.CTX))), COMMAND)
|
m.Cmdy(CONTEXT, kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(mdb.EXTRA, ice.CTX))), COMMAND)
|
||||||
case ice.ARG:
|
case ice.ARG:
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -21,7 +21,7 @@ const EVENT = "event"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
EVENT: {Name: EVENT, Help: "事件流", Value: kit.Data(
|
EVENT: {Name: EVENT, Help: "事件流", Value: kit.Data(
|
||||||
kit.MDB_SHORT, EVENT, kit.MDB_FIELD, "time,id,cmd",
|
mdb.SHORT, EVENT, mdb.FIELD, "time,id,cmd",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
EVENT: {Name: "event event id auto listen", Help: "事件流", Action: ice.MergeAction(map[string]*ice.Action{
|
EVENT: {Name: "event event id auto listen", Help: "事件流", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
@ -14,15 +14,15 @@ const ROUTINE = "routine"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
ROUTINE: {Name: ROUTINE, Help: "协程池", Value: kit.Data(
|
ROUTINE: {Name: ROUTINE, Help: "协程池", Value: kit.Data(
|
||||||
kit.MDB_SHORT, "time,hash,status,fileline",
|
mdb.SHORT, "time,hash,status,fileline",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ROUTINE: {Name: "routine hash auto prunes", Help: "协程池", Action: ice.MergeAction(map[string]*ice.Action{
|
ROUTINE: {Name: "routine hash auto prunes", Help: "协程池", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create fileline status", Help: "创建"},
|
mdb.CREATE: {Name: "create fileline status", Help: "创建"},
|
||||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.OptionFields(m.Config(kit.MDB_SHORT))
|
m.OptionFields(m.Config(mdb.SHORT))
|
||||||
m.Cmdy(mdb.PRUNES, ROUTINE, "", mdb.HASH, kit.MDB_STATUS, cli.STOP)
|
m.Cmdy(mdb.PRUNES, ROUTINE, "", mdb.HASH, cli.STATUS, cli.STOP)
|
||||||
m.Cmdy(mdb.PRUNES, ROUTINE, "", mdb.HASH, kit.MDB_STATUS, cli.ERROR)
|
m.Cmdy(mdb.PRUNES, ROUTINE, "", mdb.HASH, cli.STATUS, cli.ERROR)
|
||||||
}},
|
}},
|
||||||
"inner": {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
"inner": {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||||
ls := kit.Split(m.Option("fileline"), ":")
|
ls := kit.Split(m.Option("fileline"), ":")
|
||||||
|
@ -47,7 +47,7 @@ const SIGNAL = "signal"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SIGNAL: {Name: SIGNAL, Help: "信号器", Value: kit.Data(
|
SIGNAL: {Name: SIGNAL, Help: "信号器", Value: kit.Data(
|
||||||
kit.MDB_SHORT, SIGNAL, kit.MDB_FIELD, "time,signal,name,cmd",
|
mdb.SHORT, SIGNAL, mdb.FIELD, "time,signal,name,cmd",
|
||||||
nfs.PATH, path.Join(ice.VAR_RUN, "ice.pid"),
|
nfs.PATH, path.Join(ice.VAR_RUN, "ice.pid"),
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
@ -58,8 +58,8 @@ func init() {
|
|||||||
m.Cmd(nfs.SAVE, kit.Select(m.Conf(SIGNAL, kit.META_PATH), m.Conf(cli.RUNTIME, kit.Keys(cli.CONF, cli.CTX_PID))),
|
m.Cmd(nfs.SAVE, kit.Select(m.Conf(SIGNAL, kit.META_PATH), m.Conf(cli.RUNTIME, kit.Keys(cli.CONF, cli.CTX_PID))),
|
||||||
m.Conf(cli.RUNTIME, kit.Keys(cli.HOST, cli.PID)))
|
m.Conf(cli.RUNTIME, kit.Keys(cli.HOST, cli.PID)))
|
||||||
|
|
||||||
m.Cmd(SIGNAL, LISTEN, SIGNAL, "3", kit.MDB_NAME, "退出", ice.CMD, "exit 0")
|
m.Cmd(SIGNAL, LISTEN, SIGNAL, "3", mdb.NAME, "退出", ice.CMD, "exit 0")
|
||||||
m.Cmd(SIGNAL, LISTEN, SIGNAL, "2", kit.MDB_NAME, "重启", ice.CMD, "exit 1")
|
m.Cmd(SIGNAL, LISTEN, SIGNAL, "2", mdb.NAME, "重启", ice.CMD, "exit 1")
|
||||||
}},
|
}},
|
||||||
SIGNAL: {Name: "signal signal auto listen", Help: "信号器", Action: ice.MergeAction(map[string]*ice.Action{
|
SIGNAL: {Name: "signal signal auto listen", Help: "信号器", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
LISTEN: {Name: "listen signal name cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
|
LISTEN: {Name: "listen signal name cmd", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -11,19 +11,19 @@ import (
|
|||||||
|
|
||||||
func _timer_action(m *ice.Message, arg ...string) {
|
func _timer_action(m *ice.Message, arg ...string) {
|
||||||
now := time.Now().UnixNano()
|
now := time.Now().UnixNano()
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(mdb.FIELD))
|
||||||
|
|
||||||
m.Richs(TIMER, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(TIMER, "", mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
if value = kit.GetMeta(value); value[kit.MDB_STATUS] == cli.STOP {
|
if value = kit.GetMeta(value); value[cli.STATUS] == cli.STOP {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
order := kit.Int(value[ORDER])
|
order := kit.Int(value[ORDER])
|
||||||
if n := kit.Time(kit.Format(value[NEXT])); now > n && order > 0 {
|
if n := kit.Time(kit.Format(value[NEXT])); now > n && order > 0 {
|
||||||
m.Logs(TIMER, kit.MDB_KEY, key, ORDER, order)
|
m.Logs(TIMER, mdb.KEY, key, ORDER, order)
|
||||||
|
|
||||||
msg := m.Cmd(value[ice.CMD])
|
msg := m.Cmd(value[ice.CMD])
|
||||||
m.Grow(TIMER, kit.Keys(kit.MDB_HASH, key), kit.Dict(ice.RES, msg.Result()))
|
m.Grow(TIMER, kit.Keys(mdb.HASH, key), kit.Dict(ice.RES, msg.Result()))
|
||||||
if value[ORDER] = kit.Format(order - 1); order > 1 {
|
if value[ORDER] = kit.Format(order - 1); order > 1 {
|
||||||
value[NEXT] = msg.Time(value[INTERVAL])
|
value[NEXT] = msg.Time(value[INTERVAL])
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ const TIMER = "timer"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
TIMER: {Name: TIMER, Help: "定时器", Value: kit.Data(
|
TIMER: {Name: TIMER, Help: "定时器", Value: kit.Data(
|
||||||
kit.MDB_FIELD, "time,hash,delay,interval,order,next,cmd", TICK, "1s",
|
mdb.FIELD, "time,hash,delay,interval,order,next,cmd", TICK, "1s",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
TIMER: {Name: "timer hash id auto create action prunes", Help: "定时器", Action: ice.MergeAction(map[string]*ice.Action{
|
TIMER: {Name: "timer hash id auto create action prunes", Help: "定时器", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -51,14 +51,14 @@ func init() {
|
|||||||
m.Cmdy(mdb.INSERT, TIMER, "", mdb.HASH, DELAY, "10ms", INTERVAL, "10m", ORDER, 1, NEXT, m.Time(m.Option(DELAY)), arg)
|
m.Cmdy(mdb.INSERT, TIMER, "", mdb.HASH, DELAY, "10ms", INTERVAL, "10m", ORDER, 1, NEXT, m.Time(m.Option(DELAY)), arg)
|
||||||
}},
|
}},
|
||||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(mdb.FIELD))
|
||||||
m.Cmdy(mdb.PRUNES, TIMER, "", mdb.HASH, ORDER, 0)
|
m.Cmdy(mdb.PRUNES, TIMER, "", mdb.HASH, ORDER, 0)
|
||||||
}},
|
}},
|
||||||
ACTION: {Name: "action", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
ACTION: {Name: "action", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_timer_action(m, arg...)
|
_timer_action(m, arg...)
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Fields(len(arg), m.Config(kit.MDB_FIELD), "time,id,res")
|
m.Fields(len(arg), m.Config(mdb.FIELD), "time,id,res")
|
||||||
mdb.ZoneSelect(m, arg...)
|
mdb.ZoneSelect(m, arg...)
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package lex
|
package lex
|
||||||
|
|
||||||
import (
|
import ice "shylinux.com/x/icebergs"
|
||||||
ice "shylinux.com/x/icebergs"
|
|
||||||
)
|
|
||||||
|
|
||||||
const LEX = "lex"
|
const LEX = "lex"
|
||||||
|
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
chapter "lex"
|
chapter "lex"
|
||||||
|
|
||||||
|
field "分词" lex.split
|
||||||
|
|
||||||
|
@ -359,12 +359,12 @@ func (mat *Matrix) show(m *ice.Message) {
|
|||||||
m.Status(NLANG, mat.nlang, NCELL, mat.ncell, NPAGE, len(mat.page), NHASH, len(mat.hash))
|
m.Status(NLANG, mat.nlang, NCELL, mat.ncell, NPAGE, len(mat.page), NHASH, len(mat.hash))
|
||||||
}
|
}
|
||||||
func _lex_load(m *ice.Message) {
|
func _lex_load(m *ice.Message) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("256", value[NCELL])))
|
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("256", value[NCELL])))
|
||||||
m.Grows(m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
m.Grows(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||||
mat.Train(m, kit.Format(value[NPAGE]), kit.Format(value[NHASH]), kit.Format(value[kit.MDB_TEXT]))
|
mat.Train(m, kit.Format(value[NPAGE]), kit.Format(value[NHASH]), kit.Format(value[mdb.TEXT]))
|
||||||
})
|
})
|
||||||
value[MATRIX] = mat
|
value[MATRIX] = mat
|
||||||
})
|
})
|
||||||
@ -394,7 +394,7 @@ func init() {
|
|||||||
MATRIX: {Name: "matrix hash npage text auto", Help: "魔方矩阵", Action: map[string]*ice.Action{
|
MATRIX: {Name: "matrix hash npage text auto", Help: "魔方矩阵", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create nlang=32 ncell=128", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create nlang=32 ncell=128", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("128", m.Option(NCELL))))
|
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("128", m.Option(NCELL))))
|
||||||
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(kit.MDB_TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell))
|
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(mdb.TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell))
|
||||||
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
||||||
case func(string, *Matrix):
|
case func(string, *Matrix):
|
||||||
cb(h, mat)
|
cb(h, mat)
|
||||||
@ -402,13 +402,13 @@ func init() {
|
|||||||
m.Echo(h)
|
m.Echo(h)
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert hash npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert hash npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
mat, _ := value[MATRIX].(*Matrix)
|
mat, _ := value[MATRIX].(*Matrix)
|
||||||
m.Echo("%d", mat.Train(m, m.Option(NPAGE), m.Option(NHASH), m.Option(kit.MDB_TEXT)))
|
m.Echo("%d", mat.Train(m, m.Option(NPAGE), m.Option(NHASH), m.Option(mdb.TEXT)))
|
||||||
m.Grow(m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, key), kit.Dict(
|
m.Grow(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), kit.Dict(
|
||||||
kit.MDB_TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), kit.MDB_TEXT, m.Option(kit.MDB_TEXT),
|
mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, m.Option(mdb.TEXT),
|
||||||
))
|
))
|
||||||
|
|
||||||
value[NPAGE] = len(mat.page)
|
value[NPAGE] = len(mat.page)
|
||||||
@ -416,14 +416,14 @@ func init() {
|
|||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, mdb.HASH, m.Option(mdb.HASH))
|
||||||
}},
|
}},
|
||||||
PARSE: {Name: "parse hash npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
|
PARSE: {Name: "parse hash npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
mat, _ := value[MATRIX].(*Matrix)
|
mat, _ := value[MATRIX].(*Matrix)
|
||||||
|
|
||||||
stream := NewStream(bytes.NewBufferString(m.Option(kit.MDB_TEXT)))
|
stream := NewStream(bytes.NewBufferString(m.Option(mdb.TEXT)))
|
||||||
hash, word := mat.Parse(m, m.Option(NPAGE), stream)
|
hash, word := mat.Parse(m, m.Option(NPAGE), stream)
|
||||||
m.Push(NHASH, kit.Select(kit.Format("%d", hash), mat.word[hash]))
|
m.Push(NHASH, kit.Select(kit.Format("%d", hash), mat.word[hash]))
|
||||||
m.Push("word", string(word))
|
m.Push("word", string(word))
|
||||||
@ -432,7 +432,7 @@ func init() {
|
|||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
|
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(kit.MDB_HASH), arg, 0), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(mdb.HASH), arg, 0), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
value[MATRIX].(*Matrix).show(m)
|
value[MATRIX].(*Matrix).show(m)
|
||||||
})
|
})
|
||||||
@ -448,7 +448,7 @@ func init() {
|
|||||||
|
|
||||||
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
||||||
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
||||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST)
|
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(mdb.HASH, arg[0]), mdb.LIST)
|
||||||
m.PushAction(PARSE)
|
m.PushAction(PARSE)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -463,8 +463,8 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hash, word := mat.Parse(m, arg[1], NewStream(bytes.NewBufferString(arg[2])))
|
hash, word := mat.Parse(m, arg[1], NewStream(bytes.NewBufferString(arg[2])))
|
||||||
m.Push(kit.MDB_TIME, m.Time())
|
m.Push(mdb.TIME, m.Time())
|
||||||
m.Push(kit.MDB_HASH, mat.word[hash])
|
m.Push(mdb.HASH, mat.word[hash])
|
||||||
m.Push("word", string(word))
|
m.Push("word", string(word))
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
|
@ -37,33 +37,37 @@ func _split_list(m *ice.Message, file string, arg ...string) map[string]interfac
|
|||||||
list := kit.List(kit.Data(DEEP, -1))
|
list := kit.List(kit.Data(DEEP, -1))
|
||||||
m.Cmd(nfs.CAT, file, func(text string) {
|
m.Cmd(nfs.CAT, file, func(text string) {
|
||||||
if strings.HasPrefix(strings.TrimSpace(text), "# ") {
|
if strings.HasPrefix(strings.TrimSpace(text), "# ") {
|
||||||
return
|
return // 注释
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(text) == "" {
|
if strings.TrimSpace(text) == "" {
|
||||||
return
|
return // 空行
|
||||||
}
|
}
|
||||||
|
|
||||||
stack, deep = _split_deep(stack, text)
|
stack, deep = _split_deep(stack, text)
|
||||||
data := kit.Data(DEEP, deep)
|
data := kit.Data(DEEP, deep)
|
||||||
|
|
||||||
|
// 回调函数
|
||||||
ls := kit.Split(text, m.Option(SPLIT_SPACE), m.Option(SPLIT_BLOCK), m.Option(SPLIT_QUOTE))
|
ls := kit.Split(text, m.Option(SPLIT_SPACE), m.Option(SPLIT_BLOCK), m.Option(SPLIT_QUOTE))
|
||||||
switch cb := m.OptionCB(SPLIT).(type) {
|
switch cb := m.OptionCB(SPLIT).(type) {
|
||||||
case func([]string, map[string]interface{}) []string:
|
|
||||||
ls = cb(ls, data)
|
|
||||||
case func(int, []string, map[string]interface{}) []string:
|
case func(int, []string, map[string]interface{}) []string:
|
||||||
ls = cb(deep, ls, data)
|
ls = cb(deep, ls, data)
|
||||||
|
case func([]string, map[string]interface{}) []string:
|
||||||
|
ls = cb(ls, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 参数字段
|
||||||
for _, k := range arg {
|
for _, k := range arg {
|
||||||
if kit.Value(data, kit.Keym(k), kit.Select("", ls, 0)); len(ls) > 0 {
|
if kit.Value(data, kit.Keym(k), kit.Select("", ls, 0)); len(ls) > 0 {
|
||||||
ls = ls[1:]
|
ls = ls[1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 属性字段
|
||||||
for i := 0; i < len(ls)-1; i += 2 {
|
for i := 0; i < len(ls)-1; i += 2 {
|
||||||
kit.Value(data, kit.Keym(ls[i]), ls[i+1])
|
kit.Value(data, kit.Keym(ls[i]), ls[i+1])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查找节点
|
||||||
for i := len(list) - 1; i >= 0; i-- {
|
for i := len(list) - 1; i >= 0; i-- {
|
||||||
if deep > kit.Int(kit.Value(list[i], kit.Keym(DEEP))) {
|
if deep > kit.Int(kit.Value(list[i], kit.Keym(DEEP))) {
|
||||||
kit.Value(list[i], "list.-2", data)
|
kit.Value(list[i], "list.-2", data)
|
||||||
@ -96,8 +100,8 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Echo(kit.Format(_split_list(m, arg[0], arg[1:]...)))
|
m.Echo(kit.Format(_split_list(m, arg[0], kit.Split(kit.Join(arg[1:]))...)))
|
||||||
m.ProcessDisplay("/plugin/local/wiki/json.js")
|
m.DisplayStory("json.js")
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
log "shylinux.com/x/toolkits/logs"
|
log "shylinux.com/x/toolkits/logs"
|
||||||
@ -90,28 +91,28 @@ const (
|
|||||||
|
|
||||||
var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]*ice.Config{
|
var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]*ice.Config{
|
||||||
FILE: {Name: FILE, Help: "日志文件", Value: kit.Dict(
|
FILE: {Name: FILE, Help: "日志文件", Value: kit.Dict(
|
||||||
BENCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "bench.log"), kit.MDB_LIST, []string{}),
|
BENCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "bench.log"), mdb.LIST, []string{}),
|
||||||
WATCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "watch.log"), kit.MDB_LIST, []string{
|
WATCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "watch.log"), mdb.LIST, []string{
|
||||||
ice.LOG_CREATE, ice.LOG_REMOVE,
|
ice.LOG_CREATE, ice.LOG_REMOVE,
|
||||||
ice.LOG_INSERT, ice.LOG_DELETE,
|
ice.LOG_INSERT, ice.LOG_DELETE,
|
||||||
ice.LOG_MODIFY, ice.LOG_SELECT,
|
ice.LOG_MODIFY, ice.LOG_SELECT,
|
||||||
ice.LOG_EXPORT, ice.LOG_IMPORT,
|
ice.LOG_EXPORT, ice.LOG_IMPORT,
|
||||||
}),
|
}),
|
||||||
ERROR, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "error.log"), kit.MDB_LIST, []string{
|
ERROR, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "error.log"), mdb.LIST, []string{
|
||||||
ice.LOG_WARN, ice.LOG_ERROR,
|
ice.LOG_WARN, ice.LOG_ERROR,
|
||||||
}),
|
}),
|
||||||
TRACE, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "trace.log"), kit.MDB_LIST, []string{
|
TRACE, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "trace.log"), mdb.LIST, []string{
|
||||||
ice.LOG_DEBUG,
|
ice.LOG_DEBUG,
|
||||||
}),
|
}),
|
||||||
)},
|
)},
|
||||||
VIEW: {Name: VIEW, Help: "日志格式", Value: kit.Dict(
|
VIEW: {Name: VIEW, Help: "日志格式", Value: kit.Dict(
|
||||||
GREEN, kit.Dict(PREFIX, "\033[32m", SUFFIX, "\033[0m", kit.MDB_LIST, []string{
|
GREEN, kit.Dict(PREFIX, "\033[32m", SUFFIX, "\033[0m", mdb.LIST, []string{
|
||||||
ice.LOG_START, ice.LOG_SERVE, ice.LOG_CMDS,
|
ice.LOG_START, ice.LOG_SERVE, ice.LOG_CMDS,
|
||||||
}),
|
}),
|
||||||
YELLOW, kit.Dict(PREFIX, "\033[33m", SUFFIX, "\033[0m", kit.MDB_LIST, []string{
|
YELLOW, kit.Dict(PREFIX, "\033[33m", SUFFIX, "\033[0m", mdb.LIST, []string{
|
||||||
ice.LOG_AUTH, ice.LOG_COST,
|
ice.LOG_AUTH, ice.LOG_COST,
|
||||||
}),
|
}),
|
||||||
RED, kit.Dict(PREFIX, "\033[31m", SUFFIX, "\033[0m", kit.MDB_LIST, []string{
|
RED, kit.Dict(PREFIX, "\033[31m", SUFFIX, "\033[0m", mdb.LIST, []string{
|
||||||
ice.LOG_CLOSE, ice.LOG_WARN,
|
ice.LOG_CLOSE, ice.LOG_WARN,
|
||||||
}),
|
}),
|
||||||
)},
|
)},
|
||||||
@ -122,12 +123,12 @@ var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]
|
|||||||
return // 禁用日志
|
return // 禁用日志
|
||||||
}
|
}
|
||||||
m.Confm(VIEW, nil, func(key string, value map[string]interface{}) {
|
m.Confm(VIEW, nil, func(key string, value map[string]interface{}) {
|
||||||
kit.Fetch(value[kit.MDB_LIST], func(index int, k string) {
|
kit.Fetch(value[mdb.LIST], func(index int, k string) {
|
||||||
m.Conf(SHOW, kit.Keys(k, VIEW), key)
|
m.Conf(SHOW, kit.Keys(k, VIEW), key)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
m.Confm(FILE, nil, func(key string, value map[string]interface{}) {
|
m.Confm(FILE, nil, func(key string, value map[string]interface{}) {
|
||||||
kit.Fetch(value[kit.MDB_LIST], func(index int, k string) {
|
kit.Fetch(value[mdb.LIST], func(index int, k string) {
|
||||||
m.Conf(SHOW, kit.Keys(k, FILE), key)
|
m.Conf(SHOW, kit.Keys(k, FILE), key)
|
||||||
})
|
})
|
||||||
// 日志文件
|
// 日志文件
|
||||||
|
@ -10,7 +10,7 @@ const ENGINE = "engine"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
ENGINE: {Name: ENGINE, Help: "引擎", Value: kit.Data(
|
ENGINE: {Name: ENGINE, Help: "引擎", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TYPE, kit.MDB_FIELD, "time,type,name,text",
|
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ENGINE: {Name: "engine type name text auto", Help: "引擎", Action: ice.MergeAction(map[string]*ice.Action{
|
ENGINE: {Name: "engine type name text auto", Help: "引擎", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -20,12 +20,12 @@ func init() {
|
|||||||
}, HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
||||||
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]),
|
m.Cmdy(kit.Keys(value[TEXT], value[NAME]),
|
||||||
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if HashSelect(m, arg...); len(arg) == 0 {
|
if HashSelect(m, arg...); len(arg) == 0 {
|
||||||
m.Sort(kit.MDB_TYPE)
|
m.Sort(TYPE)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -14,39 +14,39 @@ func _hash_fields(m *ice.Message) []string {
|
|||||||
}
|
}
|
||||||
func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
||||||
list := map[string]int{}
|
list := map[string]int{}
|
||||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, FOREACH, func(key string, val map[string]interface{}) {
|
||||||
if val = kit.GetMeta(val); kit.Format(val[kit.MDB_COUNT]) != "" {
|
if val = kit.GetMeta(val); kit.Format(val[COUNT]) != "" {
|
||||||
list[kit.Format(val[field])] = kit.Int(val[kit.MDB_COUNT])
|
list[kit.Format(val[field])] = kit.Int(val[COUNT])
|
||||||
} else {
|
} else {
|
||||||
list[kit.Format(val[field])]++
|
list[kit.Format(val[field])]++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
for k, i := range list {
|
for k, i := range list {
|
||||||
m.Push(field, k)
|
m.Push(field, k)
|
||||||
m.Push(kit.MDB_COUNT, i)
|
m.Push(COUNT, i)
|
||||||
}
|
}
|
||||||
m.SortIntR(kit.MDB_COUNT)
|
m.SortIntR(COUNT)
|
||||||
}
|
}
|
||||||
func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) {
|
func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
if m.Option(ice.MSG_DOMAIN) != "" {
|
if m.Option(ice.MSG_DOMAIN) != "" {
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.Keym(kit.MDB_SHORT)), m.Conf(prefix, kit.Keym(kit.MDB_SHORT)))
|
m.Conf(prefix, kit.Keys(chain, kit.Keym(SHORT)), m.Conf(prefix, kit.Keym(SHORT)))
|
||||||
}
|
}
|
||||||
m.Log_INSERT(kit.MDB_KEY, path.Join(prefix, chain), arg[0], arg[1])
|
m.Log_INSERT(KEY, path.Join(prefix, chain), arg[0], arg[1])
|
||||||
m.Echo(m.Rich(prefix, chain, kit.Data(arg)))
|
m.Echo(m.Rich(prefix, chain, kit.Data(arg)))
|
||||||
}
|
}
|
||||||
func _hash_delete(m *ice.Message, prefix, chain, field, value string) {
|
func _hash_delete(m *ice.Message, prefix, chain, field, value string) {
|
||||||
if field != kit.MDB_HASH {
|
if field != HASH {
|
||||||
field, value = kit.MDB_HASH, kit.Select(kit.Hashs(value), m.Option(kit.MDB_HASH))
|
field, value = HASH, kit.Select(kit.Hashs(value), m.Option(HASH))
|
||||||
}
|
}
|
||||||
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
||||||
m.Log_DELETE(kit.MDB_KEY, path.Join(prefix, chain), field, value, kit.MDB_VALUE, kit.Format(val))
|
m.Log_DELETE(KEY, path.Join(prefix, chain), field, value, VALUE, kit.Format(val))
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH, key), "")
|
m.Conf(prefix, kit.Keys(chain, HASH, key), "")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
|
func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
|
||||||
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
||||||
val = kit.GetMeta(val)
|
val = kit.GetMeta(val)
|
||||||
m.Log_MODIFY(kit.MDB_KEY, path.Join(prefix, chain), field, value, arg)
|
m.Log_MODIFY(KEY, path.Join(prefix, chain), field, value, arg)
|
||||||
for i := 0; i < len(arg); i += 2 {
|
for i := 0; i < len(arg); i += 2 {
|
||||||
if arg[i] == field {
|
if arg[i] == field {
|
||||||
continue
|
continue
|
||||||
@ -56,8 +56,8 @@ func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _hash_select(m *ice.Message, prefix, chain, field, value string) {
|
func _hash_select(m *ice.Message, prefix, chain, field, value string) {
|
||||||
if field == kit.MDB_HASH && value == RANDOM {
|
if field == HASH && value == RANDOM {
|
||||||
value = kit.MDB_RANDOMS
|
value = RANDOMS
|
||||||
}
|
}
|
||||||
fields := _hash_fields(m)
|
fields := _hash_fields(m)
|
||||||
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
||||||
@ -73,7 +73,7 @@ func _hash_select(m *ice.Message, prefix, chain, field, value string) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
if m.Option(FIELDS) != DETAIL {
|
if m.Option(FIELDS) != DETAIL {
|
||||||
m.SortTimeR(kit.MDB_TIME)
|
m.SortTimeR(TIME)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _hash_export(m *ice.Message, prefix, chain, file string) {
|
func _hash_export(m *ice.Message, prefix, chain, file string) {
|
||||||
@ -85,8 +85,8 @@ func _hash_export(m *ice.Message, prefix, chain, file string) {
|
|||||||
en.SetIndent("", " ")
|
en.SetIndent("", " ")
|
||||||
m.Assert(en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))))
|
m.Assert(en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))))
|
||||||
|
|
||||||
m.Log_EXPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_FILE, p)
|
m.Log_EXPORT(KEY, path.Join(prefix, chain), FILE, p)
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH), "")
|
m.Conf(prefix, kit.Keys(chain, HASH), "")
|
||||||
m.Echo(p)
|
m.Echo(p)
|
||||||
}
|
}
|
||||||
func _hash_import(m *ice.Message, prefix, chain, file string) {
|
func _hash_import(m *ice.Message, prefix, chain, file string) {
|
||||||
@ -98,9 +98,9 @@ func _hash_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
m.Assert(json.NewDecoder(f).Decode(&list))
|
m.Assert(json.NewDecoder(f).Decode(&list))
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
if m.Conf(prefix, kit.Keys(chain, kit.MDB_META, kit.MDB_SHORT)) == "" {
|
if m.Conf(prefix, kit.Keys(chain, META, SHORT)) == "" {
|
||||||
for k, data := range list {
|
for k, data := range list {
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH, k), data)
|
m.Conf(prefix, kit.Keys(chain, HASH, k), data)
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -110,12 +110,12 @@ func _hash_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Log_IMPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_COUNT, count)
|
m.Log_IMPORT(KEY, path.Join(prefix, chain), COUNT, count)
|
||||||
m.Echo("%d", count)
|
m.Echo("%d", count)
|
||||||
}
|
}
|
||||||
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
fields := _hash_fields(m)
|
fields := _hash_fields(m)
|
||||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, FOREACH, func(key string, val map[string]interface{}) {
|
||||||
switch val = kit.GetMeta(val); cb := m.Optionv(kit.Keycb(PRUNES)).(type) {
|
switch val = kit.GetMeta(val); cb := m.Optionv(kit.Keycb(PRUNES)).(type) {
|
||||||
case func(string, map[string]interface{}) bool:
|
case func(string, map[string]interface{}) bool:
|
||||||
if !cb(key, val) {
|
if !cb(key, val) {
|
||||||
@ -131,7 +131,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
|||||||
m.Push(key, val, fields)
|
m.Push(key, val, fields)
|
||||||
})
|
})
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
_hash_delete(m, prefix, chain, kit.MDB_HASH, value[kit.MDB_HASH])
|
_hash_delete(m, prefix, chain, HASH, value[HASH])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,13 +139,13 @@ const HASH = "hash"
|
|||||||
|
|
||||||
func HashAction(fields ...string) map[string]*ice.Action {
|
func HashAction(fields ...string) map[string]*ice.Action {
|
||||||
_key := func(m *ice.Message) string {
|
_key := func(m *ice.Message) string {
|
||||||
if m.Config(kit.MDB_HASH) == "uniq" {
|
if m.Config(HASH) == "uniq" {
|
||||||
return kit.MDB_HASH
|
return HASH
|
||||||
}
|
}
|
||||||
if m.Config(kit.MDB_SHORT) == "uniq" {
|
if m.Config(SHORT) == "uniq" {
|
||||||
return kit.MDB_HASH
|
return HASH
|
||||||
}
|
}
|
||||||
return kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))
|
return kit.Select(HASH, m.Config(SHORT))
|
||||||
}
|
}
|
||||||
return ice.SelectAction(map[string]*ice.Action{
|
return ice.SelectAction(map[string]*ice.Action{
|
||||||
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
@ -177,35 +177,35 @@ func HashAction(fields ...string) map[string]*ice.Action {
|
|||||||
func HashActionStatus(fields ...string) map[string]*ice.Action {
|
func HashActionStatus(fields ...string) map[string]*ice.Action {
|
||||||
list := HashAction(fields...)
|
list := HashAction(fields...)
|
||||||
list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(FIELD))
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, kit.MDB_STATUS, "error")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error")
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, kit.MDB_STATUS, "close")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "close")
|
||||||
}}
|
}}
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||||
m.Fields(len(arg), m.Config(kit.MDB_FIELD))
|
m.Fields(len(arg), m.Config(FIELD))
|
||||||
m.Cmdy(SELECT, m.PrefixKey(), "", HASH, m.Config(kit.MDB_SHORT), arg)
|
m.Cmdy(SELECT, m.PrefixKey(), "", HASH, m.Config(SHORT), arg)
|
||||||
m.PushAction(REMOVE)
|
m.PushAction(REMOVE)
|
||||||
m.StatusTimeCount()
|
m.StatusTimeCount()
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
func HashPrunes(m *ice.Message, cb func(map[string]string) bool) *ice.Message {
|
func HashPrunes(m *ice.Message, cb func(map[string]string) bool) *ice.Message {
|
||||||
_key := func(m *ice.Message) string {
|
_key := func(m *ice.Message) string {
|
||||||
if m.Config(kit.MDB_HASH) == "uniq" {
|
if m.Config(HASH) == "uniq" {
|
||||||
return kit.MDB_HASH
|
return HASH
|
||||||
}
|
}
|
||||||
return kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))
|
return kit.Select(HASH, m.Config(SHORT))
|
||||||
}
|
}
|
||||||
before := kit.Time(kit.Select(m.Time("-72h"), m.Option(kit.MDB_BEFORE)))
|
before := kit.Time(kit.Select(m.Time("-72h"), m.Option(kit.MDB_BEFORE)))
|
||||||
m.Cmd(m.CommandKey()).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(m.CommandKey()).Table(func(index int, value map[string]string, head []string) {
|
||||||
if kit.Time(value[kit.MDB_TIME]) > before {
|
if kit.Time(value[TIME]) > before {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if cb != nil && cb(value) {
|
if cb != nil && cb(value) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(FIELD))
|
||||||
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, _key(m), value[_key(m)])
|
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, _key(m), value[_key(m)])
|
||||||
})
|
})
|
||||||
return m
|
return m
|
||||||
|
@ -15,20 +15,20 @@ func _list_fields(m *ice.Message) []string {
|
|||||||
func _list_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
func _list_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
||||||
list := map[string]int{}
|
list := map[string]int{}
|
||||||
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
|
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
|
||||||
if val = kit.GetMeta(val); kit.Format(val[kit.MDB_COUNT]) != "" {
|
if val = kit.GetMeta(val); kit.Format(val[COUNT]) != "" {
|
||||||
list[kit.Format(val[field])] = kit.Int(val[kit.MDB_COUNT])
|
list[kit.Format(val[field])] = kit.Int(val[COUNT])
|
||||||
} else {
|
} else {
|
||||||
list[kit.Format(val[field])]++
|
list[kit.Format(val[field])]++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
for k, i := range list {
|
for k, i := range list {
|
||||||
m.Push(field, k)
|
m.Push(field, k)
|
||||||
m.Push(kit.MDB_COUNT, i)
|
m.Push(COUNT, i)
|
||||||
}
|
}
|
||||||
m.SortIntR(kit.MDB_COUNT)
|
m.SortIntR(COUNT)
|
||||||
}
|
}
|
||||||
func _list_insert(m *ice.Message, prefix, chain string, arg ...string) {
|
func _list_insert(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
m.Log_INSERT(kit.MDB_KEY, path.Join(prefix, chain), arg[0], arg[1])
|
m.Log_INSERT(KEY, path.Join(prefix, chain), arg[0], arg[1])
|
||||||
m.Echo("%d", m.Grow(prefix, chain, kit.Dict(arg)))
|
m.Echo("%d", m.Grow(prefix, chain, kit.Dict(arg)))
|
||||||
}
|
}
|
||||||
func _list_delete(m *ice.Message, prefix, chain, field, value string) {
|
func _list_delete(m *ice.Message, prefix, chain, field, value string) {
|
||||||
@ -36,7 +36,7 @@ func _list_delete(m *ice.Message, prefix, chain, field, value string) {
|
|||||||
func _list_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
|
func _list_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
|
||||||
m.Grows(prefix, chain, field, value, func(index int, val map[string]interface{}) {
|
m.Grows(prefix, chain, field, value, func(index int, val map[string]interface{}) {
|
||||||
val = kit.GetMeta(val)
|
val = kit.GetMeta(val)
|
||||||
m.Log_MODIFY(kit.MDB_KEY, path.Join(prefix, chain), field, value, arg)
|
m.Log_MODIFY(KEY, path.Join(prefix, chain), field, value, arg)
|
||||||
for i := 0; i < len(arg); i += 2 {
|
for i := 0; i < len(arg); i += 2 {
|
||||||
if arg[i] == field {
|
if arg[i] == field {
|
||||||
continue
|
continue
|
||||||
@ -92,9 +92,9 @@ func _list_export(m *ice.Message, prefix, chain, file string) {
|
|||||||
count++
|
count++
|
||||||
})
|
})
|
||||||
|
|
||||||
m.Log_EXPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_FILE, p, kit.MDB_COUNT, count)
|
m.Log_EXPORT(KEY, path.Join(prefix, chain), FILE, p, COUNT, count)
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.Keym(kit.MDB_COUNT)), 0)
|
m.Conf(prefix, kit.Keys(chain, kit.Keym(COUNT)), 0)
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.MDB_LIST), "")
|
m.Conf(prefix, kit.Keys(chain, LIST), "")
|
||||||
m.Echo(p)
|
m.Echo(p)
|
||||||
}
|
}
|
||||||
func _list_import(m *ice.Message, prefix, chain, file string) {
|
func _list_import(m *ice.Message, prefix, chain, file string) {
|
||||||
@ -114,7 +114,7 @@ func _list_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
|
|
||||||
data := kit.Dict()
|
data := kit.Dict()
|
||||||
for i, k := range head {
|
for i, k := range head {
|
||||||
if k == kit.MDB_EXTRA {
|
if k == EXTRA {
|
||||||
kit.Value(data, k, kit.UnMarshal(line[i]))
|
kit.Value(data, k, kit.UnMarshal(line[i]))
|
||||||
} else {
|
} else {
|
||||||
kit.Value(data, k, line[i])
|
kit.Value(data, k, line[i])
|
||||||
@ -125,7 +125,7 @@ func _list_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Log_IMPORT(kit.MDB_KEY, kit.Keys(prefix, chain), kit.MDB_COUNT, count)
|
m.Log_IMPORT(KEY, kit.Keys(prefix, chain), COUNT, count)
|
||||||
m.Echo("%d", count)
|
m.Echo("%d", count)
|
||||||
}
|
}
|
||||||
func _list_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
func _list_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
@ -142,17 +142,17 @@ func ListAction(fields ...string) map[string]*ice.Action {
|
|||||||
m.Cmdy(INSERT, m.PrefixKey(), "", LIST, arg)
|
m.Cmdy(INSERT, m.PrefixKey(), "", LIST, arg)
|
||||||
}},
|
}},
|
||||||
DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(DELETE, m.PrefixKey(), "", LIST, m.OptionSimple(kit.MDB_ID), arg)
|
m.Cmdy(DELETE, m.PrefixKey(), "", LIST, m.OptionSimple(ID), arg)
|
||||||
}},
|
}},
|
||||||
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(MODIFY, m.PrefixKey(), "", LIST, m.OptionSimple(kit.MDB_ID), arg)
|
m.Cmdy(MODIFY, m.PrefixKey(), "", LIST, m.OptionSimple(ID), arg)
|
||||||
}},
|
}},
|
||||||
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(ice.CACHE_LIMIT, "-1")
|
m.Option(ice.CACHE_LIMIT, "-1")
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(FIELD))
|
||||||
m.Cmdy(EXPORT, m.PrefixKey(), "", LIST)
|
m.Cmdy(EXPORT, m.PrefixKey(), "", LIST)
|
||||||
m.Conf(m.PrefixKey(), kit.MDB_LIST, "")
|
m.Conf(m.PrefixKey(), LIST, "")
|
||||||
m.Config(kit.MDB_COUNT, 0)
|
m.Config(COUNT, 0)
|
||||||
}},
|
}},
|
||||||
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(IMPORT, m.PrefixKey(), "", LIST, arg)
|
m.Cmdy(IMPORT, m.PrefixKey(), "", LIST, arg)
|
||||||
@ -161,19 +161,19 @@ func ListAction(fields ...string) map[string]*ice.Action {
|
|||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", LIST, arg)
|
m.Cmdy(PRUNES, m.PrefixKey(), "", LIST, arg)
|
||||||
}},
|
}},
|
||||||
PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
|
PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
|
||||||
PrevPage(m, m.Config(kit.MDB_COUNT), kit.Slice(arg, 1)...)
|
PrevPage(m, m.Config(COUNT), kit.Slice(arg, 1)...)
|
||||||
}},
|
}},
|
||||||
NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
|
NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) {
|
||||||
NextPage(m, m.Config(kit.MDB_COUNT), kit.Slice(arg, 1)...)
|
NextPage(m, m.Config(COUNT), kit.Slice(arg, 1)...)
|
||||||
}},
|
}},
|
||||||
}, fields...)
|
}, fields...)
|
||||||
}
|
}
|
||||||
func ListSelect(m *ice.Message, arg ...string) *ice.Message {
|
func ListSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||||
m.OptionPage(kit.Slice(arg, 1)...)
|
m.OptionPage(kit.Slice(arg, 1)...)
|
||||||
m.Fields(len(kit.Slice(arg, 0, 1)), m.Config(kit.MDB_FIELD))
|
m.Fields(len(kit.Slice(arg, 0, 1)), m.Config(FIELD))
|
||||||
m.Cmdy(SELECT, m.PrefixKey(), "", LIST, kit.MDB_ID, arg)
|
m.Cmdy(SELECT, m.PrefixKey(), "", LIST, ID, arg)
|
||||||
if !m.FieldsIsDetail() {
|
if !m.FieldsIsDetail() {
|
||||||
m.StatusTimeCountTotal(m.Config(kit.MDB_COUNT))
|
m.StatusTimeCountTotal(m.Config(COUNT))
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
@ -32,19 +32,24 @@ const (
|
|||||||
NAME = "name"
|
NAME = "name"
|
||||||
TEXT = "text"
|
TEXT = "text"
|
||||||
|
|
||||||
INDEX = "index"
|
|
||||||
VALUE = "value"
|
|
||||||
|
|
||||||
LINK = "link"
|
LINK = "link"
|
||||||
SCAN = "scan"
|
SCAN = "scan"
|
||||||
HELP = "help"
|
|
||||||
SHOW = "show"
|
SHOW = "show"
|
||||||
|
HELP = "help"
|
||||||
|
FILE = "file"
|
||||||
|
DATA = "data"
|
||||||
|
|
||||||
SHORT = "short"
|
SHORT = "short"
|
||||||
FIELD = "field"
|
FIELD = "field"
|
||||||
|
TOTAL = "total"
|
||||||
COUNT = "count"
|
COUNT = "count"
|
||||||
LIMIT = "limit"
|
LIMIT = "limit"
|
||||||
|
INDEX = "index"
|
||||||
|
VALUE = "value"
|
||||||
|
EXTRA = "extra"
|
||||||
EXPIRE = "expire"
|
EXPIRE = "expire"
|
||||||
|
STATUS = "status"
|
||||||
|
STREAM = "stream"
|
||||||
|
|
||||||
FOREACH = "*"
|
FOREACH = "*"
|
||||||
RANDOMS = "%"
|
RANDOMS = "%"
|
||||||
@ -118,7 +123,7 @@ const MDB = "mdb"
|
|||||||
|
|
||||||
var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{
|
var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
ice.Pulse.Option(CACHE_LIMIT, "10")
|
ice.Pulse.Option(ice.CACHE_LIMIT, "10")
|
||||||
}},
|
}},
|
||||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
}},
|
}},
|
||||||
@ -145,7 +150,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
|||||||
MODIFY: {Name: "modify key sub type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
MODIFY: {Name: "modify key sub type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
switch arg[2] {
|
switch arg[2] {
|
||||||
case ZONE: // modify key sub type zone id field value
|
case ZONE: // modify key sub type zone id field value
|
||||||
_list_modify(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), kit.MDB_ID, arg[4], arg[5:]...)
|
_list_modify(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), ID, arg[4], arg[5:]...)
|
||||||
case HASH:
|
case HASH:
|
||||||
_hash_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...)
|
_hash_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...)
|
||||||
case LIST:
|
case LIST:
|
||||||
@ -157,7 +162,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
|||||||
case ZONE:
|
case ZONE:
|
||||||
_zone_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select("", arg, 4))
|
_zone_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select("", arg, 4))
|
||||||
case HASH:
|
case HASH:
|
||||||
_hash_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select(kit.MDB_FOREACH, arg, 4))
|
_hash_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select(FOREACH, arg, 4))
|
||||||
case LIST:
|
case LIST:
|
||||||
_list_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select("", arg, 4))
|
_list_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select("", arg, 4))
|
||||||
}
|
}
|
||||||
@ -165,11 +170,11 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
|||||||
INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
switch arg[2] {
|
switch arg[2] {
|
||||||
case ZONE: // inputs key sub type zone field value
|
case ZONE: // inputs key sub type zone field value
|
||||||
_list_inputs(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), kit.Select(kit.MDB_NAME, arg, 4), kit.Select("", arg, 5))
|
_list_inputs(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), kit.Select(NAME, arg, 4), kit.Select("", arg, 5))
|
||||||
case HASH:
|
case HASH:
|
||||||
_hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select(kit.MDB_NAME, arg, 3), kit.Select("", arg, 4))
|
_hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select(NAME, arg, 3), kit.Select("", arg, 4))
|
||||||
case LIST:
|
case LIST:
|
||||||
_list_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select(kit.MDB_NAME, arg, 3), kit.Select("", arg, 4))
|
_list_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select(NAME, arg, 3), kit.Select("", arg, 4))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
PRUNES: {Name: "prunes key sub type [field value]...", Help: "清理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
PRUNES: {Name: "prunes key sub type [field value]...", Help: "清理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -10,7 +10,7 @@ const PLUGIN = "plugin"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(
|
PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TYPE, kit.MDB_FIELD, "time,type,name,text",
|
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
PLUGIN: {Name: "plugin type name text auto", Help: "插件", Action: map[string]*ice.Action{
|
PLUGIN: {Name: "plugin type name text auto", Help: "插件", Action: map[string]*ice.Action{
|
||||||
@ -20,12 +20,12 @@ func init() {
|
|||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
||||||
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]),
|
m.Cmdy(kit.Keys(value[TEXT], value[NAME]),
|
||||||
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if HashSelect(m, arg...); len(arg) == 0 {
|
if HashSelect(m, arg...); len(arg) == 0 {
|
||||||
m.Sort(kit.MDB_TYPE)
|
m.Sort(TYPE)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -10,7 +10,7 @@ const RENDER = "render"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
RENDER: {Name: "render", Help: "渲染", Value: kit.Data(
|
RENDER: {Name: "render", Help: "渲染", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TYPE, kit.MDB_FIELD, "time,type,name,text",
|
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
RENDER: {Name: "render type name text auto", Help: "渲染", Action: map[string]*ice.Action{
|
RENDER: {Name: "render type name text auto", Help: "渲染", Action: map[string]*ice.Action{
|
||||||
@ -20,12 +20,12 @@ func init() {
|
|||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
m.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
||||||
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]),
|
m.Cmdy(kit.Keys(value[TEXT], value[NAME]),
|
||||||
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if HashSelect(m, arg...); len(arg) == 0 {
|
if HashSelect(m, arg...); len(arg) == 0 {
|
||||||
m.Sort(kit.MDB_TYPE)
|
m.Sort(TYPE)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -10,7 +10,7 @@ const SEARCH = "search"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(
|
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TYPE, kit.MDB_FIELD, "time,type,name,text",
|
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
SEARCH: {Name: "search type word text auto", Help: "搜索", Action: map[string]*ice.Action{
|
SEARCH: {Name: "search type word text auto", Help: "搜索", Action: map[string]*ice.Action{
|
||||||
@ -22,12 +22,12 @@ func init() {
|
|||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
msg.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
msg.Optionv(kit.Keycb(SELECT), func(fields []string, value map[string]interface{}) {
|
||||||
m.OptionFields(kit.Select("ctx,cmd,type,name,text", kit.Select(m.OptionFields(), arg, 2)))
|
m.OptionFields(kit.Select("ctx,cmd,type,name,text", kit.Select(m.OptionFields(), arg, 2)))
|
||||||
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2))
|
m.Cmdy(kit.Keys(value[TEXT], value[NAME]), m.CommandKey(), arg[0], arg[1], kit.Select("", arg, 2))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if HashSelect(msg, arg...); len(arg) == 0 {
|
if HashSelect(msg, arg...); len(arg) == 0 {
|
||||||
m.Copy(msg)
|
m.Copy(msg)
|
||||||
m.Sort(kit.MDB_TYPE)
|
m.Sort(TYPE)
|
||||||
} else if len(arg) == 1 {
|
} else if len(arg) == 1 {
|
||||||
m.Copy(msg)
|
m.Copy(msg)
|
||||||
}
|
}
|
||||||
|
@ -15,12 +15,12 @@ func _zone_fields(m *ice.Message) []string {
|
|||||||
}
|
}
|
||||||
func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
|
func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
|
||||||
if zone == RANDOM {
|
if zone == RANDOM {
|
||||||
zone = kit.MDB_RANDOMS
|
zone = RANDOMS
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := _zone_fields(m)
|
fields := _zone_fields(m)
|
||||||
cb := m.Optionv(kit.Keycb(SELECT))
|
cb := m.Optionv(kit.Keycb(SELECT))
|
||||||
m.Richs(prefix, chain, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, kit.Select(FOREACH, zone), func(key string, val map[string]interface{}) {
|
||||||
if val = kit.GetMeta(val); zone == "" {
|
if val = kit.GetMeta(val); zone == "" {
|
||||||
if m.OptionFields() == DETAIL {
|
if m.OptionFields() == DETAIL {
|
||||||
m.Push(DETAIL, val)
|
m.Push(DETAIL, val)
|
||||||
@ -30,7 +30,7 @@ func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
|
m.Grows(prefix, kit.Keys(chain, HASH, key), ID, id, func(index int, value map[string]interface{}) {
|
||||||
switch value = kit.GetMeta(value); cb := cb.(type) {
|
switch value = kit.GetMeta(value); cb := cb.(type) {
|
||||||
case func(string, []string, map[string]interface{}, map[string]interface{}):
|
case func(string, []string, map[string]interface{}, map[string]interface{}):
|
||||||
cb(key, fields, value, val)
|
cb(key, fields, value, val)
|
||||||
@ -57,14 +57,14 @@ func _zone_export(m *ice.Message, prefix, chain, file string) {
|
|||||||
defer w.Flush()
|
defer w.Flush()
|
||||||
|
|
||||||
fields := _zone_fields(m)
|
fields := _zone_fields(m)
|
||||||
fields = append(fields, kit.MDB_EXTRA)
|
fields = append(fields, EXTRA)
|
||||||
w.Write(fields)
|
w.Write(fields)
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
m.Richs(prefix, chain, FOREACH, func(key string, val map[string]interface{}) {
|
||||||
val = kit.GetMeta(val)
|
val = kit.GetMeta(val)
|
||||||
|
|
||||||
m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
m.Grows(prefix, kit.Keys(chain, HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
list := []string{}
|
list := []string{}
|
||||||
@ -76,8 +76,8 @@ func _zone_export(m *ice.Message, prefix, chain, file string) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
m.Log_EXPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_FILE, p, kit.MDB_COUNT, count)
|
m.Log_EXPORT(KEY, path.Join(prefix, chain), FILE, p, COUNT, count)
|
||||||
m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH), "")
|
m.Conf(prefix, kit.Keys(chain, HASH), "")
|
||||||
m.Echo(p)
|
m.Echo(p)
|
||||||
}
|
}
|
||||||
func _zone_import(m *ice.Message, prefix, chain, file string) {
|
func _zone_import(m *ice.Message, prefix, chain, file string) {
|
||||||
@ -104,9 +104,9 @@ func _zone_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
switch k {
|
switch k {
|
||||||
case zkey:
|
case zkey:
|
||||||
zone = line[i]
|
zone = line[i]
|
||||||
case kit.MDB_ID:
|
case ID:
|
||||||
continue
|
continue
|
||||||
case kit.MDB_EXTRA:
|
case EXTRA:
|
||||||
kit.Value(data, k, kit.UnMarshal(line[i]))
|
kit.Value(data, k, kit.UnMarshal(line[i]))
|
||||||
default:
|
default:
|
||||||
kit.Value(data, k, line[i])
|
kit.Value(data, k, line[i])
|
||||||
@ -116,18 +116,18 @@ func _zone_import(m *ice.Message, prefix, chain, file string) {
|
|||||||
list[zone] = m.Rich(prefix, chain, kit.Data(zkey, zone))
|
list[zone] = m.Rich(prefix, chain, kit.Data(zkey, zone))
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Grow(prefix, kit.Keys(chain, kit.MDB_HASH, list[zone]), data)
|
m.Grow(prefix, kit.Keys(chain, HASH, list[zone]), data)
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Log_IMPORT(kit.MDB_KEY, path.Join(prefix, chain), kit.MDB_COUNT, count)
|
m.Log_IMPORT(KEY, path.Join(prefix, chain), COUNT, count)
|
||||||
m.Echo("%d", count)
|
m.Echo("%d", count)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ZONE = "zone"
|
const ZONE = "zone"
|
||||||
|
|
||||||
func ZoneAction(fields ...string) map[string]*ice.Action {
|
func ZoneAction(fields ...string) map[string]*ice.Action {
|
||||||
_zone := func(m *ice.Message) string { return kit.Select(kit.MDB_ZONE, m.Config(kit.MDB_SHORT)) }
|
_zone := func(m *ice.Message) string { return kit.Select(ZONE, m.Config(SHORT)) }
|
||||||
|
|
||||||
return ice.SelectAction(map[string]*ice.Action{
|
return ice.SelectAction(map[string]*ice.Action{
|
||||||
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
@ -139,7 +139,7 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
|
|||||||
case ice.CTX:
|
case ice.CTX:
|
||||||
m.Cmdy("context")
|
m.Cmdy("context")
|
||||||
case ice.CMD:
|
case ice.CMD:
|
||||||
m.Cmdy("context", kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(kit.MDB_EXTRA, ice.CTX))), "command")
|
m.Cmdy("context", kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(EXTRA, ice.CTX))), "command")
|
||||||
case ice.ARG:
|
case ice.ARG:
|
||||||
|
|
||||||
case _zone(m):
|
case _zone(m):
|
||||||
@ -156,17 +156,17 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
|
|||||||
}},
|
}},
|
||||||
INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
arg = m.OptionSimple(_zone(m), m.Config(kit.MDB_FIELD))
|
arg = m.OptionSimple(_zone(m), m.Config(FIELD))
|
||||||
}
|
}
|
||||||
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1])
|
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1])
|
||||||
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:])
|
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:])
|
||||||
}},
|
}},
|
||||||
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg)
|
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(ID), arg)
|
||||||
}},
|
}},
|
||||||
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(ice.CACHE_LIMIT, "-1")
|
m.Option(ice.CACHE_LIMIT, "-1")
|
||||||
m.OptionFields(_zone(m), m.Config(kit.MDB_FIELD))
|
m.OptionFields(_zone(m), m.Config(FIELD))
|
||||||
m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE)
|
m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE)
|
||||||
}},
|
}},
|
||||||
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
@ -174,7 +174,7 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
|
|||||||
m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE)
|
m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE)
|
||||||
}},
|
}},
|
||||||
PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
|
PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg)
|
m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(ID), arg)
|
||||||
}},
|
}},
|
||||||
PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
|
PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) {
|
||||||
PrevPage(m, arg[0], arg[1:]...)
|
PrevPage(m, arg[0], arg[1:]...)
|
||||||
@ -185,9 +185,9 @@ func ZoneAction(fields ...string) map[string]*ice.Action {
|
|||||||
}, fields...)
|
}, fields...)
|
||||||
}
|
}
|
||||||
func ZoneSelect(m *ice.Message, arg ...string) *ice.Message {
|
func ZoneSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||||
m.Fields(len(arg), kit.Fields(kit.MDB_TIME, m.Config(kit.MDB_SHORT), kit.MDB_COUNT), m.Config(kit.MDB_FIELD))
|
m.Fields(len(arg), kit.Fields(TIME, m.Config(SHORT), COUNT), m.Config(FIELD))
|
||||||
if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg); kit.Select("", arg, 0) == "" {
|
if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg); kit.Select("", arg, 0) == "" {
|
||||||
m.Sort(m.Config(kit.MDB_SHORT))
|
m.Sort(m.Config(SHORT))
|
||||||
m.PushAction(REMOVE)
|
m.PushAction(REMOVE)
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
|
@ -145,7 +145,7 @@ func init() {
|
|||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
CAT: {Name: "cat path auto", Help: "文件", Action: map[string]*ice.Action{
|
CAT: {Name: "cat path auto", Help: "文件", Action: map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, CAT, m.PrefixKey())
|
m.Cmd(mdb.RENDER, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
}},
|
}},
|
||||||
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
|
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_cat_list(m, path.Join(arg[2], arg[1]))
|
_cat_list(m, path.Join(arg[2], arg[1]))
|
||||||
|
@ -196,8 +196,8 @@ func init() {
|
|||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
DIR: {Name: "dir path field... auto upload", Help: "目录", Action: map[string]*ice.Action{
|
DIR: {Name: "dir path field... auto upload", Help: "目录", Action: map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, DIR, m.PrefixKey())
|
m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, DIR, m.PrefixKey())
|
m.Cmd(mdb.RENDER, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search type name", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == mdb.FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
|
@ -11,7 +11,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/aaa"
|
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
"shylinux.com/x/icebergs/base/ctx"
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
@ -64,9 +63,9 @@ func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
|
|||||||
fmt.Fprintf(f.stdout, "\r")
|
fmt.Fprintf(f.stdout, "\r")
|
||||||
for _, v := range list {
|
for _, v := range list {
|
||||||
switch v {
|
switch v {
|
||||||
case kit.MDB_COUNT:
|
case mdb.COUNT:
|
||||||
fmt.Fprintf(f.stdout, "%d", f.count)
|
fmt.Fprintf(f.stdout, "%d", f.count)
|
||||||
case kit.MDB_TIME:
|
case mdb.TIME:
|
||||||
fmt.Fprintf(f.stdout, time.Now().Format("15:04:05"))
|
fmt.Fprintf(f.stdout, time.Now().Format("15:04:05"))
|
||||||
case TARGET:
|
case TARGET:
|
||||||
fmt.Fprintf(f.stdout, f.target.Name)
|
fmt.Fprintf(f.stdout, f.target.Name)
|
||||||
@ -76,12 +75,8 @@ func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
|
|||||||
}
|
}
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
func (f *Frame) printf(m *ice.Message, res string, arg ...interface{}) *Frame {
|
func (f *Frame) printf(m *ice.Message, str string, arg ...interface{}) *Frame {
|
||||||
if len(arg) > 0 {
|
fmt.Fprint(f.stdout, kit.Format(str, arg...))
|
||||||
fmt.Fprintf(f.stdout, res, arg...)
|
|
||||||
} else {
|
|
||||||
fmt.Fprint(f.stdout, res)
|
|
||||||
}
|
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
func (f *Frame) change(m *ice.Message, ls []string) []string {
|
func (f *Frame) change(m *ice.Message, ls []string) []string {
|
||||||
@ -104,30 +99,28 @@ func (f *Frame) change(m *ice.Message, ls []string) []string {
|
|||||||
return ls
|
return ls
|
||||||
}
|
}
|
||||||
func (f *Frame) alias(m *ice.Message, ls []string) []string {
|
func (f *Frame) alias(m *ice.Message, ls []string) []string {
|
||||||
if alias, ok := m.Optionv(ice.MSG_ALIAS).(map[string]interface{}); ok {
|
if len(ls) == 0 {
|
||||||
if len(ls) > 0 {
|
return ls
|
||||||
if a := kit.Simple(alias[ls[0]]); len(a) > 0 {
|
}
|
||||||
ls = append(append([]string{}, a...), ls[1:]...)
|
if alias := kit.Simple(kit.Value(m.Optionv(ice.MSG_ALIAS), ls[0])); len(alias) > 0 {
|
||||||
}
|
ls = append(alias, ls[1:]...)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ls
|
return ls
|
||||||
}
|
}
|
||||||
func (f *Frame) parse(m *ice.Message, line string) string {
|
func (f *Frame) parse(m *ice.Message, line string) string {
|
||||||
for _, one := range kit.Split(line, ";", ";", ";") {
|
for _, one := range kit.Split(line, ";", ";", ";") {
|
||||||
msg := m.Spawn(f.target)
|
msg := m.Spawn(f.target)
|
||||||
|
|
||||||
ls := f.change(msg, f.alias(msg, kit.Split(strings.TrimSpace(one))))
|
ls := f.change(msg, f.alias(msg, kit.Split(strings.TrimSpace(one))))
|
||||||
if len(ls) == 0 {
|
if len(ls) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg.Cmdy(ls[0], ls[1:]); msg.Result(1) == ice.ErrNotFound {
|
msg.Render("", kit.List())
|
||||||
msg.Set(ice.MSG_RESULT).Cmdy(cli.SYSTEM, ls)
|
if msg.Cmdy(ls[0], ls[1:]); m.IsErrNotFound() {
|
||||||
|
msg.SetResult().Cmdy(cli.SYSTEM, ls)
|
||||||
}
|
}
|
||||||
|
|
||||||
_args, _ := msg.Optionv(ice.MSG_ARGS).([]interface{})
|
f.res = Render(msg, msg.Option(ice.MSG_OUTPUT), msg.Optionv(ice.MSG_ARGS).([]interface{})...)
|
||||||
f.res = Render(msg, msg.Option(ice.MSG_OUTPUT), _args...)
|
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -144,7 +137,7 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
|||||||
continue // 空行
|
continue // 空行
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Cmdx(mdb.INSERT, SOURCE, kit.Keys(kit.MDB_HASH, h), mdb.LIST, kit.MDB_TEXT, bio.Text())
|
m.Cmdx(mdb.INSERT, SOURCE, kit.Keys(mdb.HASH, h), mdb.LIST, mdb.TEXT, bio.Text())
|
||||||
f.count++
|
f.count++
|
||||||
|
|
||||||
if len(bio.Text()) == 0 {
|
if len(bio.Text()) == 0 {
|
||||||
@ -198,13 +191,12 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
f.stdin, f.stdout = r, os.Stdout
|
f.stdin, f.stdout = r, os.Stdout
|
||||||
f.pipe = w
|
f.pipe = w
|
||||||
|
|
||||||
aaa.UserRoot(m)
|
|
||||||
m.Option(ice.MSG_OPTS, ice.MSG_USERNAME)
|
m.Option(ice.MSG_OPTS, ice.MSG_USERNAME)
|
||||||
|
|
||||||
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, STDIO, kit.Keym(kit.MDB_NAME)), STDIO)
|
m.Conf(SOURCE, kit.Keys(mdb.HASH, STDIO, kit.Keym(mdb.NAME)), STDIO)
|
||||||
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, STDIO, kit.Keym(kit.MDB_TIME)), m.Time())
|
m.Conf(SOURCE, kit.Keys(mdb.HASH, STDIO, kit.Keym(mdb.TIME)), m.Time())
|
||||||
|
|
||||||
f.count = kit.Int(m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, STDIO, kit.Keym(kit.MDB_COUNT)))) + 1
|
f.count = kit.Int(m.Conf(SOURCE, kit.Keys(mdb.HASH, STDIO, kit.Keym(mdb.COUNT)))) + 1
|
||||||
f.scan(m, STDIO, "")
|
f.scan(m, STDIO, "")
|
||||||
|
|
||||||
default: // 脚本文件
|
default: // 脚本文件
|
||||||
@ -224,7 +216,7 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
f.count = 1
|
f.count = 1
|
||||||
f.scan(m, m.Cmdx(mdb.INSERT, SOURCE, "", mdb.HASH, kit.MDB_NAME, f.source), "")
|
f.scan(m, m.Cmdx(mdb.INSERT, SOURCE, "", mdb.HASH, mdb.NAME, f.source), "")
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -256,13 +248,14 @@ func init() {
|
|||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Data()},
|
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Data()},
|
||||||
PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data(
|
PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data(
|
||||||
PS1, []interface{}{"\033[33;44m", kit.MDB_COUNT, "[", kit.MDB_TIME, "]", "\033[5m", TARGET, "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"},
|
PS1, []interface{}{"\033[33;44m", mdb.COUNT, "[", mdb.TIME, "]", "\033[5m", TARGET, "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"},
|
||||||
PS2, []interface{}{kit.MDB_COUNT, " ", TARGET, "> "},
|
PS2, []interface{}{mdb.COUNT, " ", TARGET, "> "},
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
||||||
SOURCE: {Name: "source file", Help: "脚本解析", Action: ice.MergeAction(map[string]*ice.Action{
|
SOURCE: {Name: "source file", Help: "脚本解析", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.REPEAT: {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REPEAT: {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(SCREEN, m.Option(kit.MDB_TEXT))
|
m.Cmdy(SCREEN, m.Option(mdb.TEXT))
|
||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -29,23 +29,23 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi
|
|||||||
file := kit.Select("", arg, 0)
|
file := kit.Select("", arg, 0)
|
||||||
text = kit.Select(file, text)
|
text = kit.Select(file, text)
|
||||||
h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH,
|
h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH,
|
||||||
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
|
mdb.TYPE, kind, mdb.NAME, name, mdb.TEXT, text,
|
||||||
nfs.FILE, file, kit.MDB_SIZE, size)
|
nfs.FILE, file, nfs.SIZE, size)
|
||||||
|
|
||||||
// 返回结果
|
// 返回结果
|
||||||
m.Push(kit.MDB_TIME, m.Time())
|
m.Push(mdb.TIME, m.Time())
|
||||||
m.Push(kit.MDB_TYPE, kind)
|
m.Push(mdb.TYPE, kind)
|
||||||
m.Push(kit.MDB_NAME, name)
|
m.Push(mdb.NAME, name)
|
||||||
m.Push(kit.MDB_TEXT, text)
|
m.Push(mdb.TEXT, text)
|
||||||
m.Push(kit.MDB_SIZE, size)
|
m.Push(nfs.SIZE, size)
|
||||||
m.Push(nfs.FILE, file)
|
m.Push(nfs.FILE, file)
|
||||||
m.Push(kit.MDB_HASH, h)
|
m.Push(mdb.HASH, h)
|
||||||
m.Push(DATA, h)
|
m.Push(DATA, h)
|
||||||
}
|
}
|
||||||
func _cache_watch(m *ice.Message, key, file string) {
|
func _cache_watch(m *ice.Message, key, file string) {
|
||||||
mdb.HashSelect(m.Spawn(), key).Table(func(index int, value map[string]string, head []string) {
|
mdb.HashSelect(m.Spawn(), key).Table(func(index int, value map[string]string, head []string) {
|
||||||
if value[nfs.FILE] == "" {
|
if value[nfs.FILE] == "" {
|
||||||
m.Cmdy(nfs.SAVE, file, value[kit.MDB_TEXT])
|
m.Cmdy(nfs.SAVE, file, value[mdb.TEXT])
|
||||||
} else {
|
} else {
|
||||||
m.Cmdy(nfs.LINK, file, value[nfs.FILE])
|
m.Cmdy(nfs.LINK, file, value[nfs.FILE])
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ func _cache_upload(m *ice.Message, r *http.Request) (kind, name, file, size stri
|
|||||||
// 导入数据
|
// 导入数据
|
||||||
buf.Seek(0, os.SEEK_SET)
|
buf.Seek(0, os.SEEK_SET)
|
||||||
if n, e := io.Copy(f, buf); m.Assert(e) {
|
if n, e := io.Copy(f, buf); m.Assert(e) {
|
||||||
m.Log_IMPORT(nfs.FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(n)))
|
m.Log_IMPORT(nfs.FILE, p, nfs.SIZE, kit.FmtSize(int64(n)))
|
||||||
return h.Header.Get(ContentType), h.Filename, p, kit.Format(n)
|
return h.Header.Get(ContentType), h.Filename, p, kit.Format(n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,17 +93,19 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
|
|||||||
s := size * 100 / total
|
s := size * 100 / total
|
||||||
|
|
||||||
switch cb := m.OptionCB(SPIDE).(type) {
|
switch cb := m.OptionCB(SPIDE).(type) {
|
||||||
|
case func(int, int, int):
|
||||||
|
cb(size, total, s)
|
||||||
case func(int, int):
|
case func(int, int):
|
||||||
cb(size, total)
|
cb(size, total)
|
||||||
case []string:
|
case []string:
|
||||||
m.Richs(cb[0], cb[1], cb[2], func(key string, value map[string]interface{}) {
|
m.Richs(cb[0], cb[1], cb[2], func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
|
value[mdb.VALUE], value[mdb.COUNT], value[mdb.TOTAL] = kit.Format(s), size, total
|
||||||
})
|
})
|
||||||
default:
|
default:
|
||||||
if s != step && s%10 == 0 {
|
if s != step && s%10 == 0 {
|
||||||
m.Log_IMPORT(nfs.FILE, p, kit.MDB_STEP, s,
|
m.Log_IMPORT(nfs.FILE, p, mdb.VALUE, s,
|
||||||
kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
|
mdb.COUNT, kit.FmtSize(int64(size)), mdb.TOTAL, kit.FmtSize(int64(total)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step = s
|
step = s
|
||||||
@ -117,7 +119,7 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
|
|||||||
if f, e := os.Open(p); m.Assert(e) {
|
if f, e := os.Open(p); m.Assert(e) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
m.Log_IMPORT(nfs.FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(size)))
|
m.Log_IMPORT(nfs.FILE, p, nfs.SIZE, kit.FmtSize(int64(size)))
|
||||||
c := _cache_name(m, kit.Hashs(f))
|
c := _cache_name(m, kit.Hashs(f))
|
||||||
m.Cmd(nfs.LINK, c, p)
|
m.Cmd(nfs.LINK, c, p)
|
||||||
return c, kit.Format(size)
|
return c, kit.Format(size)
|
||||||
@ -138,15 +140,15 @@ const CACHE = "cache"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
CACHE: {Name: CACHE, Help: "缓存池", Value: kit.Data(
|
CACHE: {Name: CACHE, Help: "缓存池", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,size,type,name,text",
|
mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,size,type,name,text",
|
||||||
kit.MDB_STORE, ice.VAR_DATA, nfs.PATH, ice.VAR_FILE, kit.MDB_FSIZE, "200000",
|
kit.MDB_STORE, ice.VAR_DATA, nfs.PATH, ice.VAR_FILE, kit.MDB_FSIZE, "200000",
|
||||||
kit.MDB_LIMIT, "50", kit.MDB_LEAST, "30",
|
mdb.LIMIT, "50", kit.MDB_LEAST, "30",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
"/cache/": {Name: "/cache/", Help: "缓存池", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/cache/": {Name: "/cache/", Help: "缓存池", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Richs(CACHE, nil, arg[0], func(key string, value map[string]interface{}) {
|
m.Richs(CACHE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
if kit.Format(value[nfs.FILE]) == "" {
|
if kit.Format(value[nfs.FILE]) == "" {
|
||||||
m.RenderResult(value[kit.MDB_TEXT])
|
m.RenderResult(value[mdb.TEXT])
|
||||||
} else {
|
} else {
|
||||||
m.RenderDownload(value[nfs.FILE])
|
m.RenderDownload(value[nfs.FILE])
|
||||||
}
|
}
|
||||||
@ -179,9 +181,9 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if m.Append(nfs.FILE) == "" {
|
if m.Append(nfs.FILE) == "" {
|
||||||
m.PushScript("inner", m.Append(kit.MDB_TEXT))
|
m.PushScript("inner", m.Append(mdb.TEXT))
|
||||||
} else {
|
} else {
|
||||||
m.PushDownload(m.Append(kit.MDB_NAME), m.MergeURL2("/share/cache/"+arg[0]))
|
m.PushDownload(m.Append(mdb.NAME), m.MergeURL2("/share/cache/"+arg[0]))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -32,7 +32,7 @@ func _share_repos(m *ice.Message, repos string, arg ...string) {
|
|||||||
func _share_proxy(m *ice.Message) {
|
func _share_proxy(m *ice.Message) {
|
||||||
switch p := path.Join(ice.VAR_PROXY, m.Option(ice.POD), m.Option(nfs.PATH)); m.R.Method {
|
switch p := path.Join(ice.VAR_PROXY, m.Option(ice.POD), m.Option(nfs.PATH)); m.R.Method {
|
||||||
case http.MethodGet: // 下发文件
|
case http.MethodGet: // 下发文件
|
||||||
m.RenderDownload(path.Join(p, m.Option(kit.MDB_NAME)))
|
m.RenderDownload(path.Join(p, m.Option(mdb.NAME)))
|
||||||
|
|
||||||
case http.MethodPost: // 上传文件
|
case http.MethodPost: // 上传文件
|
||||||
m.Cmdy(CACHE, UPLOAD)
|
m.Cmdy(CACHE, UPLOAD)
|
||||||
@ -43,7 +43,7 @@ func _share_proxy(m *ice.Message) {
|
|||||||
func _share_cache(m *ice.Message, arg ...string) {
|
func _share_cache(m *ice.Message, arg ...string) {
|
||||||
if pod := m.Option(ice.POD); m.PodCmd(CACHE, arg[0]) {
|
if pod := m.Option(ice.POD); m.PodCmd(CACHE, arg[0]) {
|
||||||
if m.Append(nfs.FILE) == "" {
|
if m.Append(nfs.FILE) == "" {
|
||||||
m.RenderResult(m.Append(kit.MDB_TEXT))
|
m.RenderResult(m.Append(mdb.TEXT))
|
||||||
} else {
|
} else {
|
||||||
m.Option(ice.POD, pod)
|
m.Option(ice.POD, pod)
|
||||||
_share_local(m, m.Append(nfs.FILE))
|
_share_local(m, m.Append(nfs.FILE))
|
||||||
@ -51,7 +51,7 @@ func _share_cache(m *ice.Message, arg ...string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
msg := m.Cmd(CACHE, arg[0])
|
msg := m.Cmd(CACHE, arg[0])
|
||||||
m.RenderDownload(msg.Append(nfs.FILE), msg.Append(kit.MDB_TYPE), msg.Append(kit.MDB_NAME))
|
m.RenderDownload(msg.Append(nfs.FILE), msg.Append(mdb.TYPE), msg.Append(mdb.NAME))
|
||||||
}
|
}
|
||||||
func _share_local(m *ice.Message, arg ...string) {
|
func _share_local(m *ice.Message, arg ...string) {
|
||||||
p := path.Join(arg...)
|
p := path.Join(arg...)
|
||||||
@ -103,34 +103,34 @@ const SHARE = "share"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SHARE: {Name: SHARE, Help: "共享链", Value: kit.Data(
|
SHARE: {Name: SHARE, Help: "共享链", Value: kit.Data(
|
||||||
kit.MDB_EXPIRE, "72h", kit.MDB_FIELD, "time,hash,userrole,username,river,storm,type,name,text",
|
mdb.EXPIRE, "72h", mdb.FIELD, "time,hash,userrole,username,river,storm,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
ice.AddRender(ice.RENDER_DOWNLOAD, func(msg *ice.Message, cmd string, args ...interface{}) string {
|
|
||||||
list := []string{}
|
|
||||||
if msg.Option(ice.MSG_USERPOD) != "" {
|
|
||||||
list = append(list, ice.POD, msg.Option(ice.MSG_USERPOD))
|
|
||||||
}
|
|
||||||
|
|
||||||
arg := kit.Simple(args...)
|
|
||||||
if len(arg) > 1 {
|
|
||||||
list = append(list, "filename", arg[0])
|
|
||||||
}
|
|
||||||
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`,
|
|
||||||
_share_link(msg, kit.Select(arg[0], arg, 1), list), path.Base(arg[0]), arg[0])
|
|
||||||
})
|
|
||||||
}},
|
|
||||||
SHARE: {Name: "share hash auto prunes", Help: "共享链", Action: ice.MergeAction(map[string]*ice.Action{
|
SHARE: {Name: "share hash auto prunes", Help: "共享链", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
ice.AddRender(ice.RENDER_DOWNLOAD, func(msg *ice.Message, cmd string, args ...interface{}) string {
|
||||||
|
list := []string{}
|
||||||
|
if msg.Option(ice.MSG_USERPOD) != "" {
|
||||||
|
list = append(list, ice.POD, msg.Option(ice.MSG_USERPOD))
|
||||||
|
}
|
||||||
|
|
||||||
|
arg := kit.Simple(args...)
|
||||||
|
if len(arg) > 1 {
|
||||||
|
list = append(list, "filename", arg[0])
|
||||||
|
}
|
||||||
|
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`,
|
||||||
|
_share_link(msg, kit.Select(arg[0], arg, 1), list), path.Base(arg[0]), arg[0])
|
||||||
|
})
|
||||||
|
}},
|
||||||
mdb.CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, kit.MDB_TIME, m.Time(m.Config(kit.MDB_EXPIRE)),
|
m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, mdb.TIME, m.Time(m.Config(mdb.EXPIRE)),
|
||||||
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK),
|
aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK),
|
||||||
RIVER, m.Option(ice.MSG_RIVER), STORM, m.Option(ice.MSG_STORM), arg)
|
RIVER, m.Option(ice.MSG_RIVER), STORM, m.Option(ice.MSG_STORM), arg)
|
||||||
m.Option(kit.MDB_LINK, _share_link(m, "/share/"+m.Result()))
|
m.Option(mdb.LINK, _share_link(m, "/share/"+m.Result()))
|
||||||
}},
|
}},
|
||||||
LOGIN: {Name: "login userrole=void,tech username", Help: "登录", Hand: func(m *ice.Message, arg ...string) {
|
LOGIN: {Name: "login userrole=void,tech username", Help: "登录", Hand: func(m *ice.Message, arg ...string) {
|
||||||
msg := m.Cmd(SHARE, mdb.CREATE, kit.MDB_TYPE, LOGIN, m.OptionSimple(aaa.USERROLE, aaa.USERNAME))
|
msg := m.Cmd(SHARE, mdb.CREATE, mdb.TYPE, LOGIN, m.OptionSimple(aaa.USERROLE, aaa.USERNAME))
|
||||||
m.EchoQRCode(msg.Option(kit.MDB_LINK))
|
m.EchoQRCode(msg.Option(mdb.LINK))
|
||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -152,7 +152,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(SHARE, kit.Select(m.Option(SHARE), arg, 0))
|
m.Option(SHARE, kit.Select(m.Option(SHARE), arg, 0))
|
||||||
if msg := m.Cmd(SHARE, m.Option(SHARE)); kit.Int(msg.Append(kit.MDB_TIME)) < kit.Int(msg.FormatTime()) {
|
if msg := m.Cmd(SHARE, m.Option(SHARE)); kit.Int(msg.Append(mdb.TIME)) < kit.Int(msg.FormatTime()) {
|
||||||
m.RenderResult("共享超时")
|
m.RenderResult("共享超时")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ func init() {
|
|||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
SPACE: {Name: "space name cmd auto invite", Help: "空间站", Action: ice.MergeAction(map[string]*ice.Action{
|
SPACE: {Name: "space name cmd auto invite", Help: "空间站", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, SPACE, m.PrefixKey())
|
m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey())
|
||||||
m.Conf(SPACE, mdb.HASH, "")
|
m.Conf(SPACE, mdb.HASH, "")
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -30,10 +30,10 @@ func _spide_create(m *ice.Message, name, address string) {
|
|||||||
dir, file := path.Split(uri.EscapedPath())
|
dir, file := path.Split(uri.EscapedPath())
|
||||||
m.Echo(m.Rich(SPIDE, nil, kit.Dict(
|
m.Echo(m.Rich(SPIDE, nil, kit.Dict(
|
||||||
SPIDE_COOKIE, kit.Dict(), SPIDE_HEADER, kit.Dict(), SPIDE_CLIENT, kit.Dict(
|
SPIDE_COOKIE, kit.Dict(), SPIDE_HEADER, kit.Dict(), SPIDE_CLIENT, kit.Dict(
|
||||||
kit.MDB_NAME, name, SPIDE_METHOD, SPIDE_POST, "url", address,
|
mdb.NAME, name, SPIDE_METHOD, SPIDE_POST, "url", address,
|
||||||
tcp.PROTOCOL, uri.Scheme, tcp.HOSTNAME, uri.Host,
|
tcp.PROTOCOL, uri.Scheme, tcp.HOSTNAME, uri.Host,
|
||||||
nfs.PATH, dir, nfs.FILE, file, "query", uri.RawQuery,
|
nfs.PATH, dir, nfs.FILE, file, "query", uri.RawQuery,
|
||||||
kit.MDB_TIMEOUT, "600s", LOGHEADERS, ice.FALSE,
|
cli.TIMEOUT, "600s", LOGHEADERS, ice.FALSE,
|
||||||
),
|
),
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ func _spide_list(m *ice.Message, arg ...string) {
|
|||||||
_spide_head(m, req, head, value)
|
_spide_head(m, req, head, value)
|
||||||
|
|
||||||
// 发送请求
|
// 发送请求
|
||||||
res, e := _spide_send(m, req, kit.Format(client[kit.MDB_TIMEOUT]))
|
res, e := _spide_send(m, req, kit.Format(client[cli.TIMEOUT]))
|
||||||
if m.Warn(e, ice.ErrNotFound, uri) {
|
if m.Warn(e, ice.ErrNotFound, uri) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ func _spide_list(m *ice.Message, arg ...string) {
|
|||||||
|
|
||||||
// 检查结果
|
// 检查结果
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
m.Cost(kit.MDB_STATUS, res.Status, kit.MDB_SIZE, res.Header.Get(ContentLength), kit.MDB_TYPE, res.Header.Get(ContentType))
|
m.Cost(cli.STATUS, res.Status, nfs.SIZE, res.Header.Get(ContentLength), mdb.TYPE, res.Header.Get(ContentType))
|
||||||
|
|
||||||
// 缓存配置
|
// 缓存配置
|
||||||
for _, v := range res.Cookies() {
|
for _, v := range res.Cookies() {
|
||||||
@ -260,7 +260,7 @@ func _spide_save(m *ice.Message, cache, save, uri string, res *http.Response) {
|
|||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
if n, e := io.Copy(f, res.Body); m.Assert(e) {
|
if n, e := io.Copy(f, res.Body); m.Assert(e) {
|
||||||
m.Log_EXPORT(kit.MDB_SIZE, n, nfs.FILE, p)
|
m.Log_EXPORT(nfs.SIZE, n, nfs.FILE, p)
|
||||||
m.Echo(p)
|
m.Echo(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -331,18 +331,19 @@ const SPIDE = "spide"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SPIDE: {Name: SPIDE, Help: "蜘蛛侠", Value: kit.Data(
|
SPIDE: {Name: SPIDE, Help: "蜘蛛侠", Value: kit.Data(
|
||||||
kit.MDB_SHORT, CLIENT_NAME, kit.MDB_FIELD, "time,client.name,client.url",
|
mdb.SHORT, CLIENT_NAME, mdb.FIELD, "time,client.name,client.url",
|
||||||
LOGHEADERS, ice.FALSE,
|
LOGHEADERS, ice.FALSE,
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
m.Cmd(SPIDE, mdb.CREATE, ice.OPS, kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_ops")))
|
|
||||||
m.Cmd(SPIDE, mdb.CREATE, ice.DEV, kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_dev")))
|
|
||||||
m.Cmd(SPIDE, mdb.CREATE, ice.SHY, kit.Select("https://shylinux.com:443", m.Conf(cli.RUNTIME, "conf.ctx_shy")))
|
|
||||||
}},
|
|
||||||
SPIDE: {Name: "spide client.name action=raw,msg,save,cache method=GET,PUT,POST,DELETE url format=form,part,json,data,file arg run:button create", Help: "蜘蛛侠", Action: ice.MergeAction(map[string]*ice.Action{
|
SPIDE: {Name: "spide client.name action=raw,msg,save,cache method=GET,PUT,POST,DELETE url format=form,part,json,data,file arg run:button create", Help: "蜘蛛侠", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
conf := m.Confm(cli.RUNTIME, "conf")
|
||||||
|
m.Cmd(SPIDE, mdb.CREATE, ice.OPS, kit.Select("http://:9020", conf["ctx_ops"]))
|
||||||
|
m.Cmd(SPIDE, mdb.CREATE, ice.DEV, kit.Select("http://:9020", conf["ctx_dev"]))
|
||||||
|
m.Cmd(SPIDE, mdb.CREATE, ice.SHY, kit.Select("https://shylinux.com:443", conf["ctx_shy"]))
|
||||||
|
}},
|
||||||
mdb.CREATE: {Name: "create name address", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create name address", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_spide_create(m, m.Option(kit.MDB_NAME), m.Option(ADDRESS))
|
_spide_create(m, m.Option(mdb.NAME), m.Option(ADDRESS))
|
||||||
}},
|
}},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") {
|
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") {
|
||||||
|
@ -12,10 +12,10 @@ import (
|
|||||||
|
|
||||||
func _story_list(m *ice.Message, name string, key string) {
|
func _story_list(m *ice.Message, name string, key string) {
|
||||||
if name == "" {
|
if name == "" {
|
||||||
m.Richs(STORY, HEAD, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(STORY, HEAD, mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_COUNT, STORY})
|
m.Push(key, value, []string{mdb.TIME, mdb.COUNT, STORY})
|
||||||
})
|
})
|
||||||
m.SortTimeR(kit.MDB_TIME)
|
m.SortTimeR(mdb.TIME)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if key == "" {
|
if key == "" {
|
||||||
@ -45,10 +45,10 @@ func _story_index(m *ice.Message, name string, withdata bool) {
|
|||||||
m.Richs(CACHE, nil, name, func(key string, value map[string]interface{}) {
|
m.Richs(CACHE, nil, name, func(key string, value map[string]interface{}) {
|
||||||
// 查询数据
|
// 查询数据
|
||||||
m.Push(DATA, key)
|
m.Push(DATA, key)
|
||||||
m.Push(key, value, []string{kit.MDB_TEXT, nfs.FILE, kit.MDB_SIZE, kit.MDB_TIME, kit.MDB_NAME, kit.MDB_TYPE})
|
m.Push(key, value, []string{mdb.TEXT, nfs.FILE, nfs.SIZE, mdb.TIME, mdb.NAME, mdb.TYPE})
|
||||||
if withdata {
|
if withdata {
|
||||||
if value[nfs.FILE] == "" {
|
if value[nfs.FILE] == "" {
|
||||||
m.Echo("%s", kit.Format(value[kit.MDB_TEXT]))
|
m.Echo("%s", kit.Format(value[mdb.TEXT]))
|
||||||
} else {
|
} else {
|
||||||
m.Echo("%s", m.Cmdx(nfs.CAT, value[nfs.FILE]))
|
m.Echo("%s", m.Cmdx(nfs.CAT, value[nfs.FILE]))
|
||||||
}
|
}
|
||||||
@ -61,18 +61,18 @@ func _story_history(m *ice.Message, name string) {
|
|||||||
for i := 0; i < kit.Int(kit.Select("30", m.Option(ice.CACHE_LIMIT))) && list != ""; i++ {
|
for i := 0; i < kit.Int(kit.Select("30", m.Option(ice.CACHE_LIMIT))) && list != ""; i++ {
|
||||||
m.Richs(STORY, nil, list, func(key string, value map[string]interface{}) {
|
m.Richs(STORY, nil, list, func(key string, value map[string]interface{}) {
|
||||||
// 直连节点
|
// 直连节点
|
||||||
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_KEY, kit.MDB_COUNT, SCENE, STORY})
|
m.Push(key, value, []string{mdb.TIME, mdb.KEY, mdb.COUNT, SCENE, STORY})
|
||||||
m.Richs(CACHE, nil, value[DATA], func(key string, value map[string]interface{}) {
|
m.Richs(CACHE, nil, value[DATA], func(key string, value map[string]interface{}) {
|
||||||
m.Push(DRAMA, value[kit.MDB_TEXT])
|
m.Push(DRAMA, value[mdb.TEXT])
|
||||||
m.Push(DATA, key)
|
m.Push(DATA, key)
|
||||||
})
|
})
|
||||||
|
|
||||||
kit.Fetch(value[LIST], func(key string, val string) {
|
kit.Fetch(value[LIST], func(key string, val string) {
|
||||||
m.Richs(STORY, nil, val, func(key string, value map[string]interface{}) {
|
m.Richs(STORY, nil, val, func(key string, value map[string]interface{}) {
|
||||||
// 复合节点
|
// 复合节点
|
||||||
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_KEY, kit.MDB_COUNT, SCENE, STORY})
|
m.Push(key, value, []string{mdb.TIME, mdb.KEY, mdb.COUNT, SCENE, STORY})
|
||||||
m.Richs(CACHE, nil, value[DATA], func(key string, value map[string]interface{}) {
|
m.Richs(CACHE, nil, value[DATA], func(key string, value map[string]interface{}) {
|
||||||
m.Push(DRAMA, value[kit.MDB_TEXT])
|
m.Push(DRAMA, value[mdb.TEXT])
|
||||||
m.Push(DATA, key)
|
m.Push(DATA, key)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -87,19 +87,19 @@ func _story_write(m *ice.Message, scene, name, text string, arg ...string) {
|
|||||||
if len(arg) < 1 || text == "" || m.Richs(CACHE, nil, text, func(key string, value map[string]interface{}) { text = key }) == nil {
|
if len(arg) < 1 || text == "" || m.Richs(CACHE, nil, text, func(key string, value map[string]interface{}) { text = key }) == nil {
|
||||||
// 添加缓存
|
// 添加缓存
|
||||||
m.Cmdy(CACHE, CATCH, scene, name, text, arg)
|
m.Cmdy(CACHE, CATCH, scene, name, text, arg)
|
||||||
scene, name, text = m.Append(kit.MDB_TYPE), m.Append(kit.MDB_NAME), m.Append(DATA)
|
scene, name, text = m.Append(mdb.TYPE), m.Append(mdb.NAME), m.Append(DATA)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询索引
|
// 查询索引
|
||||||
head, prev, value, count := "", "", kit.Dict(), 0
|
head, prev, value, count := "", "", kit.Dict(), 0
|
||||||
m.Richs(STORY, HEAD, name, func(key string, val map[string]interface{}) {
|
m.Richs(STORY, HEAD, name, func(key string, val map[string]interface{}) {
|
||||||
head, prev, value, count = key, kit.Format(val[LIST]), val, kit.Int(val[kit.MDB_COUNT])
|
head, prev, value, count = key, kit.Format(val[LIST]), val, kit.Int(val[mdb.COUNT])
|
||||||
m.Logs("info", HEAD, head, PREV, prev, kit.MDB_COUNT, count)
|
m.Logs("info", HEAD, head, PREV, prev, mdb.COUNT, count)
|
||||||
})
|
})
|
||||||
|
|
||||||
if last := m.Richs(STORY, nil, prev, nil); prev != "" && last != nil && last[DATA] == text {
|
if last := m.Richs(STORY, nil, prev, nil); prev != "" && last != nil && last[DATA] == text {
|
||||||
// 重复提交
|
// 重复提交
|
||||||
m.Push(prev, last, []string{kit.MDB_TIME, kit.MDB_COUNT, kit.MDB_KEY})
|
m.Push(prev, last, []string{mdb.TIME, mdb.COUNT, mdb.KEY})
|
||||||
m.Logs("info", "file", "exists")
|
m.Logs("info", "file", "exists")
|
||||||
m.Echo(prev)
|
m.Echo(prev)
|
||||||
return
|
return
|
||||||
@ -107,28 +107,28 @@ func _story_write(m *ice.Message, scene, name, text string, arg ...string) {
|
|||||||
|
|
||||||
// 添加节点
|
// 添加节点
|
||||||
list := m.Rich(STORY, nil, kit.Dict(
|
list := m.Rich(STORY, nil, kit.Dict(
|
||||||
SCENE, scene, STORY, name, kit.MDB_COUNT, count+1, DATA, text, PREV, prev,
|
SCENE, scene, STORY, name, mdb.COUNT, count+1, DATA, text, PREV, prev,
|
||||||
))
|
))
|
||||||
m.Log_CREATE(STORY, list, kit.MDB_TYPE, scene, kit.MDB_NAME, name)
|
m.Log_CREATE(STORY, list, mdb.TYPE, scene, mdb.NAME, name)
|
||||||
m.Push(kit.MDB_COUNT, count+1)
|
m.Push(mdb.COUNT, count+1)
|
||||||
m.Push(kit.MDB_KEY, list)
|
m.Push(mdb.KEY, list)
|
||||||
|
|
||||||
if head == "" {
|
if head == "" {
|
||||||
// 添加索引
|
// 添加索引
|
||||||
m.Rich(STORY, HEAD, kit.Dict(SCENE, scene, STORY, name, kit.MDB_COUNT, count+1, LIST, list))
|
m.Rich(STORY, HEAD, kit.Dict(SCENE, scene, STORY, name, mdb.COUNT, count+1, LIST, list))
|
||||||
} else {
|
} else {
|
||||||
// 更新索引
|
// 更新索引
|
||||||
value[kit.MDB_COUNT] = count + 1
|
value[mdb.COUNT] = count + 1
|
||||||
value[kit.MDB_TIME] = m.Time()
|
value[mdb.TIME] = m.Time()
|
||||||
value[LIST] = list
|
value[LIST] = list
|
||||||
}
|
}
|
||||||
m.Echo(list)
|
m.Echo(list)
|
||||||
}
|
}
|
||||||
func _story_catch(m *ice.Message, scene, name string, arg ...string) {
|
func _story_catch(m *ice.Message, scene, name string, arg ...string) {
|
||||||
if last := m.Richs(STORY, HEAD, name, nil); last != nil {
|
if last := m.Richs(STORY, HEAD, name, nil); last != nil {
|
||||||
if t, e := time.ParseInLocation(ice.MOD_TIME, kit.Format(last[kit.MDB_TIME]), time.Local); e == nil {
|
if t, e := time.ParseInLocation(ice.MOD_TIME, kit.Format(last[mdb.TIME]), time.Local); e == nil {
|
||||||
if s, e := os.Stat(name); e == nil && s.ModTime().Before(t) {
|
if s, e := os.Stat(name); e == nil && s.ModTime().Before(t) {
|
||||||
m.Push(name, last, []string{kit.MDB_TIME, kit.MDB_COUNT, kit.MDB_KEY})
|
m.Push(name, last, []string{mdb.TIME, mdb.COUNT, mdb.KEY})
|
||||||
m.Logs("info", "file", "exists")
|
m.Logs("info", "file", "exists")
|
||||||
m.Echo("%s", last[LIST])
|
m.Echo("%s", last[LIST])
|
||||||
// 重复提交
|
// 重复提交
|
||||||
@ -165,8 +165,8 @@ func init() {
|
|||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
STORY: {Name: "story", Help: "故事会", Value: kit.Dict(
|
STORY: {Name: "story", Help: "故事会", Value: kit.Dict(
|
||||||
kit.MDB_META, kit.Dict(kit.MDB_SHORT, DATA),
|
mdb.META, kit.Dict(mdb.SHORT, DATA),
|
||||||
HEAD, kit.Data(kit.MDB_SHORT, STORY),
|
HEAD, kit.Data(mdb.SHORT, STORY),
|
||||||
)},
|
)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
|
@ -42,20 +42,20 @@ func (web *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
}
|
}
|
||||||
frame.ServeMux = http.NewServeMux()
|
frame.ServeMux = http.NewServeMux()
|
||||||
|
|
||||||
// 静态路由
|
|
||||||
msg := m.Spawn(s)
|
|
||||||
m.Confm(SERVE, kit.Keym(nfs.PATH), func(key string, value string) {
|
|
||||||
m.Log(ROUTE, "%s <- %s <- %s", s.Name, key, value)
|
|
||||||
frame.Handle(key, http.StripPrefix(key, http.FileServer(http.Dir(value))))
|
|
||||||
})
|
|
||||||
|
|
||||||
// 级联路由
|
// 级联路由
|
||||||
|
msg := m.Spawn(s)
|
||||||
if pframe, ok := p.Server().(*Frame); ok && pframe.ServeMux != nil {
|
if pframe, ok := p.Server().(*Frame); ok && pframe.ServeMux != nil {
|
||||||
route := ice.PS + s.Name + ice.PS
|
route := ice.PS + s.Name + ice.PS
|
||||||
msg.Log(ROUTE, "%s <= %s", p.Name, route)
|
msg.Log(ROUTE, "%s <= %s", p.Name, route)
|
||||||
pframe.Handle(route, http.StripPrefix(path.Dir(route), frame))
|
pframe.Handle(route, http.StripPrefix(path.Dir(route), frame))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 静态路由
|
||||||
|
m.Confm(SERVE, kit.Keym(nfs.PATH), func(key string, value string) {
|
||||||
|
m.Log(ROUTE, "%s <- %s <- %s", s.Name, key, value)
|
||||||
|
frame.Handle(key, http.StripPrefix(key, http.FileServer(http.Dir(value))))
|
||||||
|
})
|
||||||
|
|
||||||
// 命令路由
|
// 命令路由
|
||||||
m.Travel(func(p *ice.Context, sub *ice.Context, k string, x *ice.Command) {
|
m.Travel(func(p *ice.Context, sub *ice.Context, k string, x *ice.Command) {
|
||||||
if s != sub || k[0] != '/' {
|
if s != sub || k[0] != '/' {
|
||||||
|
@ -310,18 +310,18 @@ func (mat *Matrix) show(m *ice.Message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func _yac_load(m *ice.Message) {
|
func _yac_load(m *ice.Message) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("32", value[NCELL])))
|
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("32", value[NCELL])))
|
||||||
m.Grows(m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
m.Grows(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||||
page := mat.index(m, NPAGE, kit.Format(value[NPAGE]))
|
page := mat.index(m, NPAGE, kit.Format(value[NPAGE]))
|
||||||
hash := mat.index(m, NHASH, kit.Format(value[NHASH]))
|
hash := mat.index(m, NHASH, kit.Format(value[NHASH]))
|
||||||
if mat.mat[page] == nil {
|
if mat.mat[page] == nil {
|
||||||
mat.mat[page] = make([]*State, mat.ncell)
|
mat.mat[page] = make([]*State, mat.ncell)
|
||||||
}
|
}
|
||||||
|
|
||||||
mat.train(m, page, hash, kit.Simple(value[kit.MDB_TEXT]), 1)
|
mat.train(m, page, hash, kit.Simple(value[mdb.TEXT]), 1)
|
||||||
})
|
})
|
||||||
value[MATRIX] = mat
|
value[MATRIX] = mat
|
||||||
})
|
})
|
||||||
@ -345,7 +345,7 @@ const MATRIX = "matrix"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
MATRIX: {Name: MATRIX, Help: "魔方矩阵", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
MATRIX: {Name: MATRIX, Help: "魔方矩阵", Value: kit.Data(mdb.SHORT, mdb.NAME)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||||
_yac_load(m)
|
_yac_load(m)
|
||||||
@ -354,7 +354,7 @@ func init() {
|
|||||||
mdb.CREATE: {Name: "create name=shy nlang=32 ncell=32", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create name=shy nlang=32 ncell=32", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("32", m.Option(NCELL))))
|
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("32", m.Option(NCELL))))
|
||||||
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(
|
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(
|
||||||
kit.MDB_TIME, m.Time(), kit.MDB_NAME, m.Option(kit.MDB_NAME),
|
mdb.TIME, m.Time(), mdb.NAME, m.Option(mdb.NAME),
|
||||||
MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell,
|
MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell,
|
||||||
))
|
))
|
||||||
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
||||||
@ -364,7 +364,7 @@ func init() {
|
|||||||
m.Echo(h)
|
m.Echo(h)
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert name=shy npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert name=shy npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_NAME), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
mat, _ := value[MATRIX].(*Matrix)
|
mat, _ := value[MATRIX].(*Matrix)
|
||||||
@ -375,11 +375,11 @@ func init() {
|
|||||||
mat.mat[page] = make([]*State, mat.ncell)
|
mat.mat[page] = make([]*State, mat.ncell)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Option(kit.MDB_TEXT, strings.ReplaceAll(m.Option(kit.MDB_TEXT), "\\", "\\\\"))
|
m.Option(mdb.TEXT, strings.ReplaceAll(m.Option(mdb.TEXT), "\\", "\\\\"))
|
||||||
text := kit.Split(m.Option(kit.MDB_TEXT), " ", " ", " ")
|
text := kit.Split(m.Option(mdb.TEXT), " ", " ", " ")
|
||||||
mat.train(m, page, hash, text, 1)
|
mat.train(m, page, hash, text, 1)
|
||||||
m.Grow(m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, key), kit.Dict(
|
m.Grow(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), kit.Dict(
|
||||||
kit.MDB_TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), kit.MDB_TEXT, text,
|
mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, text,
|
||||||
))
|
))
|
||||||
|
|
||||||
value[NPAGE] = len(mat.page)
|
value[NPAGE] = len(mat.page)
|
||||||
@ -387,14 +387,14 @@ func init() {
|
|||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
|
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, mdb.NAME, m.Option(mdb.NAME))
|
||||||
}},
|
}},
|
||||||
PARSE: {Name: "parse name npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
|
PARSE: {Name: "parse name npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", m.Option(kit.MDB_NAME), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
mat, _ := value[MATRIX].(*Matrix)
|
mat, _ := value[MATRIX].(*Matrix)
|
||||||
|
|
||||||
for stream := lex.NewStream(bytes.NewBufferString(m.Option(kit.MDB_TEXT))); stream.Scan(); {
|
for stream := lex.NewStream(bytes.NewBufferString(m.Option(mdb.TEXT))); stream.Scan(); {
|
||||||
hash, _ := mat.Parse(m, func(m *ice.Message, nhash string, hash int, word []string, begin int, stream *lex.Stream) (int, []string) {
|
hash, _ := mat.Parse(m, func(m *ice.Message, nhash string, hash int, word []string, begin int, stream *lex.Stream) (int, []string) {
|
||||||
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
switch cb := m.Optionv(kit.Keycb(MATRIX)).(type) {
|
||||||
case func(string, int, []string, int, *lex.Stream) (int, []string):
|
case func(string, int, []string, int, *lex.Stream) (int, []string):
|
||||||
@ -411,7 +411,7 @@ func init() {
|
|||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
|
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(kit.MDB_NAME), arg, 0), func(key string, value map[string]interface{}) {
|
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(mdb.NAME), arg, 0), func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
value[MATRIX].(*Matrix).show(m)
|
value[MATRIX].(*Matrix).show(m)
|
||||||
})
|
})
|
||||||
@ -428,7 +428,7 @@ func init() {
|
|||||||
|
|
||||||
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
||||||
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
||||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST)
|
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(mdb.HASH, kit.Hashs(arg[0])), mdb.LIST)
|
||||||
m.PushAction(PARSE)
|
m.PushAction(PARSE)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -98,19 +98,19 @@ func init() {
|
|||||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||||
SCRIPT: {Name: "script name npage text auto create", Help: "脚本解析", Action: map[string]*ice.Action{
|
SCRIPT: {Name: "script name npage text auto create", Help: "脚本解析", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create name=shy text=etc/yac.txt", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create name=shy text=etc/yac.txt", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(MATRIX, mdb.CREATE, m.Option(kit.MDB_NAME))
|
m.Cmd(MATRIX, mdb.CREATE, m.Option(mdb.NAME))
|
||||||
if buf, err := ioutil.ReadFile(m.Option(kit.MDB_TEXT)); err == nil {
|
if buf, err := ioutil.ReadFile(m.Option(mdb.TEXT)); err == nil {
|
||||||
m.Option(kit.MDB_TEXT, string(buf))
|
m.Option(mdb.TEXT, string(buf))
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Option(kit.MDB_TEXT, strings.ReplaceAll(m.Option(kit.MDB_TEXT), "\\", "\\\\"))
|
m.Option(mdb.TEXT, strings.ReplaceAll(m.Option(mdb.TEXT), "\\", "\\\\"))
|
||||||
for _, line := range kit.Split(m.Option(kit.MDB_TEXT), "\n", "\n", "\n") {
|
for _, line := range kit.Split(m.Option(mdb.TEXT), "\n", "\n", "\n") {
|
||||||
if strings.HasPrefix(strings.TrimSpace(line), "#") {
|
if strings.HasPrefix(strings.TrimSpace(line), "#") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
line = strings.ReplaceAll(line, "\\", "\\\\")
|
line = strings.ReplaceAll(line, "\\", "\\\\")
|
||||||
if list := kit.Split(line, " ", " ", " "); len(list) > 2 {
|
if list := kit.Split(line, " ", " ", " "); len(list) > 2 {
|
||||||
m.Cmdx(MATRIX, mdb.INSERT, m.Option(kit.MDB_NAME), list[0], list[1], strings.Join(list[2:], " "))
|
m.Cmdx(MATRIX, mdb.INSERT, m.Option(mdb.NAME), list[0], list[1], strings.Join(list[2:], " "))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
11
conf.go
11
conf.go
@ -12,6 +12,10 @@ const (
|
|||||||
|
|
||||||
PWD = "./"
|
PWD = "./"
|
||||||
|
|
||||||
|
JS = "js"
|
||||||
|
GO = "go"
|
||||||
|
SH = "sh"
|
||||||
|
|
||||||
OK = "ok"
|
OK = "ok"
|
||||||
TRUE = "true"
|
TRUE = "true"
|
||||||
FALSE = "false"
|
FALSE = "false"
|
||||||
@ -23,6 +27,7 @@ const (
|
|||||||
LOAD = "load"
|
LOAD = "load"
|
||||||
AUTO = "auto"
|
AUTO = "auto"
|
||||||
HELP = "help"
|
HELP = "help"
|
||||||
|
HTTP = "http"
|
||||||
SAVE = "save"
|
SAVE = "save"
|
||||||
EXIT = "exit"
|
EXIT = "exit"
|
||||||
|
|
||||||
@ -65,8 +70,9 @@ const ( // REPOS
|
|||||||
INTSHELL = "intshell"
|
INTSHELL = "intshell"
|
||||||
CONTEXTS = "contexts"
|
CONTEXTS = "contexts"
|
||||||
|
|
||||||
REQUIRE = "require"
|
|
||||||
INSTALL = "install"
|
INSTALL = "install"
|
||||||
|
REQUIRE = "require"
|
||||||
|
DISPLAY = "display"
|
||||||
PUBLISH = "publish"
|
PUBLISH = "publish"
|
||||||
RELEASE = "release"
|
RELEASE = "release"
|
||||||
)
|
)
|
||||||
@ -86,6 +92,9 @@ const ( // DIR
|
|||||||
USR_INSTALL = "usr/install"
|
USR_INSTALL = "usr/install"
|
||||||
USR_PUBLISH = "usr/publish"
|
USR_PUBLISH = "usr/publish"
|
||||||
|
|
||||||
|
PLUGIN_STORY = "/plugin/story"
|
||||||
|
PLUGIN_LOCAL = "/plugin/local"
|
||||||
|
|
||||||
FAVICON = "favicon.ico"
|
FAVICON = "favicon.ico"
|
||||||
PROTO_JS = "proto.js"
|
PROTO_JS = "proto.js"
|
||||||
FRAME_JS = "frame.js"
|
FRAME_JS = "frame.js"
|
||||||
|
@ -15,7 +15,7 @@ import (
|
|||||||
func _action_right(m *ice.Message, river string, storm string) (ok bool) {
|
func _action_right(m *ice.Message, river string, storm string) (ok bool) {
|
||||||
if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID {
|
if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID {
|
||||||
m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) {
|
m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) {
|
||||||
if ok = m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), nil) != nil; ok {
|
if ok = m.Richs(RIVER, kit.Keys(mdb.HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), nil) != nil; ok {
|
||||||
m.Log_AUTH(RIVER, river, STORM, storm)
|
m.Log_AUTH(RIVER, river, STORM, storm)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -23,7 +23,7 @@ func _action_right(m *ice.Message, river string, storm string) (ok bool) {
|
|||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
func _action_key(m *ice.Message, arg ...string) string {
|
func _action_key(m *ice.Message, arg ...string) string {
|
||||||
return kit.Keys(kit.MDB_HASH, kit.Select(m.Option(RIVER), arg, 0), STORM, kit.MDB_HASH, kit.Select(m.Option(STORM), arg, 1))
|
return kit.Keys(mdb.HASH, kit.Select(m.Option(RIVER), arg, 0), STORM, mdb.HASH, kit.Select(m.Option(STORM), arg, 1))
|
||||||
}
|
}
|
||||||
func _action_list(m *ice.Message, river, storm string) {
|
func _action_list(m *ice.Message, river, storm string) {
|
||||||
m.Cmdy(STORM, storm, ice.Option{ice.MSG_RIVER, river}).Table(func(index int, value map[string]string, head []string) {
|
m.Cmdy(STORM, storm, ice.Option{ice.MSG_RIVER, river}).Table(func(index int, value map[string]string, head []string) {
|
||||||
@ -35,7 +35,7 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) {
|
|||||||
m.Option(ice.MSG_STORM, storm)
|
m.Option(ice.MSG_STORM, storm)
|
||||||
|
|
||||||
cmds := []string{index}
|
cmds := []string{index}
|
||||||
if m.Grows(RIVER, _action_key(m, river, storm), kit.MDB_ID, index, func(index int, value map[string]interface{}) {
|
if m.Grows(RIVER, _action_key(m, river, storm), mdb.ID, index, func(index int, value map[string]interface{}) {
|
||||||
if cmds = kit.Simple(kit.Keys(value[ice.CTX], value[ice.CMD])); kit.Format(value[ice.POD]) != "" {
|
if cmds = kit.Simple(kit.Keys(value[ice.CTX], value[ice.CMD])); kit.Format(value[ice.POD]) != "" {
|
||||||
m.Option(ice.POD, value[ice.POD]) // 远程节点
|
m.Option(ice.POD, value[ice.POD]) // 远程节点
|
||||||
}
|
}
|
||||||
@ -52,9 +52,9 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _action_share(m *ice.Message, arg ...string) {
|
func _action_share(m *ice.Message, arg ...string) {
|
||||||
switch msg := m.Cmd(web.SHARE, arg[0]); msg.Append(kit.MDB_TYPE) {
|
switch msg := m.Cmd(web.SHARE, arg[0]); msg.Append(mdb.TYPE) {
|
||||||
case web.STORM:
|
case web.STORM:
|
||||||
if m.Warn(kit.Time() > kit.Time(msg.Append(kit.MDB_TIME)), ice.ErrExpire, arg) {
|
if m.Warn(kit.Time() > kit.Time(msg.Append(mdb.TIME)), ice.ErrExpire, arg) {
|
||||||
break // 分享超时
|
break // 分享超时
|
||||||
}
|
}
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
@ -77,13 +77,13 @@ func _action_share(m *ice.Message, arg ...string) {
|
|||||||
_action_exec(m, msg.Append(web.RIVER), msg.Append(web.STORM), arg[1], arg[2:]...)
|
_action_exec(m, msg.Append(web.RIVER), msg.Append(web.STORM), arg[1], arg[2:]...)
|
||||||
|
|
||||||
case web.FIELD:
|
case web.FIELD:
|
||||||
if m.Warn(kit.Time() > kit.Time(msg.Append(kit.MDB_TIME)), ice.ErrExpire, arg) {
|
if m.Warn(kit.Time() > kit.Time(msg.Append(mdb.TIME)), ice.ErrExpire, arg) {
|
||||||
break // 分享超时
|
break // 分享超时
|
||||||
}
|
}
|
||||||
if arg[0] = msg.Append(kit.MDB_NAME); len(arg) == 1 {
|
if arg[0] = msg.Append(mdb.NAME); len(arg) == 1 {
|
||||||
m.Push("title", msg.Append(kit.MDB_TITLE))
|
m.Push("title", msg.Append(kit.MDB_TITLE))
|
||||||
m.Push("index", msg.Append(kit.MDB_NAME))
|
m.Push("index", msg.Append(mdb.NAME))
|
||||||
m.Push("args", msg.Append(kit.MDB_TEXT))
|
m.Push("args", msg.Append(mdb.TEXT))
|
||||||
break // 命令列表
|
break // 命令列表
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,12 +115,12 @@ func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
|
|||||||
river := kit.Select(m.Option(ice.MSG_RIVER), arg, 0)
|
river := kit.Select(m.Option(ice.MSG_RIVER), arg, 0)
|
||||||
storm := kit.Select(m.Option(ice.MSG_STORM), arg, 1)
|
storm := kit.Select(m.Option(ice.MSG_STORM), arg, 1)
|
||||||
m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) {
|
m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) {
|
||||||
switch kit.Value(kit.GetMeta(value), kit.MDB_TYPE) {
|
switch kit.Value(kit.GetMeta(value), mdb.TYPE) {
|
||||||
case PUBLIC: // 公有群
|
case PUBLIC: // 公有群
|
||||||
return
|
return
|
||||||
case PROTECTED: // 共有群
|
case PROTECTED: // 共有群
|
||||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, river, STORM), storm, func(key string, value map[string]interface{}) {
|
m.Richs(RIVER, kit.Keys(mdb.HASH, river, STORM), storm, func(key string, value map[string]interface{}) {
|
||||||
switch r := "R" + river; kit.Value(kit.GetMeta(value), kit.MDB_TYPE) {
|
switch r := "R" + river; kit.Value(kit.GetMeta(value), mdb.TYPE) {
|
||||||
case PUBLIC: // 公有组
|
case PUBLIC: // 公有组
|
||||||
domain = m.Option(ice.MSG_DOMAIN, kit.Keys(r))
|
domain = m.Option(ice.MSG_DOMAIN, kit.Keys(r))
|
||||||
case PROTECTED: // 共有组
|
case PROTECTED: // 共有组
|
||||||
@ -139,7 +139,7 @@ func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
|
|||||||
}
|
}
|
||||||
func _action_upload(m *ice.Message) {
|
func _action_upload(m *ice.Message) {
|
||||||
msg := m.Cmd(web.CACHE, web.UPLOAD)
|
msg := m.Cmd(web.CACHE, web.UPLOAD)
|
||||||
m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE))
|
m.Option(ice.MSG_UPLOAD, msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -179,7 +179,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.MODIFY, RIVER, _action_key(m), mdb.LIST, m.OptionSimple(kit.MDB_ID), arg)
|
m.Cmdy(mdb.MODIFY, RIVER, _action_key(m), mdb.LIST, m.OptionSimple(mdb.ID), arg)
|
||||||
}},
|
}},
|
||||||
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_header_share(m, arg...)
|
_header_share(m, arg...)
|
||||||
|
@ -16,17 +16,17 @@ const CMD = "cmd"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
CMD: {Name: CMD, Help: "命令", Value: kit.Data(kit.MDB_SHORT, "type", nfs.PATH, ice.PWD)},
|
CMD: {Name: CMD, Help: "命令", Value: kit.Data(mdb.SHORT, "type", nfs.PATH, ice.PWD)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
"/cmd/": {Name: "/cmd/", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
|
"/cmd/": {Name: "/cmd/", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Name: "_init", Help: "初始化", Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Name: "_init", Help: "初始化", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(CMD, mdb.CREATE, kit.MDB_TYPE, "shy", kit.MDB_NAME, "web.wiki.word")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, "shy", mdb.NAME, "web.wiki.word")
|
||||||
m.Cmdy(CMD, mdb.CREATE, kit.MDB_TYPE, "svg", kit.MDB_NAME, "web.wiki.draw")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, "svg", mdb.NAME, "web.wiki.draw")
|
||||||
m.Cmdy(CMD, mdb.CREATE, kit.MDB_TYPE, "csv", kit.MDB_NAME, "web.wiki.data")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, "csv", mdb.NAME, "web.wiki.data")
|
||||||
m.Cmdy(CMD, mdb.CREATE, kit.MDB_TYPE, "json", kit.MDB_NAME, "web.wiki.json")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, "json", mdb.NAME, "web.wiki.json")
|
||||||
|
|
||||||
for _, k := range []string{"sh", "go", "js", "mod", "sum"} {
|
for _, k := range []string{"sh", "go", "js", "mod", "sum"} {
|
||||||
m.Cmdy(CMD, mdb.CREATE, kit.MDB_TYPE, k, kit.MDB_NAME, "web.code.inner")
|
m.Cmdy(CMD, mdb.CREATE, mdb.TYPE, k, mdb.NAME, "web.code.inner")
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -37,7 +37,7 @@ func init() {
|
|||||||
|
|
||||||
p := path.Join(m.Config(nfs.PATH), path.Join(arg...))
|
p := path.Join(m.Config(nfs.PATH), path.Join(arg...))
|
||||||
if mdb.HashSelect(m.Spawn(), kit.Ext(m.R.URL.Path)).Table(func(index int, value map[string]string, head []string) {
|
if mdb.HashSelect(m.Spawn(), kit.Ext(m.R.URL.Path)).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.RenderCmd(value[kit.MDB_NAME], p)
|
m.RenderCmd(value[mdb.NAME], p)
|
||||||
}).Length() > 0 {
|
}).Length() > 0 {
|
||||||
return // 插件
|
return // 插件
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,8 @@ const DIV = "div"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
DIV: {Name: "div", Help: "定制", Value: kit.Data(
|
DIV: {Name: "div", Help: "定制", Value: kit.Data(
|
||||||
kit.MDB_FIELD, "time,hash,type,name,text", nfs.PATH, ice.USR_PUBLISH,
|
mdb.FIELD, "time,hash,type,name,text", nfs.PATH, ice.USR_PUBLISH,
|
||||||
kit.MDB_TEMPLATE, _div_template,
|
nfs.TEMPLATE, _div_template,
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
"/div/": {Name: "/div/", Help: "定制", Action: ice.MergeAction(ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/div/": {Name: "/div/", Help: "定制", Action: ice.MergeAction(ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -47,8 +47,8 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
DIV: {Name: "div hash auto import", Help: "定制", Action: ice.MergeAction(map[string]*ice.Action{
|
DIV: {Name: "div hash auto import", Help: "定制", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
lex.SPLIT: {Name: "split name=hi text", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
|
lex.SPLIT: {Name: "split name=hi text", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
|
||||||
h := m.Cmdx(DIV, mdb.CREATE, m.OptionSimple(kit.MDB_NAME), kit.MDB_TEXT, _div_parse(m, m.Option(kit.MDB_TEXT)))
|
h := m.Cmdx(DIV, mdb.CREATE, m.OptionSimple(mdb.NAME), mdb.TEXT, _div_parse(m, m.Option(mdb.TEXT)))
|
||||||
m.ProcessRewrite(kit.MDB_HASH, h)
|
m.ProcessRewrite(mdb.HASH, h)
|
||||||
}},
|
}},
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
@ -61,7 +61,7 @@ func init() {
|
|||||||
m.Cmd(nfs.DIR, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH)), func(p string) {
|
m.Cmd(nfs.DIR, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH)), func(p string) {
|
||||||
switch kit.Ext(p) {
|
switch kit.Ext(p) {
|
||||||
case "shy":
|
case "shy":
|
||||||
m.Cmd(m.PrefixKey(), lex.SPLIT, kit.MDB_NAME, p, kit.MDB_TEXT, m.Cmdx(nfs.CAT, p))
|
m.Cmd(m.PrefixKey(), lex.SPLIT, mdb.NAME, p, mdb.TEXT, m.Cmdx(nfs.CAT, p))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
@ -69,7 +69,7 @@ func init() {
|
|||||||
switch kit.Ext(kit.Select("", arg, 0)) {
|
switch kit.Ext(kit.Select("", arg, 0)) {
|
||||||
case "shy":
|
case "shy":
|
||||||
m.Fields(0)
|
m.Fields(0)
|
||||||
m.Push(kit.MDB_TEXT, _div_parse(m, m.Cmdx(nfs.CAT, arg[0])))
|
m.Push(mdb.TEXT, _div_parse(m, m.Cmdx(nfs.CAT, arg[0])))
|
||||||
m.DisplayLocal("")
|
m.DisplayLocal("")
|
||||||
default:
|
default:
|
||||||
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
||||||
|
@ -3,6 +3,7 @@ package chat
|
|||||||
import (
|
import (
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
@ -12,7 +13,7 @@ const FILES = "files"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
FILES: {Name: FILES, Help: "文件夹", Value: kit.Data(
|
FILES: {Name: FILES, Help: "文件夹", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_DATA, kit.MDB_FIELD, "time,hash,type,name,size,data",
|
mdb.SHORT, mdb.DATA, mdb.FIELD, "time,hash,type,name,size,data",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
FILES: {Name: "files hash auto upload", Help: "文件夹", Action: ice.MergeAction(map[string]*ice.Action{
|
FILES: {Name: "files hash auto upload", Help: "文件夹", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -20,15 +21,15 @@ func init() {
|
|||||||
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
|
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
|
||||||
if len(up) < 2 {
|
if len(up) < 2 {
|
||||||
msg := m.Cmdy(web.CACHE, web.UPLOAD)
|
msg := m.Cmdy(web.CACHE, web.UPLOAD)
|
||||||
up = kit.Simple(msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE))
|
up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
|
||||||
}
|
}
|
||||||
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])
|
m.Cmdy(mdb.INSERT, m.Prefix(FILES), "", mdb.HASH, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0])
|
||||||
}},
|
}},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
mdb.HashSelect(m, arg...)
|
mdb.HashSelect(m, arg...)
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
link := "/share/cache/" + value[kit.MDB_DATA]
|
link := "/share/cache/" + value[mdb.DATA]
|
||||||
if m.PushDownload(kit.MDB_LINK, value[kit.MDB_NAME], link); len(arg) > 0 && kit.ExtIsImage(value[kit.MDB_NAME]) {
|
if m.PushDownload(mdb.LINK, value[mdb.NAME], link); len(arg) > 0 && kit.ExtIsImage(value[mdb.NAME]) {
|
||||||
m.PushImages(kit.MDB_IMAGE, link)
|
m.PushImages(kit.MDB_IMAGE, link)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -22,7 +22,7 @@ func _header_agent(m *ice.Message, arg ...string) {
|
|||||||
}
|
}
|
||||||
func _header_check(m *ice.Message, arg ...string) {
|
func _header_check(m *ice.Message, arg ...string) {
|
||||||
if m.Option(web.SHARE) != "" {
|
if m.Option(web.SHARE) != "" {
|
||||||
switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) {
|
switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(mdb.TYPE) {
|
||||||
case web.LOGIN:
|
case web.LOGIN:
|
||||||
if m.Option(ice.MSG_USERNAME) != msg.Append(aaa.USERNAME) {
|
if m.Option(ice.MSG_USERNAME) != msg.Append(aaa.USERNAME) {
|
||||||
web.RenderCookie(m, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME))))
|
web.RenderCookie(m, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME, msg.Append(aaa.USERNAME))))
|
||||||
@ -49,15 +49,15 @@ func _header_grant(m *ice.Message, arg ...string) {
|
|||||||
m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME)))
|
m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME)))
|
||||||
}
|
}
|
||||||
func _header_share(m *ice.Message, arg ...string) {
|
func _header_share(m *ice.Message, arg ...string) {
|
||||||
if m.Option(kit.MDB_LINK) == "" {
|
if m.Option(mdb.LINK) == "" {
|
||||||
m.Cmdy(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN, arg)
|
m.Cmdy(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN, arg)
|
||||||
} else {
|
} else {
|
||||||
m.Option(kit.MDB_LINK, tcp.ReplaceLocalhost(m, m.Option(kit.MDB_LINK)))
|
m.Option(mdb.LINK, tcp.ReplaceLocalhost(m, m.Option(mdb.LINK)))
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Option(kit.MDB_LINK, kit.MergeURL(m.Option(kit.MDB_LINK), RIVER, "", STORM, ""))
|
m.Option(mdb.LINK, kit.MergeURL(m.Option(mdb.LINK), RIVER, "", STORM, ""))
|
||||||
m.PushQRCode(kit.MDB_TEXT, m.Option(kit.MDB_LINK))
|
m.PushQRCode(mdb.TEXT, m.Option(mdb.LINK))
|
||||||
m.Push(kit.MDB_NAME, m.Option(kit.MDB_LINK))
|
m.Push(mdb.NAME, m.Option(mdb.LINK))
|
||||||
}
|
}
|
||||||
func _header_users(m *ice.Message, key string, arg ...string) {
|
func _header_users(m *ice.Message, key string, arg ...string) {
|
||||||
m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
||||||
@ -132,7 +132,7 @@ func init() {
|
|||||||
|
|
||||||
code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) {
|
code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(nfs.COPY, ice.GO_MOD, path.Join(ice.SRC_RELEASE, ice.GO_MOD))
|
m.Cmd(nfs.COPY, ice.GO_MOD, path.Join(ice.SRC_RELEASE, ice.GO_MOD))
|
||||||
m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(kit.MDB_NAME))
|
m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(mdb.NAME))
|
||||||
}},
|
}},
|
||||||
code.DEVPACK: {Name: "devpack", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) {
|
code.DEVPACK: {Name: "devpack", Help: "开发模式", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(nfs.COPY, ice.GO_MOD, path.Join(ice.SRC_DEBUG, ice.GO_MOD))
|
m.Cmd(nfs.COPY, ice.GO_MOD, path.Join(ice.SRC_DEBUG, ice.GO_MOD))
|
||||||
|
@ -3,7 +3,6 @@ package chat
|
|||||||
import (
|
import (
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/mdb"
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
kit "shylinux.com/x/toolkits"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const INFO = "info"
|
const INFO = "info"
|
||||||
@ -12,11 +11,11 @@ func init() {
|
|||||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||||
INFO: {Name: "info auto", Help: "信息", Action: map[string]*ice.Action{
|
INFO: {Name: "info auto", Help: "信息", Action: map[string]*ice.Action{
|
||||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.MODIFY, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(ice.MSG_RIVER), arg)
|
m.Cmdy(mdb.MODIFY, RIVER, "", mdb.HASH, mdb.HASH, m.Option(ice.MSG_RIVER), arg)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.OptionFields(mdb.DETAIL)
|
m.OptionFields(mdb.DETAIL)
|
||||||
m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, kit.MDB_HASH, m.Option(ice.MSG_RIVER))
|
m.Cmdy(mdb.SELECT, RIVER, "", mdb.HASH, mdb.HASH, m.Option(ice.MSG_RIVER))
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ const LOCATION = "location"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
LOCATION: {Name: LOCATION, Help: "地理位置", Value: kit.Data(
|
LOCATION: {Name: LOCATION, Help: "地理位置", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,type,name,text,longitude,latitude",
|
mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text,longitude,latitude",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
LOCATION: {Name: "location hash auto getLocation", Help: "地理位置", Action: ice.MergeAction(map[string]*ice.Action{
|
LOCATION: {Name: "location hash auto getLocation", Help: "地理位置", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
@ -14,7 +14,7 @@ const MISS = "miss"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Register(&ice.Context{Name: MEET, Help: "遇见", Configs: map[string]*ice.Config{
|
Index.Register(&ice.Context{Name: MEET, Help: "遇见", Configs: map[string]*ice.Config{
|
||||||
MISS: {Name: MISS, Help: "miss", Value: kit.Data(
|
MISS: {Name: MISS, Help: "miss", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_FIELD, "time,name,照片,性别,年龄,身高,体重,籍贯,户口,学历,学校,职业,公司,年薪,资产,家境",
|
mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,照片,性别,年龄,身高,体重,籍贯,户口,学历,学校,职业,公司,年薪,资产,家境",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
MISS: {Name: "miss name auto create", Help: "资料", Meta: kit.Dict("_trans", kit.Dict("name", "姓名")), Action: ice.MergeAction(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{
|
||||||
|
@ -22,7 +22,7 @@ func init() {
|
|||||||
if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" {
|
if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) == RIVER {
|
if msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(mdb.TYPE) == RIVER {
|
||||||
m.Cmdy(NODE, mdb.INSERT, arg)
|
m.Cmdy(NODE, mdb.INSERT, arg)
|
||||||
} else {
|
} else {
|
||||||
msg.Debug(msg.FormatMeta())
|
msg.Debug(msg.FormatMeta())
|
||||||
@ -41,10 +41,10 @@ func init() {
|
|||||||
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg)
|
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg)
|
||||||
}},
|
}},
|
||||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, NODE), mdb.HASH, kit.MDB_NAME, m.Option(ice.POD))
|
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, NODE), mdb.HASH, mdb.NAME, m.Option(ice.POD))
|
||||||
}},
|
}},
|
||||||
aaa.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
|
aaa.INVITE: {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, RIVER))
|
m.Option(web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, mdb.TYPE, RIVER))
|
||||||
m.Cmdy(code.PUBLISH, ice.CONTEXTS, "tool")
|
m.Cmdy(code.PUBLISH, ice.CONTEXTS, "tool")
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -52,7 +52,7 @@ func init() {
|
|||||||
m.Option(mdb.FIELDS, "time,type,name,share")
|
m.Option(mdb.FIELDS, "time,type,name,share")
|
||||||
m.Cmdy(mdb.SELECT, RIVER, _river_key(m, NODE), mdb.HASH)
|
m.Cmdy(mdb.SELECT, RIVER, _river_key(m, NODE), mdb.HASH)
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
m.PushAnchor(value[kit.MDB_NAME], m.MergeURL2("/chat/pod/"+kit.Keys(m.Option(ice.POD), value[kit.MDB_NAME])))
|
m.PushAnchor(value[mdb.NAME], m.MergeURL2("/chat/pod/"+kit.Keys(m.Option(ice.POD), value[mdb.NAME])))
|
||||||
})
|
})
|
||||||
m.RenameAppend("name", "pod")
|
m.RenameAppend("name", "pod")
|
||||||
m.PushAction(mdb.REMOVE)
|
m.PushAction(mdb.REMOVE)
|
||||||
|
@ -13,7 +13,7 @@ const PASTE = "paste"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
PASTE: {Name: PASTE, Help: "粘贴", Value: kit.Data(
|
PASTE: {Name: PASTE, Help: "粘贴", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,type,name,text",
|
mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴", Action: ice.MergeAction(map[string]*ice.Action{
|
PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -23,8 +23,8 @@ func init() {
|
|||||||
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
|
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
||||||
m.PushScript(ssh.SCRIPT, m.Append(kit.MDB_TEXT))
|
m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
|
||||||
m.PushQRCode(cli.QRCODE, m.Append(kit.MDB_TEXT))
|
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -13,13 +13,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _river_key(m *ice.Message, key ...interface{}) string {
|
func _river_key(m *ice.Message, key ...interface{}) string {
|
||||||
return kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), kit.Simple(key))
|
return kit.Keys(mdb.HASH, m.Option(ice.MSG_RIVER), kit.Simple(key))
|
||||||
}
|
}
|
||||||
func _river_list(m *ice.Message) {
|
func _river_list(m *ice.Message) {
|
||||||
if m.Option(web.SHARE) != "" {
|
if m.Option(web.SHARE) != "" {
|
||||||
switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(kit.MDB_TYPE) {
|
switch msg := m.Cmd(web.SHARE, m.Option(web.SHARE)); msg.Append(mdb.TYPE) {
|
||||||
case web.RIVER: // 共享群组
|
case web.RIVER: // 共享群组
|
||||||
m.Option(ice.MSG_TITLE, msg.Append(kit.MDB_NAME))
|
m.Option(ice.MSG_TITLE, msg.Append(mdb.NAME))
|
||||||
m.Option(ice.MSG_RIVER, msg.Append(RIVER))
|
m.Option(ice.MSG_RIVER, msg.Append(RIVER))
|
||||||
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
||||||
|
|
||||||
@ -31,21 +31,21 @@ func _river_list(m *ice.Message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case web.STORM: // 共享应用
|
case web.STORM: // 共享应用
|
||||||
m.Option(ice.MSG_TITLE, msg.Append(kit.MDB_NAME))
|
m.Option(ice.MSG_TITLE, msg.Append(mdb.NAME))
|
||||||
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
||||||
m.Option(ice.MSG_RIVER, "_share")
|
m.Option(ice.MSG_RIVER, "_share")
|
||||||
return
|
return
|
||||||
|
|
||||||
case web.FIELD: // 共享命令
|
case web.FIELD: // 共享命令
|
||||||
m.Option(ice.MSG_TITLE, msg.Append(kit.MDB_NAME))
|
m.Option(ice.MSG_TITLE, msg.Append(mdb.NAME))
|
||||||
m.Option(ice.MSG_RIVER, "_share")
|
m.Option(ice.MSG_RIVER, "_share")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(RIVER, nil, mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
|
m.Richs(RIVER, kit.Keys(mdb.HASH, key, OCEAN), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
|
||||||
m.Push(key, kit.GetMeta(value), []string{kit.MDB_HASH, kit.MDB_NAME}, kit.GetMeta(val))
|
m.Push(key, kit.GetMeta(value), []string{mdb.HASH, mdb.NAME}, kit.GetMeta(val))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -55,13 +55,13 @@ const RIVER = "river"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(
|
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(
|
||||||
kit.MDB_FIELD, "time,hash,type,name,text,template",
|
mdb.FIELD, "time,hash,type,name,text,template",
|
||||||
MENUS, kit.List(RIVER, kit.List("create", "创建群组", "添加应用", "添加工具", "添加设备", "创建空间"), kit.List("share", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间")),
|
MENUS, kit.List(RIVER, kit.List("create", "创建群组", "添加应用", "添加工具", "添加设备", "创建空间"), kit.List("share", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间")),
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
"/river": {Name: "/river", Help: "小河流", Action: map[string]*ice.Action{
|
"/river": {Name: "/river", Help: "小河流", Action: map[string]*ice.Action{
|
||||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Config(kit.MDB_TEMPLATE, kit.Dict(
|
m.Config(nfs.TEMPLATE, kit.Dict(
|
||||||
"base", kit.Dict(
|
"base", kit.Dict(
|
||||||
"info", kit.List(
|
"info", kit.List(
|
||||||
"web.chat.info",
|
"web.chat.info",
|
||||||
@ -136,8 +136,8 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case kit.MDB_TEMPLATE:
|
case nfs.TEMPLATE:
|
||||||
m.Push(kit.MDB_TEMPLATE, ice.BASE)
|
m.Push(nfs.TEMPLATE, ice.BASE)
|
||||||
case aaa.USERROLE:
|
case aaa.USERROLE:
|
||||||
m.Push(aaa.USERROLE, aaa.VOID, aaa.TECH, aaa.ROOT)
|
m.Push(aaa.USERROLE, aaa.VOID, aaa.TECH, aaa.ROOT)
|
||||||
case aaa.USERNAME:
|
case aaa.USERNAME:
|
||||||
@ -151,16 +151,16 @@ func init() {
|
|||||||
m.Option(ice.MSG_RIVER, h)
|
m.Option(ice.MSG_RIVER, h)
|
||||||
m.Echo(h)
|
m.Echo(h)
|
||||||
|
|
||||||
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, NODE, kit.Keym(kit.MDB_SHORT)), kit.MDB_NAME)
|
m.Conf(RIVER, kit.Keys(mdb.HASH, h, NODE, kit.Keym(mdb.SHORT)), mdb.NAME)
|
||||||
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, h, OCEAN, kit.Keym(kit.MDB_SHORT)), aaa.USERNAME)
|
m.Conf(RIVER, kit.Keys(mdb.HASH, h, OCEAN, kit.Keym(mdb.SHORT)), aaa.USERNAME)
|
||||||
m.Cmd(OCEAN, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
m.Cmd(OCEAN, mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
||||||
|
|
||||||
kit.Fetch(m.Confv(RIVER, kit.Keym(kit.MDB_TEMPLATE, kit.Select("base", m.Option(kit.MDB_TEMPLATE)))), func(storm string, value interface{}) {
|
kit.Fetch(m.Confv(RIVER, kit.Keym(nfs.TEMPLATE, kit.Select("base", m.Option(nfs.TEMPLATE)))), func(storm string, value interface{}) {
|
||||||
h := m.Cmdx(STORM, mdb.CREATE, kit.MDB_TYPE, PUBLIC, kit.MDB_NAME, storm, kit.MDB_TEXT, storm)
|
h := m.Cmdx(STORM, mdb.CREATE, mdb.TYPE, PUBLIC, mdb.NAME, storm, mdb.TEXT, storm)
|
||||||
|
|
||||||
kit.Fetch(value, func(index int, value string) {
|
kit.Fetch(value, func(index int, value string) {
|
||||||
m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
|
m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
|
||||||
m.Cmd(STORM, mdb.INSERT, kit.MDB_HASH, h, ice.CTX, s.Cap(ice.CTX_FOLLOW), ice.CMD, key, kit.MDB_HELP, cmd.Help)
|
m.Cmd(STORM, mdb.INSERT, mdb.HASH, h, ice.CTX, s.Cap(ice.CTX_FOLLOW), ice.CMD, key, mdb.HELP, cmd.Help)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -17,31 +17,31 @@ func init() {
|
|||||||
)
|
)
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
ROOM: {Name: "room", Help: "room", Value: kit.Data(
|
ROOM: {Name: "room", Help: "room", Value: kit.Data(
|
||||||
kit.MDB_SHORT, "zone", kit.MDB_FIELD, "time,id,type,name,text",
|
mdb.SHORT, "zone", mdb.FIELD, "time,id,type,name,text",
|
||||||
)},
|
)},
|
||||||
JOIN: {Name: "join", Help: "join", Value: kit.Data(
|
JOIN: {Name: "join", Help: "join", Value: kit.Data(
|
||||||
kit.MDB_SHORT, "space", kit.MDB_FIELD, "time,hash,username,socket",
|
mdb.SHORT, "space", mdb.FIELD, "time,hash,username,socket",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ROOM: {Name: "room zone id auto", Help: "room", Action: ice.MergeAction(map[string]*ice.Action{
|
ROOM: {Name: "room zone id auto", Help: "room", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert zone type=hi name=hello text=world", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert zone type=hi name=hello text=world", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.ZONE, m.Option(mdb.ZONE), arg[2:])
|
||||||
m.Cmdy(mdb.SELECT, m.Prefix(ROOM), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, ice.Option{mdb.FIELDS, "time,space"}).Table(func(index int, value map[string]string, head []string) {
|
m.Cmdy(mdb.SELECT, m.Prefix(ROOM), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, ice.Option{mdb.FIELDS, "time,space"}).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.Cmdy(web.SPACE, value[web.SPACE], "toast", m.Option("text"), m.Option("name"))
|
m.Cmdy(web.SPACE, value[web.SPACE], "toast", m.Option("text"), m.Option("name"))
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
|
|
||||||
JOIN: {Name: "join zone", Help: "加入", Hand: func(m *ice.Message, arg ...string) {
|
JOIN: {Name: "join zone", Help: "加入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, web.SPACE, m.Option("_daemon"))
|
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, web.SPACE, m.Option("_daemon"))
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, web.SPACE, m.Option("_daemon"), kit.MDB_SHORT, kit.MDB_ZONE)
|
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, web.SPACE, m.Option("_daemon"), mdb.SHORT, mdb.ZONE)
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), kit.KeyHash(m.Option("_daemon")), mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), kit.KeyHash(m.Option("_daemon")), mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
}},
|
}},
|
||||||
QUIT: {Name: "quit", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
QUIT: {Name: "quit", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, m.Prefix(ROOM), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, m.OptionSimple(web.SPACE))
|
m.Cmdy(mdb.DELETE, m.Prefix(ROOM), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, m.OptionSimple(web.SPACE))
|
||||||
m.Cmdy(mdb.DELETE, m.Prefix(JOIN), kit.KeyHash(m.Option(web.SPACE)), mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.DELETE, m.Prefix(JOIN), kit.KeyHash(m.Option(web.SPACE)), mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
||||||
@ -56,21 +56,21 @@ func init() {
|
|||||||
// m.Watch(web.SPACE_START, m.PrefixKey())
|
// m.Watch(web.SPACE_START, m.PrefixKey())
|
||||||
}},
|
}},
|
||||||
web.SPACE_START: {Name: "space_start", Help: "下线", Hand: func(m *ice.Message, arg ...string) {
|
web.SPACE_START: {Name: "space_start", Help: "下线", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
}},
|
}},
|
||||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert zone username daemon", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert zone username daemon", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Conf(m.Prefix(JOIN), kit.Keys(kit.KeyHash(m.Option(kit.MDB_ZONE)), kit.Keym(kit.MDB_SHORT)), web.SOCKET)
|
m.Conf(m.Prefix(JOIN), kit.Keys(kit.KeyHash(m.Option(mdb.ZONE)), kit.Keym(mdb.SHORT)), web.SOCKET)
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH,
|
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH,
|
||||||
aaa.USERNAME, m.Option(ice.MSG_USERNAME), web.SOCKET, m.Option(ice.MSG_DAEMON),
|
aaa.USERNAME, m.Option(ice.MSG_USERNAME), web.SOCKET, m.Option(ice.MSG_DAEMON),
|
||||||
)
|
)
|
||||||
}},
|
}},
|
||||||
mdb.DELETE: {Name: "delete zone socket", Hand: func(m *ice.Message, arg ...string) {
|
mdb.DELETE: {Name: "delete zone socket", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, m.Prefix(JOIN), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, m.OptionSimple(web.SOCKET))
|
m.Cmdy(mdb.DELETE, m.Prefix(JOIN), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, m.OptionSimple(web.SOCKET))
|
||||||
}},
|
}},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Fields(len(arg), "time,space", "time,zone")
|
m.Fields(len(arg), "time,space", "time,zone")
|
||||||
|
@ -13,7 +13,7 @@ const SCAN = "scan"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SCAN: {Name: SCAN, Help: "扫码", Value: kit.Data(
|
SCAN: {Name: SCAN, Help: "扫码", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,type,name,text",
|
mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Meta: kit.Dict(
|
SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Meta: kit.Dict(
|
||||||
@ -24,11 +24,11 @@ func init() {
|
|||||||
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
|
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
|
||||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
||||||
if m.Append(kit.MDB_TYPE) == "image" {
|
if m.Append(mdb.TYPE) == "image" {
|
||||||
m.PushImages("image", m.Append(kit.MDB_TEXT))
|
m.PushImages("image", m.Append(mdb.TEXT))
|
||||||
}
|
}
|
||||||
m.PushScript(ssh.SCRIPT, m.Append(kit.MDB_TEXT))
|
m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
|
||||||
m.PushQRCode(cli.QRCODE, m.Append(kit.MDB_TEXT))
|
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
|
@ -9,12 +9,12 @@ import (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
"search": {Name: "search", Help: "搜索", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
"search": {Name: "search", Help: "搜索", Value: kit.Data(mdb.SHORT, mdb.NAME)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
"/search": {Name: "/search", Help: "搜索引擎", Action: ice.MergeAction(map[string]*ice.Action{
|
"/search": {Name: "/search", Help: "搜索引擎", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Richs("/search", "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs("/search", "", mdb.FOREACH, func(key string, value map[string]interface{}) {
|
||||||
if value = kit.GetMeta(value); arg[1] != "" && !kit.Contains(value[kit.MDB_NAME], arg[1]) {
|
if value = kit.GetMeta(value); arg[1] != "" && !kit.Contains(value[mdb.NAME], arg[1]) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.PushSearch(ice.CMD, "/search", value)
|
m.PushSearch(ice.CMD, "/search", value)
|
||||||
@ -32,7 +32,7 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH,
|
m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH,
|
||||||
kit.MDB_NAME, arg[1], kit.MDB_TYPE, arg[0], kit.MDB_TEXT, kit.Select("", arg, 2))
|
mdb.NAME, arg[1], mdb.TYPE, arg[0], mdb.TEXT, kit.Select("", arg, 2))
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _storm_key(m *ice.Message, key ...interface{}) string {
|
func _storm_key(m *ice.Message, key ...interface{}) string {
|
||||||
return _river_key(m, STORM, kit.MDB_HASH, kit.Keys(key))
|
return _river_key(m, STORM, mdb.HASH, kit.Keys(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
const STORM = "storm"
|
const STORM = "storm"
|
||||||
@ -21,7 +21,7 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case kit.MDB_HASH:
|
case mdb.HASH:
|
||||||
m.Cmdy(STORM, ice.OptionFields("hash,name"))
|
m.Cmdy(STORM, ice.OptionFields("hash,name"))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
@ -29,34 +29,34 @@ func init() {
|
|||||||
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, STORM), mdb.HASH, arg)
|
m.Cmdy(mdb.INSERT, RIVER, _river_key(m, STORM), mdb.HASH, arg)
|
||||||
}},
|
}},
|
||||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, STORM), mdb.HASH, m.OptionSimple(kit.MDB_HASH))
|
m.Cmdy(mdb.DELETE, RIVER, _river_key(m, STORM), mdb.HASH, m.OptionSimple(mdb.HASH))
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert hash pod ctx cmd help", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert hash pod ctx cmd help", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, RIVER, _storm_key(m, m.Option(kit.MDB_HASH)), mdb.LIST, arg[2:])
|
m.Cmdy(mdb.INSERT, RIVER, _storm_key(m, m.Option(mdb.HASH)), mdb.LIST, arg[2:])
|
||||||
}},
|
}},
|
||||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Option(kit.MDB_ID) == "" {
|
if m.Option(mdb.ID) == "" {
|
||||||
m.Cmdy(mdb.MODIFY, RIVER, _river_key(m, STORM), mdb.HASH, m.OptionSimple(kit.MDB_HASH), arg)
|
m.Cmdy(mdb.MODIFY, RIVER, _river_key(m, STORM), mdb.HASH, m.OptionSimple(mdb.HASH), arg)
|
||||||
} else {
|
} else {
|
||||||
m.Cmdy(mdb.MODIFY, RIVER, _storm_key(m, m.Option(kit.MDB_HASH)), mdb.LIST, m.OptionSimple(kit.MDB_ID), arg)
|
m.Cmdy(mdb.MODIFY, RIVER, _storm_key(m, m.Option(mdb.HASH)), mdb.LIST, m.OptionSimple(mdb.ID), arg)
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Option(kit.MDB_ID) == "" {
|
if m.Option(mdb.ID) == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
msg := m.Cmd(STORM, m.Option(kit.MDB_HASH), m.Option(kit.MDB_ID))
|
msg := m.Cmd(STORM, m.Option(mdb.HASH), m.Option(mdb.ID))
|
||||||
cmd := kit.Keys(msg.Append(ice.CTX), msg.Append(ice.CMD))
|
cmd := kit.Keys(msg.Append(ice.CTX), msg.Append(ice.CMD))
|
||||||
_action_domain(m, cmd, m.Option(kit.MDB_HASH))
|
_action_domain(m, cmd, m.Option(mdb.HASH))
|
||||||
m.Cmdy(cmd, mdb.EXPORT)
|
m.Cmdy(cmd, mdb.EXPORT)
|
||||||
}},
|
}},
|
||||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Option(kit.MDB_ID) == "" {
|
if m.Option(mdb.ID) == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
msg := m.Cmd(STORM, m.Option(kit.MDB_HASH), m.Option(kit.MDB_ID))
|
msg := m.Cmd(STORM, m.Option(mdb.HASH), m.Option(mdb.ID))
|
||||||
cmd := kit.Keys(msg.Append(ice.CTX), msg.Append(ice.CMD))
|
cmd := kit.Keys(msg.Append(ice.CTX), msg.Append(ice.CMD))
|
||||||
_action_domain(m, cmd, m.Option(kit.MDB_HASH))
|
_action_domain(m, cmd, m.Option(mdb.HASH))
|
||||||
m.Cmdy(cmd, mdb.IMPORT)
|
m.Cmdy(cmd, mdb.IMPORT)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -64,12 +64,12 @@ func init() {
|
|||||||
m.OptionFields("time,hash,type,name,count")
|
m.OptionFields("time,hash,type,name,count")
|
||||||
m.Cmdy(mdb.SELECT, RIVER, _river_key(m, STORM), mdb.HASH)
|
m.Cmdy(mdb.SELECT, RIVER, _river_key(m, STORM), mdb.HASH)
|
||||||
m.PushAction(mdb.REMOVE)
|
m.PushAction(mdb.REMOVE)
|
||||||
m.Sort(kit.MDB_NAME)
|
m.Sort(mdb.NAME)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.OptionFields("time,id,pod,ctx,cmd,arg,display,style")
|
m.OptionFields("time,id,pod,ctx,cmd,arg,display,style")
|
||||||
msg := m.Cmd(mdb.SELECT, RIVER, _storm_key(m, arg[0]), mdb.LIST, kit.MDB_ID, kit.Select("", arg, 1))
|
msg := m.Cmd(mdb.SELECT, RIVER, _storm_key(m, arg[0]), mdb.LIST, mdb.ID, kit.Select("", arg, 1))
|
||||||
if msg.Length() == 0 && len(arg) > 1 { // 虚拟群组
|
if msg.Length() == 0 && len(arg) > 1 { // 虚拟群组
|
||||||
msg.Push(ice.CMD, arg[1])
|
msg.Push(ice.CMD, arg[1])
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ func init() {
|
|||||||
SEND: {Name: "send", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
SEND: {Name: "send", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(web.SPACE, m.Option(TO), web.SPIDE, ice.DEV, web.SPIDE_SAVE, kit.Select(ice.PWD, m.Option("to_path")),
|
m.Cmdy(web.SPACE, m.Option(TO), web.SPIDE, ice.DEV, web.SPIDE_SAVE, kit.Select(ice.PWD, m.Option("to_path")),
|
||||||
m.MergeURL2(path.Join("/share/local/", m.Option("from_path")), ice.POD, m.Option(FROM),
|
m.MergeURL2(path.Join("/share/local/", m.Option("from_path")), ice.POD, m.Option(FROM),
|
||||||
web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, kit.MDB_TYPE, web.LOGIN),
|
web.SHARE, m.Cmdx(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
m.Toast(ice.SUCCESS, SEND)
|
m.Toast(ice.SUCCESS, SEND)
|
||||||
|
@ -16,14 +16,14 @@ import (
|
|||||||
func _website_parse(m *ice.Message, text string) map[string]interface{} {
|
func _website_parse(m *ice.Message, text string) map[string]interface{} {
|
||||||
m.Option(nfs.CAT_CONTENT, text)
|
m.Option(nfs.CAT_CONTENT, text)
|
||||||
river, storm, last := kit.Dict(), kit.Dict(), kit.Dict()
|
river, storm, last := kit.Dict(), kit.Dict(), kit.Dict()
|
||||||
m.Cmd(lex.SPLIT, "", kit.MDB_KEY, kit.MDB_NAME, func(deep int, ls []string, meta map[string]interface{}) []string {
|
m.Cmd(lex.SPLIT, "", mdb.KEY, mdb.NAME, func(deep int, ls []string, meta map[string]interface{}) []string {
|
||||||
if len(ls) == 1 {
|
if len(ls) == 1 {
|
||||||
ls = append(ls, ls[0])
|
ls = append(ls, ls[0])
|
||||||
}
|
}
|
||||||
data := kit.Dict()
|
data := kit.Dict()
|
||||||
for i := 2; i < len(ls); i += 2 {
|
for i := 2; i < len(ls); i += 2 {
|
||||||
switch ls[i] {
|
switch ls[i] {
|
||||||
case kit.MDB_ARGS:
|
case ctx.ARGS:
|
||||||
data[ls[i]] = kit.UnMarshal(ls[i+1])
|
data[ls[i]] = kit.UnMarshal(ls[i+1])
|
||||||
default:
|
default:
|
||||||
data[ls[i]] = ls[i+1]
|
data[ls[i]] = ls[i+1]
|
||||||
@ -32,13 +32,13 @@ func _website_parse(m *ice.Message, text string) map[string]interface{} {
|
|||||||
switch deep {
|
switch deep {
|
||||||
case 1:
|
case 1:
|
||||||
storm = kit.Dict()
|
storm = kit.Dict()
|
||||||
river[ls[0]] = kit.Dict(kit.MDB_NAME, ls[1], "storm", storm, data)
|
river[ls[0]] = kit.Dict(mdb.NAME, ls[1], "storm", storm, data)
|
||||||
case 2:
|
case 2:
|
||||||
last = kit.Dict(kit.MDB_NAME, ls[1], kit.MDB_LIST, kit.List(), data)
|
last = kit.Dict(mdb.NAME, ls[1], mdb.LIST, kit.List(), data)
|
||||||
storm[ls[0]] = last
|
storm[ls[0]] = last
|
||||||
default:
|
default:
|
||||||
last[kit.MDB_LIST] = append(last[kit.MDB_LIST].([]interface{}),
|
last[mdb.LIST] = append(last[mdb.LIST].([]interface{}),
|
||||||
kit.Dict(kit.MDB_NAME, ls[0], kit.MDB_HELP, ls[1], kit.MDB_INDEX, ls[0], data))
|
kit.Dict(mdb.NAME, ls[0], mdb.HELP, ls[1], mdb.INDEX, ls[0], data))
|
||||||
}
|
}
|
||||||
return ls
|
return ls
|
||||||
})
|
})
|
||||||
@ -50,7 +50,7 @@ const WEBSITE = "website"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
WEBSITE: {Name: "website", Help: "网站", Value: kit.Data(
|
WEBSITE: {Name: "website", Help: "网站", Value: kit.Data(
|
||||||
kit.MDB_SHORT, nfs.PATH, kit.MDB_FIELD, "time,path,type,name,text",
|
mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
WEBSITE: {Name: "website path auto create import", Help: "网站", Action: ice.MergeAction(map[string]*ice.Action{
|
WEBSITE: {Name: "website path auto create import", Help: "网站", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -58,7 +58,7 @@ func init() {
|
|||||||
web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool {
|
web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool {
|
||||||
if ok := true; m.Richs(WEBSITE, nil, r.URL.Path, func(key string, value map[string]interface{}) {
|
if ok := true; m.Richs(WEBSITE, nil, r.URL.Path, func(key string, value map[string]interface{}) {
|
||||||
msg, value := m.Spawn(w, r), kit.GetMeta(value)
|
msg, value := m.Spawn(w, r), kit.GetMeta(value)
|
||||||
switch text := kit.Format(value[kit.MDB_TEXT]); value[kit.MDB_TYPE] {
|
switch text := kit.Format(value[mdb.TEXT]); value[mdb.TYPE] {
|
||||||
case "svg":
|
case "svg":
|
||||||
msg.RenderResult(`<body style="background-color:cadetblue">%s</body>`, m.Cmdx(nfs.CAT, text))
|
msg.RenderResult(`<body style="background-color:cadetblue">%s</body>`, m.Cmdx(nfs.CAT, text))
|
||||||
case "shy":
|
case "shy":
|
||||||
@ -69,7 +69,7 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
case "txt":
|
case "txt":
|
||||||
res := _website_parse(msg, kit.Format(value[kit.MDB_TEXT]))
|
res := _website_parse(msg, kit.Format(value[mdb.TEXT]))
|
||||||
msg.RenderResult(_website_template2, kit.Format(res))
|
msg.RenderResult(_website_template2, kit.Format(res))
|
||||||
case "json":
|
case "json":
|
||||||
msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
|
msg.RenderResult(_website_template2, kit.Format(kit.UnMarshal(text)))
|
||||||
@ -104,10 +104,10 @@ func init() {
|
|||||||
switch name := strings.TrimPrefix(p, m.Option(nfs.PATH)); kit.Ext(p) {
|
switch name := strings.TrimPrefix(p, m.Option(nfs.PATH)); kit.Ext(p) {
|
||||||
case "html", "js", "json", "txt":
|
case "html", "js", "json", "txt":
|
||||||
m.Cmd(m.PrefixKey(), mdb.CREATE, nfs.PATH, ice.PS+name,
|
m.Cmd(m.PrefixKey(), mdb.CREATE, nfs.PATH, ice.PS+name,
|
||||||
kit.MDB_TYPE, kit.Ext(p), kit.MDB_NAME, name, kit.MDB_TEXT, m.Cmdx(nfs.CAT, p))
|
mdb.TYPE, kit.Ext(p), mdb.NAME, name, mdb.TEXT, m.Cmdx(nfs.CAT, p))
|
||||||
default:
|
default:
|
||||||
m.Cmd(m.PrefixKey(), mdb.CREATE, nfs.PATH, ice.PS+name,
|
m.Cmd(m.PrefixKey(), mdb.CREATE, nfs.PATH, ice.PS+name,
|
||||||
kit.MDB_TYPE, kit.Ext(p), kit.MDB_NAME, name, kit.MDB_TEXT, p)
|
mdb.TYPE, kit.Ext(p), mdb.NAME, name, mdb.TEXT, p)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
@ -116,7 +116,7 @@ func init() {
|
|||||||
m.PushAnchor(m.MergeURL2(value[nfs.PATH]))
|
m.PushAnchor(m.MergeURL2(value[nfs.PATH]))
|
||||||
})
|
})
|
||||||
if m.Sort(nfs.PATH); m.FieldsIsDetail() {
|
if m.Sort(nfs.PATH); m.FieldsIsDetail() {
|
||||||
m.PushQRCode(kit.MDB_SCAN, m.MergeURL2(m.Append(nfs.PATH)))
|
m.PushQRCode(mdb.SCAN, m.MergeURL2(m.Append(nfs.PATH)))
|
||||||
m.EchoIFrame(m.Append(nfs.PATH))
|
m.EchoIFrame(m.Append(nfs.PATH))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
@ -147,32 +147,32 @@ func init() {
|
|||||||
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
|
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case kit.MDB_MAIN:
|
case MAIN:
|
||||||
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go`})
|
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go`})
|
||||||
m.RenameAppend(nfs.PATH, arg[0])
|
m.RenameAppend(nfs.PATH, arg[0])
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
mdb.CREATE: {Name: "create main=src/main.go@key key zone type=Zone,Hash,Data name=hi list help", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create main=src/main.go@key key zone type=Zone,Hash,Data name=hi list help", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_defs(m, kit.MDB_ZONE, m.Option(kit.MDB_NAME), kit.MDB_HELP, m.Option(kit.MDB_NAME))
|
_defs(m, mdb.ZONE, m.Option(mdb.NAME), mdb.HELP, m.Option(mdb.NAME))
|
||||||
_defs(m, kit.MDB_KEY, kit.Keys("web.code", m.Option(kit.MDB_ZONE), m.Option(kit.MDB_NAME)))
|
_defs(m, mdb.KEY, kit.Keys("web.code", m.Option(mdb.ZONE), m.Option(mdb.NAME)))
|
||||||
switch m.Option(kit.MDB_TYPE) {
|
switch m.Option(mdb.TYPE) {
|
||||||
case "Zone":
|
case "Zone":
|
||||||
_defs(m, "list", m.Option(kit.MDB_NAME)+" zone id auto insert")
|
_defs(m, "list", m.Option(mdb.NAME)+" zone id auto insert")
|
||||||
case "Hash":
|
case "Hash":
|
||||||
_defs(m, "list", m.Option(kit.MDB_NAME)+" hash auto create")
|
_defs(m, "list", m.Option(mdb.NAME)+" hash auto create")
|
||||||
case "Data":
|
case "Data":
|
||||||
_defs(m, "list", m.Option(kit.MDB_NAME)+" path auto upload")
|
_defs(m, "list", m.Option(mdb.NAME)+" path auto upload")
|
||||||
}
|
}
|
||||||
m.Option("tags", kit.Format("`name:\"%s\" help:\"%s\"`", m.Option("list"), m.Option("help")))
|
m.Option("tags", kit.Format("`name:\"%s\" help:\"%s\"`", m.Option("list"), m.Option("help")))
|
||||||
|
|
||||||
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
|
if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)); !kit.FileExists(p) {
|
||||||
_autogen_module(m, p)
|
_autogen_module(m, p)
|
||||||
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_ZONE), _autogen_mod(m, ice.GO_MOD))
|
_autogen_import(m, m.Option(MAIN), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
|
||||||
}
|
}
|
||||||
|
|
||||||
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
|
if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), SHY)); !kit.FileExists(p) {
|
||||||
_autogen_script(m, p)
|
_autogen_script(m, p)
|
||||||
_autogen_source(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_NAME))
|
_autogen_source(m, m.Option(mdb.ZONE), m.Option(mdb.NAME))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
ssh.SCRIPT: {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
|
ssh.SCRIPT: {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
@ -64,17 +64,17 @@ const BENCH = "bench"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(
|
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,nconn,nreqs",
|
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,nconn,nreqs",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: ice.MergeAction(map[string]*ice.Action{
|
BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text='http://localhost:9020' nconn=3 nreqs=10", Help: "添加"},
|
mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text='http://localhost:9020' nconn=3 nreqs=10", Help: "添加"},
|
||||||
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
switch m.Option(kit.MDB_TYPE) {
|
switch m.Option(mdb.TYPE) {
|
||||||
case HTTP:
|
case HTTP:
|
||||||
_bench_http(m, m.Option(kit.MDB_TEXT))
|
_bench_http(m, m.Option(mdb.TEXT))
|
||||||
case REDIS:
|
case REDIS:
|
||||||
_bench_redis(m, m.Option(kit.MDB_TEXT))
|
_bench_redis(m, m.Option(mdb.TEXT))
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -132,10 +132,10 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
for k, v := range ice.Info.Pack {
|
for k, v := range ice.Info.Pack {
|
||||||
m.Push(kit.MDB_NAME, k)
|
m.Push(mdb.NAME, k)
|
||||||
m.Push(kit.MDB_SIZE, len(v))
|
m.Push(nfs.SIZE, len(v))
|
||||||
}
|
}
|
||||||
m.Sort(kit.MDB_NAME)
|
m.Sort(mdb.NAME)
|
||||||
}},
|
}},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -75,15 +75,15 @@ func init() {
|
|||||||
m.Cmdy(cli.SYSTEM, ice.PWD+name)
|
m.Cmdy(cli.SYSTEM, ice.PWD+name)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Option(cli.CMD_DIR, kit.Select(ice.SRC, arg, 2))
|
m.Option(cli.CMD_DIR, kit.Select(ice.SRC, arg, 2))
|
||||||
m.Cmdy(mdb.SEARCH, MAN2, arg[1:])
|
m.Cmdy(mdb.SEARCH, MAN2, arg[1:])
|
||||||
m.Cmdy(mdb.SEARCH, MAN3, arg[1:])
|
m.Cmdy(mdb.SEARCH, MAN3, arg[1:])
|
||||||
_c_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_c_tags(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_find(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_grep(m, kit.Select(MAIN, arg, 1))
|
||||||
}},
|
}},
|
||||||
}, PlugAction())},
|
}, PlugAction())},
|
||||||
MAN: {Name: MAN, Help: "手册", Action: ice.MergeAction(map[string]*ice.Action{
|
MAN: {Name: MAN, Help: "手册", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -91,12 +91,12 @@ func init() {
|
|||||||
m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], ice.PT+arg[0])))
|
m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], ice.PT+arg[0])))
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, i := range []string{"1", "2", "3", "8"} {
|
for _, i := range []string{"1", "2", "3", "8"} {
|
||||||
if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" {
|
if text := _c_help(m, i, kit.Select(MAIN, arg, 1)); text != "" {
|
||||||
m.PushSearch(ice.CMD, MAN, nfs.FILE, kit.Keys(arg[1], MAN+i), nfs.LINE, 1, kit.MDB_TEXT, text)
|
m.PushSearch(ice.CMD, MAN, nfs.FILE, kit.Keys(arg[1], MAN+i), nfs.LINE, 1, mdb.TEXT, text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
@ -17,7 +17,7 @@ const CASE = "case"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
CASE: {Name: CASE, Help: "用例", Value: kit.Data(
|
CASE: {Name: CASE, Help: "用例", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,name,cmd,api,arg,res",
|
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,name,cmd,api,arg,res",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
CASE: {Name: "case dev zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{
|
CASE: {Name: "case dev zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
@ -30,8 +30,8 @@ func init() {
|
|||||||
if m.ProcessInner(); len(arg) > 0 {
|
if m.ProcessInner(); len(arg) > 0 {
|
||||||
success := 0
|
success := 0
|
||||||
m.Cmd(m.PrefixKey(), arg[0]).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(m.PrefixKey(), arg[0]).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.Push(kit.MDB_TIME, m.Time())
|
m.Push(mdb.TIME, m.Time())
|
||||||
m.Push(kit.MDB_ID, value[kit.MDB_ID])
|
m.Push(mdb.ID, value[mdb.ID])
|
||||||
if err := m.Cmdx(m.PrefixKey(), cli.CHECK, value); err == ice.OK {
|
if err := m.Cmdx(m.PrefixKey(), cli.CHECK, value); err == ice.OK {
|
||||||
m.Push(ice.ERR, cli.Color(m, cli.GREEN, err))
|
m.Push(ice.ERR, cli.Color(m, cli.GREEN, err))
|
||||||
success++
|
success++
|
||||||
|
@ -11,7 +11,7 @@ const FAVOR = "favor"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,path,file,line",
|
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,path,file,line",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
FAVOR: {Name: "favor zone id auto insert", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{
|
FAVOR: {Name: "favor zone id auto insert", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
@ -41,7 +41,7 @@ func _go_tags(m *ice.Message, key string) {
|
|||||||
bio := bufio.NewScanner(f)
|
bio := bufio.NewScanner(f)
|
||||||
for i := 1; bio.Scan(); i++ {
|
for i := 1; bio.Scan(); i++ {
|
||||||
if i == line || bio.Text() == text {
|
if i == line || bio.Text() == text {
|
||||||
m.PushSearch(ice.CMD, "tags", nfs.FILE, strings.TrimPrefix(file, ice.PWD), nfs.LINE, kit.Format(i), kit.MDB_TEXT, bio.Text())
|
m.PushSearch(ice.CMD, "tags", nfs.FILE, strings.TrimPrefix(file, ice.PWD), nfs.LINE, kit.Format(i), mdb.TEXT, bio.Text())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -51,14 +51,14 @@ func _go_help(m *ice.Message, key string) {
|
|||||||
if p == "" {
|
if p == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.PushSearch(ice.CMD, "help", nfs.FILE, key+".godoc", nfs.LINE, 1, kit.MDB_TEXT, p)
|
m.PushSearch(ice.CMD, "help", nfs.FILE, key+".godoc", nfs.LINE, 1, mdb.TEXT, p)
|
||||||
}
|
}
|
||||||
func _go_find(m *ice.Message, key string) {
|
func _go_find(m *ice.Message, key string) {
|
||||||
for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, FIND, ".", "-name", key), ice.NL) {
|
for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, FIND, ".", "-name", key), ice.NL) {
|
||||||
if p == "" {
|
if p == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
m.PushSearch(ice.CMD, FIND, nfs.FILE, strings.TrimPrefix(p, ice.PWD), nfs.LINE, 1, kit.MDB_TEXT, "")
|
m.PushSearch(ice.CMD, FIND, nfs.FILE, strings.TrimPrefix(p, ice.PWD), nfs.LINE, 1, mdb.TEXT, "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _go_grep(m *ice.Message, key string) {
|
func _go_grep(m *ice.Message, key string) {
|
||||||
@ -71,6 +71,7 @@ const (
|
|||||||
_TAGS = ".tags"
|
_TAGS = ".tags"
|
||||||
FIND = "find"
|
FIND = "find"
|
||||||
GREP = "grep"
|
GREP = "grep"
|
||||||
|
MAIN = "main"
|
||||||
)
|
)
|
||||||
const GO = "go"
|
const GO = "go"
|
||||||
const MOD = "mod"
|
const MOD = "mod"
|
||||||
@ -111,13 +112,13 @@ func init() {
|
|||||||
m.Set(ice.MSG_APPEND)
|
m.Set(ice.MSG_APPEND)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_go_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_tags(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_help(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_help(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_find(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_grep(m, kit.Select(MAIN, arg, 1))
|
||||||
}},
|
}},
|
||||||
}, PlugAction())},
|
}, PlugAction())},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _install_download(m *ice.Message) {
|
func _install_download(m *ice.Message) {
|
||||||
link := m.Option(kit.MDB_LINK)
|
link := m.Option(mdb.LINK)
|
||||||
name := path.Base(link)
|
name := path.Base(link)
|
||||||
file := path.Join(kit.Select(m.Config(nfs.PATH), m.Option(nfs.PATH)), name)
|
file := path.Join(kit.Select(m.Config(nfs.PATH), m.Option(nfs.PATH)), name)
|
||||||
|
|
||||||
@ -30,14 +30,14 @@ func _install_download(m *ice.Message) {
|
|||||||
|
|
||||||
m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) {
|
m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) {
|
||||||
// 进度
|
// 进度
|
||||||
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
|
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, mdb.NAME, name, mdb.LINK, link)
|
||||||
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
|
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
|
||||||
value = kit.GetMeta(value)
|
value = kit.GetMeta(value)
|
||||||
|
|
||||||
p := 0
|
p := 0
|
||||||
m.OptionCB(web.SPIDE, func(size int, total int) {
|
m.OptionCB(web.SPIDE, func(size int, total int) {
|
||||||
if n := size * 100 / total; p != n {
|
if n := size * 100 / total; p != n {
|
||||||
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
|
value[mdb.VALUE], value[mdb.COUNT], value[mdb.TOTAL] = n, size, total
|
||||||
toast(name, size, total)
|
toast(name, size, total)
|
||||||
p = n
|
p = n
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ func _install_download(m *ice.Message) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _install_build(m *ice.Message, arg ...string) {
|
func _install_build(m *ice.Message, arg ...string) {
|
||||||
p := m.Option(cli.CMD_DIR, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
|
p := m.Option(cli.CMD_DIR, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK))))
|
||||||
pp := kit.Path(path.Join(p, "_install"))
|
pp := kit.Path(path.Join(p, "_install"))
|
||||||
|
|
||||||
// 推流
|
// 推流
|
||||||
@ -90,7 +90,7 @@ func _install_build(m *ice.Message, arg ...string) {
|
|||||||
m.Toast(ice.SUCCESS, cli.BUILD)
|
m.Toast(ice.SUCCESS, cli.BUILD)
|
||||||
}
|
}
|
||||||
func _install_order(m *ice.Message, arg ...string) {
|
func _install_order(m *ice.Message, arg ...string) {
|
||||||
p := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), m.Option(nfs.PATH)+ice.NL)
|
p := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)), m.Option(nfs.PATH)+ice.NL)
|
||||||
if !strings.Contains(m.Cmdx(nfs.CAT, ice.ETC_PATH), p) {
|
if !strings.Contains(m.Cmdx(nfs.CAT, ice.ETC_PATH), p) {
|
||||||
m.Cmd(nfs.PUSH, ice.ETC_PATH, p)
|
m.Cmd(nfs.PUSH, ice.ETC_PATH, p)
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ func _install_spawn(m *ice.Message, arg ...string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT))
|
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT))
|
||||||
source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
|
source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)))
|
||||||
|
|
||||||
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[nfs.PATH], ice.PS), target)
|
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[nfs.PATH], ice.PS), target)
|
||||||
@ -154,7 +154,7 @@ const INSTALL = "install"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(
|
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_NAME, nfs.PATH, ice.USR_INSTALL,
|
mdb.SHORT, mdb.NAME, nfs.PATH, ice.USR_INSTALL,
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
|
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
|
||||||
@ -174,7 +174,7 @@ func init() {
|
|||||||
_install_start(m, arg...)
|
_install_start(m, arg...)
|
||||||
}},
|
}},
|
||||||
nfs.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
nfs.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), "_install"))
|
m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK)), "_install"))
|
||||||
defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT))
|
defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT))
|
||||||
m.Cmdy(nfs.DIR, m.Option(nfs.PATH))
|
m.Cmdy(nfs.DIR, m.Option(nfs.PATH))
|
||||||
}},
|
}},
|
||||||
|
@ -33,11 +33,11 @@ func init() {
|
|||||||
m.Set(ice.MSG_APPEND)
|
m.Set(ice.MSG_APPEND)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_find(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_grep(m, kit.Select(MAIN, arg, 1))
|
||||||
}},
|
}},
|
||||||
}, PlugAction())},
|
}, PlugAction())},
|
||||||
NODE: {Name: "node auto download", Help: "前端", Action: map[string]*ice.Action{
|
NODE: {Name: "node auto download", Help: "前端", Action: map[string]*ice.Action{
|
||||||
|
@ -26,7 +26,7 @@ const PPROF = "pprof"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(
|
PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,text,file",
|
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,text,file",
|
||||||
PPROF, kit.List(GO, "tool", PPROF),
|
PPROF, kit.List(GO, "tool", PPROF),
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
@ -63,8 +63,8 @@ func init() {
|
|||||||
cmd := kit.Simple(m.Configv(PPROF), "-text", m.Option(BINNARY), msg.Append(nfs.FILE))
|
cmd := kit.Simple(m.Configv(PPROF), "-text", m.Option(BINNARY), msg.Append(nfs.FILE))
|
||||||
res := kit.Slice(strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.NL), 0, 20)
|
res := kit.Slice(strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.NL), 0, 20)
|
||||||
|
|
||||||
m.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE),
|
m.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(mdb.ZONE),
|
||||||
kit.MDB_TEXT, strings.Join(res, ice.NL), nfs.FILE, msg.Append(nfs.FILE))
|
mdb.TEXT, strings.Join(res, ice.NL), nfs.FILE, msg.Append(nfs.FILE))
|
||||||
m.Echo(strings.Join(res, ice.NL))
|
m.Echo(strings.Join(res, ice.NL))
|
||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
@ -77,7 +77,7 @@ func init() {
|
|||||||
m.ProcessInner()
|
m.ProcessInner()
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Fields(len(arg), "time,zone,count,binnary,service,seconds", m.Config(kit.MDB_FIELD))
|
m.Fields(len(arg), "time,zone,count,binnary,service,seconds", m.Config(mdb.FIELD))
|
||||||
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
||||||
m.PushAction(ice.RUN, mdb.REMOVE)
|
m.PushAction(ice.RUN, mdb.REMOVE)
|
||||||
m.Action(mdb.CREATE)
|
m.Action(mdb.CREATE)
|
||||||
@ -85,7 +85,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[nfs.FILE])
|
m.PushDownload(mdb.LINK, "pprof.pd.gz", value[nfs.FILE])
|
||||||
m.PushButton(web.SERVE)
|
m.PushButton(web.SERVE)
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
|
@ -22,14 +22,14 @@ func _bin_list(m *ice.Message, dir string) {
|
|||||||
for _, ls := range strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) {
|
for _, ls := range strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) {
|
||||||
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
|
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
|
||||||
if s, e := os.Stat(path.Join(p, file)); e == nil {
|
if s, e := os.Stat(path.Join(p, file)); e == nil {
|
||||||
m.Push(kit.MDB_TIME, s.ModTime())
|
m.Push(mdb.TIME, s.ModTime())
|
||||||
m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size()))
|
m.Push(nfs.SIZE, kit.FmtSize(s.Size()))
|
||||||
m.Push(nfs.FILE, file)
|
m.Push(nfs.FILE, file)
|
||||||
m.PushDownload(kit.MDB_LINK, file, path.Join(p, file))
|
m.PushDownload(mdb.LINK, file, path.Join(p, file))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.SortTimeR(kit.MDB_TIME)
|
m.SortTimeR(mdb.TIME)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _publish_file(m *ice.Message, file string, arg ...string) string {
|
func _publish_file(m *ice.Message, file string, arg ...string) string {
|
||||||
|
@ -24,14 +24,14 @@ func init() {
|
|||||||
m.Set(ice.MSG_APPEND)
|
m.Set(ice.MSG_APPEND)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Option(cli.CMD_DIR, kit.Select(ice.SRC, arg, 2))
|
m.Option(cli.CMD_DIR, kit.Select(ice.SRC, arg, 2))
|
||||||
m.Cmdy(mdb.SEARCH, MAN1, arg[1:])
|
m.Cmdy(mdb.SEARCH, MAN1, arg[1:])
|
||||||
m.Cmdy(mdb.SEARCH, MAN8, arg[1:])
|
m.Cmdy(mdb.SEARCH, MAN8, arg[1:])
|
||||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_find(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_grep(m, kit.Select(MAIN, arg, 1))
|
||||||
}},
|
}},
|
||||||
MAN: {Hand: func(m *ice.Message, arg ...string) {
|
MAN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Echo(_c_help(m, arg[0], arg[1]))
|
m.Echo(_c_help(m, arg[0], arg[1]))
|
||||||
|
@ -23,11 +23,11 @@ func init() {
|
|||||||
m.Cmdy("web.wiki.word", path.Join(arg[2], arg[1]))
|
m.Cmdy("web.wiki.word", path.Join(arg[2], arg[1]))
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
if arg[0] == mdb.FOREACH {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_find(m, kit.Select(MAIN, arg, 1))
|
||||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
_go_grep(m, kit.Select(MAIN, arg, 1))
|
||||||
}},
|
}},
|
||||||
}, PlugAction())},
|
}, PlugAction())},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
@ -15,20 +16,20 @@ const UPGRADE = "upgrade"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict(
|
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(mdb.HASH, kit.Dict(
|
||||||
cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List(
|
cli.SYSTEM, kit.Dict(mdb.LIST, kit.List(
|
||||||
kit.MDB_TYPE, "bin", nfs.FILE, "ice.sh", nfs.PATH, ice.BIN_ICE_SH,
|
mdb.TYPE, "bin", nfs.FILE, "ice.sh", nfs.PATH, ice.BIN_ICE_SH,
|
||||||
kit.MDB_TYPE, "bin", nfs.FILE, "ice.bin", nfs.PATH, ice.BIN_ICE_BIN,
|
mdb.TYPE, "bin", nfs.FILE, "ice.bin", nfs.PATH, ice.BIN_ICE_BIN,
|
||||||
)),
|
)),
|
||||||
nfs.SOURCE, kit.Dict(kit.MDB_LIST, kit.List(
|
nfs.SOURCE, kit.Dict(mdb.LIST, kit.List(
|
||||||
kit.MDB_TYPE, "txt", nfs.FILE, "main.go", nfs.PATH, ice.SRC_MAIN_GO,
|
mdb.TYPE, "txt", nfs.FILE, "main.go", nfs.PATH, ice.SRC_MAIN_GO,
|
||||||
kit.MDB_TYPE, "txt", nfs.FILE, "miss.sh", nfs.PATH, ice.ETC_MISS_SH,
|
mdb.TYPE, "txt", nfs.FILE, "miss.sh", nfs.PATH, ice.ETC_MISS_SH,
|
||||||
kit.MDB_TYPE, "txt", nfs.FILE, "go.mod", nfs.PATH, ice.GO_MOD,
|
mdb.TYPE, "txt", nfs.FILE, "go.mod", nfs.PATH, ice.GO_MOD,
|
||||||
)),
|
)),
|
||||||
))},
|
))},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
UPGRADE: {Name: "upgrade item=system,source run:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
UPGRADE: {Name: "upgrade item=system,source run:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
|
m.Grows(cmd, kit.Keys(mdb.HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
|
||||||
if value[nfs.PATH] == ice.BIN_ICE_BIN { // 程序文件
|
if value[nfs.PATH] == ice.BIN_ICE_BIN { // 程序文件
|
||||||
value[nfs.FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)
|
value[nfs.FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)
|
||||||
m.Option(ice.EXIT, ice.TRUE)
|
m.Option(ice.EXIT, ice.TRUE)
|
||||||
|
@ -71,7 +71,7 @@ func init() {
|
|||||||
js.WriteString(m.Cmdx(nfs.CAT, k))
|
js.WriteString(m.Cmdx(nfs.CAT, k))
|
||||||
}
|
}
|
||||||
|
|
||||||
if f, _, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS))); m.Assert(e) {
|
if f, _, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(mdb.NAME), JS))); m.Assert(e) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
f.WriteString(ice.NL)
|
f.WriteString(ice.NL)
|
||||||
@ -81,7 +81,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.Option(nfs.DIR_ROOT, "")
|
m.Option(nfs.DIR_ROOT, "")
|
||||||
if f, p, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), HTML))); m.Assert(e) {
|
if f, p, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(mdb.NAME), HTML))); m.Assert(e) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
f.WriteString(fmt.Sprintf(_pack,
|
f.WriteString(fmt.Sprintf(_pack,
|
||||||
@ -89,7 +89,7 @@ func init() {
|
|||||||
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_CSS)),
|
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_CSS)),
|
||||||
|
|
||||||
m.Cmdx(nfs.CAT, _volcanos(m, ice.PROTO_JS)),
|
m.Cmdx(nfs.CAT, _volcanos(m, ice.PROTO_JS)),
|
||||||
m.Cmdx(nfs.CAT, _publish(m, path.Join(WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS)))),
|
m.Cmdx(nfs.CAT, _publish(m, path.Join(WEBPACK, kit.Keys(m.Option(mdb.NAME), JS)))),
|
||||||
|
|
||||||
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_JS)),
|
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_JS)),
|
||||||
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_JS)),
|
m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_JS)),
|
||||||
|
@ -30,7 +30,7 @@ func _asset_check(m *ice.Message, account string) {
|
|||||||
m.Option(kit.Keycb(mdb.SELECT), func(key string, value map[string]interface{}) {
|
m.Option(kit.Keycb(mdb.SELECT), func(key string, value map[string]interface{}) {
|
||||||
amount += kit.Int(kit.Value(value, AMOUNT))
|
amount += kit.Int(kit.Value(value, AMOUNT))
|
||||||
})
|
})
|
||||||
m.Cmd(mdb.SELECT, m.Prefix(ASSET), "", mdb.ZONE, account, ice.OptionFields(m.Config(kit.MDB_FIELD)))
|
m.Cmd(mdb.SELECT, m.Prefix(ASSET), "", mdb.ZONE, account, ice.OptionFields(m.Config(mdb.FIELD)))
|
||||||
|
|
||||||
m.Cmdy(mdb.MODIFY, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
|
m.Cmdy(mdb.MODIFY, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ const ASSET = "asset"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(
|
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(
|
||||||
kit.MDB_SHORT, ACCOUNT, kit.MDB_FIELD, "time,id,type,amount,name,text",
|
mdb.SHORT, ACCOUNT, mdb.FIELD, "time,id,type,amount,name,text",
|
||||||
kit.MDB_ALIAS, kit.Dict(FROM, ACCOUNT, TO, ACCOUNT),
|
kit.MDB_ALIAS, kit.Dict(FROM, ACCOUNT, TO, ACCOUNT),
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
@ -70,15 +70,15 @@ func init() {
|
|||||||
), Action: ice.MergeAction(map[string]*ice.Action{
|
), Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
SPEND: {Name: "spend account name amount time@date text", Help: "支出", Hand: func(m *ice.Message, arg ...string) {
|
SPEND: {Name: "spend account name amount time@date text", Help: "支出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_sub_amount(m, arg)
|
_sub_amount(m, arg)
|
||||||
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "支出", arg[2:])...)
|
_asset_insert(m, arg[1], kit.Simple(mdb.TYPE, "支出", arg[2:])...)
|
||||||
}},
|
}},
|
||||||
TRANS: {Name: "trans from to amount time@date text", Help: "转账", Hand: func(m *ice.Message, arg ...string) {
|
TRANS: {Name: "trans from to amount time@date text", Help: "转账", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_asset_insert(m, arg[3], kit.Simple(kit.MDB_TYPE, "转入", kit.MDB_NAME, arg[1], arg[4:])...)
|
_asset_insert(m, arg[3], kit.Simple(mdb.TYPE, "转入", mdb.NAME, arg[1], arg[4:])...)
|
||||||
_sub_amount(m, arg)
|
_sub_amount(m, arg)
|
||||||
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "转出", kit.MDB_NAME, arg[3], arg[4:])...)
|
_asset_insert(m, arg[1], kit.Simple(mdb.TYPE, "转出", mdb.NAME, arg[3], arg[4:])...)
|
||||||
}},
|
}},
|
||||||
BONUS: {Name: "bonus account name amount time@date text", Help: "收入", Hand: func(m *ice.Message, arg ...string) {
|
BONUS: {Name: "bonus account name amount time@date text", Help: "收入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "收入", arg[2:])...)
|
_asset_insert(m, arg[1], kit.Simple(mdb.TYPE, "收入", arg[2:])...)
|
||||||
}},
|
}},
|
||||||
CHECK: {Name: "check", Help: "核算", Hand: func(m *ice.Message, arg ...string) {
|
CHECK: {Name: "check", Help: "核算", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if m.Option(ACCOUNT) == "" {
|
if m.Option(ACCOUNT) == "" {
|
||||||
@ -92,7 +92,7 @@ func init() {
|
|||||||
m.Toast("核算成功")
|
m.Toast("核算成功")
|
||||||
}},
|
}},
|
||||||
}, mdb.ZoneAction(), ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, mdb.ZoneAction(), ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Fields(len(arg), "time,account,amount,count", m.Config(kit.MDB_FIELD))
|
m.Fields(len(arg), "time,account,amount,count", m.Config(mdb.FIELD))
|
||||||
amount, count := 0, 0
|
amount, count := 0, 0
|
||||||
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
|
||||||
m.PushAction(CHECK)
|
m.PushAction(CHECK)
|
||||||
|
@ -16,7 +16,7 @@ const SALARY = "salary"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
SALARY: {Name: SALARY, Help: "工资", Value: kit.Data(
|
SALARY: {Name: SALARY, Help: "工资", Value: kit.Data(
|
||||||
kit.MDB_SHORT, MONTH, kit.MDB_FIELD, "month,company,amount,income,tax",
|
mdb.SHORT, MONTH, mdb.FIELD, "month,company,amount,income,tax",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
SALARY: {Name: "salary month auto create", Help: "工资", Action: ice.MergeAction(map[string]*ice.Action{
|
SALARY: {Name: "salary month auto create", Help: "工资", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
|
@ -26,18 +26,18 @@ func init() {
|
|||||||
|
|
||||||
tz := int64(8)
|
tz := int64(8)
|
||||||
msg.Table(func(index int, value map[string]string, head []string) {
|
msg.Table(func(index int, value map[string]string, head []string) {
|
||||||
if value[kit.MDB_STATUS] == CANCEL {
|
if value[mdb.STATUS] == CANCEL {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
show := []string{}
|
show := []string{}
|
||||||
for _, k := range []string{kit.MDB_NAME, kit.MDB_TEXT} {
|
for _, k := range []string{mdb.NAME, mdb.TEXT} {
|
||||||
show = append(show, kit.Format(`<div class="%v">%v</div>`, k, value[k]))
|
show = append(show, kit.Format(`<div class="%v">%v</div>`, k, value[k]))
|
||||||
}
|
}
|
||||||
|
|
||||||
t := (kit.Time(value[BEGIN_TIME])+int64(time.Hour)*tz)/int64(time.Second)/3600/24 - (time.Now().Unix()+3600*tz)/3600/24
|
t := (kit.Time(value[BEGIN_TIME])+int64(time.Hour)*tz)/int64(time.Second)/3600/24 - (time.Now().Unix()+3600*tz)/3600/24
|
||||||
m.Echo(`<div class="item %s" title="%s">距离 %v%v%v<span class="day"> %v </span>天</div>`,
|
m.Echo(`<div class="item %s" title="%s">距离 %v%v%v<span class="day"> %v </span>天</div>`,
|
||||||
kit.Select("gone", "come", t > 0), value[kit.MDB_TEXT],
|
kit.Select("gone", "come", t > 0), value[mdb.TEXT],
|
||||||
strings.Split(value[BEGIN_TIME], " ")[0],
|
strings.Split(value[BEGIN_TIME], " ")[0],
|
||||||
strings.Join(show, ""),
|
strings.Join(show, ""),
|
||||||
kit.Select("已经", "还有", t > 0), t,
|
kit.Select("已经", "还有", t > 0), t,
|
||||||
|
@ -50,7 +50,7 @@ func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message {
|
|||||||
m.Push(key, value, fields, val)
|
m.Push(key, value, fields, val)
|
||||||
m.PushButton(_task_action(m, value[STATUS], mdb.PLUGIN))
|
m.PushButton(_task_action(m, value[STATUS], mdb.PLUGIN))
|
||||||
})
|
})
|
||||||
m.Cmd(mdb.SELECT, m.Prefix(TASK), "", mdb.ZONE, kit.MDB_FOREACH)
|
m.Cmd(mdb.SELECT, m.Prefix(TASK), "", mdb.ZONE, mdb.FOREACH)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ func _task_modify(m *ice.Message, field, value string, arg ...string) {
|
|||||||
arg = append(arg, CLOSE_TIME, m.Time())
|
arg = append(arg, CLOSE_TIME, m.Time())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Cmdy(mdb.MODIFY, m.Prefix(TASK), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), field, value, arg)
|
m.Cmdy(mdb.MODIFY, m.Prefix(TASK), "", mdb.ZONE, m.Option(mdb.ZONE), m.Option(mdb.ID), field, value, arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ( // type
|
const ( // type
|
||||||
@ -58,13 +58,13 @@ const TASK = "task"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
TASK: {Name: TASK, Help: "任务", Value: kit.Data(
|
TASK: {Name: TASK, Help: "任务", Value: kit.Data(
|
||||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "begin_time,id,status,level,score,type,name,text",
|
mdb.SHORT, mdb.ZONE, mdb.FIELD, "begin_time,id,status,level,score,type,name,text",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
TASK: {Name: "task zone id auto insert export import", Help: "任务", Action: ice.MergeAction(map[string]*ice.Action{
|
TASK: {Name: "task zone id auto insert export import", Help: "任务", Action: ice.MergeAction(map[string]*ice.Action{
|
||||||
mdb.INSERT: {Name: "insert zone type=once,step,week name text begin_time@date close_time@date", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert zone type=once,step,week name text begin_time@date close_time@date", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
|
||||||
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.ZONE, m.Option(kit.MDB_ZONE),
|
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.ZONE, m.Option(mdb.ZONE),
|
||||||
BEGIN_TIME, m.Time(), CLOSE_TIME, m.Time("30m"),
|
BEGIN_TIME, m.Time(), CLOSE_TIME, m.Time("30m"),
|
||||||
STATUS, PREPARE, LEVEL, 3, SCORE, 3, arg)
|
STATUS, PREPARE, LEVEL, 3, SCORE, 3, arg)
|
||||||
m.ProcessRefresh30ms()
|
m.ProcessRefresh30ms()
|
||||||
@ -77,12 +77,12 @@ func init() {
|
|||||||
_task_modify(m, STATUS, CANCEL)
|
_task_modify(m, STATUS, CANCEL)
|
||||||
}},
|
}},
|
||||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.OptionFields(kit.MDB_ZONE, "time,id,type,name,text,level,status,score,begin_time,close_time")
|
m.OptionFields(mdb.ZONE, "time,id,type,name,text,level,status,score,begin_time,close_time")
|
||||||
m.Cmdy(mdb.EXPORT, m.Prefix(TASK), "", mdb.ZONE)
|
m.Cmdy(mdb.EXPORT, m.Prefix(TASK), "", mdb.ZONE)
|
||||||
m.ProcessRefresh30ms()
|
m.ProcessRefresh30ms()
|
||||||
}},
|
}},
|
||||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.OptionFields(kit.MDB_ZONE)
|
m.OptionFields(mdb.ZONE)
|
||||||
m.Cmdy(mdb.IMPORT, m.Prefix(TASK), "", mdb.ZONE)
|
m.Cmdy(mdb.IMPORT, m.Prefix(TASK), "", mdb.ZONE)
|
||||||
m.ProcessRefresh30ms()
|
m.ProcessRefresh30ms()
|
||||||
}},
|
}},
|
||||||
@ -98,7 +98,7 @@ func init() {
|
|||||||
status := map[string]int{}
|
status := map[string]int{}
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
m.PushButton(_task_action(m, value[STATUS]))
|
m.PushButton(_task_action(m, value[STATUS]))
|
||||||
status[value[kit.MDB_STATUS]]++
|
status[value[mdb.STATUS]]++
|
||||||
})
|
})
|
||||||
m.Status(status)
|
m.Status(status)
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package wiki
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -14,7 +15,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
BRIEF: {Name: BRIEF, Help: "摘要", Value: kit.Data(
|
BRIEF: {Name: BRIEF, Help: "摘要", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<p {{.OptionTemplate}}>{{.Option "text"}}</p>`,
|
nfs.TEMPLATE, `<p {{.OptionTemplate}}>{{.Option "text"}}</p>`,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -165,7 +166,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
CHART: {Name: CHART, Help: "图表", Value: kit.Data(
|
CHART: {Name: CHART, Help: "图表", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<svg {{.OptionTemplate}}
|
nfs.TEMPLATE, `<svg {{.OptionTemplate}}
|
||||||
vertion="1.1" xmlns="http://www.w3.org/2000/svg" height="{{.Option "height"}}" width="{{.Option "width"}}"
|
vertion="1.1" xmlns="http://www.w3.org/2000/svg" height="{{.Option "height"}}" width="{{.Option "width"}}"
|
||||||
stroke-width="{{.Option "stroke-width"}}" stroke="{{.Option "stroke"}}" fill="{{.Option "fill"}}"
|
stroke-width="{{.Option "stroke-width"}}" stroke="{{.Option "stroke"}}" fill="{{.Option "fill"}}"
|
||||||
font-size="{{.Option "font-size"}}" font-family="{{.Option "font-family"}}" text-anchor="middle" dominant-baseline="middle">`,
|
font-size="{{.Option "font-size"}}" font-family="{{.Option "font-family"}}" text-anchor="middle" dominant-baseline="middle">`,
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/core/wiki"
|
"shylinux.com/x/icebergs/core/wiki"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
@ -38,7 +39,7 @@ func (b *Block) Init(m *ice.Message, arg ...string) wiki.Chart {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
func (b *Block) Data(m *ice.Message, meta interface{}) wiki.Chart {
|
func (b *Block) Data(m *ice.Message, meta interface{}) wiki.Chart {
|
||||||
b.Text = kit.Select(b.Text, kit.Value(meta, kit.MDB_TEXT))
|
b.Text = kit.Select(b.Text, kit.Value(meta, mdb.TEXT))
|
||||||
kit.Fetch(meta, func(key string, value string) {
|
kit.Fetch(meta, func(key string, value string) {
|
||||||
switch key {
|
switch key {
|
||||||
case wiki.FG:
|
case wiki.FG:
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
"shylinux.com/x/icebergs/base/lex"
|
"shylinux.com/x/icebergs/base/lex"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/core/wiki"
|
"shylinux.com/x/icebergs/core/wiki"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
@ -22,7 +23,7 @@ func (c *Chain) Init(m *ice.Message, arg ...string) wiki.Chart {
|
|||||||
m.Option(nfs.CAT_CONTENT, arg[0])
|
m.Option(nfs.CAT_CONTENT, arg[0])
|
||||||
m.Option(lex.SPLIT_SPACE, "\t \n")
|
m.Option(lex.SPLIT_SPACE, "\t \n")
|
||||||
m.Option(lex.SPLIT_BLOCK, "\t \n")
|
m.Option(lex.SPLIT_BLOCK, "\t \n")
|
||||||
c.data = lex.Split(m, "", kit.MDB_TEXT)
|
c.data = lex.Split(m, "", mdb.TEXT)
|
||||||
|
|
||||||
// 计算尺寸
|
// 计算尺寸
|
||||||
c.Height = c.size(m, c.data) * c.GetHeights()
|
c.Height = c.size(m, c.data) * c.GetHeights()
|
||||||
@ -39,8 +40,8 @@ func (c *Chain) Draw(m *ice.Message, x, y int) wiki.Chart {
|
|||||||
}
|
}
|
||||||
func (c *Chain) size(m *ice.Message, root map[string]interface{}) (height int) {
|
func (c *Chain) size(m *ice.Message, root map[string]interface{}) (height int) {
|
||||||
meta := kit.GetMeta(root)
|
meta := kit.GetMeta(root)
|
||||||
if list, ok := root[kit.MDB_LIST].([]interface{}); ok && len(list) > 0 {
|
if list, ok := root[mdb.LIST].([]interface{}); ok && len(list) > 0 {
|
||||||
kit.Fetch(root[kit.MDB_LIST], func(index int, value map[string]interface{}) {
|
kit.Fetch(root[mdb.LIST], func(index int, value map[string]interface{}) {
|
||||||
height += c.size(m, value)
|
height += c.size(m, value)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -69,7 +70,7 @@ func (c *Chain) draw(m *ice.Message, root map[string]interface{}, x, y int, p *B
|
|||||||
MarginY: p.MarginY,
|
MarginY: p.MarginY,
|
||||||
}
|
}
|
||||||
item.x, item.y = x, y+(kit.Int(meta[wiki.HEIGHT])-1)*c.GetHeights()/2
|
item.x, item.y = x, y+(kit.Int(meta[wiki.HEIGHT])-1)*c.GetHeights()/2
|
||||||
item.Init(m, kit.Format(meta[kit.MDB_TEXT])).Data(m, meta)
|
item.Init(m, kit.Format(meta[mdb.TEXT])).Data(m, meta)
|
||||||
item.Draw(m, item.x, item.y)
|
item.Draw(m, item.x, item.y)
|
||||||
|
|
||||||
// 画面尺寸
|
// 画面尺寸
|
||||||
@ -90,7 +91,7 @@ func (c *Chain) draw(m *ice.Message, root map[string]interface{}, x, y int, p *B
|
|||||||
|
|
||||||
// 递归节点
|
// 递归节点
|
||||||
h, x := 0, x+item.GetWidths()
|
h, x := 0, x+item.GetWidths()
|
||||||
if kit.Fetch(root[kit.MDB_LIST], func(index int, value map[string]interface{}) {
|
if kit.Fetch(root[mdb.LIST], func(index int, value map[string]interface{}) {
|
||||||
h += c.draw(m, value, x, y+h, item)
|
h += c.draw(m, value, x, y+h, item)
|
||||||
}); h == 0 {
|
}); h == 0 {
|
||||||
return item.GetHeights()
|
return item.GetHeights()
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/core/wiki"
|
"shylinux.com/x/icebergs/core/wiki"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
@ -26,7 +27,7 @@ func (l *Label) Init(m *ice.Message, arg ...string) wiki.Chart {
|
|||||||
for i, v := range ls {
|
for i, v := range ls {
|
||||||
switch data := kit.Parse(nil, "", kit.Split(v)...).(type) {
|
switch data := kit.Parse(nil, "", kit.Split(v)...).(type) {
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
v = kit.Select("", data[kit.MDB_TEXT])
|
v = kit.Select("", data[mdb.TEXT])
|
||||||
}
|
}
|
||||||
if w := l.GetWidth(v); w > l.max[i] {
|
if w := l.GetWidth(v); w > l.max[i] {
|
||||||
l.max[i] = w
|
l.max[i] = w
|
||||||
@ -52,7 +53,7 @@ func (l *Label) Draw(m *ice.Message, x, y int) wiki.Chart {
|
|||||||
item = &Block{FontSize: l.FontSize, Padding: l.Padding, MarginX: l.MarginX, MarginY: l.MarginY}
|
item = &Block{FontSize: l.FontSize, Padding: l.Padding, MarginX: l.MarginX, MarginY: l.MarginY}
|
||||||
switch data := kit.Parse(nil, "", kit.Split(text)...).(type) {
|
switch data := kit.Parse(nil, "", kit.Split(text)...).(type) {
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
item.Init(m, kit.Select(text, data[kit.MDB_TEXT])).Data(m, data)
|
item.Init(m, kit.Select(text, data[mdb.TEXT])).Data(m, data)
|
||||||
default:
|
default:
|
||||||
item.Init(m, text)
|
item.Init(m, text)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
"shylinux.com/x/icebergs/base/lex"
|
"shylinux.com/x/icebergs/base/lex"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/core/wiki"
|
"shylinux.com/x/icebergs/core/wiki"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
@ -20,7 +21,7 @@ func (s *Sequence) push(m *ice.Message, list string, arg ...interface{}) map[str
|
|||||||
node, node_list := kit.Dict(arg...), kit.Int(list)
|
node, node_list := kit.Dict(arg...), kit.Int(list)
|
||||||
s.List[node_list] = append(s.List[node_list], node)
|
s.List[node_list] = append(s.List[node_list], node)
|
||||||
_max := kit.Max(len(s.List[node_list])-1, s.pos[node_list])
|
_max := kit.Max(len(s.List[node_list])-1, s.pos[node_list])
|
||||||
node[kit.MDB_ORDER], s.pos[node_list] = _max, _max+1
|
node[ORDER], s.pos[node_list] = _max, _max+1
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
func (s *Sequence) Init(m *ice.Message, arg ...string) wiki.Chart {
|
func (s *Sequence) Init(m *ice.Message, arg ...string) wiki.Chart {
|
||||||
@ -44,12 +45,12 @@ func (s *Sequence) Init(m *ice.Message, arg ...string) wiki.Chart {
|
|||||||
to_node = s.push(m, ls[i+1])
|
to_node = s.push(m, ls[i+1])
|
||||||
list[ls[i+1]] = to_node
|
list[ls[i+1]] = to_node
|
||||||
|
|
||||||
_max := kit.Max(kit.Int(from_node[kit.MDB_ORDER]), kit.Int(to_node[kit.MDB_ORDER]))
|
_max := kit.Max(kit.Int(from_node[ORDER]), kit.Int(to_node[ORDER]))
|
||||||
s.pos[kit.Int(ls[i-1])], s.pos[kit.Int(ls[i+1])] = _max+1, _max+1
|
s.pos[kit.Int(ls[i-1])], s.pos[kit.Int(ls[i+1])] = _max+1, _max+1
|
||||||
from_node[kit.MDB_ORDER], to_node[kit.MDB_ORDER] = _max, _max
|
from_node[ORDER], to_node[ORDER] = _max, _max
|
||||||
from_node[kit.MDB_TEXT], from_node[kit.MDB_NEXT] = ls[i], ls[i+1]
|
from_node[mdb.TEXT], from_node[mdb.NEXT] = ls[i], ls[i+1]
|
||||||
} else {
|
} else {
|
||||||
from_node[kit.MDB_ECHO], from_node[kit.MDB_PREV] = ls[i], ls[i+1]
|
from_node[ECHO], from_node[PREV] = ls[i], ls[i+1]
|
||||||
}
|
}
|
||||||
from_node = to_node
|
from_node = to_node
|
||||||
}
|
}
|
||||||
@ -89,29 +90,29 @@ func (s *Sequence) Draw(m *ice.Message, x, y int) wiki.Chart {
|
|||||||
|
|
||||||
for i, x := range line_pos {
|
for i, x := range line_pos {
|
||||||
for _, v := range s.List[i] {
|
for _, v := range s.List[i] {
|
||||||
pos := kit.Int(v[kit.MDB_ORDER])
|
pos := kit.Int(v[ORDER])
|
||||||
g.EchoRect(RECT, rect_height, rect_width, x-rect_width/2, y+pos*(rect_height+s.MarginY)+s.MarginY, "2", "2")
|
g.EchoRect(RECT, rect_height, rect_width, x-rect_width/2, y+pos*(rect_height+s.MarginY)+s.MarginY, "2", "2")
|
||||||
|
|
||||||
yy := y + pos*(rect_height+s.MarginY) + s.MarginY + rect_height/4
|
yy := y + pos*(rect_height+s.MarginY) + s.MarginY + rect_height/4
|
||||||
if kit.Format(v[kit.MDB_NEXT]) != "" {
|
if kit.Format(v[mdb.NEXT]) != "" {
|
||||||
xx := line_pos[kit.Int(v[kit.MDB_NEXT])]
|
xx := line_pos[kit.Int(v[mdb.NEXT])]
|
||||||
if x < xx {
|
if x < xx {
|
||||||
g.EchoArrowLine(NEXT, x+rect_width/2, yy, xx-rect_width/2-arrow_width, yy)
|
g.EchoArrowLine(NEXT, x+rect_width/2, yy, xx-rect_width/2-arrow_width, yy)
|
||||||
} else {
|
} else {
|
||||||
g.EchoArrowLine(NEXT, x-rect_width/2, yy, xx+rect_width/2+arrow_width, yy)
|
g.EchoArrowLine(NEXT, x-rect_width/2, yy, xx+rect_width/2+arrow_width, yy)
|
||||||
}
|
}
|
||||||
g.EchoText(TEXT, (x+xx)/2, yy, kit.Format(v[kit.MDB_TEXT]))
|
g.EchoText(TEXT, (x+xx)/2, yy, kit.Format(v[mdb.TEXT]))
|
||||||
}
|
}
|
||||||
|
|
||||||
yy += rect_height / 2
|
yy += rect_height / 2
|
||||||
if kit.Format(v[kit.MDB_PREV]) != "" {
|
if kit.Format(v[PREV]) != "" {
|
||||||
xx := line_pos[kit.Int(v[kit.MDB_PREV])]
|
xx := line_pos[kit.Int(v[PREV])]
|
||||||
if x < xx {
|
if x < xx {
|
||||||
g.EchoArrowLine(PREV, x+rect_width/2, yy, xx-rect_width/2-arrow_width, yy)
|
g.EchoArrowLine(PREV, x+rect_width/2, yy, xx-rect_width/2-arrow_width, yy)
|
||||||
} else {
|
} else {
|
||||||
g.EchoArrowLine(PREV, x-rect_width/2, yy, xx+rect_width/2+arrow_width, yy)
|
g.EchoArrowLine(PREV, x-rect_width/2, yy, xx+rect_width/2+arrow_width, yy)
|
||||||
}
|
}
|
||||||
g.EchoText(ECHO, (x+xx)/2, yy, kit.Format(v[kit.MDB_ECHO]))
|
g.EchoText(ECHO, (x+xx)/2, yy, kit.Format(v[ECHO]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,6 +123,9 @@ func (s *Sequence) Draw(m *ice.Message, x, y int) wiki.Chart {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ORDER = "order"
|
||||||
|
)
|
||||||
const (
|
const (
|
||||||
ARROW = "arrow"
|
ARROW = "arrow"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ const DATA = "data"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(
|
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(
|
||||||
nfs.PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.csv",
|
nfs.PATH, ice.USR_LOCAL_EXPORT, REGEXP, ".*\\.csv",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict(
|
DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict(
|
||||||
|
@ -11,7 +11,7 @@ const DRAW = "draw"
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data(kit.MDB_REGEXP, ".*\\.svg")},
|
DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data(REGEXP, ".*\\.svg")},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
DRAW: {Name: "draw path=src/main.svg pid refresh:button=auto edit save actions", Help: "思维导图", Meta: kit.Dict(
|
DRAW: {Name: "draw path=src/main.svg pid refresh:button=auto edit save actions", Help: "思维导图", Meta: kit.Dict(
|
||||||
ice.DisplayLocal(""),
|
ice.DisplayLocal(""),
|
||||||
|
@ -16,7 +16,7 @@ const FEEL = "feel"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data(
|
FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data(
|
||||||
nfs.PATH, ice.USR_LOCAL_IMAGE, kit.MDB_REGEXP, ".*.(png|PNG|jpg|JPG|jpeg|mp4|m4v|MOV)",
|
nfs.PATH, ice.USR_LOCAL_IMAGE, REGEXP, ".*.(png|PNG|jpg|JPG|jpeg|mp4|m4v|MOV)",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
FEEL: {Name: "feel path auto upload 上一页 下一页 actions", Help: "影音媒体", Meta: kit.Dict(
|
FEEL: {Name: "feel path auto upload 上一页 下一页 actions", Help: "影音媒体", Meta: kit.Dict(
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/ctx"
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,8 +41,8 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
name = strings.ReplaceAll(name, ice.SP, "_")
|
name = strings.ReplaceAll(name, ice.SP, "_")
|
||||||
meta[kit.MDB_NAME] = name
|
meta[mdb.NAME] = name
|
||||||
meta[kit.MDB_INDEX] = text
|
meta[mdb.INDEX] = text
|
||||||
|
|
||||||
// 扩展参数
|
// 扩展参数
|
||||||
for i := 0; i < len(arg)-1; i += 2 {
|
for i := 0; i < len(arg)-1; i += 2 {
|
||||||
@ -67,7 +69,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
|
|||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
kit.Fetch(meta[INPUTS], func(index int, value map[string]interface{}) {
|
kit.Fetch(meta[INPUTS], func(index int, value map[string]interface{}) {
|
||||||
if value[kit.MDB_TYPE] != kit.MDB_BUTTON {
|
if value[mdb.TYPE] != kit.MDB_BUTTON {
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -76,14 +78,14 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
|
|||||||
list := meta[INPUTS].([]interface{})
|
list := meta[INPUTS].([]interface{})
|
||||||
for i := count; i < len(args); i++ {
|
for i := count; i < len(args); i++ {
|
||||||
list = append(list, kit.Dict(
|
list = append(list, kit.Dict(
|
||||||
kit.MDB_TYPE, "text", kit.MDB_NAME, "args", kit.MDB_VALUE, args[i],
|
mdb.TYPE, "text", mdb.NAME, "args", mdb.VALUE, args[i],
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
meta[INPUTS] = list
|
meta[INPUTS] = list
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Option(kit.MDB_META, meta)
|
m.Option(mdb.META, meta)
|
||||||
|
|
||||||
// 渲染引擎
|
// 渲染引擎
|
||||||
_wiki_template(m, FIELD, name, text)
|
_wiki_template(m, FIELD, name, text)
|
||||||
@ -108,7 +110,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
FIELD: {Name: FIELD, Help: "插件", Value: kit.Data(
|
FIELD: {Name: FIELD, Help: "插件", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<fieldset {{.OptionTemplate}}" data-meta='{{.Optionv "meta"|Format}}'>
|
nfs.TEMPLATE, `<fieldset {{.OptionTemplate}}" data-meta='{{.Optionv "meta"|Format}}'>
|
||||||
<legend>{{.Option "name"}}</legend>
|
<legend>{{.Option "name"}}</legend>
|
||||||
<form class="option"></form>
|
<form class="option"></form>
|
||||||
<div class="action"></div>
|
<div class="action"></div>
|
||||||
|
@ -14,6 +14,7 @@ func _image_show(m *ice.Message, text string, arg ...string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
IMG = "img"
|
||||||
PNG = "png"
|
PNG = "png"
|
||||||
JPG = "jpg"
|
JPG = "jpg"
|
||||||
JPEG = "jpeg"
|
JPEG = "jpeg"
|
||||||
@ -34,7 +35,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
IMAGE: {Name: IMAGE, Help: "图片", Value: kit.Data(
|
IMAGE: {Name: IMAGE, Help: "图片", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<img {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}">`,
|
nfs.TEMPLATE, `<img {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}">`,
|
||||||
nfs.PATH, ice.USR_LOCAL_IMAGE,
|
nfs.PATH, ice.USR_LOCAL_IMAGE,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
|
@ -52,7 +52,7 @@ const JSON = "json"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
JSON: {Name: JSON, Help: "数据结构", Value: kit.Data(
|
JSON: {Name: JSON, Help: "数据结构", Value: kit.Data(
|
||||||
nfs.PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.json",
|
nfs.PATH, ice.USR_LOCAL_EXPORT, REGEXP, ".*\\.json",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
JSON: {Name: "json path auto", Help: "数据结构", Meta: kit.Dict(
|
JSON: {Name: "json path auto", Help: "数据结构", Meta: kit.Dict(
|
||||||
|
@ -21,7 +21,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
LOCAL: {Name: LOCAL, Help: "文件", Value: kit.Data(
|
LOCAL: {Name: LOCAL, Help: "文件", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<code {{.OptionTemplate}}>{{range $index, $value := .Optionv "input"}}{{$value}}{{end}}</code>`,
|
nfs.TEMPLATE, `<code {{.OptionTemplate}}>{{range $index, $value := .Optionv "input"}}{{$value}}{{end}}</code>`,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,13 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
func _order_show(m *ice.Message, text string, arg ...string) {
|
func _order_show(m *ice.Message, text string, arg ...string) {
|
||||||
m.Optionv(kit.MDB_LIST, kit.Split(strings.TrimSpace(text), ice.NL))
|
m.Optionv(mdb.LIST, kit.Split(strings.TrimSpace(text), ice.NL))
|
||||||
_wiki_template(m, ORDER, "", text, arg...)
|
_wiki_template(m, ORDER, "", text, arg...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,7 +23,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
ORDER: {Name: ORDER, Help: "列表", Value: kit.Data(
|
ORDER: {Name: ORDER, Help: "列表", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<ul {{.OptionTemplate}}>{{range $index, $value := .Optionv "list"}}<li>{{$value}}</li>{{end}}</ul>`,
|
nfs.TEMPLATE, `<ul {{.OptionTemplate}}>{{range $index, $value := .Optionv "list"}}<li>{{$value}}</li>{{end}}</ul>`,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -15,13 +15,13 @@ const poems = "poems"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
poems: {Name: "poems", Help: "诗词", Value: kit.Data(
|
poems: {Name: "poems", Help: "诗词", Value: kit.Data(
|
||||||
kit.MDB_SHORT, AUTHOR,
|
mdb.SHORT, AUTHOR,
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
poems: {Name: "poems author title auto insert", Help: "诗词", Action: map[string]*ice.Action{
|
poems: {Name: "poems author title auto insert", Help: "诗词", Action: map[string]*ice.Action{
|
||||||
mdb.INSERT: {Name: "insert author title content:textarea", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert author title content:textarea", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(AUTHOR))
|
m.Cmd(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(AUTHOR))
|
||||||
m.Conf(poems, kit.KeyHash(m.Option(AUTHOR), kit.MDB_META, kit.MDB_SHORT), TITLE)
|
m.Conf(poems, kit.KeyHash(m.Option(AUTHOR), mdb.META, mdb.SHORT), TITLE)
|
||||||
m.Cmd(mdb.INSERT, m.PrefixKey(), kit.KeyHash(m.Option(AUTHOR)), mdb.HASH, arg[2:])
|
m.Cmd(mdb.INSERT, m.PrefixKey(), kit.KeyHash(m.Option(AUTHOR)), mdb.HASH, arg[2:])
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -17,7 +19,7 @@ func _refer_show(m *ice.Message, text string, arg ...string) {
|
|||||||
list = append(list, ls)
|
list = append(list, ls)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Optionv(kit.MDB_LIST, list)
|
m.Optionv(mdb.LIST, list)
|
||||||
_wiki_template(m, REFER, "", text, arg...)
|
_wiki_template(m, REFER, "", text, arg...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,7 +32,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
REFER: {Name: REFER, Help: "参考", Value: kit.Data(
|
REFER: {Name: REFER, Help: "参考", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<ul {{.OptionTemplate}}>{{range $index, $value := .Optionv "list"}}<li>{{index $value 0}}: <a href="{{index $value 1}}" target="_blank">{{index $value 1}}</a></li>{{end}}</ul>`,
|
nfs.TEMPLATE, `<ul {{.OptionTemplate}}>{{range $index, $value := .Optionv "list"}}<li>{{index $value 0}}: <a href="{{index $value 1}}" target="_blank">{{index $value 1}}</a></li>{{end}}</ul>`,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package wiki
|
|||||||
import (
|
import (
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
"shylinux.com/x/icebergs/base/cli"
|
"shylinux.com/x/icebergs/base/cli"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,7 +26,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
SHELL: {Name: SHELL, Help: "命令", Value: kit.Data(
|
SHELL: {Name: SHELL, Help: "命令", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<code {{.OptionTemplate}}>$ {{.Option "input"}} # {{.Option "name"}}
|
nfs.TEMPLATE, `<code {{.OptionTemplate}}>$ {{.Option "input"}} # {{.Option "name"}}
|
||||||
{{.Option "output"}}</code>`,
|
{{.Option "output"}}</code>`,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/base/ssh"
|
"shylinux.com/x/icebergs/base/ssh"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
@ -82,7 +83,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
SPARK: {Name: SPARK, Help: "段落", Value: kit.Data(
|
SPARK: {Name: SPARK, Help: "段落", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<p {{.OptionTemplate}}>{{.Option "text"}}</p>`,
|
nfs.TEMPLATE, `<p {{.OptionTemplate}}>{{.Option "text"}}</p>`,
|
||||||
ssh.PROMPT, kit.Dict(SHELL, "$ "),
|
ssh.PROMPT, kit.Dict(SHELL, "$ "),
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -70,7 +71,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
TABLE: {Name: TABLE, Help: "表格", Value: kit.Data(
|
TABLE: {Name: TABLE, Help: "表格", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<table {{.OptionTemplate}}>
|
nfs.TEMPLATE, `<table {{.OptionTemplate}}>
|
||||||
<tr>{{range $i, $v := .Optionv "head"}}<th>{{$v}}</th>{{end}}</tr>
|
<tr>{{range $i, $v := .Optionv "head"}}<th>{{$v}}</th>{{end}}</tr>
|
||||||
{{range $index, $value := .Optionv "list"}}
|
{{range $index, $value := .Optionv "list"}}
|
||||||
<tr>{{range $i, $v := $value}}<td>{{$v}}</td>{{end}}</tr>
|
<tr>{{range $i, $v := $value}}<td>{{$v}}</td>{{end}}</tr>
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,7 +38,7 @@ func _title_parse(m *ice.Message, dir string, root map[string]interface{}, list
|
|||||||
ls[1] = path.Join(dir, ls[1])
|
ls[1] = path.Join(dir, ls[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
meta := kit.Dict(kit.MDB_NAME, kit.Select("", ls, 0), kit.MDB_LINK, kit.Select("", ls, 1))
|
meta := kit.Dict(mdb.NAME, kit.Select("", ls, 0), mdb.LINK, kit.Select("", ls, 1))
|
||||||
for i := 2; i < len(ls); i += 2 {
|
for i := 2; i < len(ls); i += 2 {
|
||||||
meta[ls[i]] = ls[i+1]
|
meta[ls[i]] = ls[i+1]
|
||||||
}
|
}
|
||||||
@ -67,26 +69,26 @@ func _title_show(m *ice.Message, kind, text string, arg ...string) {
|
|||||||
|
|
||||||
case SECTION: // 分节标题
|
case SECTION: // 分节标题
|
||||||
title[SECTION]++
|
title[SECTION]++
|
||||||
m.Option(kit.MDB_LEVEL, "h3")
|
m.Option(LEVEL, "h3")
|
||||||
m.Option(kit.MDB_PREFIX, kit.Format("%d.%d ", title[CHAPTER], title[SECTION]))
|
m.Option(PREFIX, kit.Format("%d.%d ", title[CHAPTER], title[SECTION]))
|
||||||
|
|
||||||
case CHAPTER: // 章节标题
|
case CHAPTER: // 章节标题
|
||||||
title[CHAPTER]++
|
title[CHAPTER]++
|
||||||
title[SECTION] = 0
|
title[SECTION] = 0
|
||||||
m.Option(kit.MDB_LEVEL, "h2")
|
m.Option(LEVEL, "h2")
|
||||||
m.Option(kit.MDB_PREFIX, kit.Format("%d ", title[CHAPTER]))
|
m.Option(PREFIX, kit.Format("%d ", title[CHAPTER]))
|
||||||
|
|
||||||
default: // 文章标题
|
default: // 文章标题
|
||||||
m.Option(kit.MDB_LEVEL, "h1")
|
m.Option(LEVEL, "h1")
|
||||||
m.Option(kit.MDB_PREFIX, "")
|
m.Option(PREFIX, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 渲染引擎
|
// 渲染引擎
|
||||||
_wiki_template(m, TITLE, "", text, arg...)
|
_wiki_template(m, TITLE, "", text, arg...)
|
||||||
|
|
||||||
// 添加目录
|
// 添加目录
|
||||||
menu, _ := m.Optionv(kit.MDB_MENU).(map[string]interface{})
|
menu, _ := m.Optionv(MENU).(map[string]interface{})
|
||||||
menu[kit.MDB_LIST] = append(menu[kit.MDB_LIST].([]interface{}), kit.Dict(m.OptionSimple("level,prefix,text")))
|
menu[mdb.LIST] = append(menu[mdb.LIST].([]interface{}), kit.Dict(m.OptionSimple("level,prefix,text")))
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -97,6 +99,12 @@ const (
|
|||||||
ENDMENU = "endmenu"
|
ENDMENU = "endmenu"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
REGEXP = "regexp"
|
||||||
|
PREFIX = "prefix"
|
||||||
|
LEVEL = "level"
|
||||||
|
MENU = "menu"
|
||||||
|
)
|
||||||
const TITLE = "title"
|
const TITLE = "title"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -119,7 +127,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
TITLE: {Name: TITLE, Help: "标题", Value: kit.Data(
|
TITLE: {Name: TITLE, Help: "标题", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<{{.Option "level"}} {{.OptionTemplate}}>{{.Option "prefix"}} {{.Option "text"}}</{{.Option "level"}}>`,
|
nfs.TEMPLATE, `<{{.Option "level"}} {{.OptionTemplate}}>{{.Option "prefix"}} {{.Option "text"}}</{{.Option "level"}}>`,
|
||||||
PREMENU, `<ul {{.OptionTemplate}}></ul>`,
|
PREMENU, `<ul {{.OptionTemplate}}></ul>`,
|
||||||
ENDMENU, `<ul {{.OptionTemplate}}>{{$menu := .Optionv "menu"}}
|
ENDMENU, `<ul {{.OptionTemplate}}>{{$menu := .Optionv "menu"}}
|
||||||
{{range $index, $value := Value $menu "list"}}<li>{{Value $value "prefix"}} {{Value $value "text"}}</li>{{end}}
|
{{range $index, $value := Value $menu "list"}}<li>{{Value $value "prefix"}} {{Value $value "text"}}</li>{{end}}
|
||||||
|
@ -32,7 +32,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Configs: map[string]*ice.Config{
|
}, Configs: map[string]*ice.Config{
|
||||||
VIDEO: {Name: "video", Help: "视频", Value: kit.Data(
|
VIDEO: {Name: "video", Help: "视频", Value: kit.Data(
|
||||||
kit.MDB_TEMPLATE, `<video {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}" controls></video>`,
|
nfs.TEMPLATE, `<video {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}" controls></video>`,
|
||||||
nfs.PATH, ice.USR_LOCAL_IMAGE,
|
nfs.PATH, ice.USR_LOCAL_IMAGE,
|
||||||
)},
|
)},
|
||||||
}})
|
}})
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ice "shylinux.com/x/icebergs"
|
ice "shylinux.com/x/icebergs"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
"shylinux.com/x/icebergs/base/nfs"
|
"shylinux.com/x/icebergs/base/nfs"
|
||||||
"shylinux.com/x/icebergs/base/web"
|
"shylinux.com/x/icebergs/base/web"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
@ -17,12 +18,12 @@ func _name(m *ice.Message, arg []string) []string {
|
|||||||
return arg
|
return arg
|
||||||
}
|
}
|
||||||
func _option(m *ice.Message, kind, name, text string, arg ...string) {
|
func _option(m *ice.Message, kind, name, text string, arg ...string) {
|
||||||
m.Option(kit.MDB_TYPE, kind)
|
m.Option(mdb.TYPE, kind)
|
||||||
m.Option(kit.MDB_NAME, name)
|
m.Option(mdb.NAME, name)
|
||||||
m.Option(kit.MDB_TEXT, text)
|
m.Option(mdb.TEXT, text)
|
||||||
|
|
||||||
extra := kit.Dict()
|
extra := kit.Dict()
|
||||||
m.Optionv(kit.MDB_EXTRA, extra)
|
m.Optionv(mdb.EXTRA, extra)
|
||||||
for i := 0; i < len(arg); i += 2 {
|
for i := 0; i < len(arg); i += 2 {
|
||||||
extra[arg[i]] = kit.Format(kit.Parse(nil, "", kit.Split(arg[i+1])...))
|
extra[arg[i]] = kit.Format(kit.Parse(nil, "", kit.Split(arg[i+1])...))
|
||||||
}
|
}
|
||||||
@ -65,7 +66,7 @@ func _wiki_upload(m *ice.Message, cmd string, dir string) {
|
|||||||
}
|
}
|
||||||
func _wiki_template(m *ice.Message, cmd string, name, text string, arg ...string) {
|
func _wiki_template(m *ice.Message, cmd string, name, text string, arg ...string) {
|
||||||
_option(m, cmd, name, strings.TrimSpace(text), arg...)
|
_option(m, cmd, name, strings.TrimSpace(text), arg...)
|
||||||
m.RenderTemplate(m.Conf(cmd, kit.Keym(kit.MDB_TEMPLATE)))
|
m.RenderTemplate(m.Conf(cmd, kit.Keym(nfs.TEMPLATE)))
|
||||||
}
|
}
|
||||||
|
|
||||||
const WIKI = "wiki"
|
const WIKI = "wiki"
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
func _word_show(m *ice.Message, name string, arg ...string) {
|
func _word_show(m *ice.Message, name string, arg ...string) {
|
||||||
m.Set(ice.MSG_RESULT)
|
m.Set(ice.MSG_RESULT)
|
||||||
m.Option(TITLE, map[string]int{})
|
m.Option(TITLE, map[string]int{})
|
||||||
m.Option(kit.MDB_MENU, kit.Dict(kit.MDB_LIST, []interface{}{}))
|
m.Option(MENU, kit.Dict(mdb.LIST, []interface{}{}))
|
||||||
|
|
||||||
m.Option(ice.MSG_ALIAS, m.Confv(WORD, kit.Keym(kit.MDB_ALIAS)))
|
m.Option(ice.MSG_ALIAS, m.Confv(WORD, kit.Keym(kit.MDB_ALIAS)))
|
||||||
m.Option(nfs.DIR_ROOT, _wiki_path(m, WORD))
|
m.Option(nfs.DIR_ROOT, _wiki_path(m, WORD))
|
||||||
@ -25,7 +25,7 @@ const WORD = "word"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||||
WORD: {Name: WORD, Help: "语言文字", Value: kit.Data(
|
WORD: {Name: WORD, Help: "语言文字", Value: kit.Data(
|
||||||
nfs.PATH, "", kit.MDB_REGEXP, ".*\\.shy", kit.MDB_ALIAS, kit.Dict(
|
nfs.PATH, "", REGEXP, ".*\\.shy", kit.MDB_ALIAS, kit.Dict(
|
||||||
NAVMENU, kit.List(TITLE, NAVMENU),
|
NAVMENU, kit.List(TITLE, NAVMENU),
|
||||||
PREMENU, kit.List(TITLE, PREMENU),
|
PREMENU, kit.List(TITLE, PREMENU),
|
||||||
CHAPTER, kit.List(TITLE, CHAPTER),
|
CHAPTER, kit.List(TITLE, CHAPTER),
|
||||||
@ -47,7 +47,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
"play": {Name: "play", Help: "演示"},
|
"play": {Name: "play", Help: "演示"},
|
||||||
}, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(nfs.DIR_REG, m.Config(kit.MDB_REGEXP))
|
m.Option(nfs.DIR_REG, m.Config(REGEXP))
|
||||||
if m.Option(nfs.DIR_DEEP, ice.TRUE); !_wiki_list(m, cmd, arg...) {
|
if m.Option(nfs.DIR_DEEP, ice.TRUE); !_wiki_list(m, cmd, arg...) {
|
||||||
_word_show(m, arg[0])
|
_word_show(m, arg[0])
|
||||||
}
|
}
|
||||||
|
1
go.mod
1
go.mod
@ -4,6 +4,7 @@ go 1.11
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
shylinux.com/x/go-qrcode v0.0.1
|
shylinux.com/x/go-qrcode v0.0.1
|
||||||
|
shylinux.com/x/ice v0.4.7
|
||||||
shylinux.com/x/toolkits v0.4.3
|
shylinux.com/x/toolkits v0.4.3
|
||||||
shylinux.com/x/websocket v0.0.1
|
shylinux.com/x/websocket v0.0.1
|
||||||
)
|
)
|
||||||
|
3
go.sum
3
go.sum
@ -1,5 +1,8 @@
|
|||||||
shylinux.com/x/go-qrcode v0.0.1 h1:/eOGqMj1qtgs9Ymd12zTUa1gcJZs9S92kj2lb0QzKsE=
|
shylinux.com/x/go-qrcode v0.0.1 h1:/eOGqMj1qtgs9Ymd12zTUa1gcJZs9S92kj2lb0QzKsE=
|
||||||
shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
|
shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
|
||||||
|
shylinux.com/x/ice v0.4.7 h1:Ed7FVPMoBufLJrNfRfaLkYM1YyGfQcsguKZWjaQkiRI=
|
||||||
|
shylinux.com/x/ice v0.4.7/go.mod h1:nQaisRsVHtTZT2FWr97VE984xhfEDpcBpYJUbx8qX94=
|
||||||
|
shylinux.com/x/icebergs v0.7.8/go.mod h1:frbUQPPU+TaMODwp701HIATVaApfQPtA2Q3MtO1El5A=
|
||||||
shylinux.com/x/toolkits v0.4.3 h1:eDCYnfsU5JCRU3qG9e3n15K+37TNCtje8/tyfRWauV4=
|
shylinux.com/x/toolkits v0.4.3 h1:eDCYnfsU5JCRU3qG9e3n15K+37TNCtje8/tyfRWauV4=
|
||||||
shylinux.com/x/toolkits v0.4.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
|
shylinux.com/x/toolkits v0.4.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
|
||||||
shylinux.com/x/websocket v0.0.1 h1:OBc21DxqsGlQ2+Pz76xqLyDNo1LV+PUUqfWi+1PZPDE=
|
shylinux.com/x/websocket v0.0.1 h1:OBc21DxqsGlQ2+Pz76xqLyDNo1LV+PUUqfWi+1PZPDE=
|
||||||
|
43
misc.go
43
misc.go
@ -4,7 +4,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -85,20 +84,6 @@ func (m *Message) Split(str string, arg ...string) *Message {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Message) Display(file string, arg ...interface{}) *Message {
|
|
||||||
m.Option(MSG_DISPLAY, kit.MergeURL(Display0(2, file)["display"], arg...))
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
func (m *Message) DisplayLocal(file string) *Message {
|
|
||||||
if file == "" {
|
|
||||||
file = path.Join(kit.PathName(2), kit.Keys(kit.FileName(2), "js"))
|
|
||||||
}
|
|
||||||
if !strings.HasPrefix(file, PS) {
|
|
||||||
file = path.Join("/plugin/local", file)
|
|
||||||
}
|
|
||||||
m.Option(MSG_DISPLAY, Display0(2, file)["display"])
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
func (m *Message) FieldsIsDetail() bool {
|
func (m *Message) FieldsIsDetail() bool {
|
||||||
if m.OptionFields() == "detail" {
|
if m.OptionFields() == "detail" {
|
||||||
return true
|
return true
|
||||||
@ -108,6 +93,9 @@ func (m *Message) FieldsIsDetail() bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Message) IsErr(str string) bool { return m.Result(1) == str }
|
||||||
|
func (m *Message) IsErrNotFound() bool { return m.Result(1) == ErrNotFound }
|
||||||
func (m *Message) OptionCB(key string, cb ...interface{}) interface{} {
|
func (m *Message) OptionCB(key string, cb ...interface{}) interface{} {
|
||||||
if len(cb) > 0 {
|
if len(cb) > 0 {
|
||||||
return m.Optionv(kit.Keycb(key), cb...)
|
return m.Optionv(kit.Keycb(key), cb...)
|
||||||
@ -220,7 +208,9 @@ func (m *Message) cmd(arg ...interface{}) *Message {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查找命令
|
// 查找命令
|
||||||
if cmd, ok := m.target.Commands[strings.TrimPrefix(list[0], m.target.Cap(CTX_FOLLOW)+PT)]; ok {
|
if list[0] == "" {
|
||||||
|
run(m.Spawn(), m.target, m._cmd, list[0], list[1:]...)
|
||||||
|
} else if cmd, ok := m.target.Commands[strings.TrimPrefix(list[0], m.target.Cap(CTX_FOLLOW)+PT)]; ok {
|
||||||
run(m.Spawn(), m.target, cmd, list[0], list[1:]...)
|
run(m.Spawn(), m.target, cmd, list[0], list[1:]...)
|
||||||
} else if cmd, ok := m.source.Commands[strings.TrimPrefix(list[0], m.source.Cap(CTX_FOLLOW)+PT)]; ok {
|
} else if cmd, ok := m.source.Commands[strings.TrimPrefix(list[0], m.source.Cap(CTX_FOLLOW)+PT)]; ok {
|
||||||
run(m.Spawn(m.source), m.source, cmd, list[0], list[1:]...)
|
run(m.Spawn(m.source), m.source, cmd, list[0], list[1:]...)
|
||||||
@ -349,27 +339,6 @@ func (c *Context) split(name string) (list []interface{}) {
|
|||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
func Display(file string, arg ...string) map[string]string {
|
|
||||||
return Display0(2, file, arg...)
|
|
||||||
}
|
|
||||||
func DisplayLocal(file string, arg ...string) map[string]string {
|
|
||||||
if file == "" {
|
|
||||||
file = path.Join(kit.PathName(2), kit.FileName(2)+".js")
|
|
||||||
}
|
|
||||||
if !strings.HasPrefix(file, "/") {
|
|
||||||
file = path.Join("/plugin/local", file)
|
|
||||||
}
|
|
||||||
return Display0(2, file, arg...)
|
|
||||||
}
|
|
||||||
func Display0(n int, file string, arg ...string) map[string]string {
|
|
||||||
if file == "" {
|
|
||||||
file = kit.FileName(n+1) + ".js"
|
|
||||||
}
|
|
||||||
if !strings.HasPrefix(file, "/") {
|
|
||||||
file = path.Join("/require", kit.ModPath(n+1, file))
|
|
||||||
}
|
|
||||||
return map[string]string{"display": file, kit.MDB_STYLE: kit.Join(arg, SP)}
|
|
||||||
}
|
|
||||||
func MergeAction(list ...interface{}) map[string]*Action {
|
func MergeAction(list ...interface{}) map[string]*Action {
|
||||||
if len(list) == 0 {
|
if len(list) == 0 {
|
||||||
return nil
|
return nil
|
||||||
|
@ -27,27 +27,27 @@ func _alpha_find(m *ice.Message, method, word string) {
|
|||||||
|
|
||||||
// 搜索词汇
|
// 搜索词汇
|
||||||
msg := m.Cmd(cli.SYSTEM, "grep", "-rih", word, m.Config(kit.MDB_STORE))
|
msg := m.Cmd(cli.SYSTEM, "grep", "-rih", word, m.Config(kit.MDB_STORE))
|
||||||
msg.CSV(msg.Result(), kit.Split(m.Config(kit.MDB_FIELD))...).Table(func(index int, value map[string]string, head []string) {
|
msg.CSV(msg.Result(), kit.Split(m.Config(mdb.FIELD))...).Table(func(index int, value map[string]string, head []string) {
|
||||||
if m.FieldsIsDetail() {
|
if m.FieldsIsDetail() {
|
||||||
m.Push(mdb.DETAIL, value, kit.Split(m.Config(kit.MDB_FIELD)))
|
m.Push(mdb.DETAIL, value, kit.Split(m.Config(mdb.FIELD)))
|
||||||
m.Push(kit.MDB_TIME, m.Time())
|
m.Push(mdb.TIME, m.Time())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.PushSearch(ice.CMD, ALPHA, kit.MDB_TYPE, method, kit.MDB_NAME, value[WORD], kit.MDB_TEXT, value["translation"], value)
|
m.PushSearch(ice.CMD, ALPHA, mdb.TYPE, method, mdb.NAME, value[WORD], mdb.TEXT, value["translation"], value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _alpha_load(m *ice.Message, file, name string) {
|
func _alpha_load(m *ice.Message, file, name string) {
|
||||||
// 清空数据
|
// 清空数据
|
||||||
meta := m.Confm(ALPHA, kit.MDB_META)
|
meta := m.Confm(ALPHA, mdb.META)
|
||||||
m.Assert(os.RemoveAll(path.Join(kit.Format(meta[kit.MDB_STORE]), name)))
|
m.Assert(os.RemoveAll(path.Join(kit.Format(meta[kit.MDB_STORE]), name)))
|
||||||
m.Conf(ALPHA, name, "")
|
m.Conf(ALPHA, name, "")
|
||||||
|
|
||||||
// 缓存配置
|
// 缓存配置
|
||||||
m.Conf(ALPHA, kit.Keys(name, kit.MDB_META), kit.Dict(meta))
|
m.Conf(ALPHA, kit.Keys(name, mdb.META), kit.Dict(meta))
|
||||||
m.Cmd(mdb.IMPORT, ALPHA, name, kit.MDB_LIST, file)
|
m.Cmd(mdb.IMPORT, ALPHA, name, mdb.LIST, file)
|
||||||
|
|
||||||
// 保存词库
|
// 保存词库
|
||||||
m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LIMIT)), 0)
|
m.Conf(ALPHA, kit.Keys(name, kit.Keym(mdb.LIMIT)), 0)
|
||||||
m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LEAST)), 0)
|
m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LEAST)), 0)
|
||||||
m.Echo("%s: %d", name, m.Grow(ALPHA, name, kit.Dict(WORD, ice.SP)))
|
m.Echo("%s: %d", name, m.Grow(ALPHA, name, kit.Dict(WORD, ice.SP)))
|
||||||
}
|
}
|
||||||
@ -61,14 +61,14 @@ const ALPHA = "alpha"
|
|||||||
|
|
||||||
var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]*ice.Config{
|
var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]*ice.Config{
|
||||||
ALPHA: {Name: ALPHA, Help: "英汉词典", Value: kit.Data(
|
ALPHA: {Name: ALPHA, Help: "英汉词典", Value: kit.Data(
|
||||||
nfs.REPOS, "word-dict", kit.MDB_FIELD, "word,translation,definition",
|
nfs.REPOS, "word-dict", mdb.FIELD, "word,translation,definition",
|
||||||
kit.MDB_STORE, path.Join(ice.USR_LOCAL_EXPORT, ALPHA), kit.MDB_FSIZE, "300000",
|
kit.MDB_STORE, path.Join(ice.USR_LOCAL_EXPORT, ALPHA), kit.MDB_FSIZE, "300000",
|
||||||
kit.MDB_LIMIT, "50000", kit.MDB_LEAST, "1000",
|
mdb.LIMIT, "50000", kit.MDB_LEAST, "1000",
|
||||||
)},
|
)},
|
||||||
}, Commands: map[string]*ice.Command{
|
}, Commands: map[string]*ice.Command{
|
||||||
ALPHA: {Name: "alpha method=word,line word auto", Help: "英汉", Action: map[string]*ice.Action{
|
ALPHA: {Name: "alpha method=word,line word auto", Help: "英汉", Action: map[string]*ice.Action{
|
||||||
mdb.IMPORT: {Name: "import file=usr/word-dict/ecdict name=ecdict", Help: "加载词库", Hand: func(m *ice.Message, arg ...string) {
|
mdb.IMPORT: {Name: "import file=usr/word-dict/ecdict name=ecdict", Help: "加载词库", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_alpha_load(m, m.Option(nfs.FILE), kit.Select(path.Base(m.Option(nfs.FILE)), m.Option(kit.MDB_NAME)))
|
_alpha_load(m, m.Option(nfs.FILE), kit.Select(path.Base(m.Option(nfs.FILE)), m.Option(mdb.NAME)))
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if arg[0] == ALPHA {
|
if arg[0] == ALPHA {
|
||||||
@ -83,7 +83,7 @@ var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]
|
|||||||
m.Cmdy(CACHE, kit.Select("", arg, 1))
|
m.Cmdy(CACHE, kit.Select("", arg, 1))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer m.StatusTimeCountTotal(m.Config(kit.MDB_COUNT))
|
defer m.StatusTimeCountTotal(m.Config(mdb.COUNT))
|
||||||
if arg[0] == WORD {
|
if arg[0] == WORD {
|
||||||
if msg := m.Cmd(CACHE, arg[1]); msg.Length() > 0 {
|
if msg := m.Cmd(CACHE, arg[1]); msg.Length() > 0 {
|
||||||
m.Copy(msg)
|
m.Copy(msg)
|
||||||
@ -91,7 +91,7 @@ var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]
|
|||||||
}
|
}
|
||||||
m.OptionFields(mdb.DETAIL)
|
m.OptionFields(mdb.DETAIL)
|
||||||
} else {
|
} else {
|
||||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
m.OptionFields(m.Config(mdb.FIELD))
|
||||||
}
|
}
|
||||||
if _alpha_find(m, arg[0], arg[1]); arg[0] == WORD && m.Length() > 0 {
|
if _alpha_find(m, arg[0], arg[1]); arg[0] == WORD && m.Length() > 0 {
|
||||||
m.Cmd(CACHE, mdb.CREATE, m.AppendSimple())
|
m.Cmd(CACHE, mdb.CREATE, m.AppendSimple())
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user