1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-03-04 16:51:39 +08:00
parent 2c791bef93
commit 437ec06692
10 changed files with 85 additions and 69 deletions

View File

@ -11,23 +11,21 @@ import (
)
func _offer_create(m *ice.Message, arg ...string) {
h := mdb.HashCreate(m.Spawn(), m.OptionSimple(EMAIL, SUBJECT, CONTENT), INVITER, m.Option(ice.MSG_USERNAME), mdb.STATUS, INVITE)
h := mdb.HashCreate(m.Spawn(), FROM, m.Option(ice.MSG_USERNAME), mdb.STATUS, INVITE, m.OptionSimple(EMAIL, SUBJECT, CONTENT))
SendEmail(m.Options("link", m.Cmdx("host", "publish", m.MergePodCmd("", "", mdb.HASH, h))), m.Option(FROM), "", "")
m.Cmd("count", mdb.CREATE, OFFER, m.Option(FROM), kit.Dict(ice.LOG_DISABLE, ice.TRUE))
gdb.Event(m, OFFER_CREATE, mdb.HASH, h, EMAIL, m.Option(EMAIL))
}
func _offer_accept(m *ice.Message, arg ...string) {
msg := mdb.HashSelect(m.Spawn(), m.Option(mdb.HASH))
if ls := kit.Split(msg.Append(EMAIL), mdb.AT); !m.WarnNotFound(msg.Length() == 0 || len(ls) < 2, m.Option(mdb.HASH)) {
m.Spawn().AdminCmd(USER, mdb.CREATE, USERNICK, ls[0], USERNAME, msg.Append(EMAIL), USERZONE, ls[1])
m.ProcessLocation(m.MergePod("", ice.MSG_SESSID, SessValid(m.Options(ice.MSG_USERNAME, msg.Append(EMAIL)))))
m.Spawn().AdminCmd(USER, mdb.CREATE, USERROLE, VOID, USERNAME, msg.Append(EMAIL), USERNICK, ls[0], USERZONE, ls[1])
mdb.HashModify(m, m.OptionSimple(mdb.HASH), mdb.STATUS, ACCEPT)
gdb.Event(m, OFFER_ACCEPT, mdb.HASH, m.Option(mdb.HASH), EMAIL, msg.Append(EMAIL))
m.ProcessLocation(m.MergePod("", ice.MSG_SESSID, SessValid(m.Options(ice.MSG_USERNAME, msg.Append(EMAIL)))))
}
}
const (
INVITER = "inviter"
INVITE = "invite"
ACCEPT = "accept"
SUBJECT_HTML = "subject.html"
@ -42,7 +40,7 @@ const OFFER = "offer"
func init() {
Index.MergeCommands(ice.Commands{
OFFER: {Help: "邀请", Role: VOID, Meta: kit.Dict(
ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict("from", "发自", "inviter", "邀请人")),
ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict("from", "发自")),
), Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create from*=admin email*='shy@shylinux.com' subject content", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
_offer_create(m, arg...)
@ -52,20 +50,22 @@ func init() {
_offer_accept(m, arg...)
}
}},
}, mdb.ImportantHashAction(EMAIL, ADMIN, mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,status,inviter,email,title,content")), Hand: func(m *ice.Message, arg ...string) {
if !m.WarnNotRight(len(arg) == 0 && m.Option(ice.MSG_USERROLE) == VOID) {
kit.If(mdb.HashSelect(m, arg...).FieldsIsDetail(), func() {
if m.Option(ice.MSG_USERNAME) == "" {
m.Option(ice.MSG_USERHOST, strings.Split(m.Option(ice.MSG_USERHOST), "://")[1])
m.SetAppend().EchoInfoButton(m.Template(SUBJECT_HTML), ACCEPT)
} else {
if strings.Contains(m.Option(ice.MSG_USERWEB), "/c/offer") {
m.ProcessLocation(m.MergePod(""))
}
}
})
}, mdb.ImportantHashAction(
mdb.SHORT, mdb.UNIQ, mdb.FIELD, "time,hash,from,status,email,subject,content"), EMAIL, ADMIN,
), Hand: func(m *ice.Message, arg ...string) {
if m.WarnNotRight(len(arg) == 0 && !IsTechOrRoot(m)) {
return
} else if mdb.HashSelect(m, arg...).FieldsIsDetail() {
if m.Option(ice.MSG_USERNAME) == "" {
m.Option(ice.MSG_USERHOST, strings.Split(m.Option(ice.MSG_USERHOST), "://")[1])
m.SetAppend().EchoInfoButton(m.Template(SUBJECT_HTML), ACCEPT)
} else if strings.Contains(m.Option(ice.MSG_USERWEB), "/c/offer") {
m.ProcessLocation(m.MergePod(""))
}
}
}},
})
}
func OfferAction() ice.Actions {
return gdb.EventsAction(OFFER_CREATE, OFFER_ACCEPT, USER_CREATE, USER_REMOVE)
}

