mirror of
https://shylinux.com/x/icebergs
synced 2025-06-26 18:37:29 +08:00
opt mdb
This commit is contained in:
parent
33170bd6a9
commit
1301439db2
@ -7,5 +7,5 @@ import (
|
|||||||
const ENGINE = "engine"
|
const ENGINE = "engine"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{ENGINE: {Name: "engine type name text auto", Help: "引擎", Actions: RenderAction()}})
|
Index.MergeCommands(ice.Commands{ENGINE: {Help: "引擎", Actions: RenderAction()}})
|
||||||
}
|
}
|
||||||
|
122
base/mdb/hash.go
122
base/mdb/hash.go
@ -24,7 +24,6 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer RLock(m, prefix, chain)()
|
defer RLock(m, prefix, chain)()
|
||||||
|
|
||||||
list := map[string]int{}
|
list := map[string]int{}
|
||||||
Richs(m, prefix, chain, FOREACH, func(key string, val Map) {
|
Richs(m, prefix, chain, FOREACH, func(key string, val Map) {
|
||||||
val = kit.GetMeta(val)
|
val = kit.GetMeta(val)
|
||||||
@ -32,24 +31,18 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
|||||||
})
|
})
|
||||||
for k, i := range list {
|
for k, i := range list {
|
||||||
if k != "" {
|
if k != "" {
|
||||||
m.Push(field, k)
|
m.Push(field, k).Push(COUNT, i)
|
||||||
m.Push(COUNT, i)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.SortIntR(COUNT)
|
m.SortIntR(COUNT)
|
||||||
}
|
}
|
||||||
func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) string {
|
func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) string {
|
||||||
|
m.Logs(INSERT, KEY, path.Join(prefix, chain), arg[0], arg[1])
|
||||||
defer Lock(m, prefix, chain)()
|
defer Lock(m, prefix, chain)()
|
||||||
|
if value := kit.GetMeta(m.Confm(prefix, kit.Keys(HASH, arg[1]))); value != nil && arg[1] != "" {
|
||||||
if value := m.Confm(prefix, kit.Keys(HASH, arg[1])); value != nil && arg[1] != "" {
|
kit.Fetch(arg[2:], func(k, v string) { kit.Value(value, k, v)})
|
||||||
value = kit.GetMeta(value)
|
|
||||||
for i := 2; i < len(arg)-1; i += 2 {
|
|
||||||
kit.Value(value, arg[i], arg[i+1])
|
|
||||||
}
|
|
||||||
return arg[1]
|
return arg[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Logs(INSERT, KEY, path.Join(prefix, chain), arg[0], arg[1])
|
|
||||||
if expire := m.Conf(prefix, kit.Keys(chain, kit.Keym(EXPIRE))); expire != "" {
|
if expire := m.Conf(prefix, kit.Keys(chain, kit.Keym(EXPIRE))); expire != "" {
|
||||||
arg = kit.Simple(TIME, m.Time(expire), arg)
|
arg = kit.Simple(TIME, m.Time(expire), arg)
|
||||||
}
|
}
|
||||||
@ -62,7 +55,6 @@ func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) string {
|
|||||||
}
|
}
|
||||||
func _hash_delete(m *ice.Message, prefix, chain, field, value string) {
|
func _hash_delete(m *ice.Message, prefix, chain, field, value string) {
|
||||||
defer Lock(m, prefix, chain)()
|
defer Lock(m, prefix, chain)()
|
||||||
|
|
||||||
Richs(m, prefix, chain, value, func(key string, val Map) {
|
Richs(m, prefix, chain, value, func(key string, val Map) {
|
||||||
if target, ok := kit.GetMeta(val)[TARGET].(io.Closer); ok {
|
if target, ok := kit.GetMeta(val)[TARGET].(io.Closer); ok {
|
||||||
target.Close()
|
target.Close()
|
||||||
@ -72,26 +64,18 @@ func _hash_delete(m *ice.Message, prefix, chain, field, value string) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
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) {
|
||||||
defer Lock(m, prefix, chain)()
|
|
||||||
|
|
||||||
Richs(m, prefix, chain, value, func(key string, val Map) {
|
|
||||||
m.Logs(MODIFY, KEY, path.Join(prefix, chain), field, value, arg)
|
m.Logs(MODIFY, KEY, path.Join(prefix, chain), field, value, arg)
|
||||||
_mdb_modify(m, val, field, arg...)
|
defer Lock(m, prefix, chain)()
|
||||||
})
|
Richs(m, prefix, chain, value, func(key string, val Map) { _mdb_modify(m, val, field, arg...) })
|
||||||
}
|
}
|
||||||
func _hash_select(m *ice.Message, prefix, chain, field, value string) {
|
func _hash_select(m *ice.Message, prefix, chain, field, value string) {
|
||||||
defer RLock(m, prefix, chain)()
|
|
||||||
|
|
||||||
if field == HASH && value == RANDOM {
|
if field == HASH && value == RANDOM {
|
||||||
value = RANDOMS
|
value = RANDOMS
|
||||||
}
|
}
|
||||||
|
defer m.SortTimeR(TIME)
|
||||||
|
defer RLock(m, prefix, chain)()
|
||||||
fields := _hash_fields(m)
|
fields := _hash_fields(m)
|
||||||
Richs(m, prefix, chain, value, func(key string, value Map) {
|
Richs(m, prefix, chain, value, func(key string, value Map) { _mdb_select(m, m.OptionCB(""), key, value, fields, nil) })
|
||||||
_mdb_select(m, m.OptionCB(""), key, value, fields, nil)
|
|
||||||
})
|
|
||||||
if !m.FieldsIsDetail() {
|
|
||||||
m.SortTimeR(TIME)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
func _hash_select_field(m *ice.Message, prefix, chain string, key string, field string) (value string) {
|
func _hash_select_field(m *ice.Message, prefix, chain string, key string, field string) (value string) {
|
||||||
defer RLock(m, prefix, chain)()
|
defer RLock(m, prefix, chain)()
|
||||||
@ -106,72 +90,54 @@ func _hash_select_field(m *ice.Message, prefix, chain string, key string, field
|
|||||||
}
|
}
|
||||||
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
|
||||||
defer RLock(m, prefix, chain)()
|
defer RLock(m, prefix, chain)()
|
||||||
|
|
||||||
fields := _hash_fields(m)
|
fields := _hash_fields(m)
|
||||||
Richs(m, prefix, chain, FOREACH, func(key string, val Map) {
|
Richs(m, prefix, chain, FOREACH, func(key string, value Map) {
|
||||||
switch val = kit.GetMeta(val); cb := m.OptionCB(PRUNES).(type) {
|
switch value = kit.GetMeta(value); cb := m.OptionCB(PRUNES).(type) {
|
||||||
case func(string, Map) bool:
|
case func(string, Map) bool:
|
||||||
if !cb(key, val) {
|
if cb(key, value) {
|
||||||
return
|
m.Push(key, value, fields)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
for i := 0; i < len(arg)-1; i += 2 {
|
kit.Fetch(arg, func(k, v string) {
|
||||||
if val[arg[i]] != arg[i+1] && kit.Value(val, arg[i]) != arg[i+1] {
|
if value[k] == v || kit.Value(value, k) == v {
|
||||||
return
|
m.Push(key, value, fields)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
m.Push(key, val, fields)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _hash_export(m *ice.Message, prefix, chain, file string) {
|
func _hash_export(m *ice.Message, prefix, chain, file string) {
|
||||||
defer Lock(m, prefix, chain)()
|
|
||||||
|
|
||||||
f, p, e := miss.CreateFile(kit.Keys(file, JSON))
|
f, p, e := miss.CreateFile(kit.Keys(file, JSON))
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
m.Logs(EXPORT, KEY, path.Join(prefix, chain), FILE, p)
|
||||||
|
defer m.Echo(p).StatusTime(LINK, "/share/local/"+p)
|
||||||
en := json.NewEncoder(f)
|
en := json.NewEncoder(f)
|
||||||
en.SetIndent("", " ")
|
en.SetIndent("", " ")
|
||||||
m.Assert(en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))))
|
defer Lock(m, prefix, chain)()
|
||||||
|
m.Warn(en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))), EXPORT, p)
|
||||||
m.Logs(EXPORT, KEY, path.Join(prefix, chain), FILE, p)
|
|
||||||
m.Conf(prefix, kit.Keys(chain, HASH), "")
|
m.Conf(prefix, kit.Keys(chain, HASH), "")
|
||||||
m.Echo(p).StatusTime(LINK, "/share/local/"+p)
|
|
||||||
}
|
}
|
||||||
func _hash_import(m *ice.Message, prefix, chain, file string) {
|
func _hash_import(m *ice.Message, prefix, chain, file string) {
|
||||||
defer Lock(m, prefix, chain)()
|
|
||||||
|
|
||||||
f, e := miss.OpenFile(kit.Keys(file, JSON))
|
f, e := miss.OpenFile(kit.Keys(file, JSON))
|
||||||
if m.Warn(e) {
|
if m.Warn(e) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
list := Map{}
|
list := Map{}
|
||||||
m.Assert(json.NewDecoder(f).Decode(&list))
|
m.Assert(json.NewDecoder(f).Decode(&list))
|
||||||
|
m.Logs(IMPORT, KEY, path.Join(prefix, chain), COUNT, len(list))
|
||||||
count := 0
|
defer m.Echo("%d", len(list))
|
||||||
if m.Conf(prefix, kit.Keys(chain, META, SHORT)) == "" {
|
defer Lock(m, prefix, chain)()
|
||||||
for k, data := range list {
|
|
||||||
m.Conf(prefix, kit.Keys(chain, HASH, k), data)
|
|
||||||
count++
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for k, data := range list {
|
for k, data := range list {
|
||||||
if m.Confv(prefix, kit.Keys(chain, HASH, k)) == nil {
|
if m.Confv(prefix, kit.Keys(chain, HASH, k)) == nil {
|
||||||
m.Confv(prefix, kit.Keys(chain, HASH, k), data)
|
m.Confv(prefix, kit.Keys(chain, HASH, k), data)
|
||||||
} else {
|
} else {
|
||||||
Rich(m, prefix, chain, data)
|
Rich(m, prefix, chain, data)
|
||||||
}
|
}
|
||||||
count++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Logs(IMPORT, KEY, path.Join(prefix, chain), COUNT, count)
|
|
||||||
m.Echo("%d", count)
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
HASH_FIELD = "time,hash,type,name,text"
|
HASH_FIELD = "time,hash,type,name,text"
|
||||||
)
|
)
|
||||||
@ -180,30 +146,30 @@ const HASH = "hash"
|
|||||||
func HashAction(arg ...Any) ice.Actions {
|
func HashAction(arg ...Any) ice.Actions {
|
||||||
return ice.Actions{ice.CTX_INIT: AutoConfig(arg...), ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashSelectClose(m) }},
|
return ice.Actions{ice.CTX_INIT: AutoConfig(arg...), ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashSelectClose(m) }},
|
||||||
INPUTS: {Hand: func(m *ice.Message, arg ...string) { HashInputs(m, arg) }},
|
INPUTS: {Hand: func(m *ice.Message, arg ...string) { HashInputs(m, arg) }},
|
||||||
CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { HashCreate(m, arg) }},
|
CREATE: {Hand: func(m *ice.Message, arg ...string) { HashCreate(m, arg) }},
|
||||||
REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { HashRemove(m, arg) }},
|
REMOVE: {Hand: func(m *ice.Message, arg ...string) { HashRemove(m, arg) }},
|
||||||
MODIFY: {Hand: func(m *ice.Message, arg ...string) { HashModify(m, arg) }},
|
MODIFY: {Hand: func(m *ice.Message, arg ...string) { HashModify(m, arg) }},
|
||||||
SELECT: {Hand: func(m *ice.Message, arg ...string) { HashSelect(m, arg...) }},
|
SELECT: {Hand: func(m *ice.Message, arg ...string) { HashSelect(m, arg...) }},
|
||||||
PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) { HashPrunes(m, nil) }},
|
PRUNES: {Name: "prunes before@date", Hand: func(m *ice.Message, arg ...string) { HashPrunes(m, nil) }},
|
||||||
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { HashExport(m, arg) }},
|
EXPORT: {Hand: func(m *ice.Message, arg ...string) { HashExport(m, arg) }},
|
||||||
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { HashImport(m, arg) }},
|
IMPORT: {Hand: func(m *ice.Message, arg ...string) { HashImport(m, arg) }},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func HashCloseAction(args ...Any) ice.Actions {
|
func HashStatusAction(arg ...Any) ice.Actions {
|
||||||
return ice.MergeActions(HashAction(args...), ice.Actions{
|
return ice.MergeActions(ice.Actions{
|
||||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashSelectClose(m) }},
|
PRUNES: &ice.Action{Hand: func(m *ice.Message, arg ...string) {
|
||||||
})
|
|
||||||
}
|
|
||||||
func HashStatusAction(args ...Any) ice.Actions {
|
|
||||||
list := HashAction(args...)
|
|
||||||
list[PRUNES] = &ice.Action{Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.OptionFields(m.Config(FIELD))
|
m.OptionFields(m.Config(FIELD))
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "error")
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "close")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "close")
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "stop")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "stop")
|
||||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "end")
|
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, STATUS, "end")
|
||||||
}}
|
}},
|
||||||
return list
|
}, HashAction(arg...))
|
||||||
|
}
|
||||||
|
func HashCloseAction(args ...Any) ice.Actions {
|
||||||
|
return ice.MergeActions(HashAction(args...), ice.Actions{
|
||||||
|
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashSelectClose(m) }},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
func HashStatusCloseAction(args ...Any) ice.Actions {
|
func HashStatusCloseAction(args ...Any) ice.Actions {
|
||||||
return ice.MergeActions(HashStatusAction(args...), ice.Actions{
|
return ice.MergeActions(HashStatusAction(args...), ice.Actions{
|
||||||
@ -264,9 +230,9 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
|||||||
return m.StatusTime()
|
return m.StatusTime()
|
||||||
}
|
}
|
||||||
func HashPrunes(m *ice.Message, cb func(Maps) bool) *ice.Message {
|
func HashPrunes(m *ice.Message, cb func(Maps) bool) *ice.Message {
|
||||||
expire := kit.Time(kit.Select(m.Time("-72h"), m.Option("before")))
|
expire := kit.Select(m.Time("-72h"), m.Option("before"))
|
||||||
m.Cmd("", func(value Maps) {
|
m.Cmd("", func(value Maps) {
|
||||||
if kit.Time(value[TIME]) > expire {
|
if value[TIME] > expire {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if cb != nil && !cb(value) {
|
if cb != nil && !cb(value) {
|
||||||
@ -318,14 +284,13 @@ func HashSelectField(m *ice.Message, key string, field string) (value string) {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
func HashSelectDetail(m *ice.Message, key string, cb Any) bool {
|
func HashSelectDetail(m *ice.Message, key string, cb Any) (has bool) {
|
||||||
defer RLock(m, m.PrefixKey(), "")()
|
defer RLock(m, m.PrefixKey(), "")()
|
||||||
has := false
|
|
||||||
Richs(m, m.PrefixKey(), nil, key, func(key string, value Map) {
|
Richs(m, m.PrefixKey(), nil, key, func(key string, value Map) {
|
||||||
_mdb_select(m, cb, key, value, nil, nil)
|
_mdb_select(m, cb, key, value, nil, nil)
|
||||||
has = true
|
has = true
|
||||||
})
|
})
|
||||||
return has
|
return
|
||||||
}
|
}
|
||||||
func HashSelectUpdate(m *ice.Message, key string, cb Any) *ice.Message {
|
func HashSelectUpdate(m *ice.Message, key string, cb Any) *ice.Message {
|
||||||
defer Lock(m, m.PrefixKey(), "")()
|
defer Lock(m, m.PrefixKey(), "")()
|
||||||
@ -345,7 +310,6 @@ func HashSelectClose(m *ice.Message) *ice.Message {
|
|||||||
HashSelectValue(m, func(value ice.Map) {
|
HashSelectValue(m, func(value ice.Map) {
|
||||||
target := value[TARGET]
|
target := value[TARGET]
|
||||||
if c, ok := target.(io.Closer); ok {
|
if c, ok := target.(io.Closer); ok {
|
||||||
m.Logs(DELETE, TARGET, m.PrefixKey())
|
|
||||||
c.Close()
|
c.Close()
|
||||||
}
|
}
|
||||||
delete(value, TARGET)
|
delete(value, TARGET)
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
chapter "mdb"
|
|
||||||
|
|
||||||
field "插件" mdb.plugin
|
|
||||||
field "渲染" mdb.render
|
|
||||||
field "引擎" mdb.engine
|
|
||||||
field "搜索" mdb.search
|
|
||||||
|
|
@ -6,6 +6,4 @@ import (
|
|||||||
|
|
||||||
const PLUGIN = "plugin"
|
const PLUGIN = "plugin"
|
||||||
|
|
||||||
func init() {
|
func init() { Index.MergeCommands(ice.Commands{PLUGIN: {Help: "插件", Actions: RenderAction()}}) }
|
||||||
Index.MergeCommands(ice.Commands{PLUGIN: {Name: "plugin type name text auto", Help: "插件", Actions: RenderAction()}})
|
|
||||||
}
|
|
||||||
|
@ -7,9 +7,7 @@ import (
|
|||||||
|
|
||||||
const RENDER = "render"
|
const RENDER = "render"
|
||||||
|
|
||||||
func init() {
|
func init() { Index.MergeCommands(ice.Commands{RENDER: {Help: "渲染", Actions: RenderAction()}}) }
|
||||||
Index.MergeCommands(ice.Commands{RENDER: {Name: "render type name text auto", Help: "渲染", Actions: RenderAction()}})
|
|
||||||
}
|
|
||||||
|
|
||||||
func RenderAction(args ...ice.Any) ice.Actions {
|
func RenderAction(args ...ice.Any) ice.Actions {
|
||||||
return ice.MergeActions(ice.Actions{
|
return ice.MergeActions(ice.Actions{
|
||||||
@ -20,27 +18,24 @@ func RenderAction(args ...ice.Any) ice.Actions {
|
|||||||
if cs := m.Target().Configs; cs[m.CommandKey()] == nil {
|
if cs := m.Target().Configs; cs[m.CommandKey()] == nil {
|
||||||
cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)}
|
cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)}
|
||||||
} else {
|
} else {
|
||||||
ls := kit.Simple(args)
|
kit.Fetch(kit.Simple(args), func(key, value string) { m.Config(key, value) })
|
||||||
for i := 0; i < len(ls); i += 2 {
|
|
||||||
m.Config(ls[i], ls[i+1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(TYPE, kit.Ext(m.Option(TYPE)))
|
m.Option(TYPE, kit.Ext(m.Option(TYPE)))
|
||||||
m.Option(NAME, kit.Select(m.Option(TYPE), m.Option(NAME)))
|
m.OptionDefault(NAME, m.Option(TYPE))
|
||||||
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple(TYPE, NAME, TEXT))
|
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, m.OptionSimple(TYPE, NAME, TEXT))
|
||||||
}},
|
}},
|
||||||
SELECT: {Name: "select type name text auto", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
|
SELECT: {Name: "select type name text auto create", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if len(arg) > 1 {
|
if len(arg) < 2 || arg[0] == "" || arg[1] == "" {
|
||||||
|
HashSelect(m, arg...)
|
||||||
|
return
|
||||||
|
}
|
||||||
for _, k := range kit.Split(arg[0]) {
|
for _, k := range kit.Split(arg[0]) {
|
||||||
HashSelect(m.Spawn(ice.OptionFields("")), k).Tables(func(value ice.Maps) {
|
HashSelect(m.Spawn(ice.OptionFields("")), k).Tables(func(value ice.Maps) {
|
||||||
m.Cmdy(kit.Keys(value[TEXT], value[NAME]), m.CommandKey(), k, arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
m.Cmdy(kit.Keys(value[TEXT], value[NAME]), m.CommandKey(), k, arg[1], kit.Select("", arg, 2), kit.Slice(arg, 3))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
|
||||||
HashSelect(m, arg...)
|
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -8,40 +8,28 @@ import (
|
|||||||
const SEARCH = "search"
|
const SEARCH = "search"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.MergeCommands(ice.Commands{SEARCH: {Name: "search type name text auto", Help: "搜索", Actions: RenderAction()}})
|
Index.MergeCommands(ice.Commands{SEARCH: {Help: "搜索", Actions: RenderAction()}})
|
||||||
ice.AddMerges(func(c *ice.Context, key string, cmd *ice.Command, sub string, action *ice.Action) (ice.Handler, ice.Handler) {
|
ice.AddMerges(func(c *ice.Context, key string, cmd *ice.Command, sub string, action *ice.Action) (ice.Handler, ice.Handler) {
|
||||||
switch sub {
|
switch sub {
|
||||||
case SEARCH:
|
case SEARCH:
|
||||||
return func(m *ice.Message, arg ...string) { m.Cmd(SEARCH, CREATE, m.CommandKey(), m.PrefixKey()) }, nil
|
return func(m *ice.Message, arg ...string) { m.Cmd(sub, CREATE, m.CommandKey(), m.PrefixKey()) }, nil
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func SearchAction() ice.Actions {
|
func SearchAction() ice.Actions { return ice.Actions{SEARCH: {Hand: func(m *ice.Message, arg ...string) { HashSelectSearch(m, arg) }}} }
|
||||||
return ice.Actions{
|
func HashSearchAction(arg ...Any) ice.Actions { return ice.MergeActions(HashAction(arg...), SearchAction()) }
|
||||||
SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { HashSelectSearch(m, arg) }},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func HashSearchAction(arg ...Any) ice.Actions {
|
|
||||||
return ice.MergeActions(HashAction(arg...), SearchAction())
|
|
||||||
}
|
|
||||||
func HashSelectSearch(m *ice.Message, args []string, keys ...string) *ice.Message {
|
func HashSelectSearch(m *ice.Message, args []string, keys ...string) *ice.Message {
|
||||||
|
if args[0] != m.CommandKey() {
|
||||||
|
return m
|
||||||
|
}
|
||||||
if len(keys) == 0 {
|
if len(keys) == 0 {
|
||||||
ls := kit.Split(m.Config(FIELD))
|
keys = kit.Filters(kit.Split(m.Config(FIELD)), TIME, HASH)
|
||||||
for _, k := range ls {
|
|
||||||
switch k {
|
|
||||||
case TIME, HASH:
|
|
||||||
default:
|
|
||||||
keys = append(keys, k)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if args[0] == m.CommandKey() {
|
|
||||||
HashSelectValue(m, func(value ice.Map) {
|
HashSelectValue(m, func(value ice.Map) {
|
||||||
if args[1] == "" || args[1] == value[keys[1]] {
|
if args[1] == "" || args[1] == value[keys[1]] {
|
||||||
m.PushSearch(kit.SimpleKV("", value[keys[0]], value[keys[1]], value[keys[2]]), value)
|
m.PushSearch(kit.SimpleKV("", value[keys[0]], value[keys[1]], value[keys[2]]), value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
8
type.go
8
type.go
@ -127,9 +127,15 @@ func (c *Context) Register(s *Context, x Server, n ...string) *Context {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
func (c *Context) MergeCommands(Commands Commands) *Context {
|
func (c *Context) MergeCommands(Commands Commands) *Context {
|
||||||
for _, cmd := range Commands {
|
for key, cmd := range Commands {
|
||||||
if cmd.Hand == nil && cmd.RawHand == nil {
|
if cmd.Hand == nil && cmd.RawHand == nil {
|
||||||
cmd.RawHand = logs.FileLines(2)
|
cmd.RawHand = logs.FileLines(2)
|
||||||
|
if cmd.Actions != nil {
|
||||||
|
if action, ok := cmd.Actions[SELECT]; ok {
|
||||||
|
cmd.Name = kit.Select(strings.Replace(action.Name, SELECT, key, 1), cmd.Name)
|
||||||
|
cmd.Help = kit.Select(action.Help, cmd.Help)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
configs := Configs{}
|
configs := Configs{}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user