1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-10-13 21:04:52 +08:00
parent d517ee6ebe
commit 2f8c081a38
16 changed files with 43 additions and 56 deletions

View File

@ -169,12 +169,12 @@ func Opens(m *ice.Message, arg ...string) {
}
}
}
func OpenCmds(m *ice.Message, arg ...string) {
func OpenCmds(m *ice.Message, arg ...string) *ice.Message {
if !tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) {
return
return m
}
if len(arg) == 0 || arg[0] == "" {
return
return m
}
m.Cmd(SYSTEM, "osascript", "-e", kit.Format(`
tell application "Terminal"
@ -182,4 +182,5 @@ tell application "Terminal"
activate
end tell
`, strings.Join(arg, "; ")))
return m
}

View File

@ -127,13 +127,12 @@ func init() {
CONFIG: {Name: "config key auto", Help: "配置", Actions: ice.Actions{
SAVE: {Hand: func(m *ice.Message, arg ...string) { _config_save(m, arg[0], arg[1:]...) }},
LOAD: {Hand: func(m *ice.Message, arg ...string) { _config_load(m, arg[0], arg[1:]...) }},
mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.EXPORT, arg[0], "", mdb.HASH) }},
mdb.IMPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(mdb.IMPORT, arg[0], "", mdb.HASH) }},
mdb.EXPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], mdb.EXPORT) }},
mdb.IMPORT: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], mdb.IMPORT) }},
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.EXPORT, arg[0], "", mdb.HASH, path.Join(ice.VAR_TRASH, kit.Keys(arg[0])))
nfs.Trash(m, path.Join(ice.VAR_DATA, arg[0]))
nfs.Trash(m, m.Cmdx(arg[0], mdb.EXPORT))
mdb.Config(m, arg[0], nil, nil)
m.Go(func() { m.Cmd(ice.EXIT, 1) })
}},
mdb.LIST: {Hand: func(m *ice.Message, arg ...string) {
list := []ice.Any{}

View File

@ -167,8 +167,8 @@ func ClearOnExitHashAction() ice.Actions {
}
func ExportHashAction(arg ...Any) ice.Actions {
return ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { HashImport(m, arg) }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); HashExport(m, arg) }},
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); HashImport(m, arg) }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { HashExport(m, arg) }},
}, HashAction(arg...))
}

View File