View File

@ -72,8 +72,8 @@ func SessAuth(m *ice.Message, value ice.Any, arg ...string) *ice.Message {
USERROLE, m.Option(ice.MSG_USERROLE, kit.Format(kit.Value(value, USERROLE))),
USERNAME, m.Option(ice.MSG_USERNAME, kit.Format(kit.Value(value, USERNAME))),
USERNICK, m.Option(ice.MSG_USERNICK, kit.Format(kit.Value(value, USERNICK))),
AVATAR, m.Option(ice.MSG_AVATAR, kit.Format(kit.Value(value, AVATAR))),
LANGUAGE, m.OptionDefault(ice.MSG_LANGUAGE, kit.Format(kit.Value(value, LANGUAGE))),
AVATAR, m.Option(ice.MSG_AVATAR, kit.Format(kit.Value(value, AVATAR))),
arg, logs.FileLineMeta(kit.Select(logs.FileLine(-1), m.Option("aaa.checker"))),
)
}

View File

@ -52,6 +52,7 @@ func init() {
), Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelectUpdate(m, mdb.HashCreate(m), func(value ice.Map) { value[mdb.COUNT] = kit.Int(value[mdb.COUNT]) + 1 })
// m.Cmd("count", mdb.CREATE, OFFER, m.Option(FROM), kit.Dict(ice.LOG_DISABLE, ice.TRUE))
}},
mdb.VALID: {Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m.Spawn(), arg...).Table(func(value ice.Maps) {

View File

@ -295,6 +295,10 @@ func init() {
StreamPushRefreshConfirm(m, m.Trans("refresh for new space ", "刷新列表查看新空间 ")+m.Option(mdb.NAME))
}
}},
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) {
gdb.Event(m, DREAM_REMOVE, m.OptionSimple(mdb.NAME))
mdb.HashRemove(m)
}},
DOWNLOAD: {Name: "download path link", Hand: func(m *ice.Message, arg ...string) {
GoToast(m, func(toast func(string, int, int)) []string {
SpideSave(m, m.Option(nfs.PATH), kit.MergeURL(m.Option(mdb.LINK), cli.GOOS, runtime.GOOS, cli.GOARCH, runtime.GOARCH), func(count, total, value int) {
@ -474,7 +478,7 @@ func init() {
} else if arg[0] == ctx.ACTION {
gdb.Event(m, DREAM_ACTION, arg)
} else {
mdb.HashSelects(m, arg[0])
mdb.HashSelects(m, arg[0]).PushAction(PORTAL, DESKTOP, ADMIN, OPEN, mdb.REMOVE)
}
}},
})
@ -489,7 +493,7 @@ func DreamTablesAction(arg ...string) ice.Actions {
}
}
func DreamAction() ice.Actions {
return gdb.EventsAction(DREAM_INPUTS, DREAM_CREATE, DREAM_TRASH, DREAM_OPEN, DREAM_CLOSE, SPACE_LOGIN, SERVE_START)
return gdb.EventsAction(DREAM_INPUTS, DREAM_CREATE, DREAM_REMOVE, DREAM_TRASH, DREAM_OPEN, DREAM_CLOSE, SPACE_LOGIN, SERVE_START)
}
func DreamWhiteHandle(m *ice.Message, arg ...string) {
aaa.White(m, kit.Keys(DREAM, ctx.ACTION, m.ShortKey()))

View File

@ -218,13 +218,9 @@ func _space_send(m *ice.Message, name string, arg ...string) (h string) {
m.Optionv(ice.MSG_USERPOD, kit.Simple(kit.Keys(target[1:]), m.Optionv(ice.MSG_USERPOD)))
m.Options(ice.MSG_USERHOST, "", ice.MSG_USERWEB0, m.Option(ice.MSG_USERWEB), ice.MSG_USERPOD0, name)
})
kit.For([]string{ice.MSG_USERROLE, ice.LOG_TRACEID}, func(k string) { m.Optionv(k, m.Optionv(k)) })
m.Option(ice.MSG_HANDLE, ice.FALSE)
kit.For(m.Optionv(ice.MSG_OPTS), func(k string) {
kit.If(!kit.IsIn(k, "task.id", "work.id"), func() {
m.Optionv(k, m.Optionv(k))
})
})
kit.For([]string{ice.MSG_USERROLE, ice.LOG_TRACEID, "space.noecho"}, func(k string) { m.Optionv(k, m.Optionv(k)) })
kit.For(kit.Filters(kit.Simple(m.Optionv(ice.MSG_OPTS)), "task.id", "work.id"), func(k string) { m.Optionv(k, m.Optionv(k)) })
if withecho {
_space_echo(m.Set(ice.MSG_DETAIL, arg...), []string{h}, target, c)
} else {

View File

@ -17,6 +17,9 @@ func _stream_subkey(m *ice.Message, arg ...string) *ice.Message {
return m.Options(mdb.SUBKEY, kit.Keys(mdb.HASH, arg[0]), ice.MSG_FIELDS, mdb.Config(m, mdb.FIELDS))
}
const (
PUSH = "push"
)
const STREAM = "stream"
func init() {
@ -30,10 +33,11 @@ func init() {
mdb.HashCreate(_stream_subkey(m), ParseUA(m))
mdb.HashSelect(m)
}},
"push": {Hand: func(m *ice.Message, arg ...string) {
PUSH: {Hand: func(m *ice.Message, arg ...string) {
m.Options(ice.MSG_SPACE, arg[0], ice.MSG_INDEX, arg[1])
mdb.HashSelect(_stream_subkey(m)).Table(func(value ice.Maps) {
if value[cli.DAEMON] != m.Option(ice.MSG_DAEMON) {
m.Options(mdb.SUBKEY, "").Cmd(SPACE, value[cli.DAEMON], arg)
m.Options(mdb.SUBKEY, "").Cmd(SPACE, value[cli.DAEMON], arg[2:])
}
})
}},
@ -59,14 +63,14 @@ func init() {
})
}
func StreamPush(m *ice.Message, arg ...string) {
if ice.Info.NodeType == WORKER {
m.Option(ice.MSG_SPACE, m.Option(ice.MSG_USERPOD))
} else {
m.Option(ice.MSG_SPACE, "")
}
m.Option(ice.MSG_INDEX, m.ShortKey())
AdminCmd(m, STREAM, "push", arg)
AdminCmd(m, STREAM, PUSH, m.Option(ice.MSG_USERPOD), m.ShortKey(), arg)
}
func StreamPushRefresh(m *ice.Message, arg ...string) {
StreamPush(m.Spawn(ice.Maps{"space.noecho": ice.TRUE}), kit.Simple(html.REFRESH, arg)...)
}
func StreamPushRefreshConfirm(m *ice.Message, arg ...string) {
StreamPush(m.Spawn(ice.Maps{"space.noecho": "true"}), kit.Simple(html.REFRESH, html.CONFIRM, arg)...)
if len(arg) == 0 {
arg = append(arg, m.Trans("refresh for new data ", "刷新列表,查看最新数据 "))
}
StreamPushRefresh(m, kit.Simple(html.CONFIRM, arg)...)
}

View File

@ -30,11 +30,11 @@ fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.send div.container>span.from { float:right; }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.send div.container { display:flex; flex-direction:column; align-items:flex-end; }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.text div.content { white-space:pre; padding:var(--input-padding) var(--button-padding); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content div.item.text.path>input { width:var(--input-width); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.xterm>form.option>div.item.hash input { width:var(--form-width); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.web.chat.grant>form.option>div.item.space input { width:var(--form-width); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.iframe>form.option>div.item.hash input { width:var(--form-width); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.user>form.option>div.item.username input { width:var(--form-width); }
/* fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content div.item.text.path>input { width:var(--input-width); } */
/* fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.xterm>form.option>div.item.hash input { width:var(--form-width); } */
/* fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.web.chat.grant>form.option>div.item.space input { width:var(--form-width); } */
/* fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story.iframe>form.option>div.item.hash input { width:var(--form-width); } */
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story>form.option>div.item.text input { width:var(--form-width); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content fieldset.story>div.action>div.item.chat.icons { display:none; }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content { box-shadow:var(--box-shadow); }
fieldset.web.chat.message>div.output>div.layout>div.layout>div.content>div.list>div.item.plug>div.container>div.content:hover { box-shadow:var(--notice-box-shadow); }

View File

@ -7,7 +7,6 @@ import (
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web"
@ -38,9 +37,8 @@ func init() {
mdb.INSERT: {Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneInsert(m, kit.Simple(arg[0], tcp.DIRECT, tcp.SEND, arg[1:], aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.AVATAR, m.Option(ice.MSG_AVATAR)))
mdb.HashSelectUpdate(m, arg[0], func(value ice.Map) { kit.Value(value, mdb.TIME, m.Time()) })
web.StreamPushRefreshConfirm(m, m.Trans("refresh for new message ", "刷新列表,查看最新消息 "))
web.StreamPushRefresh(m)
}},
cli.CLEAR: {Hand: func(m *ice.Message, arg ...string) {}},
tcp.SEND: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd("", mdb.INSERT, arg, tcp.DIRECT, tcp.SEND)
kit.If(mdb.HashSelectField(m, arg[0], web.TARGET), func(p string) { m.Cmd(web.SPACE, p, MESSAGE, tcp.RECV, arg[1:]) })
@ -49,9 +47,13 @@ func init() {
m.Cmd("", mdb.INSERT, m.Option(ice.FROM_SPACE), arg, tcp.DIRECT, tcp.RECV)
mdb.HashSelectUpdate(m, m.Option(ice.FROM_SPACE), func(value ice.Map) { kit.Value(value, web.TARGET, m.Option(ice.FROM_SPACE)) })
}},
web.OPEN: {Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.MergePod(m.Option(web.TARGET))) }},
cli.CLEAR: {Hand: func(m *ice.Message, arg ...string) {}},
web.OPEN: {Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.MergePod(m.Option(web.TARGET))) }},
web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) {
MessageInsertPlug(m, web.DREAM, "", "", IFRAME, web.S(m.Option(mdb.NAME)))
MessageInsertPlug(m, web.DREAM, "", "", web.DREAM, m.Option(mdb.NAME))
}},
web.DREAM_REMOVE: {Hand: func(m *ice.Message, arg ...string) {
MessageInsertPlug(m, web.DREAM, "", "", web.DREAM, m.Option(mdb.NAME))
}},
web.SPACE_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
MessageInsertPlug(m, aaa.APPLY, "", "", web.CHAT_GRANT, m.Option(mdb.NAME))
@ -76,10 +78,7 @@ func init() {
}
}},
ctx.RUN: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(web.Space(m, arg[0]), arg[1], arg[2:]) }},
}, web.DreamAction(), web.DreamTablesAction(), gdb.EventsAction(
aaa.OFFER_CREATE, aaa.OFFER_ACCEPT,
aaa.USER_CREATE, aaa.USER_REMOVE,
), mdb.ZoneAction(
}, web.DreamTablesAction(), web.DreamAction(), aaa.OfferAction(), mdb.ZoneAction(
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,hash,type,zone,icons,title,count,target",
mdb.FIELDS, "time,id,type,name,text,space,index,args,style,display,username,usernick,avatar,direct",
web.ONLINE, ice.TRUE,
@ -116,8 +115,17 @@ func MessageCreate(m *ice.Message, zone, icons string) {
}
}
func MessageInsert(m *ice.Message, zone string, arg ...string) {
m.Cmd(MESSAGE, mdb.INSERT, zone, tcp.DIRECT, tcp.RECV, arg)
if ice.Info.Important {
m.Cmd(MESSAGE, mdb.INSERT, zone, tcp.DIRECT, tcp.RECV, arg)
}
}
func MessageInsertPlug(m *ice.Message, zone, name, text, index, args string, arg ...string) {
kit.If(text == "", func() {
msg := m.Cmd(index, args)
if msg.Option(ice.MSG_STATUS) == "" {
msg.StatusTimeCount()
}
text = msg.FormatMeta()
})
MessageInsert(m, zone, kit.Simple(mdb.TYPE, html.PLUG, mdb.NAME, kit.Select(m.ActionKey(), name), mdb.TEXT, text, ctx.INDEX, index, ctx.ARGS, args, arg)...)
}

