1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 09:34:05 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-08-17 05:18:30 +08:00
parent 5d485bb0dd
commit 9d388114be
17 changed files with 78 additions and 106 deletions

View File

@ -75,7 +75,7 @@ func SessCreate(m *ice.Message, username string) string {
return m.Option(ice.MSG_SESSID, m.Cmdx(SESS, mdb.CREATE, username)) return m.Option(ice.MSG_SESSID, m.Cmdx(SESS, mdb.CREATE, username))
} }
func SessCheck(m *ice.Message, sessid string) bool { func SessCheck(m *ice.Message, sessid string) bool {
return m.Cmdy(SESS, CHECK, sessid).Option(ice.MSG_USERNAME) != "" return sessid != "" && m.Cmdy(SESS, CHECK, sessid).Option(ice.MSG_USERNAME) != ""
} }
func UserLogout(m *ice.Message) { func UserLogout(m *ice.Message) {
m.Cmd(SESS, mdb.REMOVE, kit.Dict(mdb.HASH, m.Option(ice.MSG_SESSID))) m.Cmd(SESS, mdb.REMOVE, kit.Dict(mdb.HASH, m.Option(ice.MSG_SESSID)))

View File

@ -100,6 +100,9 @@ func UserInfo(m *ice.Message, name ice.Any, key, meta string) (value string) {
return return
} }
func UserRole(m *ice.Message, username ice.Any) (role string) { func UserRole(m *ice.Message, username ice.Any) (role string) {
if username == "" {
return VOID
}
if role = VOID; username == ice.Info.UserName { if role = VOID; username == ice.Info.UserName {
return ROOT return ROOT
} }

View File

@ -124,7 +124,7 @@ func CmdAction(args ...ice.Any) ice.Actions {
m.Cmdy(CONFIG, arg[0]) m.Cmdy(CONFIG, arg[0])
return return
} }
if aaa.Right(m, arg) && !PodCmd(m, arg) { if !PodCmd(m, arg) && aaa.Right(m, arg) {
m.Cmdy(arg) m.Cmdy(arg)
} }
}}, }},

View File

@ -192,6 +192,9 @@ func ZoneRemove(m *ice.Message, arg ...Any) {
} }
func ZoneInsert(m *ice.Message, arg ...Any) { func ZoneInsert(m *ice.Message, arg ...Any) {
args := kit.Simple(arg...) args := kit.Simple(arg...)
if len(args) == 0 {
args = m.OptionSimple(ZoneShort(m), m.Config(FIELD))
}
m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, args[1], ZoneArgs(m, args[2:])) m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, args[1], ZoneArgs(m, args[2:]))
} }
func ZoneModify(m *ice.Message, arg ...Any) { func ZoneModify(m *ice.Message, arg ...Any) {

View File

@ -174,6 +174,9 @@ func init() {
if r.Method != http.MethodGet { if r.Method != http.MethodGet {
return false return false
} }
if !strings.HasPrefix(r.Header.Get(web.UserAgent), "Mozilla") {
return false
}
if strings.HasPrefix(r.URL.Path, CHAT_WEBSITE) { if strings.HasPrefix(r.URL.Path, CHAT_WEBSITE) {
_website_render(m, w, r, kit.Ext(r.URL.Path), m.Cmdx(nfs.CAT, strings.Replace(r.URL.Path, CHAT_WEBSITE, SRC_WEBSITE, 1)), path.Base(r.URL.Path)) _website_render(m, w, r, kit.Ext(r.URL.Path), m.Cmdx(nfs.CAT, strings.Replace(r.URL.Path, CHAT_WEBSITE, SRC_WEBSITE, 1)), path.Base(r.URL.Path))
return true return true

View File

@ -6,21 +6,16 @@ import (
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/core/code"
kit "shylinux.com/x/toolkits"
) )
const BASH = "bash" const BASH = "bash"
var Index = &ice.Context{Name: BASH, Help: "命令行", Configs: ice.Configs{ var Index = &ice.Context{Name: BASH, Help: "命令行", Commands: ice.Commands{
BASH: {Name: BASH, Help: "命令行", Value: kit.Data(
nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/bash/5.1_1/bash-5.1.tar.gz",
)},
}, Commands: ice.Commands{
BASH: {Name: "bash path auto order build download", Help: "命令行", Actions: ice.MergeActions(ice.Actions{ BASH: {Name: "bash path auto order build download", Help: "命令行", Actions: ice.MergeActions(ice.Actions{
cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin") m.Cmdy(code.INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin")
}}, }},
}, code.InstallAction()), Hand: func(m *ice.Message, arg ...string) { }, code.InstallAction(nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/bash/5.1_1/bash-5.1.tar.gz")), Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg) m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg)
}}, }},
}} }}