@ -66,6 +66,7 @@ func _zone_export(m *ice.Message, prefix, chain, file string) {
w := csv.NewWriter(f)
defer w.Flush()
head := kit.AddUniq(_zone_fields(m), EXTRA)
m.Debug("export %v", head)
w.Write(head)
count := 0
for _, key := range kit.SortedKey(m.Confv(prefix, kit.Keys(chain, HASH))) {
@ -182,6 +183,12 @@ func ZoneAction(arg ...ice.Any) ice.Actions {
IMPORT: {Hand: func(m *ice.Message, arg ...string) { ZoneImport(m, arg) }},
}
}
func ExportZoneAction(arg ...ice.Any) ice.Actions {
return ice.MergeActions(ZoneAction(arg...), ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { Config(m, IMPORTANT, ice.TRUE); ZoneImport(m, arg) }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.OptionFields(""); ZoneExport(m, arg) }},
})
}
func PageZoneAction(arg ...ice.Any) ice.Actions {
return ice.MergeActions(ice.Actions{
SELECT: {Hand: func(m *ice.Message, arg ...string) { PageZoneSelect(m, arg...) }},

View File

@ -69,7 +69,7 @@ func _dream_start(m *ice.Message, name string) {
}
}
defer ToastProcess(m)()
defer m.Sleep300ms()
defer m.Sleep3s()
m.Options(cli.CMD_DIR, kit.Path(p), cli.CMD_ENV, kit.EnvList(kit.Simple(
cli.CTX_OPS, Domain(tcp.LOCALHOST, m.Cmdv(SERVE, tcp.PORT)), cli.CTX_LOG, ice.VAR_LOG_BOOT_LOG, cli.CTX_PID, ice.VAR_LOG_ICE_PID,
cli.PATH, cli.BinPath(p, ""), cli.USER, ice.Info.Username,

View File

@ -176,7 +176,7 @@ const SPACE = "space"
func init() {
ice.Info.Inputs = append(ice.Info.Inputs, func(m *ice.Message, arg ...string) {
switch arg[0] {
switch kit.TrimPrefix(arg[0], "extra.") {
case SPACE:
m.Cmd(SPACE, func(value ice.Maps) {
kit.If(kit.IsIn(value[mdb.TYPE], WORKER, SERVER), func() { m.Push(arg[0], value[mdb.NAME]) })
@ -190,6 +190,7 @@ func init() {
m.Cmdy(ctx.COMMAND)
}
case ctx.ARGS:
m.OptionDefault(ctx.INDEX, m.Option("extra.index"))
if space := m.Option(SPACE); space != "" {
m.Options(SPACE, []string{}).Cmdy(SPACE, space, ctx.COMMAND, mdb.INPUTS, m.Option(ctx.INDEX))
} else {

View File

@ -93,7 +93,7 @@ const BINPACK = "binpack"
func init() {
Index.MergeCommands(ice.Commands{
BINPACK: {Name: "binpack path auto create insert", Help: "打包", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { _binpack_all(m) }},
mdb.CREATE: {Name: "create path", Hand: func(m *ice.Message, arg ...string) { _binpack_all(m) }},
mdb.INSERT: {Name: "insert path*", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m) }},
}, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path", lex.EXTREG, "sh,shy,py,js,css,html,png,jpg"))},
})

View File

@ -150,6 +150,9 @@ func init() {
m.Cmd(cli.SYSTEM, "date")
m.Cmd(cli.SYSTEM, cli.MAKE, m.Option(nfs.TARGET), kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH)))
}},
ice.APP: {Help: "本机", Hand: func(m *ice.Message, arg ...string) {
cli.OpenCmds(m, "cd "+kit.Path(""), "vim "+path.Join(arg[0], arg[1])+" +"+arg[2]).ProcessHold()
}},
COMPILE: {Help: "编译", Hand: func(m *ice.Message, arg ...string) {
if m.Option(nfs.PATH) != "" && nfs.ExistsFile(m, path.Join(m.Option(nfs.PATH), ice.MAKEFILE)) {
web.PushStream(m).Cmdy(cli.SYSTEM, cli.MAKE, kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH)))
@ -196,7 +199,7 @@ func init() {
web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcess(m, []string{}, arg...) }},
}, aaa.RoleAction(), chat.FavorAction(), ctx.ConfAction(ctx.TOOLS, "xterm,compile,runtime")), Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(INNER, arg); arg[0] != ctx.ACTION {
m.Action(nfs.SAVE, COMPILE, "show", "exec")
m.Action(nfs.SAVE, COMPILE, mdb.SHOW, cli.EXEC, ice.APP)
ctx.DisplayLocal(m, "")
ctx.Toolkit(m)
}

View File

@ -127,7 +127,7 @@ func init() {
}},
ice.APP: {Help: "本机", Hand: func(m *ice.Message, arg ...string) {
if h := kit.Select(m.Option(mdb.HASH), arg, 0); h == "" {
cli.Opens(m, "Terminal.app")
cli.OpenCmds(m, "cd "+kit.Path(""))
} else {
cli.OpenCmds(m, m.Cmdv("", h, mdb.TYPE))
}

View File

@ -6,6 +6,7 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
@ -14,14 +15,14 @@ const EPIC = "epic"
func init() {
Index.MergeCommands(ice.Commands{
EPIC: {Name: "epic hash list create", Help: "史记", Actions: ice.MergeActions(ice.Actions{
EPIC: {Help: "史记", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create time@date zone name"}, mdb.MODIFY: {Name: "modify time zone name"},
}, mdb.ImportantHashAction(mdb.FIELD, "time,hash,zone,name")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ExportHashAction(mdb.FIELD, "time,hash,zone,name")), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).Table(func(value ice.Maps) {
if span := kit.Time(m.Time()) - kit.Time(value[mdb.TIME]); span > 0 {
m.Push(mdb.TEXT, kit.Format(`已经 <span style="font-size:24px;color:red">%v</span> 天<br>距 %s<br>`, int(time.Duration(span)/time.Hour/24), kit.Split(value[mdb.TIME])[0]))
m.Push(mdb.TEXT, nfs.Template(m, "gone.html", m.Options("days", int(time.Duration(span)/time.Hour/24), "from", kit.Split(value[mdb.TIME])[0])))
} else {
m.Push(mdb.TEXT, kit.Format(`还有 <span style="font-size:24px;color:green">%v</span> 天<br>距 %s<br>`, -int(time.Duration(span)/time.Hour/24)+1, kit.Split(value[mdb.TIME])[0]))
m.Push(mdb.TEXT, nfs.Template(m, "will.html", m.Options("days", -int(time.Duration(span)/time.Hour/24)+1, "from", kit.Split(value[mdb.TIME])[0])))
}
}).PushAction(mdb.MODIFY, mdb.REMOVE)
web.PushPodCmd(m, "", arg...)

View File

@ -28,7 +28,7 @@ func _plan_scope(m *ice.Message, arg ...string) (begin_time, end_time time.Time)
begin_time = begin_time.AddDate(0, 0, -begin_time.YearDay()+1).AddDate(-5, 0, 0)
end_time = begin_time.AddDate(10, 0, 0)
}
m.Logs(mdb.SELECT, "begin_time", begin_time, "end_time", end_time)
m.Logs(mdb.SELECT, BEGIN_TIME, begin_time, END_TIME, end_time)
return begin_time, end_time
}
func _plan_list(m *ice.Message, begin_time, end_time string) {
@ -61,22 +61,21 @@ func init() {
ctx.RUN: {Hand: func(m *ice.Message, arg ...string) {
if m.RenameOption(TASK_POD, ice.POD); ctx.PodCmd(m, m.PrefixKey(), ctx.RUN, arg) {
return
}
if cmd := m.CmdAppend(TASK, kit.Slice(arg, 0, 2), ctx.INDEX); cmd != "" {
} else if cmd := m.CmdAppend(TASK, kit.Slice(arg, 0, 2), ctx.INDEX); cmd != "" {
m.Cmdy(cmd, arg[2:])
} else if aaa.Right(m, arg) {
m.Cmdy(arg)
}
}},
web.DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) {
kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.SERVER, web.WORKER), func() { m.PushButton(kit.Dict(m.CommandKey(), "计划")) })
kit.Switch(m.Option(mdb.TYPE), kit.Simple(web.WORKER, web.SERVER), func() { m.PushButton(kit.Dict(m.CommandKey(), "计划")) })
}},
}, aaa.RoleAction(), TASK), Hand: func(m *ice.Message, arg ...string) {
}, aaa.RoleAction(), ctx.ConfAction(mdb.TOOLS, "todo,task,epic"), 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...)
ctx.DisplayLocal(m, "")
ctx.Toolkit(m, TODO, TASK, EPIC)
ctx.Toolkit(m, "")
}},
})
}

