forked from x/icebergs
opt ice
This commit is contained in:
parent
f0fd9ed204
commit
af6cc2fcf3
@ -14,8 +14,6 @@ func _context_list(m *ice.Message, sub *ice.Context, name string) {
|
||||
return
|
||||
}
|
||||
m.Push(mdb.NAME, s.Cap(ice.CTX_FOLLOW))
|
||||
m.Push(mdb.STATUS, s.Cap(ice.CTX_STATUS))
|
||||
m.Push(mdb.STREAM, s.Cap(ice.CTX_STREAM))
|
||||
m.Push(mdb.HELP, s.Help)
|
||||
})
|
||||
}
|
||||
@ -28,7 +26,7 @@ func init() {
|
||||
if len(arg) == 0 {
|
||||
arg = append(arg, m.Source().Cap(ice.CTX_FOLLOW))
|
||||
}
|
||||
m.Search(arg[0]+ice.PT, func(p *ice.Context, s *ice.Context, key string) {
|
||||
m.Search(arg[0]+ice.PT, func(p *ice.Context, s *ice.Context) {
|
||||
msg := m.Spawn(s)
|
||||
defer m.Copy(msg)
|
||||
switch kit.Select(CONTEXT, arg, 1) {
|
||||
|
@ -10,7 +10,7 @@ import (
|
||||
|
||||
type configMessage interface {
|
||||
Option(key string, arg ...Any) string
|
||||
PrefixKey(...Any) string
|
||||
PrefixKey() string
|
||||
Confv(...Any) Any
|
||||
}
|
||||
|
||||
|
@ -164,8 +164,8 @@ func OptionLoad(m *ice.Message, file string) *ice.Message {
|
||||
}
|
||||
|
||||
type templateMessage interface {
|
||||
PrefixKey(arg ...ice.Any) string
|
||||
Cmdx(arg ...ice.Any) string
|
||||
PrefixKey() string
|
||||
}
|
||||
|
||||
func Template(m templateMessage, file string, arg ...ice.Any) string {
|
||||
|
@ -33,7 +33,7 @@ type Frame struct {
|
||||
}
|
||||
|
||||
func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
|
||||
if f.source != STDIO || m.Target().Cap(ice.CTX_STATUS) == ice.CTX_CLOSE {
|
||||
if f.source != STDIO {
|
||||
return f
|
||||
}
|
||||
kit.If(len(list) == 0, func() { list = append(list, f.ps1...) })
|
||||
@ -58,9 +58,6 @@ func (f *Frame) printf(m *ice.Message, str string, arg ...ice.Any) *Frame {
|
||||
if f.source != STDIO {
|
||||
return f
|
||||
}
|
||||
if m.Target().Cap(ice.CTX_STATUS) == ice.CTX_CLOSE {
|
||||
return f
|
||||
}
|
||||
fmt.Fprint(f.stdout, kit.Format(str, arg...))
|
||||
return f
|
||||
}
|
||||
@ -155,7 +152,7 @@ func (f *Frame) Start(m *ice.Message, arg ...string) {
|
||||
m.Optionv(FRAME, f)
|
||||
switch f.source = kit.Select(STDIO, arg, 0); f.source {
|
||||
case STDIO:
|
||||
if m.Cap(ice.CTX_STREAM, f.source); f.target == nil {
|
||||
if f.target == nil {
|
||||
f.target = m.Target()
|
||||
}
|
||||
r, w, _ := os.Pipe()
|
||||
|
@ -112,7 +112,7 @@ func PushPodCmd(m *ice.Message, cmd string, arg ...string) {
|
||||
|
||||
type Message interface {
|
||||
Option(key string, arg ...ice.Any) string
|
||||
PrefixKey(arg ...ice.Any) string
|
||||
PrefixKey() string
|
||||
}
|
||||
|
||||
func OptionAgentIs(m Message, arg ...string) bool {
|
||||
|
2
conf.go
2
conf.go
@ -259,8 +259,6 @@ const ( // CTX
|
||||
CTX_DAEMON = "ctx_daemon"
|
||||
|
||||
CTX_FOLLOW = "follow"
|
||||
CTX_STATUS = "status"
|
||||
CTX_STREAM = "stream"
|
||||
|
||||
CTX_BEGIN = "begin"
|
||||
CTX_START = "start"
|
||||
|
38
data.go
38
data.go
@ -9,25 +9,24 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func (m *Message) ActionKey() string {
|
||||
return strings.TrimPrefix(strings.TrimSuffix(m._sub, PS), PS)
|
||||
}
|
||||
func (m *Message) CommandKey() string {
|
||||
return strings.TrimPrefix(strings.TrimSuffix(m._key, PS), PS)
|
||||
}
|
||||
func (m *Message) PrefixRawKey(arg ...Any) string {
|
||||
return kit.Keys(m.Prefix(m._key), kit.Keys(arg...))
|
||||
}
|
||||
func (m *Message) PrefixKey(arg ...Any) string {
|
||||
return kit.Keys(m.Prefix(m.CommandKey()), kit.Keys(arg...))
|
||||
}
|
||||
func (m *Message) Prefix(arg ...string) string {
|
||||
return m.Target().Prefix(arg...)
|
||||
}
|
||||
func (m *Message) ActionKey() string { return strings.TrimPrefix(strings.TrimSuffix(m._sub, PS), PS) }
|
||||
func (m *Message) CommandKey() string { return strings.TrimPrefix(strings.TrimSuffix(m._key, PS), PS) }
|
||||
func (m *Message) PrefixKey() string { return m.Prefix(m.CommandKey()) }
|
||||
func (m *Message) PrefixPath(arg ...Any) string {
|
||||
return strings.TrimPrefix(path.Join(strings.ReplaceAll(m.PrefixRawKey(arg...), PT, PS)), "web") + PS
|
||||
}
|
||||
func (m *Message) PrefixRawKey(arg ...Any) string { return m.Prefix(m._key, kit.Keys(arg...)) }
|
||||
func (m *Message) Prefix(arg ...string) string { return m.Target().Prefix(arg...) }
|
||||
|
||||
func SaveImportant(m *Message, arg ...string) {
|
||||
if Info.Important != true {
|
||||
return
|
||||
}
|
||||
for i, v := range arg {
|
||||
kit.If(v == "" || strings.Contains(v, SP), func() { arg[i] = "\"" + v + "\"" })
|
||||
}
|
||||
m.Cmd("nfs.push", VAR_DATA_IMPORTANT, kit.Join(arg, SP), NL)
|
||||
}
|
||||
func loadImportant(m *Message) {
|
||||
if f, e := os.Open(VAR_DATA_IMPORTANT); e == nil {
|
||||
defer f.Close()
|
||||
@ -40,13 +39,4 @@ func loadImportant(m *Message) {
|
||||
}
|
||||
Info.Important = true
|
||||
}
|
||||
func SaveImportant(m *Message, arg ...string) {
|
||||
if Info.Important != true {
|
||||
return
|
||||
}
|
||||
for i, v := range arg {
|
||||
kit.If(v == "" || strings.Contains(v, SP), func() { arg[i] = "\"" + v + "\"" })
|
||||
}
|
||||
m.Cmd("nfs.push", VAR_DATA_IMPORTANT, kit.Join(arg, SP), NL)
|
||||
}
|
||||
func removeImportant(m *Message) { os.Remove(VAR_DATA_IMPORTANT) }
|
||||
|
25
exec.go
25
exec.go
@ -3,7 +3,6 @@ package ice
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
kit "shylinux.com/x/toolkits"
|
||||
@ -27,9 +26,7 @@ func (m *Message) TryCatch(msg *Message, catch bool, cb ...func(msg *Message)) *
|
||||
}
|
||||
}
|
||||
}()
|
||||
if len(cb) > 0 {
|
||||
cb[0](msg)
|
||||
}
|
||||
kit.If(len(cb) > 0, func() { cb[0](msg) })
|
||||
return m
|
||||
}
|
||||
func (m *Message) Assert(expr Any) bool {
|
||||
@ -56,26 +53,6 @@ func (m *Message) Sleep(d Any, arg ...Any) *Message {
|
||||
func (m *Message) Sleep300ms(arg ...Any) *Message { return m.Sleep("300ms", arg...) }
|
||||
func (m *Message) Sleep30ms(arg ...Any) *Message { return m.Sleep("30ms", arg...) }
|
||||
func (m *Message) Sleep3s(arg ...Any) *Message { return m.Sleep("3s", arg...) }
|
||||
func (m *Message) TableGo(cb Any) *Message {
|
||||
wg, lock := sync.WaitGroup{}, &task.Lock{}
|
||||
defer wg.Wait()
|
||||
m.Tables(func(value Maps) {
|
||||
wg.Add(1)
|
||||
task.Put(logs.FileLine(cb), func(*task.Task) error {
|
||||
defer wg.Done()
|
||||
switch cb := cb.(type) {
|
||||
case func(Maps, *task.Lock):
|
||||
cb(value, lock)
|
||||
case func(Maps):
|
||||
cb(value)
|
||||
default:
|
||||
m.ErrorNotImplement(cb)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
})
|
||||
return m
|
||||
}
|
||||
func (m *Message) Go(cb Any, arg ...Any) *Message {
|
||||
kit.If(len(arg) == 0, func() { arg = append(arg, logs.FileLine(cb)) })
|
||||
task.Put(arg[0], func(task *task.Task) error {
|
||||
|
6
init.go
6
init.go
@ -50,13 +50,9 @@ const (
|
||||
var Index = &Context{Name: ICE, Help: "冰山模块", Commands: Commands{
|
||||
CTX_INIT: {Hand: func(m *Message, arg ...string) {
|
||||
m.Travel(func(p *Context, c *Context) {
|
||||
kit.If(p != nil, func() { m.Go(func() { c._command(m.Spawn(c), c.Commands[CTX_INIT], CTX_INIT, arg...) }) })
|
||||
kit.If(p != nil, func() { c._command(m.Spawn(c), c.Commands[CTX_INIT], CTX_INIT, arg...) })
|
||||
})
|
||||
loadImportant(m)
|
||||
loadImportant(m)
|
||||
loadImportant(m)
|
||||
loadImportant(m)
|
||||
loadImportant(m)
|
||||
}},
|
||||
INIT: {Hand: func(m *Message, arg ...string) {
|
||||
m.Cmd(CTX_INIT)
|
||||
|
22
misc.go
22
misc.go
@ -484,3 +484,25 @@ func (m *Message) CmdAppend(arg ...Any) string {
|
||||
field := kit.Slice(args, -1)[0]
|
||||
return m._command(kit.Slice(args, 0, -1), OptionFields(field)).Append(field)
|
||||
}
|
||||
func (m *Message) IsCliUA() bool {
|
||||
if m.Option(MSG_USERUA) == "" || !strings.HasPrefix(m.Option(MSG_USERUA), "Mozilla") {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func (m *Message) IsMobileUA() bool {
|
||||
return strings.Contains(m.Option(MSG_USERUA), "Mobile")
|
||||
}
|
||||
func (m *Message) MergePodCmd(pod, cmd string, arg ...Any) string {
|
||||
ls := []string{"chat"}
|
||||
kit.If(kit.Keys(m.Option(MSG_USERPOD), pod), func(p string) { ls = append(ls, POD, p) })
|
||||
if cmd == "" {
|
||||
if _, ok := Info.Index[m.CommandKey()]; ok {
|
||||
cmd = m.CommandKey()
|
||||
} else {
|
||||
cmd = m.PrefixKey()
|
||||
}
|
||||
}
|
||||
ls = append(ls, CMD, cmd)
|
||||
return kit.MergeURL2(strings.Split(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), QS)[0], PS+kit.Join(ls, PS), arg...)
|
||||
}
|
||||
|
@ -123,7 +123,7 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
|
||||
last = ci.Author.When
|
||||
}
|
||||
}
|
||||
tags := kit.Format(mdb.Cache(m, m.PrefixKey(value[REPOS], TAGS), func() ice.Any { return _git_cmds(m, "describe", "--tags") }))
|
||||
tags := _git_cmds(m, "describe", "--tags")
|
||||
kit.SplitKV(ice.SP, ice.NL, _git_cmds(m, STATUS, "-sb"), func(text string, ls []string) {
|
||||
switch kit.Ext(ls[1]) {
|
||||
case "swp", "swo", ice.BIN, ice.VAR:
|
||||
@ -238,7 +238,6 @@ func init() {
|
||||
}}, OPT: {Help: "优化"}, PRO: {Help: "升级"},
|
||||
COMMIT: {Name: "commit action=opt,add,pro comment=some", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
|
||||
_repos_cmd(m, m.Option(REPOS), COMMIT, "-am", m.Option(ctx.ACTION)+ice.SP+m.Option(COMMENT))
|
||||
mdb.Cache(m, m.PrefixKey(m.Option(REPOS), TAGS), nil)
|
||||
m.ProcessBack()
|
||||
}},
|
||||
PIE: {Help: "饼图", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TOTAL, PIE) }},
|
||||
@ -248,7 +247,6 @@ func init() {
|
||||
}
|
||||
_repos_cmd(m, m.Option(REPOS), TAG, m.Option(VERSION))
|
||||
_repos_cmd(m, m.Option(REPOS), PUSH, "--tags")
|
||||
mdb.Cache(m, m.PrefixKey(m.Option(REPOS), TAGS), nil)
|
||||
ctx.ProcessRefresh(m)
|
||||
}},
|
||||
TAGS: {Help: "标签", Hand: func(m *ice.Message, arg ...string) { _status_tags(m) }},
|
||||
|
@ -3,6 +3,7 @@ package git
|
||||
import (
|
||||
"path"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
@ -11,6 +12,7 @@ import (
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
"shylinux.com/x/toolkits/logs"
|
||||
"shylinux.com/x/toolkits/task"
|
||||
)
|
||||
|
||||
@ -44,7 +46,7 @@ func init() {
|
||||
return
|
||||
}
|
||||
from, days, adds, dels, rest, commit := "", 0, 0, 0, 0, 0
|
||||
ReposList(m).TableGo(func(value ice.Maps, lock *task.Lock) {
|
||||
TableGo(ReposList(m), func(value ice.Maps, lock *task.Lock) {
|
||||
if mdb.Config(m, kit.Keys("skip", value[REPOS])) == ice.TRUE {
|
||||
return
|
||||
}
|
||||
@ -123,3 +125,23 @@ func init() {
|
||||
}},
|
||||
})
|
||||
}
|
||||
func TableGo(m *ice.Message, cb ice.Any) *ice.Message {
|
||||
wg, lock := sync.WaitGroup{}, &task.Lock{}
|
||||
defer wg.Wait()
|
||||
m.Tables(func(value ice.Maps) {
|
||||
wg.Add(1)
|
||||
task.Put(logs.FileLine(cb), func(*task.Task) error {
|
||||
defer wg.Done()
|
||||
switch cb := cb.(type) {
|
||||
case func(ice.Maps, *task.Lock):
|
||||
cb(value, lock)
|
||||
case func(ice.Maps):
|
||||
cb(value)
|
||||
default:
|
||||
m.ErrorNotImplement(cb)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
})
|
||||
return m
|
||||
}
|
||||
|
63
option.go
63
option.go
@ -13,77 +13,37 @@ type Option struct {
|
||||
|
||||
func OptionFields(arg ...string) Option { return Option{MSG_FIELDS, kit.Join(arg)} }
|
||||
func (m *Message) OptionFields(arg ...string) string {
|
||||
if len(arg) > 0 {
|
||||
m.Option(MSG_FIELDS, kit.Join(arg))
|
||||
}
|
||||
kit.If(len(arg) > 0, func() { m.Option(MSG_FIELDS, kit.Join(arg)) })
|
||||
return kit.Join(kit.Simple(m.Optionv(MSG_FIELDS)))
|
||||
}
|
||||
|
||||
func (m *Message) OptionDefault(arg ...string) string {
|
||||
for i := 0; i < len(arg); i += 2 {
|
||||
if m.Option(arg[i]) == "" && arg[i+1] != "" {
|
||||
m.Option(arg[i], arg[i+1])
|
||||
}
|
||||
}
|
||||
kit.For(arg, func(k, v string) { kit.If(m.Option(k) == "" && v != "", func() { m.Option(k, v) }) })
|
||||
return m.Option(arg[0])
|
||||
}
|
||||
func (m *Message) OptionSimple(key ...string) (res []string) {
|
||||
if len(key) == 0 {
|
||||
for _, k := range kit.Split(kit.Select("type,name,text", m.Conf(m.PrefixKey(), kit.Keym(FIELD)))) {
|
||||
switch k {
|
||||
case TIME, HASH:
|
||||
continue
|
||||
}
|
||||
if k == "" || m.Option(k) == "" {
|
||||
continue
|
||||
}
|
||||
res = append(res, k, m.Option(k))
|
||||
}
|
||||
return
|
||||
}
|
||||
for _, k := range kit.Split(kit.Join(key)) {
|
||||
if k == "" || m.Option(k) == "" {
|
||||
continue
|
||||
}
|
||||
res = append(res, k, m.Option(k))
|
||||
}
|
||||
kit.If(len(key) == 0, func() { key = kit.Filters(kit.Split(kit.Select("type,name,text", m.Config(FIELD))), TIME, HASH) })
|
||||
kit.For(kit.Filters(kit.Split(kit.Join(key)), ""), func(k string) { kit.If(m.Option(k), func(v string) { res = append(res, k, v) }) })
|
||||
return
|
||||
}
|
||||
func (m *Message) OptionSplit(key ...string) (res []string) {
|
||||
for _, k := range kit.Split(kit.Join(key)) {
|
||||
res = append(res, m.Option(k))
|
||||
}
|
||||
kit.For(kit.Split(kit.Join(key)), func(k string) { res = append(res, m.Option(k)) })
|
||||
return res
|
||||
}
|
||||
func (m *Message) OptionCB(key string, cb ...Any) Any {
|
||||
if len(cb) > 0 {
|
||||
return m.Optionv(kit.Keycb(kit.Select(m.CommandKey(), key)), cb...)
|
||||
}
|
||||
kit.If(len(cb) > 0, func() { m.Optionv(kit.Keycb(kit.Select(m.CommandKey(), key)), cb...) })
|
||||
return m.Optionv(kit.Keycb(kit.Select(m.CommandKey(), key)))
|
||||
}
|
||||
|
||||
func (m *Message) FieldsIsDetail() bool {
|
||||
if len(m.meta[MSG_APPEND]) == 2 && m.meta[MSG_APPEND][0] == KEY && m.meta[MSG_APPEND][1] == VALUE {
|
||||
return true
|
||||
}
|
||||
if m.OptionFields() == FIELDS_DETAIL {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return len(m.meta[MSG_APPEND]) == 2 && m.meta[MSG_APPEND][0] == KEY && m.meta[MSG_APPEND][1] == VALUE || m.OptionFields() == FIELDS_DETAIL
|
||||
}
|
||||
func (m *Message) Fields(length int, fields ...string) string {
|
||||
return m.Option(MSG_FIELDS, kit.Select(kit.Select(FIELDS_DETAIL, fields, length), m.Option(MSG_FIELDS)))
|
||||
return m.OptionDefault(MSG_FIELDS, kit.Select(FIELDS_DETAIL, fields, length))
|
||||
}
|
||||
func (m *Message) Action(arg ...Any) *Message {
|
||||
for i, v := range arg {
|
||||
switch v.(type) {
|
||||
case string:
|
||||
default:
|
||||
arg[i] = kit.Format(v)
|
||||
}
|
||||
}
|
||||
m.Option(MSG_ACTION, kit.Format(arg))
|
||||
return m
|
||||
kit.For(arg, func(i int, v Any) { arg[i] = kit.Format(v) })
|
||||
return m.Options(MSG_ACTION, kit.Format(arg))
|
||||
}
|
||||
func (m *Message) Status(arg ...Any) *Message {
|
||||
list, args := kit.List(), kit.Simple(arg)
|
||||
@ -94,8 +54,7 @@ func (m *Message) Status(arg ...Any) *Message {
|
||||
}
|
||||
list = append(list, kit.Dict(NAME, args[i], VALUE, args[i+1]))
|
||||
}
|
||||
m.Option(MSG_STATUS, kit.Format(list))
|
||||
return m
|
||||
return m.Options(MSG_STATUS, kit.Format(list))
|
||||
}
|
||||
func (m *Message) StatusTime(arg ...Any) *Message {
|
||||
return m.Status(TIME, m.Time(), arg, kit.MDB_COST, m.FormatCost())
|
||||
|
120
render.go
120
render.go
@ -7,15 +7,13 @@ import (
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func AddRender(key string, render func(*Message, ...Any) string) {
|
||||
Info.render[key] = render
|
||||
}
|
||||
func AddRender(key string, render func(*Message, ...Any) string) { Info.render[key] = render }
|
||||
func RenderAction(key ...string) Actions {
|
||||
return Actions{CTX_INIT: {Hand: func(m *Message, arg ...string) {
|
||||
cmd := m.CommandKey()
|
||||
for _, key := range key {
|
||||
kit.For(key, func(key string) {
|
||||
AddRender(key, func(m *Message, arg ...Any) string { return m.Cmd(cmd, key, arg).Result() })
|
||||
}
|
||||
})
|
||||
}}}
|
||||
}
|
||||
func Render(m *Message, cmd string, args ...Any) string {
|
||||
@ -28,25 +26,15 @@ func Render(m *Message, cmd string, args ...Any) string {
|
||||
for _, k := range args {
|
||||
switch k := k.(type) {
|
||||
case []string:
|
||||
for _, k := range k {
|
||||
list = append(list, Render(m, RENDER_BUTTON, k))
|
||||
}
|
||||
kit.For(k, func(k string) { list = append(list, Render(m, RENDER_BUTTON, k)) })
|
||||
case string:
|
||||
if strings.HasPrefix(k, "<input") {
|
||||
list = append(list, k)
|
||||
break
|
||||
}
|
||||
for _, k := range kit.Split(k) {
|
||||
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`,
|
||||
// k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("_trans", k)), m.Option(MSG_LANGUAGE) != "en")))
|
||||
k, k))
|
||||
}
|
||||
kit.For(kit.Split(k), func(k string) { list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`, k, k)) })
|
||||
case Map:
|
||||
for k := range k {
|
||||
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`,
|
||||
k, k))
|
||||
// k, kit.Select(k, v, m.Option(MSG_LANGUAGE) != "en")))
|
||||
}
|
||||
kit.For(k, func(k string) { list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`, k, k)) })
|
||||
default:
|
||||
list = append(list, Render(m, RENDER_BUTTON, kit.Format(k)))
|
||||
}
|
||||
@ -66,16 +54,14 @@ func Render(m *Message, cmd string, args ...Any) string {
|
||||
if len(arg) == 1 {
|
||||
return kit.Format(`<%s>%s</%s>`, cmd, arg[0], cmd)
|
||||
}
|
||||
return kit.Format(`<%s style="%s">%s</%s>`, cmd, kit.JoinKV(":", ";", arg[1:]...), arg[0], cmd)
|
||||
return kit.Format(`<%s style="%s">%s</%s>`, cmd, kit.JoinKV(DF, ";", arg[1:]...), arg[0], cmd)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Message) Render(cmd string, arg ...Any) *Message {
|
||||
switch cmd {
|
||||
case RENDER_TEMPLATE:
|
||||
if len(arg) == 1 {
|
||||
arg = append(arg, m)
|
||||
}
|
||||
kit.If(len(arg) == 1, func() { arg = append(arg, m) })
|
||||
if res, err := kit.Render(arg[0].(string), arg[1]); m.Assert(err) {
|
||||
m.Echo(string(res))
|
||||
}
|
||||
@ -117,36 +103,12 @@ func (m *Message) RenderVoid(arg ...Any) *Message {
|
||||
return m.Render(RENDER_VOID, arg...)
|
||||
}
|
||||
|
||||
func (m *Message) IsCliUA() bool {
|
||||
if m.Option(MSG_USERUA) == "" || !strings.HasPrefix(m.Option(MSG_USERUA), "Mozilla") {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func (m *Message) IsMobileUA() bool {
|
||||
return strings.Contains(m.Option(MSG_USERUA), "Mobile")
|
||||
}
|
||||
func (m *Message) MergePodCmd(pod, cmd string, arg ...Any) string {
|
||||
ls := []string{"chat"}
|
||||
kit.If(kit.Keys(m.Option(MSG_USERPOD), pod), func(p string) { ls = append(ls, POD, p) })
|
||||
if cmd == "" {
|
||||
if _, ok := Info.Index[m.CommandKey()]; ok {
|
||||
cmd = m.CommandKey()
|
||||
} else {
|
||||
cmd = m.PrefixKey()
|
||||
}
|
||||
}
|
||||
ls = append(ls, CMD, cmd)
|
||||
return kit.MergeURL2(strings.Split(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), QS)[0], PS+kit.Join(ls, PS), arg...)
|
||||
}
|
||||
func (m *Message) PushSearch(arg ...Any) {
|
||||
data := kit.Dict(arg...)
|
||||
for i := 0; i < len(arg); i += 2 {
|
||||
switch k := arg[i].(type) {
|
||||
case string:
|
||||
if i+1 < len(arg) {
|
||||
data[k] = arg[i+1]
|
||||
}
|
||||
kit.If(i+1 < len(arg), func() { data[k] = arg[i+1] })
|
||||
}
|
||||
}
|
||||
for _, k := range kit.Split(m.OptionFields()) {
|
||||
@ -170,7 +132,6 @@ func (m *Message) PushAction(arg ...Any) *Message {
|
||||
}
|
||||
return m.Set(MSG_APPEND, ACTION).Tables(func(value Maps) { m.PushButton(arg...) })
|
||||
}
|
||||
|
||||
func (m *Message) PushButton(arg ...Any) *Message {
|
||||
if !m.IsCliUA() {
|
||||
if m.FieldsIsDetail() {
|
||||
@ -188,68 +149,37 @@ func (m *Message) PushButton(arg ...Any) *Message {
|
||||
return m
|
||||
}
|
||||
func (m *Message) PushAnchor(arg ...string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(LINK, Render(m, RENDER_ANCHOR, arg))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(LINK, Render(m, RENDER_ANCHOR, arg)) })
|
||||
}
|
||||
func (m *Message) PushQRCode(key, src string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_QRCODE, src))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_QRCODE, src)) })
|
||||
}
|
||||
func (m *Message) PushImages(key, src string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_IMAGES, src))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_IMAGES, src)) })
|
||||
}
|
||||
func (m *Message) PushVideos(key, src string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_VIDEOS, src))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_VIDEOS, src)) })
|
||||
}
|
||||
func (m *Message) PushAudios(key, src string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_AUDIOS, src))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_AUDIOS, src)) })
|
||||
}
|
||||
func (m *Message) PushIFrame(key, src string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_IFRAME, src))
|
||||
}
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_IFRAME, src)) })
|
||||
}
|
||||
func (m *Message) PushScript(arg ...string) {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(SCRIPT, Render(m, RENDER_SCRIPT, arg))
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(SCRIPT, Render(m, RENDER_SCRIPT, arg)) })
|
||||
}
|
||||
}
|
||||
func (m *Message) PushDownload(key string, arg ...string) *Message {
|
||||
if !m.IsCliUA() {
|
||||
m.Push(key, Render(m, RENDER_DOWNLOAD, arg))
|
||||
}
|
||||
return m
|
||||
func (m *Message) PushDownload(key string, arg ...string) {
|
||||
kit.If(!m.IsCliUA(), func() { m.Push(key, Render(m, RENDER_DOWNLOAD, arg)) })
|
||||
}
|
||||
|
||||
func (m *Message) EchoButton(arg ...Any) *Message {
|
||||
return m.Echo(Render(m, RENDER_BUTTON, arg...))
|
||||
}
|
||||
func (m *Message) EchoAnchor(arg ...string) *Message {
|
||||
return m.Echo(Render(m, RENDER_ANCHOR, arg))
|
||||
}
|
||||
func (m *Message) EchoQRCode(src string) *Message {
|
||||
return m.Echo(Render(m, RENDER_QRCODE, src))
|
||||
}
|
||||
func (m *Message) EchoImages(src string) *Message {
|
||||
return m.Echo(Render(m, RENDER_IMAGES, src))
|
||||
}
|
||||
func (m *Message) EchoVideos(src string) *Message {
|
||||
return m.Echo(Render(m, RENDER_VIDEOS, src))
|
||||
}
|
||||
func (m *Message) EchoIFrame(src string) *Message {
|
||||
return m.Echo(Render(m, RENDER_IFRAME, src))
|
||||
}
|
||||
func (m *Message) EchoScript(arg ...string) *Message {
|
||||
return m.Echo(Render(m, RENDER_SCRIPT, arg))
|
||||
}
|
||||
func (m *Message) EchoButton(arg ...Any) *Message { return m.Echo(Render(m, RENDER_BUTTON, arg...)) }
|
||||
func (m *Message) EchoAnchor(arg ...string) *Message { return m.Echo(Render(m, RENDER_ANCHOR, arg)) }
|
||||
func (m *Message) EchoQRCode(src string) *Message { return m.Echo(Render(m, RENDER_QRCODE, src)) }
|
||||
func (m *Message) EchoImages(src string) *Message { return m.Echo(Render(m, RENDER_IMAGES, src)) }
|
||||
func (m *Message) EchoVideos(src string) *Message { return m.Echo(Render(m, RENDER_VIDEOS, src)) }
|
||||
func (m *Message) EchoIFrame(src string) *Message { return m.Echo(Render(m, RENDER_IFRAME, src)) }
|
||||
func (m *Message) EchoScript(arg ...string) *Message { return m.Echo(Render(m, RENDER_SCRIPT, arg)) }
|
||||
func (m *Message) EchoDownload(arg ...string) *Message {
|
||||
return m.Echo(Render(m, RENDER_DOWNLOAD, arg))
|
||||
}
|
||||
|
80
type.go
80
type.go
@ -2,7 +2,6 @@ package ice
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
@ -180,24 +179,18 @@ func (c *Context) Merge(s *Context) *Context {
|
||||
}
|
||||
func (c *Context) Begin(m *Message, arg ...string) *Context {
|
||||
kit.If(c.Caches == nil, func() { c.Caches = Caches{} })
|
||||
c.Caches[CTX_STREAM] = &Cache{Name: CTX_STREAM, Value: ""}
|
||||
c.Caches[CTX_STATUS] = &Cache{Name: CTX_STATUS, Value: CTX_BEGIN}
|
||||
c.Caches[CTX_FOLLOW] = &Cache{Name: CTX_FOLLOW, Value: c.Name}
|
||||
kit.If(c.context != nil && c.context != Index, func() { c.Cap(CTX_FOLLOW, kit.Keys(c.context.Cap(CTX_FOLLOW), c.Name)) })
|
||||
kit.If(c.server != nil, func() { c.server.Begin(m, arg...) })
|
||||
return c.Merge(c)
|
||||
}
|
||||
func (c *Context) Start(m *Message, arg ...string) bool {
|
||||
m.Log(c.Cap(CTX_STATUS, CTX_START), c.Cap(CTX_FOLLOW))
|
||||
kit.If(c.server != nil, func() {
|
||||
m.Go(func() { c.server.Start(m, arg...) }, m.Prefix())
|
||||
})
|
||||
return true
|
||||
func (c *Context) Start(m *Message, arg ...string) {
|
||||
m.Log(CTX_START, c.Cap(CTX_FOLLOW))
|
||||
kit.If(c.server != nil, func() { m.Go(func() { c.server.Start(m, arg...) }, m.Prefix()) })
|
||||
}
|
||||
func (c *Context) Close(m *Message, arg ...string) bool {
|
||||
m.Log(c.Cap(CTX_STATUS, CTX_CLOSE), c.Cap(CTX_FOLLOW))
|
||||
func (c *Context) Close(m *Message, arg ...string) {
|
||||
m.Log(CTX_CLOSE, c.Cap(CTX_FOLLOW))
|
||||
kit.If(c.server != nil, func() { c.server.Close(m, arg...) })
|
||||
return true
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
@ -225,26 +218,14 @@ type Message struct {
|
||||
I io.Reader
|
||||
}
|
||||
|
||||
func (m *Message) Time(arg ...Any) string {
|
||||
func (m *Message) Time(arg ...string) string {
|
||||
t := m.time
|
||||
if len(arg) > 0 {
|
||||
switch arg := arg[0].(type) {
|
||||
case string:
|
||||
if d, e := time.ParseDuration(arg); e == nil {
|
||||
if d, e := time.ParseDuration(arg[0]); e == nil {
|
||||
t, arg = t.Add(d), arg[1:]
|
||||
}
|
||||
}
|
||||
}
|
||||
f := MOD_TIME
|
||||
if len(arg) > 0 {
|
||||
switch p := arg[0].(type) {
|
||||
case string:
|
||||
if f = p; len(arg) > 1 {
|
||||
f = fmt.Sprintf(f, arg[1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
return t.Format(f)
|
||||
return t.Format(kit.Select(MOD_TIME, arg, 0))
|
||||
}
|
||||
func (m *Message) Target() *Context { return m.target }
|
||||
func (m *Message) Source() *Context { return m.source }
|
||||
@ -348,22 +329,10 @@ func (m *Message) Search(key string, cb Any) *Message {
|
||||
}
|
||||
switch cb := cb.(type) {
|
||||
case func(key string, cmd *Command):
|
||||
if key == "" {
|
||||
for k, v := range p.Commands {
|
||||
cb(k, v)
|
||||
}
|
||||
break
|
||||
}
|
||||
if cmd, ok := p.Commands[key]; ok {
|
||||
cb(key, cmd)
|
||||
}
|
||||
case func(p *Context, s *Context, key string, cmd *Command):
|
||||
if key == "" {
|
||||
for k, v := range p.Commands {
|
||||
cb(p.context, p, k, v)
|
||||
}
|
||||
break
|
||||
}
|
||||
for _, p := range []*Context{p, m.target, m.source} {
|
||||
for s := p; s != nil; s = s.context {
|
||||
if cmd, ok := s.Commands[key]; ok {
|
||||
@ -373,12 +342,6 @@ func (m *Message) Search(key string, cb Any) *Message {
|
||||
}
|
||||
}
|
||||
case func(p *Context, s *Context, key string, conf *Config):
|
||||
if key == "" {
|
||||
for k, v := range p.Configs {
|
||||
cb(p.context, p, k, v)
|
||||
}
|
||||
break
|
||||
}
|
||||
for _, p := range []*Context{p, m.target, m.source} {
|
||||
for s := p; s != nil; s = s.context {
|
||||
if cmd, ok := s.Configs[key]; ok {
|
||||
@ -387,8 +350,6 @@ func (m *Message) Search(key string, cb Any) *Message {
|
||||
}
|
||||
}
|
||||
}
|
||||
case func(p *Context, s *Context, key string):
|
||||
cb(p.context, p, key)
|
||||
case func(p *Context, s *Context):
|
||||
cb(p.context, p)
|
||||
default:
|
||||
@ -398,16 +359,12 @@ func (m *Message) Search(key string, cb Any) *Message {
|
||||
}
|
||||
|
||||
func (m *Message) Cmd(arg ...Any) *Message { return m._command(arg...) }
|
||||
func (m *Message) Cmds(arg ...Any) *Message { return m.Go(func() { m._command(arg...) }) }
|
||||
func (m *Message) Cmdx(arg ...Any) string {
|
||||
res := kit.Select("", m._command(arg...).meta[MSG_RESULT], 0)
|
||||
return kit.Select("", res, res != ErrWarn)
|
||||
}
|
||||
func (m *Message) Cmdy(arg ...Any) *Message { return m.Copy(m._command(arg...)) }
|
||||
func (m *Message) Confv(arg ...Any) (val Any) {
|
||||
if m.Spawn().Warn(Info.Important && m.Option("_lock") == "") {
|
||||
m.Warn(true, "what unsafe lock", m.PrefixKey(), m.FormatStack(1, 100))
|
||||
}
|
||||
run := func(conf *Config) {
|
||||
if len(arg) == 1 {
|
||||
val = conf.Value
|
||||
@ -433,24 +390,3 @@ func (m *Message) Confv(arg ...Any) (val Any) {
|
||||
return
|
||||
}
|
||||
func (m *Message) Conf(arg ...Any) string { return kit.Format(m.Confv(arg...)) }
|
||||
func (m *Message) Capi(key string, val ...Any) int {
|
||||
kit.If(len(val) > 0, func() { m.Cap(key, kit.Int(m.Cap(key))+kit.Int(val[0])) })
|
||||
return kit.Int(m.Cap(key))
|
||||
}
|
||||
func (m *Message) Capv(arg ...Any) Any {
|
||||
key := ""
|
||||
switch val := arg[0].(type) {
|
||||
case string:
|
||||
key, arg = val, arg[1:]
|
||||
}
|
||||
for _, s := range []*Context{m.target} {
|
||||
for c := s; c != nil; c = c.context {
|
||||
if caps, ok := c.Caches[key]; ok {
|
||||
kit.If(len(arg) > 0, func() { caps.Value = kit.Format(arg[0]) })
|
||||
return caps.Value
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *Message) Cap(arg ...Any) string { return kit.Format(m.Capv(arg...)) }
|
||||
|
Loading…
x
Reference in New Issue
Block a user