View File

@ -28,9 +28,11 @@ cd ./_install
` `
chapter "应用" chapter "应用"
field "文件夹" web.chat.files
field "命令行" web.code.bash.bash
field "会话流" web.code.bash.sess field "会话流" web.code.bash.sess
field "同步流" web.code.bash.sync field "同步流" web.code.bash.sync
field "收藏夹" web.code.bash.favor field "收藏夹" web.code.bash.favor
field "回收站" web.code.bash.trash field "回收站" web.code.bash.trash
field "文件夹" web.chat.files field "回收站" web.code.bash.grant

View File

@ -5,7 +5,6 @@ import (
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/chat"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -13,16 +12,16 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { "/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 || arg[0] == "" { if len(arg) == 0 || arg[0] == "" {
m.Cmdy(chat.FILES).Table() m.Cmdy("web.chat.files").Table()
return // 文件列表 return // 文件列表
} }
// 下载文件 // 下载文件
m.Cmdy(web.CACHE, m.Cmd(chat.FILES, arg[0]).Append(mdb.DATA)) m.Cmdy(web.CACHE, m.Cmd("web.chat.files", arg[0]).Append(mdb.DATA))
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(nfs.FILE) == ""), m.Append(mdb.TEXT)) m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(nfs.FILE) == ""), m.Append(mdb.TEXT))
}}, }},
"/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { "/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
msg := m.Cmd(chat.FILES, web.UPLOAD) // 上传文件 msg := m.Cmd("web.chat.files", web.UPLOAD) // 上传文件
for _, k := range []string{mdb.DATA, mdb.TIME, mdb.TYPE, mdb.NAME, nfs.SIZE} { for _, k := range []string{mdb.DATA, mdb.TIME, mdb.TYPE, mdb.NAME, nfs.SIZE} {
m.Echo("%s: %s\n", k, msg.Append(k)) m.Echo("%s: %s\n", k, msg.Append(k))
} }

View File

@ -21,9 +21,7 @@ func init() {
} }
}) })
}}, }},
}, Hand: func(m *ice.Message, arg ...string) { }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(FAVOR).Table() }},
m.Cmdy(FAVOR).Table()
}},
FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加"}, mdb.INSERT: {Name: "insert zone=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加"},
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {

View File

@ -3,32 +3,26 @@ package bash
import ( import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits"
) )
const GRANT = "grant" const GRANT = "grant"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"grant": {Name: "grant hash auto", Help: "授权", Actions: ice.MergeActions(ice.Actions{ GRANT: {Name: "grant hash auto", Help: "授权", Actions: ice.MergeActions(ice.Actions{
"confirm": {Name: "confirm", Help: "同意", Hand: func(m *ice.Message, arg ...string) { "confirm": {Name: "confirm", Help: "同意", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SESS, mdb.MODIFY, GRANT, m.Option(ice.MSG_USERNAME), ice.Option{mdb.HASH, m.Option("hash")}) m.Cmd(SESS, mdb.MODIFY, GRANT, m.Option(ice.MSG_USERNAME))
}}, }},
"revert": {Name: "confirm", Help: "撤销", Hand: func(m *ice.Message, arg ...string) { "revert": {Name: "revert", Help: "撤销", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SESS, mdb.MODIFY, GRANT, "", ice.Option{mdb.HASH, m.Option("hash")}) m.Cmd(SESS, mdb.MODIFY, GRANT, "")
}},
"remove": {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SESS, mdb.REMOVE, mdb.HASH, m.Option(mdb.HASH))
}}, }},
}, mdb.HashAction()), Hand: func(m *ice.Message, arg ...string) { }, mdb.HashAction()), Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(SESS, arg); len(arg) > 0 && m.Append("grant") == "" { if m.Cmdy(SESS, arg); len(arg) > 0 && m.Append(GRANT) == "" {
m.Process("_confirm", "授权设备") m.ProcessConfirm("授权设备")
} }
m.Tables(func(value ice.Maps) { m.Tables(func(value ice.Maps) {
if value["grant"] == "" { m.PushButton(kit.Select("revert", "confirm", value[GRANT] == ""), mdb.REMOVE)
m.PushButton("confirm", mdb.REMOVE)
} else {
m.PushButton("revert", mdb.REMOVE)
}
}) })
}}, }},
}) })

