forked from x/icebergs
add import&export
This commit is contained in:
parent
21f899b072
commit
cba3e395e5
@ -4,6 +4,10 @@ import (
|
|||||||
"github.com/shylinux/icebergs"
|
"github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
|
|
||||||
|
"bytes"
|
||||||
|
"encoding/csv"
|
||||||
|
"encoding/json"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,7 +20,6 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
|||||||
index := kit.Int(arg[2]) - kit.Int(meta["offset"]) - 1
|
index := kit.Int(arg[2]) - kit.Int(meta["offset"]) - 1
|
||||||
|
|
||||||
data := m.Confm(arg[0], arg[1]+".list."+kit.Format(index))
|
data := m.Confm(arg[0], arg[1]+".list."+kit.Format(index))
|
||||||
m.Log("what", "%v %v", arg[0], arg[1]+".list."+kit.Format(index))
|
|
||||||
for i := 3; i < len(arg)-1; i += 2 {
|
for i := 3; i < len(arg)-1; i += 2 {
|
||||||
kit.Value(data, arg[i], arg[i+1])
|
kit.Value(data, arg[i], arg[i+1])
|
||||||
}
|
}
|
||||||
@ -37,6 +40,75 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
ice.MDB_IMPORT: {Name: "import", Help: "导入数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
msg := m.Cmd(ice.WEB_STORY, "index", arg[3])
|
||||||
|
|
||||||
|
switch arg[2] {
|
||||||
|
case kit.MDB_DICT:
|
||||||
|
case kit.MDB_META:
|
||||||
|
case kit.MDB_LIST:
|
||||||
|
buf := bytes.NewBufferString(msg.Append("text"))
|
||||||
|
r := csv.NewReader(buf)
|
||||||
|
head, _ := r.Read()
|
||||||
|
|
||||||
|
for {
|
||||||
|
line, e := r.Read()
|
||||||
|
if e != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
data := kit.Dict()
|
||||||
|
for i, k := range head {
|
||||||
|
data[k] = line[i]
|
||||||
|
}
|
||||||
|
m.Grow(arg[0], arg[1], data)
|
||||||
|
m.Info("import %v", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
case kit.MDB_HASH:
|
||||||
|
data := map[string]interface{}{}
|
||||||
|
m.Assert(json.Unmarshal([]byte(msg.Append("text")), &data))
|
||||||
|
for k, v := range data {
|
||||||
|
m.Conf(arg[0], kit.Keys(arg[1], k), v)
|
||||||
|
m.Info("import %v", v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}},
|
||||||
|
ice.MDB_EXPORT: {Name: "export", Help: "导出数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
name := kit.Select(kit.Select(arg[0], arg[0]+":"+arg[1], arg[1] != ""), arg, 3)
|
||||||
|
|
||||||
|
switch arg[2] {
|
||||||
|
case kit.MDB_DICT:
|
||||||
|
case kit.MDB_META:
|
||||||
|
case kit.MDB_LIST:
|
||||||
|
buf := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||||
|
w := csv.NewWriter(buf)
|
||||||
|
head := []string{}
|
||||||
|
m.Confm(arg[0], arg[1], func(index int, value map[string]interface{}) {
|
||||||
|
if index == 0 {
|
||||||
|
// 输出表头
|
||||||
|
for k := range value {
|
||||||
|
head = append(head, k)
|
||||||
|
}
|
||||||
|
sort.Strings(head)
|
||||||
|
w.Write(head)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出数据
|
||||||
|
data := []string{}
|
||||||
|
for _, k := range head {
|
||||||
|
data = append(data, kit.Format(value[k]))
|
||||||
|
}
|
||||||
|
w.Write(data)
|
||||||
|
})
|
||||||
|
w.Flush()
|
||||||
|
|
||||||
|
m.Cmd(ice.WEB_STORY, "add", "csv", name, string(buf.Bytes()))
|
||||||
|
|
||||||
|
case kit.MDB_HASH:
|
||||||
|
m.Cmd(ice.WEB_STORY, "add", "json", name, kit.Formats(m.Confv(arg[0], arg[1])))
|
||||||
|
}
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
package web
|
package web
|
||||||
|
|
||||||
var share_template = map[string]interface{}{
|
import (
|
||||||
"shy/story": `{{}}`,
|
"github.com/shylinux/toolkits"
|
||||||
"shy/chain": `<!DOCTYPE html>
|
)
|
||||||
|
|
||||||
|
var share_template = kit.Dict(
|
||||||
|
"download", `<a href="/code/zsh?cmd=download&arg=%s" target="_blank">%s</a>`,
|
||||||
|
"share", `<a href="/share/%s" target="_blank">%s</a>`,
|
||||||
|
"shy/story", `{{.}}`,
|
||||||
|
"shy/chain", `<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<link rel="stylesheet" text="text/css" href="/style.css">
|
<link rel="stylesheet" text="text/css" href="/style.css">
|
||||||
@ -14,4 +20,4 @@ var share_template = map[string]interface{}{
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
</body>
|
</body>
|
||||||
`,
|
`,
|
||||||
}
|
)
|
||||||
|
294
base/web/web.go
294
base/web/web.go
@ -68,9 +68,7 @@ func (web *Frame) HandleWSS(m *ice.Message, safe bool, c *websocket.Conn) bool {
|
|||||||
if len(target) == 0 {
|
if len(target) == 0 {
|
||||||
// 本地执行
|
// 本地执行
|
||||||
if msg.Optionv(ice.MSG_HANDLE, "true"); !msg.Warn(!safe, "no right") {
|
if msg.Optionv(ice.MSG_HANDLE, "true"); !msg.Warn(!safe, "no right") {
|
||||||
if msg = msg.Cmd(); msg.Detail() == "exit" {
|
msg = msg.Cmd()
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
kit.Revert(source)
|
kit.Revert(source)
|
||||||
source, target = []string{source[0]}, source[1:]
|
source, target = []string{source[0]}, source[1:]
|
||||||
@ -102,6 +100,9 @@ func (web *Frame) HandleWSS(m *ice.Message, safe bool, c *websocket.Conn) bool {
|
|||||||
msg.Optionv(ice.MSG_TARGET, target)
|
msg.Optionv(ice.MSG_TARGET, target)
|
||||||
socket.WriteMessage(t, []byte(msg.Format("meta")))
|
socket.WriteMessage(t, []byte(msg.Format("meta")))
|
||||||
msg.Info("send %v %v->%v %v", t, source, target, msg.Format("meta"))
|
msg.Info("send %v %v->%v %v", t, source, target, msg.Format("meta"))
|
||||||
|
if msg.Detail() == "exit" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,18 +172,6 @@ func (web *Frame) HandleCmd(m *ice.Message, key string, cmd *ice.Command) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 请求参数
|
|
||||||
r.ParseMultipartForm(4096)
|
|
||||||
if r.ParseForm(); len(r.PostForm) > 0 {
|
|
||||||
for k, v := range r.PostForm {
|
|
||||||
msg.Info("%s: %v", k, v)
|
|
||||||
}
|
|
||||||
msg.Info("")
|
|
||||||
}
|
|
||||||
for k, v := range r.Form {
|
|
||||||
msg.Optionv(k, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 请求数据
|
// 请求数据
|
||||||
switch r.Header.Get("Content-Type") {
|
switch r.Header.Get("Content-Type") {
|
||||||
case "application/json":
|
case "application/json":
|
||||||
@ -198,6 +187,19 @@ func (web *Frame) HandleCmd(m *ice.Message, key string, cmd *ice.Command) {
|
|||||||
msg.Optionv(k, v)
|
msg.Optionv(k, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
r.ParseMultipartForm(4096)
|
||||||
|
if r.ParseForm(); len(r.PostForm) > 0 {
|
||||||
|
for k, v := range r.PostForm {
|
||||||
|
msg.Info("%s: %v", k, v)
|
||||||
|
}
|
||||||
|
msg.Info("")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 请求参数
|
||||||
|
for k, v := range r.Form {
|
||||||
|
msg.Optionv(k, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 执行命令
|
// 执行命令
|
||||||
@ -300,13 +302,18 @@ func (web *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// TODO simple
|
||||||
|
m.Richs(ice.WEB_SPIDE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
|
client := value["client"].(map[string]interface{})
|
||||||
|
|
||||||
// 服务地址
|
// 服务地址
|
||||||
port := m.Cap(ice.CTX_STREAM, kit.Select(m.Conf(ice.WEB_SPIDE, ice.Meta("self", "port")), arg, 0))
|
port := m.Cap(ice.CTX_STREAM, client["hostname"])
|
||||||
m.Log("serve", "listen %s %v", port, m.Conf(ice.CLI_RUNTIME, "node"))
|
m.Log("serve", "listen %s %s %v", arg[0], port, m.Conf(ice.CLI_RUNTIME, "node"))
|
||||||
|
|
||||||
// 启动服务
|
// 启动服务
|
||||||
web.m, web.Server = m, &http.Server{Addr: port, Handler: web}
|
web.m, web.Server = m, &http.Server{Addr: port, Handler: web}
|
||||||
m.Log("serve", "listen %s", web.Server.ListenAndServe())
|
m.Log("serve", "listen %s", web.Server.ListenAndServe())
|
||||||
|
})
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
func (web *Frame) Close(m *ice.Message, arg ...string) bool {
|
func (web *Frame) Close(m *ice.Message, arg ...string) bool {
|
||||||
@ -316,7 +323,7 @@ func (web *Frame) Close(m *ice.Message, arg ...string) bool {
|
|||||||
var Index = &ice.Context{Name: "web", Help: "网页模块",
|
var Index = &ice.Context{Name: "web", Help: "网页模块",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Value: kit.Data("self.port", ice.WEB_PORT, kit.MDB_SHORT, "name")},
|
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||||
ice.WEB_SERVE: {Name: "serve", Help: "服务器", Value: kit.Data(
|
ice.WEB_SERVE: {Name: "serve", Help: "服务器", Value: kit.Data(
|
||||||
"static", map[string]interface{}{"/": "usr/volcanos/",
|
"static", map[string]interface{}{"/": "usr/volcanos/",
|
||||||
"/static/volcanos/": "usr/volcanos/",
|
"/static/volcanos/": "usr/volcanos/",
|
||||||
@ -326,35 +333,26 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
}},
|
}},
|
||||||
"logheaders", "false",
|
"logheaders", "false",
|
||||||
)},
|
)},
|
||||||
ice.WEB_SPACE: {Name: "space", Help: "空间站", Value: kit.Data(
|
ice.WEB_SPACE: {Name: "space", Help: "空间站", Value: kit.Data(kit.MDB_SHORT, "name",
|
||||||
"redial.a", 3000, "redial.b", 1000, "redial.c", 10,
|
"redial.a", 3000, "redial.b", 1000, "redial.c", 10,
|
||||||
"buffer.r", 4096, "buffer.w", 4096,
|
"buffer.r", 4096, "buffer.w", 4096,
|
||||||
kit.MDB_SHORT, "name",
|
|
||||||
)},
|
)},
|
||||||
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Value: kit.Data(
|
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Value: kit.Data("path", "usr/local/work",
|
||||||
"path", "usr/local/work",
|
"cmd", []interface{}{ice.CLI_SYSTEM, "sh", "ice.sh", "start", ice.WEB_SPACE, "connect"},
|
||||||
"cmd", []interface{}{"cli.system", "sh", "ice.sh", "start", "web.space", "connect"},
|
|
||||||
)},
|
)},
|
||||||
ice.WEB_FAVOR: {Name: "favor", Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
ice.WEB_FAVOR: {Name: "favor", Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
||||||
ice.WEB_CACHE: {Name: "cache", Help: "缓存池", Value: kit.Data(
|
ice.WEB_CACHE: {Name: "cache", Help: "缓存池", Value: kit.Data(kit.MDB_SHORT, "text", "path", "var/file", "store", "var/data", "limit", "30", "least", "10")},
|
||||||
kit.MDB_SHORT, "text", "path", "var/file",
|
ice.WEB_STORY: {Name: "story", Help: "故事会", Value: kit.Dict(kit.MDB_META, kit.Dict(kit.MDB_SHORT, "data"), "head", kit.Data(kit.MDB_SHORT, "story"))},
|
||||||
"store", "var/data", "limit", "30", "least", "10",
|
ice.WEB_SHARE: {Name: "share", Help: "共享链", Value: kit.Data("template", share_template)},
|
||||||
)},
|
|
||||||
ice.WEB_STORY: {Name: "story", Help: "故事会", Value: kit.Dict(
|
|
||||||
kit.MDB_META, kit.Dict(kit.MDB_SHORT, "data",
|
|
||||||
"download", `<a href="/code/zsh?cmd=download&arg=%s" target="_blank">%s</a>`),
|
|
||||||
"head", kit.Data(kit.MDB_SHORT, "story"),
|
|
||||||
)},
|
|
||||||
ice.WEB_SHARE: {Name: "share", Help: "共享链", Value: kit.Data(
|
|
||||||
"href", `<a href="/share/%s" target="_blank">%s</a>`,
|
|
||||||
"template", share_template,
|
|
||||||
)},
|
|
||||||
ice.WEB_ROUTE: {Name: "route", Help: "路由表", Value: kit.Data()},
|
ice.WEB_ROUTE: {Name: "route", Help: "路由表", Value: kit.Data()},
|
||||||
ice.WEB_PROXY: {Name: "proxy", Help: "代理商", Value: kit.Data()},
|
ice.WEB_PROXY: {Name: "proxy", Help: "代理商", Value: kit.Data()},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Cmd(ice.WEB_SPIDE, "add", "self", "http://:9020")
|
||||||
|
}},
|
||||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Done() }},
|
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Done() }},
|
||||||
|
|
||||||
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 爬虫列表
|
// 爬虫列表
|
||||||
@ -433,7 +431,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
"name", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
"name", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
||||||
"user", m.Conf(ice.CLI_RUNTIME, "boot.username"),
|
"user", m.Conf(ice.CLI_RUNTIME, "boot.username"),
|
||||||
))
|
))
|
||||||
m.Target().Start(m, arg...)
|
m.Target().Start(m, kit.Select("self", arg, 0))
|
||||||
}},
|
}},
|
||||||
ice.WEB_SPACE: {Name: "space", Help: "空间站", Meta: kit.Dict("exports", []string{"pod", "name"}), List: kit.List(
|
ice.WEB_SPACE: {Name: "space", Help: "空间站", Meta: kit.Dict("exports", []string{"pod", "name"}), List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "node",
|
kit.MDB_INPUT, "text", "name", "node",
|
||||||
@ -455,9 +453,11 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
node := m.Conf(ice.CLI_RUNTIME, "node.type")
|
node := m.Conf(ice.CLI_RUNTIME, "node.type")
|
||||||
name := kit.Select(m.Conf(ice.CLI_RUNTIME, "boot.pathname"), m.Conf(ice.CLI_RUNTIME, "boot.hostname"), node == kit.MIME_SERVER)
|
name := kit.Select(m.Conf(ice.CLI_RUNTIME, "boot.pathname"), m.Conf(ice.CLI_RUNTIME, "boot.hostname"), node == kit.MIME_SERVER)
|
||||||
user := m.Conf(ice.CLI_RUNTIME, "boot.username")
|
user := m.Conf(ice.CLI_RUNTIME, "boot.username")
|
||||||
host := kit.Select(m.Conf(ice.WEB_SPIDE, "meta.self.port"), arg, 1)
|
|
||||||
|
|
||||||
if u, e := url.Parse(kit.MergeURL("ws://"+host+kit.Select("/space/", arg, 2), "node", node, "name", name, "user", user)); m.Assert(e) {
|
m.Richs(ice.WEB_SPIDE, nil, kit.Select("self", arg, 1), func(key string, value map[string]interface{}) {
|
||||||
|
host := kit.Format(kit.Value(value, "client.hostname"))
|
||||||
|
|
||||||
|
if u, e := url.Parse(kit.MergeURL("ws://"+host+"/space/", "node", node, "name", name, "user", user)); m.Assert(e) {
|
||||||
for i := 0; i < m.Confi(ice.WEB_SPACE, "meta.redial.c"); i++ {
|
for i := 0; i < m.Confi(ice.WEB_SPACE, "meta.redial.c"); i++ {
|
||||||
if s, e := net.Dial("tcp", host); !m.Warn(e != nil, "%s", e) {
|
if s, e := net.Dial("tcp", host); !m.Warn(e != nil, "%s", e) {
|
||||||
if s, _, e := websocket.NewClient(s, u, nil, m.Confi(ice.WEB_SPACE, "meta.buffer.r"), m.Confi(ice.WEB_SPACE, "meta.buffer.w")); !m.Warn(e != nil, "%s", e) {
|
if s, _, e := websocket.NewClient(s, u, nil, m.Confi(ice.WEB_SPACE, "meta.buffer.r"), m.Confi(ice.WEB_SPACE, "meta.buffer.w")); !m.Warn(e != nil, "%s", e) {
|
||||||
@ -475,6 +475,8 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
time.Sleep(sleep)
|
time.Sleep(sleep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// 本地命令
|
// 本地命令
|
||||||
if arg[0] == "" || arg[0] == m.Conf(ice.CLI_RUNTIME, "node.name") {
|
if arg[0] == "" || arg[0] == m.Conf(ice.CLI_RUNTIME, "node.name") {
|
||||||
@ -505,8 +507,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
}) == nil, "not found %s", arg[0])
|
}) == nil, "not found %s", arg[0])
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Meta: kit.Dict(
|
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Meta: kit.Dict("exports", []string{"you", "name"},
|
||||||
"exports", []interface{}{"you", "name"},
|
|
||||||
"detail", []interface{}{"启动", "停止"},
|
"detail", []interface{}{"启动", "停止"},
|
||||||
), List: kit.List(
|
), List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "value", "", "name", "name",
|
kit.MDB_INPUT, "text", "value", "", "name", "name",
|
||||||
@ -516,9 +517,10 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
switch arg[1] {
|
switch arg[1] {
|
||||||
case "启动":
|
case "启动":
|
||||||
case "停止":
|
case "停止", "stop":
|
||||||
m.Cmd(ice.WEB_SPACE, arg[0], "exit", "1")
|
m.Cmd(ice.WEB_SPACE, arg[0], "exit", "1")
|
||||||
m.Cmd(ice.GDB_EVENT, "action", "miss.stop", arg[0])
|
time.Sleep(time.Second * 3)
|
||||||
|
m.Cmd(ice.GDB_EVENT, "action", ice.DREAM_CLOSE, arg[0])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -539,8 +541,9 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
// 启动任务
|
// 启动任务
|
||||||
m.Option("cmd_dir", p)
|
m.Option("cmd_dir", p)
|
||||||
m.Option("cmd_type", "daemon")
|
m.Option("cmd_type", "daemon")
|
||||||
m.Cmd(ice.GDB_EVENT, "action", "miss.start", arg[0])
|
m.Cmd(m.Confv(ice.WEB_DREAM, "meta.cmd"), "self", arg[0])
|
||||||
m.Cmd(m.Confv(ice.WEB_DREAM, "meta.cmd"))
|
time.Sleep(time.Second * 3)
|
||||||
|
m.Cmd(ice.GDB_EVENT, "action", ice.DREAM_START, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,15 +553,56 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
m.Push("status", kit.Select("start", "stop", m.Richs(ice.WEB_SPACE, nil, value["name"], nil) == nil))
|
m.Push("status", kit.Select("start", "stop", m.Richs(ice.WEB_SPACE, nil, value["name"], nil) == nil))
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
ice.WEB_FAVOR: {Name: "favor", Help: "收藏夹", Meta: kit.Dict(
|
ice.WEB_FAVOR: {Name: "favor", Help: "收藏夹", Meta: kit.Dict("remote", "you", "exports", []string{"hot", "favor"}, "detail", []string{"执行", "编辑", "收录", "下载"}), List: kit.List(
|
||||||
"remote", "you",
|
|
||||||
"exports", []string{"hot", "favor"},
|
|
||||||
), List: kit.List(
|
|
||||||
kit.MDB_INPUT, "text", "name", "hot", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "hot", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
|
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
|
||||||
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
if len(arg) > 3 {
|
||||||
|
id := kit.Select(arg[0], kit.Select(m.Option("id"), arg[3], arg[2] == "id"))
|
||||||
|
switch arg[1] {
|
||||||
|
case "modify":
|
||||||
|
// 编辑收藏
|
||||||
|
m.Richs(ice.WEB_FAVOR, nil, m.Option("hot"), func(key string, value map[string]interface{}) {
|
||||||
|
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "id", id, func(index int, value map[string]interface{}) {
|
||||||
|
m.Info("modify favor: %s index: %d value: %v->%v", key, index, value[arg[2]], arg[3])
|
||||||
|
kit.Value(value, arg[2], arg[3])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
arg = []string{m.Option("hot")}
|
||||||
|
case "收录":
|
||||||
|
m.Richs(ice.WEB_FAVOR, nil, m.Option("hot"), func(key string, value map[string]interface{}) {
|
||||||
|
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "id", id, func(index int, value map[string]interface{}) {
|
||||||
|
m.Cmd(ice.WEB_STORY, "add", value["type"], value["name"], value["text"])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
arg = []string{m.Option("hot")}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(arg) > 0 {
|
||||||
|
switch arg[0] {
|
||||||
|
case "import":
|
||||||
|
if len(arg) == 2 {
|
||||||
|
m.Cmdy(ice.MDB_IMPORT, ice.WEB_FAVOR, kit.MDB_HASH, kit.MDB_HASH, arg[1])
|
||||||
|
} else {
|
||||||
|
m.Richs(ice.WEB_FAVOR, nil, arg[2], func(key string, value map[string]interface{}) {
|
||||||
|
m.Cmdy(ice.MDB_IMPORT, ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), kit.MDB_LIST, arg[1])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return
|
||||||
|
case "export":
|
||||||
|
if len(arg) == 1 {
|
||||||
|
m.Cmdy(ice.MDB_EXPORT, ice.WEB_FAVOR, kit.MDB_HASH, kit.MDB_HASH, "favor.json")
|
||||||
|
} else {
|
||||||
|
m.Richs(ice.WEB_FAVOR, nil, arg[1], func(key string, value map[string]interface{}) {
|
||||||
|
m.Cmdy(ice.MDB_EXPORT, ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key, kit.MDB_LIST), kit.MDB_LIST, arg[1]+".csv")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 收藏门类
|
// 收藏门类
|
||||||
m.Richs(ice.WEB_FAVOR, nil, "", func(key string, value map[string]interface{}) {
|
m.Richs(ice.WEB_FAVOR, nil, "", func(key string, value map[string]interface{}) {
|
||||||
@ -569,20 +613,6 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(arg) > 1 {
|
|
||||||
switch arg[1] {
|
|
||||||
case "modify":
|
|
||||||
// 编辑收藏
|
|
||||||
m.Richs(ice.WEB_FAVOR, nil, m.Option("hot"), func(key string, value map[string]interface{}) {
|
|
||||||
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "id", m.Option("id"), func(index int, value map[string]interface{}) {
|
|
||||||
m.Info("modify favor: %s index: %d value: %v->%v", key, index, value[arg[2]], arg[3])
|
|
||||||
kit.Value(value, arg[2], arg[3])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建收藏
|
// 创建收藏
|
||||||
favor := ""
|
favor := ""
|
||||||
if m.Richs(ice.WEB_FAVOR, nil, arg[0], func(key string, value map[string]interface{}) {
|
if m.Richs(ice.WEB_FAVOR, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
@ -595,14 +625,8 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
// 收藏列表
|
// 收藏列表
|
||||||
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), "", "", func(index int, value map[string]interface{}) {
|
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), "", "", func(index int, value map[string]interface{}) {
|
||||||
m.Push(kit.Format(index), value, []string{kit.MDB_TIME, kit.MDB_ID, kit.MDB_TYPE, kit.MDB_NAME})
|
m.Push(kit.Format(index), value, []string{kit.MDB_TIME, kit.MDB_ID, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
|
||||||
switch kit.Format(value[kit.MDB_TYPE]) {
|
m.Push("link", kit.Format(m.Conf(ice.WEB_SHARE, "meta.template.download"), value["data"], kit.Short(value["data"])))
|
||||||
case kit.MIME_STORY:
|
|
||||||
m.Push(kit.MDB_TEXT, kit.Format(m.Conf(ice.WEB_STORY, kit.Keys(kit.MDB_META, "download")),
|
|
||||||
value[kit.MDB_TEXT], value[kit.MDB_TEXT]))
|
|
||||||
default:
|
|
||||||
m.Push(kit.MDB_TEXT, value[kit.MDB_TEXT])
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -622,17 +646,24 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加收藏
|
// 添加收藏
|
||||||
|
extra := kit.Dict()
|
||||||
|
for i := 4; i < len(arg)-1; i += 2 {
|
||||||
|
kit.Value(extra, arg[i], arg[i+1])
|
||||||
|
}
|
||||||
index := m.Grow(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), kit.Dict(
|
index := m.Grow(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), kit.Dict(
|
||||||
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
||||||
|
"extra", extra,
|
||||||
))
|
))
|
||||||
m.Info("create favor: %s index: %d name: %s", favor, index, arg[2])
|
m.Info("create favor: %s index: %d name: %s", favor, index, arg[2])
|
||||||
m.Echo("%d", index)
|
m.Echo("%d", index)
|
||||||
}},
|
}},
|
||||||
ice.WEB_CACHE: {Name: "cache", Help: "缓存池", Meta: kit.Dict("remote", "you"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.WEB_CACHE: {Name: "cache", Help: "缓存池", Meta: kit.Dict("remote", "you"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 缓存列表
|
// 记录列表
|
||||||
m.Richs(ice.WEB_CACHE, nil, "", func(key string, value map[string]interface{}) {
|
m.Grows(ice.WEB_CACHE, nil, "", "", func(index int, value map[string]interface{}) {
|
||||||
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_NAME, kit.MDB_SIZE, kit.MDB_TYPE, kit.MDB_TEXT})
|
m.Push(kit.Format(index), value, []string{kit.MDB_TIME, kit.MDB_SIZE, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
|
||||||
|
m.Push(kit.MDB_LINK, kit.Format(m.Conf(ice.WEB_SHARE, "meta.template.download"), value["data"], kit.Short(value["data"])))
|
||||||
|
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -668,6 +699,12 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
))
|
))
|
||||||
m.Info("cache: %s type: %s name: %s", h, arg[1], arg[2])
|
m.Info("cache: %s type: %s name: %s", h, arg[1], arg[2])
|
||||||
|
|
||||||
|
// 添加记录
|
||||||
|
m.Grow(ice.WEB_CACHE, nil, kit.Dict(
|
||||||
|
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
||||||
|
kit.MDB_SIZE, size, "data", h,
|
||||||
|
))
|
||||||
|
|
||||||
// 返回结果
|
// 返回结果
|
||||||
m.Push("time", m.Time())
|
m.Push("time", m.Time())
|
||||||
m.Push("type", arg[1])
|
m.Push("type", arg[1])
|
||||||
@ -680,21 +717,31 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
if arg[0] == "add" {
|
if arg[0] == "add" {
|
||||||
m.Cmd("nfs.save", path.Join(m.Conf(ice.WEB_CACHE, ice.Meta("path")), h[:2], h), arg[3])
|
m.Cmd("nfs.save", path.Join(m.Conf(ice.WEB_CACHE, ice.Meta("path")), h[:2], h), arg[3])
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
ice.WEB_STORY: {Name: "story", Help: "故事会", Meta: kit.Dict(
|
ice.WEB_STORY: {Name: "story", Help: "故事会", Meta: kit.Dict("remote", "you", "exports", []string{"top", "story"}, "detail", []string{"归档", "共享", "下载"}), List: kit.List(
|
||||||
"remote", "you",
|
|
||||||
"exports", []string{"top", "story"},
|
|
||||||
), List: kit.List(
|
|
||||||
kit.MDB_INPUT, "text", "name", "top", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "top", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
|
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
|
||||||
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
if len(arg) > 1 {
|
||||||
|
switch arg[1] {
|
||||||
|
case "共享":
|
||||||
|
switch arg[2] {
|
||||||
|
case "story":
|
||||||
|
m.Cmd(ice.WEB_SHARE, "add", "story", arg[3], arg[3])
|
||||||
|
arg = []string{}
|
||||||
|
case "list":
|
||||||
|
m.Cmd(ice.WEB_SHARE, "add", "story", m.Option("top"), arg[3])
|
||||||
|
arg = []string{m.Option("top")}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 故事列表
|
// 故事列表
|
||||||
m.Richs(ice.WEB_STORY, "head", "", func(key string, value map[string]interface{}) {
|
m.Richs(ice.WEB_STORY, "head", "", func(key string, value map[string]interface{}) {
|
||||||
m.Push(key, value, []string{"time", "story", "scene"})
|
m.Push(key, value, []string{"time", "scene", "story", "count"})
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -707,22 +754,22 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
arg = []string{arg[0], m.Append("type"), m.Append("name"), m.Append("data")}
|
arg = []string{arg[0], m.Append("type"), m.Append("name"), m.Append("data")}
|
||||||
|
|
||||||
// 查询索引
|
// 查询索引
|
||||||
head, prev := "", ""
|
head, prev, count := "", "", 0
|
||||||
m.Richs(ice.WEB_STORY, "head", arg[2], func(key string, value map[string]interface{}) {
|
m.Richs(ice.WEB_STORY, "head", arg[2], func(key string, value map[string]interface{}) {
|
||||||
head, prev = key, kit.Format(value["list"])
|
head, prev, count = key, kit.Format(value["list"]), kit.Int(value["count"])
|
||||||
m.Log("info", "head: %v prev: %v", head, prev)
|
m.Log("info", "head: %v prev: %v count: %v", head, prev, count)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 添加节点
|
// 添加节点
|
||||||
list := m.Rich(ice.WEB_STORY, nil, kit.Dict(
|
list := m.Rich(ice.WEB_STORY, nil, kit.Dict(
|
||||||
"scene", arg[1], "story", arg[2], "data", arg[3], "prev", prev,
|
"count", count+1, "scene", arg[1], "story", arg[2], "data", arg[3], "prev", prev,
|
||||||
))
|
))
|
||||||
m.Info("%s: %s story: %s", arg[1], arg[2], list)
|
m.Info("%s: %s story: %s", arg[1], arg[2], list)
|
||||||
m.Push("list", list)
|
m.Push("list", list)
|
||||||
|
|
||||||
// 添加索引
|
// 添加索引
|
||||||
m.Rich(ice.WEB_STORY, "head", kit.Dict(
|
m.Rich(ice.WEB_STORY, "head", kit.Dict(
|
||||||
"scene", arg[1], "story", arg[2], "list", list,
|
"count", count+1, "scene", arg[1], "story", arg[2], "list", list,
|
||||||
))
|
))
|
||||||
|
|
||||||
m.Echo(list)
|
m.Echo(list)
|
||||||
@ -733,7 +780,6 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
m.Push("_output", "file")
|
m.Push("_output", "file")
|
||||||
} else {
|
} else {
|
||||||
m.Push("_output", "result")
|
m.Push("_output", "result")
|
||||||
m.Echo(m.Append("text"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case "commit":
|
case "commit":
|
||||||
@ -780,21 +826,21 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
m.Confm(ice.WEB_STORY, kit.Keys("hash", list), func(value map[string]interface{}) {
|
m.Confm(ice.WEB_STORY, kit.Keys("hash", list), func(value map[string]interface{}) {
|
||||||
// 直连节点
|
// 直连节点
|
||||||
m.Confm(ice.WEB_CACHE, kit.Keys("hash", value["data"]), func(val map[string]interface{}) {
|
m.Confm(ice.WEB_CACHE, kit.Keys("hash", value["data"]), func(val map[string]interface{}) {
|
||||||
m.Push(list, value, []string{"key", "time", "scene", "story"})
|
m.Push(list, value, []string{"key", "time", "count", "scene", "story"})
|
||||||
|
|
||||||
m.Push("text", val["text"])
|
m.Push("drama", val["text"])
|
||||||
m.Push("data", value["data"])
|
m.Push("data", value["data"])
|
||||||
})
|
})
|
||||||
|
|
||||||
// 复合节点
|
// 复合节点
|
||||||
kit.Fetch(value["list"], func(key string, val string) {
|
kit.Fetch(value["list"], func(key string, val string) {
|
||||||
m.Push(list, value, []string{"key", "time"})
|
m.Push(list, value, []string{"key", "time", "count"})
|
||||||
|
|
||||||
node := m.Confm(ice.WEB_STORY, kit.Keys("hash", val))
|
node := m.Confm(ice.WEB_STORY, kit.Keys("hash", val))
|
||||||
m.Push("scene", node["scene"])
|
m.Push("scene", node["scene"])
|
||||||
m.Push("story", kit.Keys(kit.Format(value["story"]), key))
|
m.Push("story", kit.Keys(kit.Format(value["story"]), key))
|
||||||
|
|
||||||
m.Push("text", m.Conf(ice.WEB_CACHE, kit.Keys("hash", node["data"], "text")))
|
m.Push("drama", m.Conf(ice.WEB_CACHE, kit.Keys("hash", node["data"], "text")))
|
||||||
m.Push("data", node["data"])
|
m.Push("data", node["data"])
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -826,28 +872,45 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
default:
|
default:
|
||||||
m.Cmd(ice.WEB_STORY, "history", arg).Table(func(index int, value map[string]string, head []string) {
|
m.Cmd(ice.WEB_STORY, "history", arg).Table(func(index int, value map[string]string, head []string) {
|
||||||
m.Push("time", value["time"])
|
m.Push("time", value["time"])
|
||||||
|
m.Push("list", value["key"])
|
||||||
|
m.Push("scene", value["scene"])
|
||||||
m.Push("story", value["story"])
|
m.Push("story", value["story"])
|
||||||
m.Push("text", value["text"])
|
m.Push("drama", value["drama"])
|
||||||
m.Push("list", kit.Format(m.Conf(ice.WEB_STORY, kit.Keys(kit.MDB_META, "download")), value["key"], value["key"]))
|
m.Push("link", kit.Format(m.Conf(ice.WEB_SHARE, "meta.template.download"), value["data"], kit.Short(value["data"])))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
ice.WEB_SHARE: {Name: "share", Help: "共享链", Meta: kit.Dict("remote", "you"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.WEB_SHARE: {Name: "share", Help: "共享链", Meta: kit.Dict("remote", "you"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 共享列表
|
// 共享列表
|
||||||
m.Richs(ice.WEB_SHARE, nil, "", func(key string, value map[string]interface{}) {
|
m.Grows(ice.WEB_SHARE, nil, "", "", func(key int, value map[string]interface{}) {
|
||||||
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME})
|
m.Push(kit.Format(key), value, []string{kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT})
|
||||||
m.Push("link", fmt.Sprintf(m.Conf(ice.WEB_SHARE, kit.Keys(kit.MDB_META, "href")), key, key))
|
m.Push("link", fmt.Sprintf(m.Conf(ice.WEB_SHARE, "meta.template.share"), value["share"], value["share"]))
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch arg[0] {
|
||||||
|
case "add":
|
||||||
|
node := kit.Dict(
|
||||||
|
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
||||||
|
)
|
||||||
|
switch arg[1] {
|
||||||
|
case "story":
|
||||||
|
node["data"] = arg[3]
|
||||||
|
default:
|
||||||
|
node["data"] = m.Cmd(ice.WEB_CACHE, "add", arg[1:]).Append("data")
|
||||||
|
}
|
||||||
|
|
||||||
// 创建共享
|
// 创建共享
|
||||||
h := m.Rich(ice.WEB_SHARE, nil, kit.Dict(
|
h := m.Rich(ice.WEB_SHARE, nil, node)
|
||||||
kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, kit.Select("", arg, 2),
|
m.Grow(ice.WEB_SHARE, nil, kit.Dict(
|
||||||
|
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
|
||||||
|
"data", node["data"], "share", h,
|
||||||
))
|
))
|
||||||
m.Info("share: %s", h)
|
m.Info("share: %s", h)
|
||||||
m.Echo(h)
|
m.Echo(h)
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
ice.WEB_ROUTE: {Name: "route", Help: "路由表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.WEB_ROUTE: {Name: "route", Help: "路由表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
}},
|
}},
|
||||||
@ -855,20 +918,6 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
}},
|
}},
|
||||||
|
|
||||||
"/proxy/": {Name: "/proxy/", Help: "代理商", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/proxy/": {Name: "/proxy/", Help: "代理商", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
key := kit.Select("", strings.Split(cmd, "/"), 2)
|
|
||||||
m.Confm(ice.WEB_SHARE, kit.Keys("hash", key), func(value map[string]interface{}) {
|
|
||||||
m.Info("share %s %v", key, kit.Format(value))
|
|
||||||
switch value["type"] {
|
|
||||||
case kit.MIME_STORY:
|
|
||||||
m.Cmdy(ice.WEB_STORY, "index", value["text"]).Push("_output", "file")
|
|
||||||
return
|
|
||||||
default:
|
|
||||||
m.Push("_output", "result").Push(key, value)
|
|
||||||
m.Render(m.Conf(ice.WEB_SHARE, kit.Keys(kit.MDB_META, "template", value["type"])))
|
|
||||||
m.Append("type", "text/html")
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
}},
|
}},
|
||||||
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
key := kit.Select("", strings.Split(cmd, "/"), 2)
|
key := kit.Select("", strings.Split(cmd, "/"), 2)
|
||||||
@ -876,12 +925,17 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
m.Info("share %s %v", key, kit.Format(value))
|
m.Info("share %s %v", key, kit.Format(value))
|
||||||
switch value["type"] {
|
switch value["type"] {
|
||||||
case kit.MIME_STORY:
|
case kit.MIME_STORY:
|
||||||
m.Cmdy(ice.WEB_STORY, "index", value["text"]).Push("_output", "file")
|
if m.Cmdy(ice.WEB_STORY, "index", value["data"]); m.Append("file") != "" {
|
||||||
return
|
m.Push("_output", "file")
|
||||||
|
} else {
|
||||||
|
m.Push("_output", "result")
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
m.Push("_output", "result").Push(key, value)
|
if m.Cmdy(ice.WEB_STORY, "index", value["data"]); m.Append("file") != "" {
|
||||||
m.Render(m.Conf(ice.WEB_SHARE, kit.Keys(kit.MDB_META, "template", value["type"])))
|
m.Push("_output", "file")
|
||||||
m.Append("type", "text/html")
|
} else {
|
||||||
|
m.Push("_output", "result")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -891,11 +945,13 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
w := m.Optionv("response").(http.ResponseWriter)
|
w := m.Optionv("response").(http.ResponseWriter)
|
||||||
|
|
||||||
if s, e := websocket.Upgrade(w, r, nil, m.Confi(ice.WEB_SPACE, "meta.buffer"), m.Confi(ice.WEB_SPACE, "meta.buffer")); m.Assert(e) {
|
if s, e := websocket.Upgrade(w, r, nil, m.Confi(ice.WEB_SPACE, "meta.buffer"), m.Confi(ice.WEB_SPACE, "meta.buffer")); m.Assert(e) {
|
||||||
|
|
||||||
// 添加节点
|
// 添加节点
|
||||||
m.Rich(ice.WEB_SPACE, nil, kit.Dict(
|
h := m.Rich(ice.WEB_SPACE, nil, kit.Dict(
|
||||||
kit.MDB_TYPE, m.Option("node"),
|
kit.MDB_TYPE, m.Option("node"),
|
||||||
kit.MDB_NAME, m.Option("name"),
|
kit.MDB_NAME, m.Option("name"),
|
||||||
kit.MDB_USER, m.Option("user"),
|
kit.MDB_USER, m.Option("user"),
|
||||||
|
"share", m.Cmdx(ice.WEB_SHARE, "add", m.Option("node"), m.Option("name"), m.Option("user")),
|
||||||
"socket", s,
|
"socket", s,
|
||||||
))
|
))
|
||||||
m.Info("conn %s", m.Option(kit.MDB_NAME))
|
m.Info("conn %s", m.Option(kit.MDB_NAME))
|
||||||
@ -905,7 +961,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
|
|||||||
web := m.Target().Server().(*Frame)
|
web := m.Target().Server().(*Frame)
|
||||||
web.HandleWSS(m, false, s)
|
web.HandleWSS(m, false, s)
|
||||||
m.Info("close %s %s", m.Option(kit.MDB_NAME), kit.Format(m.Confv(ice.WEB_SPACE, kit.Keys(kit.MDB_HASH, m.Option(kit.MDB_NAME)))))
|
m.Info("close %s %s", m.Option(kit.MDB_NAME), kit.Format(m.Confv(ice.WEB_SPACE, kit.Keys(kit.MDB_HASH, m.Option(kit.MDB_NAME)))))
|
||||||
m.Confv(ice.WEB_SPACE, kit.Keys(kit.MDB_HASH, m.Option(kit.MDB_NAME)), "")
|
m.Confv(ice.WEB_SPACE, kit.Keys(kit.MDB_HASH, h), "")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
30
conf.go
30
conf.go
@ -73,6 +73,24 @@ const (
|
|||||||
GDB_SIGNAL = "signal"
|
GDB_SIGNAL = "signal"
|
||||||
GDB_TIMER = "timer"
|
GDB_TIMER = "timer"
|
||||||
GDB_EVENT = "event"
|
GDB_EVENT = "event"
|
||||||
|
|
||||||
|
DREAM_START = "dream.start"
|
||||||
|
DREAM_CLOSE = "dream.close"
|
||||||
|
SPACE_START = "space.start"
|
||||||
|
SPACE_CLOSE = "space.close"
|
||||||
|
)
|
||||||
|
const (
|
||||||
|
MDB_REDIS = "redis"
|
||||||
|
MDB_MYSQL = "mysql"
|
||||||
|
MDB_CREATE = "create"
|
||||||
|
MDB_IMPORT = "import"
|
||||||
|
MDB_EXPORT = "export"
|
||||||
|
MDB_REMOVE = "remove"
|
||||||
|
|
||||||
|
MDB_INESRT = "insert"
|
||||||
|
MDB_UPDATE = "update"
|
||||||
|
MDB_SELECT = "select"
|
||||||
|
MDB_DELETE = "delete"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -106,6 +124,18 @@ var Alias = map[string]string{
|
|||||||
GDB_TIMER: "gdb.timer",
|
GDB_TIMER: "gdb.timer",
|
||||||
GDB_EVENT: "gdb.event",
|
GDB_EVENT: "gdb.event",
|
||||||
|
|
||||||
|
MDB_REDIS: "mdb.redis",
|
||||||
|
MDB_MYSQL: "mdb.mysql",
|
||||||
|
MDB_CREATE: "mdb.create",
|
||||||
|
MDB_IMPORT: "mdb.import",
|
||||||
|
MDB_EXPORT: "mdb.export",
|
||||||
|
MDB_REMOVE: "mdb.remove",
|
||||||
|
|
||||||
|
MDB_INESRT: "mdb.insert",
|
||||||
|
MDB_UPDATE: "mdb.update",
|
||||||
|
MDB_SELECT: "mdb.select",
|
||||||
|
MDB_DELETE: "mdb.delete",
|
||||||
|
|
||||||
CHAT_GROUP: "web.chat.group",
|
CHAT_GROUP: "web.chat.group",
|
||||||
|
|
||||||
"note": "web.wiki.note",
|
"note": "web.wiki.note",
|
||||||
|
@ -29,38 +29,54 @@ CMD sh bin/boot.sh
|
|||||||
var Index = &ice.Context{Name: "code", Help: "编程模块",
|
var Index = &ice.Context{Name: "code", Help: "编程模块",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"prefix": {Name: "prefix", Help: "外部命令", Value: map[string]interface{}{
|
"login": {Name: "login", Help: "登录", Value: kit.Data()},
|
||||||
"zsh": []interface{}{"cli.system", "zsh"},
|
|
||||||
"tmux": []interface{}{"cli.system", "tmux"},
|
|
||||||
"docker": []interface{}{"cli.system", "docker"},
|
|
||||||
"git": []interface{}{"cli.system", "git"},
|
|
||||||
"vim": []interface{}{"cli.system", "vim"},
|
|
||||||
}},
|
|
||||||
"docker": {Name: "docker", Help: "容器", Value: map[string]interface{}{
|
|
||||||
"template": map[string]interface{}{"shy": Dockfile},
|
|
||||||
"output": "etc/Dockerfile",
|
|
||||||
}},
|
|
||||||
"tmux": {Name: "tmux", Help: "终端", Value: map[string]interface{}{
|
|
||||||
"favor": map[string]interface{}{
|
|
||||||
"index": []interface{}{
|
|
||||||
"ctx_dev ctx_share",
|
|
||||||
"curl -s $ctx_dev/publish/auto.sh >auto.sh",
|
|
||||||
"source auto.sh",
|
|
||||||
"ShyLogin",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}},
|
|
||||||
"git": {Name: "git", Help: "记录", Value: map[string]interface{}{
|
|
||||||
"alias": map[string]interface{}{"s": "status", "b": "branch"},
|
|
||||||
}},
|
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
"login": {Name: "login", Help: "登录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
switch kit.Select("list", arg, 0) {
|
||||||
|
case "open":
|
||||||
|
case "init":
|
||||||
|
if m.Option("sid") != "" {
|
||||||
|
if m.Confs("login", []string{"hash", m.Option("sid"), "status"}) {
|
||||||
|
m.Conf("login", []string{"hash", m.Option("sid"), "status"}, "login")
|
||||||
|
m.Echo(m.Option("sid"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加终端
|
||||||
|
h := m.Rich("login", nil, kit.Dict(
|
||||||
|
"status", "login",
|
||||||
|
"type", kit.Select("zsh", arg, 1),
|
||||||
|
"you", m.Conf(ice.WEB_SHARE, kit.Keys("hash", m.Option("share"), "name")),
|
||||||
|
"pwd", m.Option("pwd"),
|
||||||
|
"pid", m.Option("pid"),
|
||||||
|
"pane", m.Option("pane"),
|
||||||
|
"hostname", m.Option("hostname"),
|
||||||
|
"username", m.Option("username"),
|
||||||
|
))
|
||||||
|
m.Info("zsh %s", h)
|
||||||
|
m.Echo(h)
|
||||||
|
|
||||||
|
case "list":
|
||||||
|
m.Richs("login", nil, "", func(key string, value map[string]interface{}) {
|
||||||
|
m.Push(key, value)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}},
|
||||||
"/zsh": {Name: "/zsh", Help: "终端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/zsh": {Name: "/zsh", Help: "终端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Info("%s cmd: %s arg: %v sub: %v", cmd, m.Option("cmd"), m.Optionv("arg"), m.Optionv("sub"))
|
m.Option("you", "")
|
||||||
|
m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) {
|
||||||
|
m.Option("you", value["you"])
|
||||||
|
})
|
||||||
|
m.Info("%s%s %s arg: %v sub: %v", m.Option("you"), cmd, m.Option("cmd"), m.Optionv("arg"), m.Optionv("sub"))
|
||||||
|
|
||||||
switch m.Option("cmd") {
|
switch m.Option("cmd") {
|
||||||
|
case "login":
|
||||||
|
m.Cmdy("login", "init", cmd).Push("_output", "result")
|
||||||
case "upload":
|
case "upload":
|
||||||
// 上传文件
|
// 上传文件
|
||||||
msg := m.Cmd(ice.WEB_STORY, "upload")
|
msg := m.Cmd(ice.WEB_STORY, "upload")
|
||||||
@ -75,6 +91,13 @@ var Index = &ice.Context{Name: "code", Help: "编程模块",
|
|||||||
case "download":
|
case "download":
|
||||||
// 下载文件
|
// 下载文件
|
||||||
m.Cmdy(ice.WEB_STORY, "download", m.Optionv("arg"))
|
m.Cmdy(ice.WEB_STORY, "download", m.Optionv("arg"))
|
||||||
|
|
||||||
|
case "history":
|
||||||
|
m.Option("you", "")
|
||||||
|
vs := strings.SplitN(strings.TrimSpace(m.Option("arg")), " ", 2)
|
||||||
|
m.Cmd(ice.WEB_SPACE, m.Option("you"), ice.WEB_FAVOR, "zsh.history", "shell", m.Option("sid"), kit.Select("", vs, 1),
|
||||||
|
"sid", m.Option("sid"), "num", vs[0], "pwd", m.Option("pwd"))
|
||||||
|
m.Push("_output", "void")
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
"_tmux": {Name: "tmux [session [window [pane cmd]]]", Help: "窗口", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"_tmux": {Name: "tmux [session [window [pane cmd]]]", Help: "窗口", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -174,10 +174,11 @@ var Index = &ice.Context{Name: "wiki", Help: "文档模块",
|
|||||||
case "favor":
|
case "favor":
|
||||||
m.Cmdy(ice.WEB_FAVOR, kit.Select("story", m.Option("hot")), arg[2:])
|
m.Cmdy(ice.WEB_FAVOR, kit.Select("story", m.Option("hot")), arg[2:])
|
||||||
case "share":
|
case "share":
|
||||||
m.Cmdy(ice.WEB_SHARE, arg[2:])
|
m.Cmdy(ice.WEB_SHARE, "add", arg[2:])
|
||||||
default:
|
default:
|
||||||
m.Cmdy(arg)
|
m.Cmdy(arg)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
m.Cmdy(kit.Select("_tree", "_text", len(arg) > 0 && strings.HasSuffix(arg[0], ".md")), arg)
|
m.Cmdy(kit.Select("_tree", "_text", len(arg) > 0 && strings.HasSuffix(arg[0], ".md")), arg)
|
||||||
}},
|
}},
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
all:
|
all:
|
||||||
|
@echo && date
|
||||||
sh build.sh build && sh build.sh restart
|
sh build.sh build && sh build.sh restart
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
export ice_app=${ice_app:="ice.app"}
|
export ice_app=${ice_app:="ice.app"}
|
||||||
export ice_err=${ice_err:="boot.log"}
|
export ice_err=${ice_err:="boot.log"}
|
||||||
export ice_conf=${ice_app:="var/conf"}
|
|
||||||
export ice_serve=${ice_serve:="web.serve"}
|
export ice_serve=${ice_serve:="web.serve"}
|
||||||
|
export ice_can=${ice_can:="https://github.com/shylinux/volcanos"}
|
||||||
|
|
||||||
prepare() {
|
prepare() {
|
||||||
[ -f main.go ] || cat >> main.go <<END
|
[ -f main.go ] || cat >> main.go <<END
|
||||||
@ -11,7 +11,9 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
"github.com/shylinux/icebergs"
|
||||||
_ "github.com/shylinux/icebergs/core/chat"
|
_ "github.com/shylinux/icebergs/base"
|
||||||
|
_ "github.com/shylinux/icebergs/core"
|
||||||
|
_ "github.com/shylinux/icebergs/misc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -23,35 +25,26 @@ END
|
|||||||
|
|
||||||
[ -f Makefile ] || cat >> Makefile <<END
|
[ -f Makefile ] || cat >> Makefile <<END
|
||||||
all:
|
all:
|
||||||
|
@echo && date
|
||||||
sh build.sh build && sh build.sh restart
|
sh build.sh build && sh build.sh restart
|
||||||
END
|
|
||||||
mkdir -p usr/template/wiki
|
|
||||||
[ -f usr/template/common.tmpl ] || cat >> usr/template/common.tmpl <<END
|
|
||||||
|
|
||||||
END
|
|
||||||
[ -f usr/template/wiki/common.tmpl ] || cat >> usr/template/wiki/common.tmpl <<END
|
|
||||||
|
|
||||||
END
|
END
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
prepare && go build -o bin/shy main.go
|
prepare && go build -o bin/shy main.go
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
[ -d usr/volcanos ] || git clone https://github.com/shylinux/volcanos usr/volcanos
|
[ -z "$@" ] && ( [ -d usr/volcanos ] || git clone $ice_can usr/volcanos )
|
||||||
while true; do
|
while true; do
|
||||||
date && $ice_app $* 2>$ice_err && log "\n\nrestarting..." || break
|
date && $ice_app $@ 2>$ice_err && echo -e "\n\nrestarting..." || break
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
log() { echo -e $*; }
|
|
||||||
restart() {
|
restart() {
|
||||||
kill -2 `cat var/run/shy.pid`
|
kill -2 `cat var/run/shy.pid`
|
||||||
}
|
}
|
||||||
shutdown() {
|
shutdown() {
|
||||||
kill -3 `cat var/run/shy.pid`
|
kill -3 `cat var/run/shy.pid`
|
||||||
}
|
}
|
||||||
help() {
|
|
||||||
echo "usage: $0 cmd arg"
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd=$1 && shift
|
cmd=$1 && shift
|
||||||
[ -z "$cmd" ] && cmd=start
|
[ -z "$cmd" ] && cmd=start
|
||||||
|
@ -51,7 +51,7 @@ var Index = &ice.Context{Name: "tmux", Help: "终端模块",
|
|||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Cmd(ice.GDB_EVENT, "listen", "miss.start", "cli.tmux.session")
|
m.Cmd(ice.GDB_EVENT, "listen", ice.DREAM_START, "cli.tmux.session")
|
||||||
}},
|
}},
|
||||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
}},
|
}},
|
||||||
@ -86,7 +86,7 @@ var Index = &ice.Context{Name: "tmux", Help: "终端模块",
|
|||||||
// 查看缓存
|
// 查看缓存
|
||||||
m.Cmdy("cli.system", "tmux", "show-buffer", "-b", arg[0]).Set("append")
|
m.Cmdy("cli.system", "tmux", "show-buffer", "-b", arg[0]).Set("append")
|
||||||
}},
|
}},
|
||||||
"session": {Name: "session", Help: "会话", List: kit.List(
|
"session": {Name: "session", Help: "会话", Meta: kit.Dict("detail", []string{"选择", "运行", "编辑", "删除", "下载"}), List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "session", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "session", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "window", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "window", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "pane", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "pane", "action", "auto",
|
||||||
@ -96,6 +96,15 @@ var Index = &ice.Context{Name: "tmux", Help: "终端模块",
|
|||||||
prefix := []string{"cli.system", "tmux"}
|
prefix := []string{"cli.system", "tmux"}
|
||||||
if len(arg) > 3 {
|
if len(arg) > 3 {
|
||||||
switch arg[1] {
|
switch arg[1] {
|
||||||
|
case "运行":
|
||||||
|
target := ""
|
||||||
|
switch arg[2] {
|
||||||
|
case "session":
|
||||||
|
target = arg[3]
|
||||||
|
}
|
||||||
|
m.Cmd("run", target, m.Option("hot"))
|
||||||
|
arg = arg[:0]
|
||||||
|
|
||||||
case "select":
|
case "select":
|
||||||
if arg[2] == "session" {
|
if arg[2] == "session" {
|
||||||
// 选择会话
|
// 选择会话
|
||||||
@ -156,7 +165,10 @@ var Index = &ice.Context{Name: "tmux", Help: "终端模块",
|
|||||||
if m.Cmd(prefix, "has-session", "-t", target).Append("code") != "0" {
|
if m.Cmd(prefix, "has-session", "-t", target).Append("code") != "0" {
|
||||||
// 创建会话
|
// 创建会话
|
||||||
m.Option("cmd_env", "TMUX", "")
|
m.Option("cmd_env", "TMUX", "")
|
||||||
|
m.Option("cmd_dir", m.Conf(ice.WEB_DREAM, "meta.path"))
|
||||||
m.Cmd(prefix, "new-session", "-ds", arg[0])
|
m.Cmd(prefix, "new-session", "-ds", arg[0])
|
||||||
|
m.Cmd("run", arg[0], arg[1:])
|
||||||
|
arg = arg[:1]
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
@ -197,6 +209,21 @@ var Index = &ice.Context{Name: "tmux", Help: "终端模块",
|
|||||||
"view": {Name: "view", Help: "终端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"view": {Name: "view", Help: "终端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Cmdy("cli.system", "tmux", "capture-pane", "-pt", kit.Select("", arg, 0)).Set("append")
|
m.Cmdy("cli.system", "tmux", "capture-pane", "-pt", kit.Select("", arg, 0)).Set("append")
|
||||||
}},
|
}},
|
||||||
|
"run": {Name: "view", Help: "终端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
prefix := []string{"cli.system", "tmux"}
|
||||||
|
|
||||||
|
m.Richs(ice.WEB_SPACE, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
|
m.Cmdy(prefix, "send-keys", "-t", arg[0], "export ctx_share=", value["share"], "Enter")
|
||||||
|
})
|
||||||
|
|
||||||
|
m.Option("cmd_env", "TMUX", "")
|
||||||
|
m.Cmd(ice.WEB_FAVOR, kit.Select("some", arg, 1)).Table(func(index int, value map[string]string, head []string) {
|
||||||
|
switch value["type"] {
|
||||||
|
case "shell":
|
||||||
|
m.Cmdy(prefix, "send-keys", "-t", arg[0], value["text"], "Enter")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user