diff --git a/base/ctx/context.go b/base/ctx/context.go
index 4a0ae30c..dc42ee5b 100644
--- a/base/ctx/context.go
+++ b/base/ctx/context.go
@@ -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) {
diff --git a/base/mdb/lock.go b/base/mdb/lock.go
index 664ed0f0..425b26c4 100644
--- a/base/mdb/lock.go
+++ b/base/mdb/lock.go
@@ -10,7 +10,7 @@ import (
type configMessage interface {
Option(key string, arg ...Any) string
- PrefixKey(...Any) string
+ PrefixKey() string
Confv(...Any) Any
}
diff --git a/base/nfs/cat.go b/base/nfs/cat.go
index ee156ff1..a89f9147 100644
--- a/base/nfs/cat.go
+++ b/base/nfs/cat.go
@@ -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 {
diff --git a/base/ssh/script.go b/base/ssh/script.go
index f0f09060..3070d211 100644
--- a/base/ssh/script.go
+++ b/base/ssh/script.go
@@ -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()
diff --git a/base/web/option.go b/base/web/option.go
index 41fa44c0..cd7aff1d 100644
--- a/base/web/option.go
+++ b/base/web/option.go
@@ -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 {
diff --git a/conf.go b/conf.go
index 93d474b1..ea8651b7 100644
--- a/conf.go
+++ b/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"
diff --git a/data.go b/data.go
index f8d2c530..a3f0b6ae 100644
--- a/data.go
+++ b/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) }
diff --git a/exec.go b/exec.go
index 2025e6d4..9550c448 100644
--- a/exec.go
+++ b/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 {
diff --git a/init.go b/init.go
index 2156611e..d0a2158c 100644
--- a/init.go
+++ b/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)
diff --git a/misc.go b/misc.go
index 9d44468d..459e76ca 100644
--- a/misc.go
+++ b/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...)
+}
diff --git a/misc/git/status.go b/misc/git/status.go
index 49853777..8b450d3c 100644
--- a/misc/git/status.go
+++ b/misc/git/status.go
@@ -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) }},
diff --git a/misc/git/total.go b/misc/git/total.go
index d2299387..a1af2b22 100644
--- a/misc/git/total.go
+++ b/misc/git/total.go
@@ -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
+}
diff --git a/option.go b/option.go
index 5f603d29..996c3cf2 100644
--- a/option.go
+++ b/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())
diff --git a/render.go b/render.go
index 7454e242..1a382d58 100644
--- a/render.go
+++ b/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, "`,
- // 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(``, k, k)) })
case Map:
- for k := range k {
- list = append(list, kit.Format(``,
- k, k))
- // k, kit.Select(k, v, m.Option(MSG_LANGUAGE) != "en")))
- }
+ kit.For(k, func(k string) { list = append(list, kit.Format(``, 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))
}
diff --git a/type.go b/type.go
index 9d3a2267..a1d09d6d 100644
--- a/type.go
+++ b/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 {
- t, arg = t.Add(d), arg[1:]
- }
+ 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:
@@ -397,17 +358,13 @@ func (m *Message) Search(key string, cb Any) *Message {
return m
}
-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) Cmd(arg ...Any) *Message { return 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...)) }