View File

@ -13,12 +13,10 @@ import (
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
func _run_action(m *ice.Message, cmd *ice.Command, code string, arg ...string) { func _run_action(m *ice.Message, cmd *ice.Command, script string, arg ...string) {
m.Set(ice.MSG_RESULT) m.SetResult().Echo("#/bin/bash\n")
m.Echo("#/bin/bash\n")
list := []string{} list, args := []string{}, []string{}
args := []string{}
kit.Fetch(cmd.Meta["_trans"], func(k string, v string) { kit.Fetch(cmd.Meta["_trans"], func(k string, v string) {
list = append(list, k) list = append(list, k)
args = append(args, kit.Format(` %s)`, k)) args = append(args, kit.Format(` %s)`, k))
@ -39,6 +37,7 @@ ish_sys_dev_run_source() {
done done
} }
`, kit.Join(list, ice.SP), arg[0], kit.Join(args, ice.NL)) `, kit.Join(list, ice.SP), arg[0], kit.Join(args, ice.NL))
m.Echo(` m.Echo(`
ish_sys_dev_run_action() { ish_sys_dev_run_action() {
select action in %s; do select action in %s; do
@ -52,48 +51,41 @@ ish_sys_dev_run_action() {
} }
`, kit.Join(list, ice.SP), arg[0], kit.Join(args, ice.NL)) `, kit.Join(list, ice.SP), arg[0], kit.Join(args, ice.NL))
m.Echo(ice.NL) m.Echo(`
m.Echo(`ish_sys_dev_run_command() { ish_sys_dev_run_command() {
ish_sys_dev_run %s "$@" ish_sys_dev_run %s "$@"
} }
`, arg[0]) `, arg[0])
m.Echo(ice.NL)
if code == "" { m.Echo(kit.Select("cat $1", script))
m.Echo("cat $1")
} else {
m.Echo(code)
}
m.Echo(ice.NL)
m.Debug(m.Result())
} }
const RUN = "run" const RUN = "run"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"/run/": {Name: "/run/", Help: "执行", Actions: ice.MergeActions(ice.Actions{ "/run/": {Name: "/run/", Help: "执行", Actions: ice.Actions{
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Search(arg[0], func(_ *ice.Context, s *ice.Context, key string, cmd *ice.Command) { m.Search(arg[0], func(_ *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
if p := strings.ReplaceAll(kit.Select("/app/cat.sh", cmd.Meta["display"]), ".js", ".sh"); strings.HasPrefix(p, ice.PS+ice.REQUIRE) { if p := strings.ReplaceAll(kit.Select("/app/cat.sh", cmd.Meta[ctx.DISPLAY]), ".js", ".sh"); strings.HasPrefix(p, ice.PS+ice.REQUIRE) {
m.Cmdy(web.SPIDE, ice.DEV, web.SPIDE_RAW, p) m.Cmdy(web.SPIDE, ice.DEV, web.SPIDE_RAW, p)
} else { } else {
m.Cmdy(nfs.CAT, path.Join(ice.USR_INTSHELL, p)) m.Cmdy(nfs.CAT, path.Join(ice.USR_INTSHELL, p))
} }
if m.Result() == "" || m.Result(1) == ice.ErrNotFound { if m.IsErrNotFound() {
m.Set(ice.MSG_RESULT) m.SetResult()
} }
_run_action(m, cmd, m.Result(), arg...) _run_action(m, cmd, m.Result(), arg...)
}) })
}}, }},
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
if aaa.Right(m, arg) && !ctx.PodCmd(m, arg) { if !ctx.PodCmd(m, arg) && aaa.Right(m, arg) {
m.Cmdy(arg) m.Cmdy(arg)
} }
if m.Result() == "" { if m.Result() == "" {
m.Table() m.Table()
} }
}}, }},
}, ctx.CmdAction())}, }},
}) })
} }

