1
0
forked from x/icebergs

add toast hash

This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-02-15 15:57:53 +08:00
parent 586610ce64
commit 712fe28952
10 changed files with 44 additions and 24 deletions

View File

@ -323,7 +323,7 @@ func init() {
kit.If(m.Option(mdb.NAME) == "", func() { m.Sleep3s().Cmdy(ROUTE, cli.BUILD).ProcessInner() }) kit.If(m.Option(mdb.NAME) == "", func() { m.Sleep3s().Cmdy(ROUTE, cli.BUILD).ProcessInner() })
}}, }},
PUBLISH: {Name: "publish name", Help: "发布", Icon: "bi bi-send-check", Hand: func(m *ice.Message, arg ...string) { PUBLISH: {Name: "publish name", Help: "发布", Icon: "bi bi-send-check", Hand: func(m *ice.Message, arg ...string) {
m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) m.Option(ice.MSG_TITLE, kit.Keys(m.Option(ice.MSG_USERPOD), m.CommandKey(), m.ActionKey()))
defer ToastProcess(m)() defer ToastProcess(m)()
list := []string{cli.LINUX, cli.DARWIN, cli.WINDOWS} list := []string{cli.LINUX, cli.DARWIN, cli.WINDOWS}
msg := m.Spawn(ice.Maps{ice.MSG_DAEMON: ""}) msg := m.Spawn(ice.Maps{ice.MSG_DAEMON: ""})

View File

@ -73,6 +73,9 @@ func init() {
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, nfs.TRASH); _matrix_dream(m, "") }}, mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, nfs.TRASH); _matrix_dream(m, "") }},
cli.START: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, "") }}, cli.START: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, "") }},
cli.STOP: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, "") }}, cli.STOP: {Hand: func(m *ice.Message, arg ...string) { _matrix_dream(m, "") }},
COMPILE: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(Space(m, kit.Keys(m.Option(DOMAIN), m.Option(mdb.NAME))), COMPILE, cli.AMD64, cli.LINUX, ice.SRC_MAIN_GO).ProcessHold()
}},
UPGRADE: {Hand: func(m *ice.Message, arg ...string) { UPGRADE: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(Space(m, kit.Keys(m.Option(DOMAIN), m.Option(mdb.NAME))), UPGRADE).Sleep3s() m.Cmd(Space(m, kit.Keys(m.Option(DOMAIN), m.Option(mdb.NAME))), UPGRADE).Sleep3s()
}}, }},

View File