View File

@ -1 +0,0 @@
chapter "plan"

View File

@ -4,7 +4,6 @@ import (
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
@ -53,6 +52,7 @@ const (
const (
BEGIN_TIME = "begin_time"
CLOSE_TIME = "close_time"
END_TIME = "end_time"
STATUS = "status"
LEVEL = "level"
@ -66,34 +66,17 @@ const TASK = "task"
func init() {
Index.MergeCommands(ice.Commands{
TASK: {Name: "task zone id auto insert", Help: "任务", Actions: ice.MergeActions(ice.Actions{
TASK: {Help: "任务", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
if space := m.Option(web.SPACE); space != "" && arg[0] != web.SPACE {
m.Options(web.SPACE, "").Cmdy(web.SPACE, space, TASK, mdb.INPUTS, arg)
return
}
switch arg[0] = strings.TrimPrefix(arg[0], "extra."); arg[0] {
case web.SPACE:
m.Cmd(web.SPACE, func(value ice.Maps) {
if kit.IsIn(value[mdb.TYPE], web.WORKER, web.SERVER) {
m.Push(arg[0], value[mdb.NAME])
}
})
switch mdb.ZoneInputs(m, arg); strings.TrimPrefix(arg[0], "extra.") {
case mdb.STATUS:
m.Push(arg[0], PREPARE, PROCESS, CANCEL, FINISH)
case LEVEL, SCORE:
m.Push(arg[0], "1", "2", "3", "4", "5")
case mdb.TYPE:
m.Push(arg[0], ONCE, STEP, WEEK)
case ctx.INDEX, ctx.ARGS:
m.Option(ctx.INDEX, m.Option("extra.index"))
mdb.ZoneInputs(m, arg)
default:
mdb.ZoneInputs(m, arg)
}
if arg[0] == mdb.ZONE {
m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE)))
}
kit.If(arg[0] == mdb.ZONE, func() { m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE))) })
}},
mdb.INSERT: {Name: "insert space zone* type=once,step,week name* text begin_time@date close_time@date", Hand: func(m *ice.Message, arg ...string) {
if space, arg := arg[1], arg[2:]; space != "" {
@ -106,7 +89,7 @@ func init() {
CANCEL: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, CANCEL) }},
BEGIN: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, PROCESS) }},
END: {Hand: func(m *ice.Message, arg ...string) { _task_modify(m, STATUS, FINISH) }},
}, mdb.ImportantZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ExportZoneAction(mdb.FIELDS, "begin_time,close_time,id,status,level,score,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) > 0 && arg[0] != "" {
status := map[string]int{}
m.Table(func(value ice.Maps) { m.PushButton(_task_action(m, value[STATUS])) })

View File

@ -1,6 +0,0 @@
team.shy
team.go
plan.go
task.go
todo.go
epic.go

View File

@ -12,13 +12,13 @@ const TODO = "todo"
func init() {
Index.MergeCommands(ice.Commands{
TODO: {Name: "todo hash list create", Help: "待办", Actions: ice.MergeActions(ice.Actions{
TODO: {Help: "待办", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.HashInputs(m, arg).Cmdy(TASK, mdb.INPUTS, arg) }},
cli.START: {Name: "start type=once,step,week", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(TASK, mdb.INSERT, m.OptionSimple("zone,type,name,text"))
mdb.HashRemove(m, m.OptionSimple(mdb.HASH))
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,zone,name,text")), Hand: func(m *ice.Message, arg ...string) {
}, mdb.ExportHashAction(mdb.FIELD, "time,hash,zone,name,text")), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).PushAction(cli.START, mdb.REMOVE)
web.PushPodCmd(m, "", arg...)
ctx.DisplayTableCard(m)

View File

@ -218,7 +218,7 @@ func (c *Context) _action(m *Message, cmd *Command, key string, sub string, h *A
}
}
kit.If(order && i < len(arg), func() { m.Option(name, arg[i]) })
if m.Warn(m.OptionDefault(name, kit.Format(kit.Value(v, VALUE))) == "" && kit.Value(v, "need") == "must", ErrNotValid, name) {
if m.Warn(m.OptionDefault(name, kit.Format(kit.Value(v, VALUE))) == "" && kit.Value(v, "need") == "must", ErrNotValid, name, key, sub) {
return m
}
}