View File

@ -126,7 +126,7 @@ Volcanos(chat.ONFIGURE, {
return {view: wiki.CONTENT, list: [{text: value.text||"[未知消息]"}], _init: function(target) {
if (value.display) { var msg = can.request(); msg.Echo(value.text), can.onmotion.clear(can, target)
var height = can.onexport.plugHeight(can, value), width = can.onexport.plugWidth(can, value)
can.onappend.plugin(can, {title: value.name, index: "can._filter", height: height, display: value.display, msg: msg}, function(sub) {
can.onappend.plugin(can, {title: value.name, index: "can._plugin", args: value.args, height: height, display: value.display, msg: msg}, function(sub) {
sub.onimport.size(sub, height, width)
delete(sub._legend.onclick)
}, target)
@ -134,17 +134,16 @@ Volcanos(chat.ONFIGURE, {
}}
},
plug: function(can, value) { var height = can.onexport.plugHeight(can, value), width = can.onexport.plugWidth(can, value)
return {view: wiki.CONTENT, style: {height: height+2, width: width}, _init: function(target) { value.type = chat.STORY
return {view: wiki.CONTENT, style: {height: height+2}, _init: function(target) { value.type = chat.STORY
var list = can.core.Split(can.ConfSpace()||can.misc.Search(can, ice.POD)||"", ".")
var _list = can.core.Split(value.direct == "recv"? can.db.zone.target: "", ".")
can.base.isIn(_list[0], "ops", "dev") && (list.pop(), _list.shift())
value._space = list.concat(_list).join(".").replaceAll("..", ".")
value._commands = {direct: value.direct, target: can.db.zone.target}
value.title = value.name
can.onappend.plugin(can, value, function(sub) {
sub.onimport.size(sub, height, width)
sub.onexport.output = function() {
sub.onimport.size(sub, height, width)
value.title = value.name; if (value.text) { var msg = can.request(); msg._xhr = {responseText: value.text}, value.msg = msg, msg.Copy(JSON.parse(value.text)) }
can.onappend.plugin(can, value, function(sub) { sub.onimport.size(sub, height, width, false)
sub.onexport.output = function() { sub.onimport.size(sub, height, width, false)
can.page.style(can, target, html.HEIGHT, sub._target.offsetHeight+2)
can.page.style(can, target, html.HEIGHT, sub._target.offsetHeight+2, html.WIDTH, sub._target.offsetWidth)
}
}, target)

View File

@ -6,7 +6,6 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
@ -71,6 +70,9 @@ func init() {
web.StreamPushRefreshConfirm(m, m.Trans("refresh for new message ", "刷新列表,查看最新消息 "))
}},
web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) {
PlanInsert(m, web.DREAM, "", m.Option(mdb.NAME), web.CHAT_IFRAME, web.S(m.Option(mdb.NAME)))
}},
web.DREAM_REMOVE: {Hand: func(m *ice.Message, arg ...string) {
PlanInsert(m, web.DREAM, "", "", web.CHAT_IFRAME, web.S(m.Option(mdb.NAME)))
}},
aaa.OFFER_CREATE: {Hand: func(m *ice.Message, arg ...string) {
@ -82,6 +84,9 @@ func init() {
aaa.USER_CREATE: {Hand: func(m *ice.Message, arg ...string) {
PlanInsert(m, aaa.APPLY, "", "", aaa.USER, m.Option(aaa.USERNAME))
}},
aaa.USER_REMOVE: {Hand: func(m *ice.Message, arg ...string) {
PlanInsert(m, aaa.APPLY, "", "", aaa.USER, m.Option(aaa.USERNAME))
}},
ctx.RUN: {Hand: func(m *ice.Message, arg ...string) {
if m.RenameOption(TASK_POD, ice.POD); ctx.PodCmd(m, m.ShortKey(), ctx.RUN, arg) {
return
@ -91,10 +96,7 @@ func init() {
m.Cmdy(arg)
}
}},
}, web.DreamTablesAction(), web.DreamAction(), gdb.EventsAction(
aaa.OFFER_CREATE, aaa.OFFER_ACCEPT,
aaa.USER_CREATE, aaa.USER_REMOVE,
), ctx.ConfAction(mdb.TOOLS, "todo,epic", "online", ice.TRUE), TASK), Hand: func(m *ice.Message, arg ...string) {
}, web.DreamTablesAction(), web.DreamAction(), aaa.OfferAction(), ctx.ConfAction(mdb.TOOLS, kit.Simple(TODO, EPIC), web.ONLINE, ice.TRUE), TASK), Hand: func(m *ice.Message, arg ...string) {
begin_time, end_time := _plan_scope(m, kit.Slice(arg, 0, 2)...)
_plan_list(m, begin_time.Format(ice.MOD_TIME), end_time.Format(ice.MOD_TIME))
web.PushPodCmd(m, "", arg...)
@ -104,8 +106,10 @@ func init() {
})
}
func PlanInsert(m *ice.Message, zone, name, text, index, args string, arg ...string) {
m.Cmd(PLAN, mdb.INSERT, web.SPACE, "", mdb.ZONE, zone, mdb.TYPE, "once",
mdb.NAME, kit.Select(m.ActionKey(), name), mdb.TEXT, kit.Select(args, text), BEGIN_TIME, m.Time(),
"extra.index", index, "extra.args", args, arg,
)
if ice.Info.Important {
m.Cmd(PLAN, mdb.INSERT, web.SPACE, "", mdb.ZONE, zone, mdb.TYPE, "once",
mdb.NAME, kit.Select(m.ActionKey(), name), mdb.TEXT, kit.Select(args, text), BEGIN_TIME, m.Time(),
"extra.index", index, "extra.args", args, arg,
)
}
}