View File

@ -42,6 +42,7 @@ func init() {
m.Option(ice.MSG_USERNAME, msg.Append(GRANT)) m.Option(ice.MSG_USERNAME, msg.Append(GRANT))
m.Option(ice.MSG_USERROLE, aaa.UserRole(m, msg.Append(GRANT))) m.Option(ice.MSG_USERROLE, aaa.UserRole(m, msg.Append(GRANT)))
m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME)) m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME))
m.Auth(aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME))
if arg[0] == "/run/" { if arg[0] == "/run/" {
return return
} }
@ -52,23 +53,20 @@ func init() {
}}, }},
"/sess": {Name: "/sess", Help: "会话", Actions: ice.Actions{ "/sess": {Name: "/sess", Help: "会话", Actions: ice.Actions{
aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) { aaa.LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGOUT, ice.Option{mdb.HASH, m.Option(SID)}) mdb.HashModify(m, mdb.HASH, m.Option(SID), mdb.STATUS, aaa.LOGOUT)
}}, }},
}, Hand: func(m *ice.Message, arg ...string) { }, Hand: func(m *ice.Message, arg ...string) {
if m.Option(SID) == "" { // 终端登录 if m.Option(SID) == "" { // 终端登录
m.Option(SID, m.Cmdx(SESS, mdb.CREATE, mdb.STATUS, aaa.LOGIN, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD))) m.Option(SID, mdb.HashCreate(m, mdb.STATUS, aaa.LOGIN, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, cli.PID, cli.PWD)))
} else { // 更新状态 } else { // 更新状态
m.Cmdy(SESS, mdb.MODIFY, mdb.STATUS, aaa.LOGIN, ice.Option{mdb.HASH, m.Option(SID)}) mdb.HashModify(m, mdb.HASH, m.Option(SID), mdb.STATUS, aaa.LOGIN)
}
m.Echo(m.Option(SID)) m.Echo(m.Option(SID))
}
}}, }},
SESS: {Name: "sess hash auto prunes", Help: "会话流", Actions: ice.MergeActions(ice.Actions{ SESS: {Name: "sess hash auto prunes", Help: "会话流", Actions: ice.MergeActions(ice.Actions{
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(m.Config(mdb.FIELD)) mdb.HashPrunesValue(m, mdb.STATUS, aaa.LOGOUT)
m.Cmdy(mdb.PRUNES, m.PrefixKey(), "", mdb.HASH, mdb.STATUS, aaa.LOGOUT)
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,status,username,hostname,pid,pwd,grant")), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...)
}}, }},
}, mdb.HashAction(mdb.FIELD, "time,hash,status,username,hostname,pid,pwd,grant"))},
}) })
} }

View File