@ -81,9 +81,8 @@ func PushNotice(m *ice.Message, arg ...ice.Any) {
return return
} }
opts := ice.Map{ice.MSG_OPTION: []string{}, ice.MSG_OPTS: []string{}} opts := ice.Map{ice.MSG_OPTION: []string{}, ice.MSG_OPTS: []string{}}
kit.For([]string{ice.MSG_TITLE, ctx.DISPLAY, ctx.STYLE, cli.DELAY, ice.MSG_STATUS, ice.LOG_DEBUG, ice.LOG_TRACEID}, func(key string) { kit.For([]string{ctx.DISPLAY, ctx.STYLE, cli.DELAY, ice.MSG_TITLE, ice.MSG_STATUS, ice.LOG_DEBUG, ice.LOG_TRACEID}, func(key string) {
opts[ice.MSG_OPTION] = kit.Simple(opts[ice.MSG_OPTION], key) opts[ice.MSG_OPTION], opts[key] = kit.Simple(opts[ice.MSG_OPTION], key), m.Option(key)
opts[key] = m.Option(key)
}) })
m.Cmd(SPACE, m.Option(ice.MSG_DAEMON), arg, opts) m.Cmd(SPACE, m.Option(ice.MSG_DAEMON), arg, opts)
} }
@ -102,7 +101,7 @@ func PushStream(m *ice.Message) *ice.Message {
func init() { ice.Info.PushStream = PushStream } func init() { ice.Info.PushStream = PushStream }
func init() { ice.Info.PushNotice = PushNotice } func init() { ice.Info.PushNotice = PushNotice }
func Toast(m *ice.Message, text string, arg ...ice.Any) *ice.Message { // [title [duration [progress]]] func Toast(m *ice.Message, text string, arg ...ice.Any) *ice.Message { // [title [duration [progress [hash]]]]
if len(arg) > 1 { if len(arg) > 1 {
switch val := arg[1].(type) { switch val := arg[1].(type) {
case string: case string:
@ -112,7 +111,7 @@ func Toast(m *ice.Message, text string, arg ...ice.Any) *ice.Message { // [title
} }
} }
kit.If(len(arg) == 0, func() { arg = append(arg, m.PrefixKey()) }) kit.If(len(arg) == 0, func() { arg = append(arg, m.PrefixKey()) })
kit.If(len(arg) > 0, func() { arg[0] = kit.Select(m.PrefixKey(), arg[0]) }) kit.If(len(arg) > 0 && arg[0] == "", func() { arg[0] = kit.Keys(m.Option(ice.MSG_USERPOD), ctx.ShortCmd(m.PrefixKey())) })
PushNoticeToast(m, text, arg) PushNoticeToast(m, text, arg)
return m return m
} }
@ -133,16 +132,17 @@ func ToastFailure(m *ice.Message, arg ...ice.Any) {
Toast(m, toastContent(m, ice.FAILURE, arg...), "", m.OptionDefault(ice.TOAST_DURATION, cli.TIME_3s)).Sleep(m.OptionDefault(ice.TOAST_DURATION, cli.TIME_3s)) Toast(m, toastContent(m, ice.FAILURE, arg...), "", m.OptionDefault(ice.TOAST_DURATION, cli.TIME_3s)).Sleep(m.OptionDefault(ice.TOAST_DURATION, cli.TIME_3s))
} }
func ToastProcess(m *ice.Message, arg ...ice.Any) func(...ice.Any) { func ToastProcess(m *ice.Message, arg ...ice.Any) func(...ice.Any) {
Toast(m, toastContent(m, ice.PROCESS, arg...), "", cli.TIME_30s) h := kit.HashsUniq()
return func(arg ...ice.Any) { Toast(m, toastContent(m, ice.SUCCESS, arg...), "", "1s") } Toast(m, toastContent(m, ice.PROCESS, arg...), "", "-1", "", h)
return func(arg ...ice.Any) { Toast(m, toastContent(m, ice.SUCCESS, arg...), "", cli.TIME_1s, "", h) }
} }
func GoToast(m *ice.Message, title string, cb func(toast func(name string, count, total int)) []string) *ice.Message { func GoToast(m *ice.Message, title string, cb func(toast func(name string, count, total int)) []string) *ice.Message {
_total := 0 h := kit.HashsUniq()
icon := Icons[ice.PROCESS] icon, _total := Icons[ice.PROCESS], 0
toast := func(name string, count, total int) { toast := func(name string, count, total int) {
kit.If(total == 0, func() { total = 1 }) kit.If(total == 0, func() { total = 1 })
Toast(m, kit.Format("%s %s %s", icon, kit.JoinWord(kit.Select(kit.Select("", m.ActionKey(), m.ActionKey() != ice.LIST), title, m.Option(ice.MSG_TITLE)), name), strings.ReplaceAll(kit.FmtSize(count, total), "B", "")), Toast(m, kit.Format("%s %s %s", icon, kit.JoinWord(m.ActionKey(), name), strings.ReplaceAll(kit.FmtSize(count, total), "B", "")),
"", m.OptionDefault(ice.TOAST_DURATION, cli.TIME_30s), count*100/total) kit.Select(title, m.Option(ice.MSG_TITLE)), m.OptionDefault(ice.TOAST_DURATION, "-1"), count*100/total, h)
_total = total _total = total
} }
if list := cb(toast); len(list) > 0 { if list := cb(toast); len(list) > 0 {

View File

@ -325,6 +325,7 @@ func init() {
}) })
m.Sort("", kit.Simple(aaa.LOGIN, WEIXIN, PORTAL, WORKER, SERVER, MASTER)) m.Sort("", kit.Simple(aaa.LOGIN, WEIXIN, PORTAL, WORKER, SERVER, MASTER))
} else { } else {
m.OptionDefault(ice.MSG_USERPOD, arg[0])
_space_send(m, arg[0], kit.Simple(kit.Split(arg[1]), arg[2:])...) _space_send(m, arg[0], kit.Simple(kit.Split(arg[1]), arg[2:])...)
} }
}}, }},

View File

