From 2db2f39649e1f8b1a30c4495bf5d59aa3ec2d170 Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 21 Jan 2024 16:00:59 +0800 Subject: [PATCH] add chat.script --- base/cli/daemon.go | 2 ++ base/mdb/mdb.go | 1 + base/mdb/zone.go | 2 +- base/web/space.go | 10 ++++++---- core/chat/footer.go | 2 +- core/chat/script.go | 14 ++++++++------ core/chat/script.js | 37 +++++++++++++++++++++++++------------ 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/base/cli/daemon.go b/base/cli/daemon.go index cb00867f..af1a2cf1 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -83,6 +83,7 @@ const ( CLEAR = "clear" DELAY = "delay" RELOAD = "reload" + RECORD = "record" RESTART = "restart" INTERVAL = "interval" @@ -93,6 +94,7 @@ const ( OPEN = "open" CLOSE = "close" + PLAY = "play" MAIN = "main" CODE = "code" COST = "cost" diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index a4e87b06..dda1f386 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -37,6 +37,7 @@ func _mdb_select(m *ice.Message, cb Any, key string, value Map, fields []string, if m.FieldsIsDetail() { m.Push(ice.FIELDS_DETAIL, value) } else { + m.Debug("what %v %v", value, val) m.Push(key, value, fields, val) } default: diff --git a/base/mdb/zone.go b/base/mdb/zone.go index d5ffe903..d070ebef 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -250,7 +250,7 @@ func ZoneSelect(m *ice.Message, arg ...string) *ice.Message { if m.Cmdy(SELECT, m.PrefixKey(), "", ZONE, arg, logs.FileLineMeta(-1)); len(arg) == 0 { m.Sort(ZoneShort(m)).PushAction(Config(m, ACTION), REMOVE).Action(CREATE) } else if len(arg) == 1 { - m.Action(INSERT).StatusTimeCountTotal(_zone_meta(m, m.PrefixKey(), kit.Keys(HASH, HashSelectField(m, arg[0], HASH)), COUNT)) + m.Action(INSERT).StatusTimeCountTotal(_zone_meta(m, m.PrefixKey(), kit.Keys(HASH, HashSelectField(m, arg[0], HASH)), COUNT), "step", "0") } return m } diff --git a/base/web/space.go b/base/web/space.go index 75e98d8d..fa0e1cbc 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -221,10 +221,12 @@ func _space_send(m *ice.Message, name string, arg ...string) (h string) { } if target := kit.Split(name, nfs.PT, nfs.PT); !mdb.HashSelectDetail(m, target[0], func(value ice.Map) { if c, ok := value[mdb.TARGET].(*websocket.Conn); !m.Warn(!ok, ice.ErrNotValid, mdb.TARGET) { - kit.For([]string{ - ice.LOG_TRACEID, - ice.MSG_USERROLE, - }, func(k string) { m.Optionv(k, m.Optionv(k)) }) + m.Debug("what %v", value[mdb.TYPE]) + kit.If(kit.Format(value[mdb.TYPE]) == MASTER, func() { + m.Options(ice.MSG_USERWEB, value[mdb.TEXT], ice.MSG_USERPOD, "", ice.MSG_USERHOST, "") + }) + m.Debug("what %v", value[mdb.TYPE]) + kit.For([]string{ice.MSG_USERROLE, ice.LOG_TRACEID}, func(k string) { m.Optionv(k, m.Optionv(k)) }) kit.For(m.Optionv(ice.MSG_OPTS), func(k string) { m.Optionv(k, m.Optionv(k)) }) if withecho { _space_echo(m.Set(ice.MSG_DETAIL, arg...), []string{h}, target, c) diff --git a/core/chat/footer.go b/core/chat/footer.go index da260aef..ab045859 100644 --- a/core/chat/footer.go +++ b/core/chat/footer.go @@ -32,7 +32,7 @@ func init() { }, arg...) }}, nfs.SCRIPT: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(SCRIPT, mdb.INSERT, mdb.ZONE, "default", ctx.INDEX, arg[0], ice.AUTO, arg[2]) + m.Cmd(SCRIPT, mdb.INSERT, mdb.ZONE, arg[0], web.SPACE, arg[1], ctx.INDEX, arg[2], cli.PLAY, arg[4], ctx.OPTS, kit.Format(arg[5:])) }}, ctx.CONFIG: {Hand: func(m *ice.Message, arg ...string) { _footer_plugin(m, ctx.CONFIG, arg, arg...) diff --git a/core/chat/script.go b/core/chat/script.go index 31182b47..a129106f 100644 --- a/core/chat/script.go +++ b/core/chat/script.go @@ -2,6 +2,7 @@ package chat import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/mdb" ) @@ -9,13 +10,14 @@ const SCRIPT = "script" func init() { Index.MergeCommands(ice.Commands{ - SCRIPT: {Name: "script zone id auto", Help: "脚本", Actions: ice.MergeActions(mdb.ZoneAction(mdb.FIELDS, "time,index,auto")), Hand: func(m *ice.Message, arg ...string) { - mdb.ZoneSelect(m, arg...) - m.Display("") - if len(arg) == 0 { - m.PushAction("play", mdb.REMOVE) + SCRIPT: {Name: "script zone id auto", Help: "脚本化", Icon: "script.png", Actions: ice.MergeActions(ice.Actions{ + mdb.INSERT: {Name: "insert zone space index"}, + }, mdb.ImportantZoneAction(mdb.FIELDS, "time,id,space,index,play,status"), + ), Hand: func(m *ice.Message, arg ...string) { + if mdb.ZoneSelect(m.Options(mdb.CACHE_LIMIT, "30"), arg...).Display(""); len(arg) == 0 { + m.PushAction(cli.RECORD, mdb.REMOVE).Action(mdb.CREATE, cli.STOP) } else { - m.Action("play") + m.Sort(mdb.ID, ice.INT).PushAction("preview").Action(mdb.INSERT, cli.PLAY) } }}, }) diff --git a/core/chat/script.js b/core/chat/script.js index 36ba5b4d..15b1197b 100644 --- a/core/chat/script.js +++ b/core/chat/script.js @@ -1,19 +1,32 @@ +(function() { SCRIPT_ZONE = "web.chat.script:zone" Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onappend.table(can, msg) - can.onappend.board(can, msg) + _init: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg) + var zone = can.misc.sessionStorage(can, SCRIPT_ZONE), tr = can.page.Select(can, can._output, html.TR)[1] + msg.Table(function(value, index) { zone && value.zone == zone && can.onmotion.select(can, tr.parentNode, html.TR, index, function(target) { + can.onappend.style(can, html.DANGER, target) + }) }) }, }) Volcanos(chat.ONACTION, { - play: function(event, can) { - can.core.Next(can._msg.Table(), function(value, next) { - var done = false - can.onappend.plugin(can, {index: value.index}, function(sub) { - can.onmotion.delay(can, function() { - if (!sub._auto) { sub.Update({}, [ctx.ACTION, value.auto], function() { next() }) } - }, 300) - sub.onexport.output = function() { done || sub.Update({}, [ctx.ACTION, value.auto], function() { next() }), done = true } - }) + record: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, msg.Option(mdb.ZONE)), can.user.toastSuccess(can, msg.Option(mdb.ZONE)), can.Update(event) }, + enable: function(event, can, msg) { can.runAction(event, mdb.MODIFY, [mdb.STATUS, mdb.ENABLE]) }, + disable: function(event, can, msg) { can.runAction(event, mdb.MODIFY, [mdb.STATUS, mdb.DISABLE]) }, + stop: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, ""), can.Update(event) }, + play: function(event, can) { can.core.Next(can._msg.Table(), function(value, next, index) { + can.user.toastProcess(can, `${value.index} ${value.play} ${index} / ${can._msg.Length()}`) + can.Status(cli.STEP, value.index) + var tr = can.page.Select(can, can._output, html.TR)[1]; can.onmotion.select(can, tr.parentNode, html.TR, index) + value.status == mdb.DISABLE? next(): can.onaction.preview({}, can, can.request({}, value), next) + }, function() { can.user.toastSuccess(can) }) }, + preview: function(event, can, msg, next) { + can.onappend.plugin(can, {space: msg.Option(web.SPACE), index: msg.Option(ctx.INDEX)}, function(sub) { var done = false + function action(skip) { sub.Update(can.request({}, {_handle: ice.TRUE}), [ctx.ACTION, msg.Option(cli.PLAY)], function(msg) { + sub.onimport._process(sub, msg) || msg.Length() == 0 && msg.Result() == "" || can.onappend._output(sub, msg), next && next() }) } + can.onmotion.delay(can, function() { if (done || sub._auto) { return } done = true, action() }, 300) + sub.onexport.output = function() { if (done) { return } done = true, action(true) + can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, "") + }, can.onmotion.scrollIntoView(can, sub._target) }) }, }) +})()