1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-30 18:59:22 +08:00

add dream

This commit is contained in:
shaoying 2019-12-24 01:33:14 +08:00
parent 1e7aed134c
commit 21f899b072
7 changed files with 311 additions and 170 deletions

View File

@ -9,6 +9,7 @@ import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"math/rand"
"net"
"net/http"
@ -315,7 +316,7 @@ func (web *Frame) Close(m *ice.Message, arg ...string) bool {
var Index = &ice.Context{Name: "web", Help: "网页模块",
Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Value: kit.Data("self.port", ice.WEB_PORT)},
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Value: kit.Data("self.port", ice.WEB_PORT, kit.MDB_SHORT, "name")},
ice.WEB_SERVE: {Name: "serve", Help: "服务器", Value: kit.Data(
"static", map[string]interface{}{"/": "usr/volcanos/",
"/static/volcanos/": "usr/volcanos/",
@ -330,27 +331,98 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
"buffer.r", 4096, "buffer.w", 4096,
kit.MDB_SHORT, "name",
)},
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Value: kit.Data(
"path", "usr/local/work",
"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_CACHE: {Name: "cache", Help: "缓存池", Value: kit.Data(
kit.MDB_SHORT, "text", "path", "var/file",
"store", "var/data", "limit", "30", "least", "10",
)},
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_CACHE: {Name: "cache", Help: "缓存", Value: kit.Data(
kit.MDB_SHORT, "text", "path", "var/file",
"store", "var/data", "limit", "30", "least", "10",
)},
ice.WEB_ROUTE: {Name: "route", Help: "路由", Value: kit.Data()},
ice.WEB_PROXY: {Name: "proxy", Help: "代理", Value: kit.Data()},
ice.WEB_FAVOR: {Name: "favor", Help: "收藏", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
ice.WEB_SHARE: {Name: "share", Help: "共享", Value: kit.Data(
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_PROXY: {Name: "proxy", Help: "代理商", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
ice.ICE_INIT: {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) { m.Done() }},
ice.WEB_SPIDE: {Name: "spide", Help: "客户端", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 爬虫列表
m.Richs(ice.WEB_SPIDE, nil, "", func(key string, value map[string]interface{}) {
m.Push("name", value["name"])
m.Push(key, value["client"], []string{"method", "protocol", "hostname", "path", "file"})
})
return
}
switch arg[0] {
case "add":
// 添加爬虫
if uri, e := url.Parse(arg[2]); e == nil && arg[2] != "" {
dir, file := path.Split(uri.EscapedPath())
m.Rich(ice.WEB_SPIDE, nil, kit.Dict(
"name", arg[1],
"cookie", kit.Dict(),
"header", kit.Dict(),
"client", kit.Dict(
"logheaders", false,
"timeout", "100s",
"method", "GET",
"protocol", uri.Scheme,
"hostname", uri.Host,
"path", dir,
"file", file,
"query", uri.RawQuery,
"url", arg[2],
),
))
}
default:
m.Richs(ice.WEB_SPIDE, nil, arg[0], func(key string, value map[string]interface{}) {
client := value["client"].(map[string]interface{})
method := kit.Select("GET", client["method"])
uri := kit.MergeURL(kit.Format(client["url"]), arg[1:])
body, ok := m.Optionv("body").(io.Reader)
if !ok && method == "POST" {
if ls := strings.Split(uri, "?"); len(ls) > 0 {
uri, body = ls[0], bytes.NewReader([]byte(ls[1]))
}
}
req, e := http.NewRequest(method, uri, body)
m.Log("info", "%s %s", req.Method, req.URL)
m.Assert(e)
web := m.Target().Server().(*Frame)
if web.Client == nil {
web.Client = &http.Client{Timeout: kit.Duration(kit.Format(client["timeout"]))}
}
// 发送请求
res, e := web.Client.Do(req)
if m.Warn(e != nil, "%s", e) {
return
}
if m.Warn(res.StatusCode != http.StatusOK, "%s", res.Status) {
return
}
if buf, e := ioutil.ReadAll(res.Body); m.Assert(e) {
m.Echo(string(buf))
}
})
}
}},
ice.WEB_SERVE: {Name: "serve", Help: "服务器", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Conf(ice.CLI_RUNTIME, "node.name", m.Conf(ice.CLI_RUNTIME, "boot.hostname"))
@ -385,7 +457,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
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) {
if u, e := url.Parse(kit.MergeURL("ws://"+host+kit.Select("/space/", arg, 2), "node", node, "name", name, "user", user)); m.Assert(e) {
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 := 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) {
@ -433,7 +505,188 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
}) == nil, "not found %s", arg[0])
}
}},
ice.WEB_STORY: {Name: "story", Help: "故事会", Meta: kit.Dict("exports", []string{"top", "story"}), List: kit.List(
ice.WEB_DREAM: {Name: "dream", Help: "梦想家", Meta: kit.Dict(
"exports", []interface{}{"you", "name"},
"detail", []interface{}{"启动", "停止"},
), List: kit.List(
kit.MDB_INPUT, "text", "value", "", "name", "name",
kit.MDB_INPUT, "text", "value", "", "name", "type",
kit.MDB_INPUT, "button", "value", "创建", "action", "auto",
), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) > 1 {
switch arg[1] {
case "启动":
case "停止":
m.Cmd(ice.WEB_SPACE, arg[0], "exit", "1")
m.Cmd(ice.GDB_EVENT, "action", "miss.stop", arg[0])
return
}
}
if len(arg) > 0 {
// 规范命名
if !strings.Contains(arg[0], "-") {
arg[0] = m.Time("20060102-") + arg[0]
}
// 创建目录
p := path.Join(m.Conf(ice.WEB_DREAM, "meta.path"), arg[0])
if _, e := os.Stat(p); e != nil {
os.MkdirAll(p, 0777)
}
if m.Richs(ice.WEB_SPACE, nil, arg[0], nil) == nil {
// 启动任务
m.Option("cmd_dir", p)
m.Option("cmd_type", "daemon")
m.Cmd(ice.GDB_EVENT, "action", "miss.start", arg[0])
m.Cmd(m.Confv(ice.WEB_DREAM, "meta.cmd"))
}
}
// 任务列表
m.Cmdy("nfs.dir", m.Conf(ice.WEB_DREAM, "meta.path"), "", "time name")
m.Table(func(index int, value map[string]string, head []string) {
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(
"remote", "you",
"exports", []string{"hot", "favor"},
), List: kit.List(
kit.MDB_INPUT, "text", "name", "hot", "action", "auto",
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 收藏门类
m.Richs(ice.WEB_FAVOR, nil, "", func(key string, value map[string]interface{}) {
m.Push("time", kit.Value(value, "meta.time"))
m.Push("favor", kit.Value(value, "meta.name"))
m.Push("count", kit.Value(value, "meta.count"))
})
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 := ""
if m.Richs(ice.WEB_FAVOR, nil, arg[0], func(key string, value map[string]interface{}) {
favor = key
}) == nil {
favor = m.Rich(ice.WEB_FAVOR, nil, kit.Data(kit.MDB_NAME, arg[0]))
m.Info("create favor: %s name: %s", favor, arg[0])
}
if len(arg) == 1 {
// 收藏列表
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})
switch kit.Format(value[kit.MDB_TYPE]) {
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
}
if len(arg) == 2 {
// 收藏详情
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), "id", arg[1], func(index int, value map[string]interface{}) {
for k, v := range value {
m.Push("key", k).Push("value", v)
}
m.Sort("key")
})
return
}
if arg[1] == "file" {
arg[1] = kit.MIME_FILE
}
// 添加收藏
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],
))
m.Info("create favor: %s index: %d name: %s", favor, index, arg[2])
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) {
if len(arg) == 0 {
// 缓存列表
m.Richs(ice.WEB_CACHE, nil, "", func(key string, value map[string]interface{}) {
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_NAME, kit.MDB_SIZE, kit.MDB_TYPE, kit.MDB_TEXT})
})
return
}
switch arg[0] {
case "upload":
// 打开文件
r := m.Optionv("request").(*http.Request)
if f, h, e := r.FormFile(kit.Select("upload", arg, 1)); m.Assert(e) {
defer f.Close()
// 创建文件
file := kit.Hashs(f)
if o, p, e := kit.Create(path.Join(m.Conf(ice.WEB_CACHE, ice.Meta("path")), file[:2], file)); m.Assert(e) {
defer o.Close()
// 保存文件
f.Seek(0, os.SEEK_SET)
if n, e := io.Copy(o, f); m.Assert(e) {
m.Info("upload: %s file: %s", kit.FmtSize(n), p)
arg = kit.Simple(arg[0], h.Header.Get("Content-Type"), h.Filename, p, p, n)
}
}
}
fallthrough
case "add":
// 添加数据
size := kit.Select(kit.Format(len(arg[3])), arg, 5)
h := m.Rich(ice.WEB_CACHE, nil, kit.Dict(
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
kit.MDB_FILE, kit.Select("", arg, 4),
kit.MDB_SIZE, size, arg[1], arg[3],
))
m.Info("cache: %s type: %s name: %s", h, arg[1], arg[2])
// 返回结果
m.Push("time", m.Time())
m.Push("type", arg[1])
m.Push("name", arg[2])
m.Push("text", arg[3])
m.Push("size", size)
m.Push("data", h)
// 保存数据
if arg[0] == "add" {
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(
"remote", "you",
"exports", []string{"top", "story"},
), List: kit.List(
kit.MDB_INPUT, "text", "name", "top", "action", "auto",
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
@ -520,9 +773,6 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
})
m.Echo(list)
case "share":
m.Cmdy(ice.WEB_SHARE, arg[1:])
case "history":
// 历史记录
list := m.Cmd(ice.WEB_STORY, "index", arg[1]).Append("list")
@ -582,141 +832,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
})
}
}},
ice.WEB_CACHE: {Name: "cache", Help: "缓存", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 缓存列表
m.Richs(ice.WEB_CACHE, nil, "", func(key string, value map[string]interface{}) {
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_NAME, kit.MDB_SIZE, kit.MDB_TYPE, kit.MDB_TEXT})
})
return
}
switch arg[0] {
case "upload":
// 打开文件
r := m.Optionv("request").(*http.Request)
if f, h, e := r.FormFile(kit.Select("upload", arg, 1)); m.Assert(e) {
defer f.Close()
// 创建文件
file := kit.Hashs(f)
if o, p, e := kit.Create(path.Join(m.Conf(ice.WEB_CACHE, ice.Meta("path")), file[:2], file)); m.Assert(e) {
defer o.Close()
// 保存文件
f.Seek(0, os.SEEK_SET)
if n, e := io.Copy(o, f); m.Assert(e) {
m.Info("upload: %s file: %s", kit.FmtSize(n), p)
arg = kit.Simple(arg[0], h.Header.Get("Content-Type"), h.Filename, p, p, n)
}
}
}
fallthrough
case "add":
// 添加数据
size := kit.Select(kit.Format(len(arg[3])), arg, 5)
h := m.Rich(ice.WEB_CACHE, nil, kit.Dict(
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],
kit.MDB_FILE, kit.Select("", arg, 4),
kit.MDB_SIZE, size, arg[1], arg[3],
))
m.Info("cache: %s type: %s name: %s", h, arg[1], arg[2])
// 返回结果
m.Push("time", m.Time())
m.Push("type", arg[1])
m.Push("name", arg[2])
m.Push("text", arg[3])
m.Push("size", size)
m.Push("data", h)
// 保存数据
if arg[0] == "add" {
m.Cmd("nfs.save", path.Join(m.Conf(ice.WEB_CACHE, ice.Meta("path")), h[:2], h), arg[3])
}
default:
}
}},
ice.WEB_ROUTE: {Name: "route", Help: "路由", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}},
ice.WEB_PROXY: {Name: "proxy", Help: "代理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}},
ice.WEB_FAVOR: {Name: "favor", Help: "收藏", Meta: kit.Dict("exports", []string{"hot", "favor"}), List: kit.List(
kit.MDB_INPUT, "text", "name", "hot", "action", "auto",
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
kit.MDB_INPUT, "button", "value", "查看", "action", "auto",
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
// 收藏门类
m.Richs(ice.WEB_FAVOR, nil, "", func(key string, value map[string]interface{}) {
m.Push("time", kit.Value(value, "meta.time"))
m.Push("favor", kit.Value(value, "meta.name"))
m.Push("count", kit.Value(value, "meta.count"))
})
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 := ""
if m.Richs(ice.WEB_FAVOR, nil, arg[0], func(key string, value map[string]interface{}) {
favor = key
}) == nil {
favor = m.Rich(ice.WEB_FAVOR, nil, kit.Data(kit.MDB_NAME, arg[0]))
m.Info("create favor: %s name: %s", favor, arg[0])
}
if len(arg) == 1 {
// 收藏列表
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})
switch kit.Format(value[kit.MDB_TYPE]) {
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
}
if len(arg) == 2 {
// 收藏详情
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), "id", arg[1], func(index int, value map[string]interface{}) {
for k, v := range value {
m.Push("key", k).Push("value", v)
}
m.Sort("key")
})
return
}
if arg[1] == "file" {
arg[1] = kit.MIME_FILE
}
// 添加收藏
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],
))
m.Info("create favor: %s index: %d name: %s", favor, index, arg[2])
m.Echo("%d", index)
}},
ice.WEB_SHARE: {Name: "share", Help: "共享", 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 {
// 共享列表
m.Richs(ice.WEB_SHARE, nil, "", func(key string, value map[string]interface{}) {
@ -733,8 +849,12 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
m.Info("share: %s", h)
m.Echo(h)
}},
ice.WEB_ROUTE: {Name: "route", Help: "路由表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}},
ice.WEB_PROXY: {Name: "proxy", 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) {
"/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))
@ -750,7 +870,23 @@ var Index = &ice.Context{Name: "web", Help: "网页模块",
})
}},
"/space": {Name: "/space", 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)
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")
}
})
}},
"/space/": {Name: "/space/", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
r := m.Optionv("request").(*http.Request)
w := m.Optionv("response").(http.ResponseWriter)

14
conf.go
View File

@ -49,12 +49,13 @@ const (
WEB_SPIDE = "spide"
WEB_SERVE = "serve"
WEB_SPACE = "space"
WEB_STORY = "story"
WEB_DREAM = "dream"
WEB_FAVOR = "favor"
WEB_CACHE = "cache"
WEB_STORY = "story"
WEB_SHARE = "share"
WEB_ROUTE = "route"
WEB_PROXY = "proxy"
WEB_FAVOR = "favor"
WEB_SHARE = "share"
)
const (
LOG_CMD = "cmd"
@ -93,12 +94,13 @@ var Alias = map[string]string{
WEB_SPIDE: "web.spide",
WEB_SERVE: "web.serve",
WEB_SPACE: "web.space",
WEB_STORY: "web.story",
WEB_DREAM: "web.dream",
WEB_FAVOR: "web.favor",
WEB_CACHE: "web.cache",
WEB_STORY: "web.story",
WEB_SHARE: "web.share",
WEB_ROUTE: "web.route",
WEB_PROXY: "web.proxy",
WEB_FAVOR: "web.favor",
WEB_SHARE: "web.share",
GDB_SIGNAL: "gdb.signal",
GDB_TIMER: "gdb.timer",

View File

@ -20,7 +20,7 @@ var Index = &ice.Context{Name: "chat", Help: "聊天模块",
}},
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(ice.CTX_CONFIG, "save", "chat.json", ice.CHAT_GROUP)
m.Cmd(ice.CTX_CONFIG, "save", "web.json", ice.WEB_STORY, ice.WEB_CACHE, ice.WEB_FAVOR, ice.WEB_SHARE)
m.Cmd(ice.CTX_CONFIG, "save", "web.json", ice.WEB_SPIDE, ice.WEB_FAVOR, ice.WEB_CACHE, ice.WEB_STORY, ice.WEB_SHARE)
m.Cmd(ice.CTX_CONFIG, "save", "aaa.json", ice.AAA_ROLE, ice.AAA_USER, ice.AAA_SESS)
}},