@ -11,7 +11,7 @@ fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu { display:flex; a
fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu.title { font-style:italic; margin-left:10px; } fieldset.macos.desktop>div.output>fieldset.macos.menu div.menu.title { font-style:italic; margin-left:10px; }
fieldset.macos.desktop>div.output>fieldset.macos.menu div.item.time { margin-right:10px; } fieldset.macos.desktop>div.output>fieldset.macos.menu div.item.time { margin-right:10px; }
fieldset.macos.desktop>div.output>fieldset.macos.menu>div.output { overflow:hidden; } fieldset.macos.desktop>div.output>fieldset.macos.menu>div.output { overflow:hidden; }
fieldset.macos.desktop>div.output>fieldset.macos.dock { border:var(--box-border); border-radius:var(--plugin-radius); position:absolute; bottom:var(--input-margin); transition:margin-left 0.3s; } fieldset.macos.desktop>div.output>fieldset.macos.dock { border:var(--box-border); border-radius:var(--plugin-radius); position:absolute; bottom:var(--input-margin); transition:margin-left 0.3s; z-index:11; }
fieldset.macos.desktop>div.output>fieldset.macos.searchs { position:absolute; z-index:11; } fieldset.macos.desktop>div.output>fieldset.macos.searchs { position:absolute; z-index:11; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications { height:calc(100% - 125px); width:320px; overflow:auto; position:absolute; top:var(--desktop-menu-height); left:calc(100% - 320px); z-index:11; } fieldset.macos.desktop>div.output>fieldset.macos.notifications { height:calc(100% - 125px); width:320px; overflow:auto; position:absolute; top:var(--desktop-menu-height); left:calc(100% - 320px); z-index:11; }
fieldset.macos.desktop>div.output>fieldset.macos.notifications>div.action>div.item { padding:0; } fieldset.macos.desktop>div.output>fieldset.macos.notifications>div.action>div.item { padding:0; }
@ -74,7 +74,7 @@ fieldset.macos.dock>div.output>div.item { text-align:center; align-self:baseline
fieldset.macos.dock>div.output>div.item img { object-fit:contain; min-height:var(--desktop-icon-size); width:var(--desktop-icon-size); transition:width 0.3s; } fieldset.macos.dock>div.output>div.item img { object-fit:contain; min-height:var(--desktop-icon-size); width:var(--desktop-icon-size); transition:width 0.3s; }
fieldset.macos.dock>div.output>div.item>div.name { display:none; } fieldset.macos.dock>div.output>div.item>div.name { display:none; }
fieldset.macos.finder>div.output div.content>div.item { text-align:center; float:left; } fieldset.macos.finder>div.output div.content>div.item { text-align:center; float:left; }
fieldset.macos.finder>div.output div.content>div.item img { object-fit:contain; height:var(--desktop-icon-size); width:var(--desktop-icon-size); } fieldset.macos.finder>div.output div.content>div.item img { object-fit:contain; width:var(--desktop-icon-size); }
fieldset.macos.finder>div.output div.content>div.item div.name { font-size:var(--code-font-size); text-align:center; } fieldset.macos.finder>div.output div.content>div.item div.name { font-size:var(--code-font-size); text-align:center; }
body.dark fieldset.macos.desktop>div.output>fieldset.macos { background-color:#08234ad1; } body.dark fieldset.macos.desktop>div.output>fieldset.macos { background-color:#08234ad1; }
body.dark fieldset.macos.desktop>div.output>div.desktop fieldset table.content tbody tr:nth-child(odd):not(:hover) { background-color:#282B2F; } body.dark fieldset.macos.desktop>div.output>div.desktop fieldset table.content tbody tr:nth-child(odd):not(:hover) { background-color:#282B2F; }

View File

@ -10,19 +10,24 @@ Volcanos(chat.ONIMPORT, {
Volcanos(chat.ONACTION, { Volcanos(chat.ONACTION, {
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) }, 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) },
stop: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, ""), can.Update(event) }, stop: function(event, can, msg) { can.misc.sessionStorage(can, SCRIPT_ZONE, ""), can.Update(event) },
play: function(event, can) { var begin = new Date().getTime(); can.core.Next(can._msg.Table(), function(value, next, index, list) { play: function(event, can) { var begin = new Date().getTime(); can.core.Next(can._msg.Table(), function(value, next, index, list, data) {
var ls = can.core.Split(value.style||""); data = data||{}, data.list = data.list||[]; var fork
if (ls && ls.length > 0 && ls[0] == "fork") { data.done = parseInt(ls[1])+1, fork = {skip: parseInt(ls[1])} }
if (data.skip > 0) { return next({skip: data.skip-1}) }
if (data.done === 0) { return } if (data.done > 0) { data.done -= 1 } data.list.push(value)
can.Status(cli.STEP, index), can.Status(cli.COST, can.base.Duration(new Date().getTime()-begin)) can.Status(cli.STEP, index), can.Status(cli.COST, can.base.Duration(new Date().getTime()-begin))
can.user.toastProcess(can, `${can.core.Keys(value.space, value.index)} ${value.play} ${index}/${can._msg.Length()}`, "", index*100/list.length) can.user.toastProcess(can, `${can.core.Keys(value.space, value.index)} ${value.play} ${index}/${can._msg.Length()}`, "", index*100/list.length)
var tr = can.page.Select(can, can._output, html.TR)[1]; can.onmotion.select(can, tr.parentNode, html.TR, 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) value.status == mdb.DISABLE? next(data): can.onaction.preview({}, can, can.request({}, value), next, data)
if (fork) { next(fork) }
}, function(list) { can.Status(cli.STEP, list.length), can.Status(cli.COST, can.base.Duration(new Date().getTime()-begin)), can.user.toastSuccess(can) }) }, }, function(list) { can.Status(cli.STEP, list.length), can.Status(cli.COST, can.base.Duration(new Date().getTime()-begin)), can.user.toastSuccess(can) }) },
preview: function(event, can, msg, next) { preview: function(event, can, msg, next, data) {
can.onappend.plugin(can, {space: msg.Option(web.SPACE), index: msg.Option(ctx.INDEX), style: msg.Option(ctx.STYLE)}, function(sub) { var done = false can.onappend.plugin(can, {space: msg.Option(web.SPACE), index: msg.Option(ctx.INDEX), style: msg.Option(ctx.STYLE)}, function(sub) { var done = false
function action(skip) { sub.Update(sub.request({}, {_handle: ice.TRUE}), [ctx.ACTION, msg.Option(cli.PLAY)], function(msg) { function action(skip) { sub.Update(sub.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() sub.onimport._process(sub, msg) || msg.Length() == 0 && msg.Result() == "" || can.onappend._output(sub, msg), next && next(data)
}) } }) }
if (msg.Option(ctx.STYLE) == "async") { if (msg.Option(ctx.STYLE) == "async") {
done = true, sub.Update(sub.request({}, {_handle: ice.TRUE}), [ctx.ACTION, msg.Option(cli.PLAY)]), next && next() done = true, sub.Update(sub.request({}, {_handle: ice.TRUE}), [ctx.ACTION, msg.Option(cli.PLAY)]), next && next(data)
} else { } else {
can.onmotion.delay(can, function() { if (done || sub._auto) { return } done = true, action() }, 300) can.onmotion.delay(can, function() { if (done || sub._auto) { return } done = true, action() }, 300)
} }

View File

@ -111,8 +111,8 @@ func init() {
}}, }},
web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, nil, arg...) }}, web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, nil, arg...) }},
}, ctx.ConfAction(cli.ENV, kit.Dict(GOPRIVATE, "shylinux.com,github.com", GOPROXY, "https://goproxy.cn,direct", CGO_ENABLED, "0"))), Hand: func(m *ice.Message, arg ...string) { }, ctx.ConfAction(cli.ENV, kit.Dict(GOPRIVATE, "shylinux.com,github.com", GOPROXY, "https://goproxy.cn,direct", CGO_ENABLED, "0"))), Hand: func(m *ice.Message, arg ...string) {
defer web.ToastProcess(m)()
main, file, goos, arch := _compile_target(m, arg...) main, file, goos, arch := _compile_target(m, arg...)
defer web.ToastProcess(m, file)(file)
env := kit.Simple(cli.PATH, cli.BinPath(), cli.HOME, kit.Select(kit.Path(""), kit.Env(cli.HOME)), mdb.Configv(m, cli.ENV), m.Optionv(cli.ENV), cli.GOOS, goos, cli.GOARCH, arch) env := kit.Simple(cli.PATH, cli.BinPath(), cli.HOME, kit.Select(kit.Path(""), kit.Env(cli.HOME)), mdb.Configv(m, cli.ENV), m.Optionv(cli.ENV), cli.GOOS, goos, cli.GOARCH, arch)
kit.If(runtime.GOOS == cli.WINDOWS, func() { env = append(env, GOPATH, kit.HomePath(GO), GOCACHE, kit.HomePath("go/go-build")) }) kit.If(runtime.GOOS == cli.WINDOWS, func() { env = append(env, GOPATH, kit.HomePath(GO), GOCACHE, kit.HomePath("go/go-build")) })
m.Options(cli.CMD_ENV, env).Cmd(AUTOGEN, VERSION) m.Options(cli.CMD_ENV, env).Cmd(AUTOGEN, VERSION)

12
logs.go
View File

@ -271,6 +271,18 @@ func (m *Message) FormatStack(s, n int) string {
switch ls := kit.Split(name, PT, PT); kit.Select("", ls, 0) { switch ls := kit.Split(name, PT, PT); kit.Select("", ls, 0) {
case "reflect", "runtime", "http": case "reflect", "runtime", "http":
default: default:
if kit.HasPrefix(name,
"icebergs.(*Context)._action",
"icebergs.(*Context)._command",
"icebergs.(*Message)._command",
"icebergs.(*Message).Cmd",
"icebergs.(*Message).CmdHand",
"icebergs.(*Message).Search",
"icebergs.(*Message).TryCatch",
"icebergs.(*Message).Go",
) {
break
}
list = append(list, kit.Format("%s:%d\t%s", file, frame.Line, name)) list = append(list, kit.Format("%s:%d\t%s", file, frame.Line, name))
} }
if len(list) >= n || !more { if len(list) >= n || !more {

View File

@ -458,7 +458,7 @@ func init() {
} }
}}, }},
REMOTE: {Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) { REMOTE: {Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) {
repos := _repos_open(m, kit.Select(path.Base(kit.Path("")), kit.Select(m.Option(REPOS), arg, 0))) repos := _repos_open(m, kit.Select(path.Base(kit.Path("")), arg, 0))
if _remote, err := repos.Remote(ORIGIN); err == nil { if _remote, err := repos.Remote(ORIGIN); err == nil {
m.Push(REMOTE, kit.Select("", _remote.Config().URLs, 0)) m.Push(REMOTE, kit.Select("", _remote.Config().URLs, 0))
} }

View File

@ -109,7 +109,6 @@ func (s relay) Inputs(m *ice.Message, arg ...string) {
} }
} }
func (s relay) Stats(m *ice.Message) { func (s relay) Stats(m *ice.Message) {
m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey()))
cmds := []string{"go", `go version`, "git", `git version`, cmds := []string{"go", `go version`, "git", `git version`,
PACKAGE, `if yum -h &>/dev/null; then echo yum; elif apk version &>/dev/null; then echo apk; elif opkg -v &>/dev/null; then echo opkg; elif apt -h &>/dev/null; then echo apt; fi`, PACKAGE, `if yum -h &>/dev/null; then echo yum; elif apk version &>/dev/null; then echo apk; elif opkg -v &>/dev/null; then echo opkg; elif apt -h &>/dev/null; then echo apt; fi`,
SHELL, `echo $SHELL`, KERNEL, `uname -s`, ARCH, `uname -m`, SHELL, `echo $SHELL`, KERNEL, `uname -s`, ARCH, `uname -m`,
@ -319,7 +318,7 @@ func (s relay) Install(m *ice.Message, arg ...string) {
s.Modify(m, kit.Simple(m.OptionSimple(MACHINE, web.DREAM))...) s.Modify(m, kit.Simple(m.OptionSimple(MACHINE, web.DREAM))...)
} }
func (s relay) Upgrade(m *ice.Message, arg ...string) { func (s relay) Upgrade(m *ice.Message, arg ...string) {
m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) m.Option(ice.MSG_TITLE, kit.Keys(m.Option(ice.MSG_USERPOD), m.CommandKey(), m.ActionKey()))
if len(arg) == 0 && (m.Option(MACHINE) == "" || strings.Contains(m.Option(MACHINE), ",")) { if len(arg) == 0 && (m.Option(MACHINE) == "" || strings.Contains(m.Option(MACHINE), ",")) {
s.foreach(m, func(msg *ice.Message, cmd []string) { s.foreach(m, func(msg *ice.Message, cmd []string) {
if msg.Option("go") == "" { if msg.Option("go") == "" {
@ -334,7 +333,7 @@ func (s relay) Upgrade(m *ice.Message, arg ...string) {
} }
} }
func (s relay) Version(m *ice.Message, arg ...string) { func (s relay) Version(m *ice.Message, arg ...string) {
m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) m.Option(ice.MSG_TITLE, kit.Keys(m.Option(ice.MSG_USERPOD), m.CommandKey(), m.ActionKey()))
s.foreach(m, func(msg *ice.Message, cmd []string) { s.foreach(m, func(msg *ice.Message, cmd []string) {
if msg.Option("go") == "" { if msg.Option("go") == "" {
return return