@ -3,11 +3,11 @@ package bash
import ( import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web"
) )
const ( const (
@ -18,22 +18,21 @@ const TRASH = "trash"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"/trash": {Name: "/trash", Help: "回收", Actions: ice.Actions{
mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TRASH, mdb.INSERT, arg)
}},
}},
TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Actions: ice.MergeActions(ice.Actions{ TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert from to", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, nfs.SIZE, FROM, TO)) mdb.HashCreate(m, m.OptionSimple(aaa.USERNAME, tcp.HOSTNAME, nfs.SIZE, FROM, TO))
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option(TO)) if !m.Warn(m.Option(TO) == "", ice.ErrNotValid, TO) {
m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(mdb.HASH)) mdb.HashRemove(m, m.OptionSimple(mdb.HASH))
nfs.RemoveAll(m, m.Option(TO))
}
}}, }},
mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) { mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, "mv", m.Option(TO), m.Option(FROM)) if !m.Warn(m.Option(FROM) == "" && m.Option(TO) == "", ice.ErrNotValid, FROM, TO) {
m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(mdb.HASH)) nfs.Rename(m, m.Option(TO), m.Option(FROM))
mdb.HashRemove(m, m.OptionSimple(mdb.HASH))
}
}}, }},
mdb.PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
mdb.HashPrunes(m, func(value ice.Maps) bool { mdb.HashPrunes(m, func(value ice.Maps) bool {
@ -46,9 +45,8 @@ func init() {
ctx.ProcessCommand(m, nfs.CAT, []string{}, arg...) ctx.ProcessCommand(m, nfs.CAT, []string{}, arg...)
ctx.ProcessCommandOpt(m, arg, TO) ctx.ProcessCommandOpt(m, arg, TO)
}}, }},
}, mdb.HashAction(mdb.FIELD, "time,hash,username,hostname,size,from,to")), Hand: func(m *ice.Message, arg ...string) { }, mdb.HashAction(mdb.FIELD, "time,hash,username,hostname,size,from,to"), web.ApiAction("/trash")), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...) mdb.HashSelect(m, arg...).PushAction(nfs.CAT, mdb.REVERT, mdb.REMOVE)
m.PushAction(nfs.CAT, mdb.REVERT, mdb.REMOVE)
}}, }},
}) })
} }

View File