View File

@ -77,7 +77,7 @@ var Index = &ice.Context{Name: "code", Help: "编程模块",
m.Cmdy(ice.WEB_STORY, "download", m.Optionv("arg"))
}
}},
"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) {
prefix := kit.Simple(m.Confv("prefix", "tmux"))
if len(arg) > 1 {
switch arg[1] {
@ -111,7 +111,7 @@ var Index = &ice.Context{Name: "code", Help: "编程模块",
}
return
}},
"docker": {Name: "docker image|volume|network|container", Help: "容器", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
"_docker": {Name: "docker image|volume|network|container", Help: "容器", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
prefix := kit.Simple(m.Confv("prefix", "docker"))
switch arg[0] {
case "image":
@ -226,7 +226,7 @@ var Index = &ice.Context{Name: "code", Help: "编程模块",
}
return
}},
"git": {Name: "git init|diff|status|commit|branch|remote|pull|push|sum", Help: "版本", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
"_git": {Name: "git init|diff|status|commit|branch|remote|pull|push|sum", Help: "版本", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
prefix, arg := append(kit.Simple(m.Confv("prefix", "git")), "cmd_dir", kit.Select(".", arg[0])), arg[1:]
switch arg[0] {

View File

@ -16,7 +16,7 @@ var Index = &ice.Context{Name: "mall", Help: "团队模块",
Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{},
Commands: map[string]*ice.Command{
"miss": {Name: "miss", Help: "任务", Meta: map[string]interface{}{
"_miss": {Name: "miss", Help: "任务", Meta: map[string]interface{}{
"exports": []interface{}{"you", "name"},
"detail": []interface{}{"启动", "停止"},
}, List: []interface{}{
@ -55,7 +55,7 @@ var Index = &ice.Context{Name: "mall", Help: "团队模块",
m.Push("status", kit.Select("stop", "start", m.Confs("web.space", "hash."+value["name"])))
})
}},
"task": {Name: "task", Help: "任务",
"_task": {Name: "task", Help: "任务",
Meta: map[string]interface{}{
"remote": "true",
},
@ -80,7 +80,7 @@ var Index = &ice.Context{Name: "mall", Help: "团队模块",
case "cancel":
}
}},
"process": {Name: "process", Help: "任务进度", Meta: map[string]interface{}{
"_process": {Name: "process", Help: "任务进度", Meta: map[string]interface{}{
"remote": "true",
"detail": []string{"编辑", "准备", "开始", "取消", "完成"},
}, List: []interface{}{

View File

@ -62,7 +62,7 @@ var Index = &ice.Context{Name: "team", Help: "团队模块",
// 任务列表
m.Cmdy("nfs.dir", m.Conf("miss", "meta.path"), "", "time name")
m.Table(func(index int, value map[string]string, head []string) {
m.Push("status", kit.Select("stop", "start", m.Confs(ice.WEB_SPACE, kit.Keys("hash", value["name"]))))
m.Push("status", kit.Select("start", "stop", m.Richs(ice.WEB_SPACE, nil, value["name"], nil) == nil))
})
}},
},

View File

@ -163,17 +163,20 @@ var Index = &ice.Context{Name: "wiki", Help: "文档模块",
}},
"note": {Name: "note file", Help: "笔记", Meta: map[string]interface{}{
"remote": "you", "display": "inner",
"detail": []string{"add", "commit", "history", "share"},
"detail": []string{"add", "commit", "history", "share", "favor"},
}, List: kit.List(
kit.MDB_INPUT, "text", "value", "miss.md", "name", "path",
kit.MDB_INPUT, "button", "value", "执行", "action", "auto",
kit.MDB_INPUT, "button", "value", "返回", "cb", "Last",
), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) > 0 {
switch arg[0] {
case "story":
if len(arg) > 1 {
switch arg[1] {
case "favor":
m.Cmdy(ice.WEB_FAVOR, kit.Select("story", m.Option("hot")), arg[2:])
case "share":
m.Cmdy(ice.WEB_SHARE, arg[2:])
default:
m.Cmdy(arg)
return
}
}
m.Cmdy(kit.Select("_tree", "_text", len(arg) > 0 && strings.HasSuffix(arg[0], ".md")), arg)