@ -17,9 +17,7 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"/favor": {Name: "/favor", Help: "收藏", Actions: ice.Actions{ "/favor": {Name: "/favor", Help: "收藏", Actions: ice.Actions{
mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) { mdb.SELECT: {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(FAVOR, func(value ice.Maps) { m.Cmd(FAVOR, func(value ice.Maps) { m.Echo(value[mdb.ZONE]).Echo(ice.NL) })
m.Echo(value[mdb.ZONE]).Echo(ice.NL)
})
}}, }},
mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(FAVOR, mdb.INSERT) m.Cmd(FAVOR, mdb.INSERT)
@ -29,6 +27,7 @@ func init() {
m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n", m.Echo("%v\n", m.Option(mdb.ZONE)).Echo("%v:%v:%v:(%v): %v\n",
value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT]) value[nfs.FILE], value[nfs.LINE], "1", value[mdb.NAME], value[mdb.TEXT])
}) })
m.Debug("waht %v", m.Result())
}}, }},
FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line", Help: "添加"}, mdb.INSERT: {Name: "insert zone=数据结构 type name=hi text=hello file line", Help: "添加"},
@ -36,9 +35,7 @@ func init() {
p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE)) p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE))
ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}, arg...) ctx.ProcessCommand(m, code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}, arg...)
}}, }},
}, mdb.ZoneAction( }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,file,line,pwd")), Hand: func(m *ice.Message, arg ...string) {
mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,file,line,pwd",
)), Hand: func(m *ice.Message, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 { if mdb.ZoneSelect(m, arg...); len(arg) == 0 {
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
} else { } else {

View File

@ -5,7 +5,6 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -15,15 +14,15 @@ const INPUT = "input"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
"/input": {Name: "/input", Help: "输入法", Hand: func(m *ice.Message, arg ...string) { "/input": {Name: "/input", Help: "输入法", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(TAGS, ctx.ACTION, INPUT, arg[0], m.Option("pre")); m.Length() > 0 { if m.Cmdy(TAGS, INPUT, arg[0], m.Option("pre")); m.Length() > 0 {
m.Cmd(m.PrefixKey(), mdb.INSERT, kit.SimpleKV("", "tags", arg[0], m.Result())) mdb.HashCreate(m, kit.SimpleKV("", TAGS, arg[0], m.Result()))
return // 代码补全 return // 代码补全
} }
if arg[0] == ice.PT { if arg[0] == ice.PT {
return return
} }
if m.Cmdy("web.code.input.wubi", ctx.ACTION, INPUT, arg[0]); m.Length() > 0 { if m.Cmdy("web.code.input.wubi", INPUT, arg[0]); m.Length() > 0 {
m.Cmd(m.PrefixKey(), mdb.INSERT, kit.SimpleKV("", "wubi", arg[0], m.Result())) mdb.HashCreate(m, kit.SimpleKV("", "wubi", arg[0], m.Result()))
return // 五笔输入 return // 五笔输入
} }
if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice") { if arg[0] = strings.TrimSpace(arg[0]); strings.HasPrefix(arg[0], "ice") {
@ -31,10 +30,10 @@ func init() {
if m.Cmdy(list[1:]); m.IsErrNotFound() { if m.Cmdy(list[1:]); m.IsErrNotFound() {
m.SetResult().Cmdy(cli.SYSTEM, list[1:]) m.SetResult().Cmdy(cli.SYSTEM, list[1:])
} }
if len(m.Resultv()) == 0 { if m.Result() == "" {
m.Table() m.Table()
} }
m.Cmd(m.PrefixKey(), mdb.INSERT, kit.SimpleKV("", "cmds", strings.TrimSpace(strings.Join(list[1:], ice.SP)), m.Result())) mdb.HashCreate(m, kit.SimpleKV("", "cmds", strings.TrimSpace(strings.Join(list[1:], ice.SP)), m.Result()))
return // 本地命令 return // 本地命令
} }
}}, }},

View File

@ -48,6 +48,10 @@ func init() {
TAGS: {Name: "tags zone id auto", Help: "索引", Actions: ice.MergeActions(ice.Actions{ TAGS: {Name: "tags zone id auto", Help: "索引", Actions: ice.MergeActions(ice.Actions{
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(index int, value ice.Map) { kit.Fetch(kit.UnMarshal(m.Option(mdb.TEXT)), func(index int, value ice.Map) {
if value == nil {
return
}
m.Debug("what %v", value)
m.Cmd(TAGS, mdb.INSERT, mdb.ZONE, value[mdb.ZONE], kit.Simple(value)) m.Cmd(TAGS, mdb.INSERT, mdb.ZONE, value[mdb.ZONE], kit.Simple(value))
}) })
m.ProcessRefresh300ms() m.ProcessRefresh300ms()

View File

@ -1,39 +1,26 @@
package vim package vim
import ( import (
"path"
"strings"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/core/code"
kit "shylinux.com/x/toolkits"
) )
func _vim_pkg(m *ice.Message, url string) string {
p := path.Join(m.Conf(code.INSTALL, kit.Keym(nfs.PATH)), path.Base(url))
return kit.Path(m.Conf(code.INSTALL, kit.Keym(nfs.PATH)), strings.Split(m.Cmdx(cli.SYSTEM, "sh", "-c", kit.Format("tar tf %s| head -n1", p)), "/")[0])
}
const VIM = "vim" const VIM = "vim"
var Index = &ice.Context{Name: VIM, Help: "编辑器", Configs: ice.Configs{ var Index = &ice.Context{Name: VIM, Help: "编辑器", Commands: ice.Commands{
VIM: {Name: VIM, Help: "编辑器", Value: kit.Data(
nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/vim/vim-8.2.2681.tar.gz",
)},
}, Commands: ice.Commands{
VIM: {Name: "vim path auto order build download", Help: "编辑器", Actions: ice.MergeActions(ice.Actions{ VIM: {Name: "vim path auto order build download", Help: "编辑器", Actions: ice.MergeActions(ice.Actions{
cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.INSTALL, cli.BUILD, _vim_pkg(m, m.Config(nfs.SOURCE)), "--enable-multibyte=yes", m.Cmdy(code.INSTALL, cli.BUILD, m.Config(nfs.SOURCE), "--enable-multibyte=yes",
"--enable-pythoninterp=yes", "--enable-luainterp=yes", "--enable-cscope=yes") "--enable-pythoninterp=yes", "--enable-luainterp=yes", "--enable-cscope=yes")
}}, }},
cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.INSTALL, cli.ORDER, _vim_pkg(m, m.Config(nfs.SOURCE)), "_install/bin") m.Cmdy(code.INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin")
}}, }},
}, code.InstallAction()), Hand: func(m *ice.Message, arg ...string) { }, code.InstallAction(nfs.SOURCE, "http://mirrors.tencent.com/macports/distfiles/vim/vim-8.2.2681.tar.gz")), Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.INSTALL, nfs.SOURCE, _vim_pkg(m, m.Config(nfs.SOURCE)), arg) m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg)
}}, }},
}} }}