1
0
mirror of https://shylinux.com/x/icebergs synced 2025-06-26 18:37:29 +08:00
This commit is contained in:
harveyshao 2021-12-30 16:14:32 +08:00
parent 8feb26089f
commit fe937b8d9f
55 changed files with 314 additions and 269 deletions

View File

@ -2,20 +2,10 @@ package aaa
import ( import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
kit "shylinux.com/x/toolkits"
) )
const AAA = "aaa" const AAA = "aaa"
var Index = &ice.Context{Name: AAA, Help: "认证模块", Commands: map[string]*ice.Command{ var Index = &ice.Context{Name: AAA, Help: "认证模块"}
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, VOID, WHITE, kit.Dict(), BLACK, kit.Dict()))
m.Rich(ROLE, nil, kit.Dict(kit.MDB_NAME, TECH, BLACK, kit.Dict(), WHITE, kit.Dict()))
m.Load()
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save()
}},
}}
func init() { ice.Index.Register(Index, nil, ROLE, SESS, TOTP, USER) } func init() { ice.Index.Register(Index, nil, ROLE, SESS, TOTP, USER) }

View File

@ -8,29 +8,22 @@ import (
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
func _role_user(m *ice.Message, userrole string, username ...string) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
for _, user := range username {
kit.Value(value, kit.Keys(USER, user), true)
}
})
}
func _role_list(m *ice.Message, userrole string) { func _role_list(m *ice.Message, userrole string) {
m.Richs(ROLE, nil, kit.Select(kit.MDB_FOREACH, userrole), func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, kit.Select(mdb.FOREACH, userrole), func(key string, value map[string]interface{}) {
kit.Fetch(value[WHITE], func(k string, v interface{}) { kit.Fetch(value[WHITE], func(k string, v interface{}) {
m.Push(ROLE, kit.Value(value, kit.MDB_NAME)) m.Push(ROLE, kit.Value(value, mdb.NAME))
m.Push(kit.MDB_ZONE, WHITE) m.Push(mdb.ZONE, WHITE)
m.Push(kit.MDB_KEY, k) m.Push(mdb.KEY, k)
}) })
kit.Fetch(value[BLACK], func(k string, v interface{}) { kit.Fetch(value[BLACK], func(k string, v interface{}) {
m.Push(ROLE, kit.Value(value, kit.MDB_NAME)) m.Push(ROLE, kit.Value(value, mdb.NAME))
m.Push(kit.MDB_ZONE, BLACK) m.Push(mdb.ZONE, BLACK)
m.Push(kit.MDB_KEY, k) m.Push(mdb.KEY, k)
}) })
}) })
} }
func _role_chain(arg ...string) string { func _role_chain(arg ...string) string {
return strings.ReplaceAll(kit.Keys(arg), "/", ice.PT) return strings.ReplaceAll(kit.Keys(arg), ice.PS, ice.PT)
} }
func _role_black(m *ice.Message, userrole, chain string, status bool) { func _role_black(m *ice.Message, userrole, chain string, status bool) {
m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) {
@ -101,44 +94,42 @@ const ROLE = "role"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
ROLE: {Name: ROLE, Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, ROLE: {Name: ROLE, Help: "角色", Value: kit.Data(mdb.SHORT, mdb.NAME)},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ROLE: {Name: "role role auto create", Help: "角色", Action: map[string]*ice.Action{ ROLE: {Name: "role role auto insert", Help: "角色", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create role=void,tech zone=white,black key=", Help: "添加", Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Rich(ROLE, nil, kit.Dict(mdb.NAME, VOID, WHITE, kit.Dict(), BLACK, kit.Dict()))
m.Rich(ROLE, nil, kit.Dict(mdb.NAME, TECH, BLACK, kit.Dict(), WHITE, kit.Dict()))
}},
mdb.INSERT: {Name: "insert role=void,tech zone=white,black key=", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(ROLE, nil, m.Option(ROLE), func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, m.Option(ROLE), func(key string, value map[string]interface{}) {
list := value[m.Option(kit.MDB_ZONE)].(map[string]interface{}) list := value[m.Option(mdb.ZONE)].(map[string]interface{})
m.Log_CREATE(ROLE, m.Option(ROLE), list[m.Option(kit.MDB_KEY)]) m.Log_CREATE(ROLE, m.Option(ROLE), m.Option(mdb.KEY))
list[m.Option(kit.MDB_KEY)] = true list[m.Option(mdb.KEY)] = true
}) })
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Richs(ROLE, nil, m.Option(ROLE), func(key string, value map[string]interface{}) { m.Richs(ROLE, nil, m.Option(ROLE), func(key string, value map[string]interface{}) {
list := value[m.Option(kit.MDB_ZONE)].(map[string]interface{}) list := value[m.Option(mdb.ZONE)].(map[string]interface{})
m.Log_REMOVE(ROLE, m.Option(ROLE), list[m.Option(kit.MDB_KEY)]) m.Log_REMOVE(ROLE, m.Option(ROLE), m.Option(mdb.KEY))
delete(list, m.Option(kit.MDB_KEY)) delete(list, m.Option(mdb.KEY))
}) })
}}, }},
BLACK: {Name: "black role chain...", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) { BLACK: {Name: "black role chain", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) {
_role_black(m, arg[0], _role_chain(arg[1:]...), true) _role_black(m, arg[0], _role_chain(arg[1:]...), true)
}}, }},
WHITE: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { WHITE: {Name: "white role chain", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
_role_white(m, arg[0], _role_chain(arg[1:]...), true) _role_white(m, arg[0], _role_chain(arg[1:]...), true)
}}, }},
RIGHT: {Name: "right role chain...", Help: "查看权限", Hand: func(m *ice.Message, arg ...string) { RIGHT: {Name: "right role chain", Help: "查看权限", Hand: func(m *ice.Message, arg ...string) {
if _role_right(m, arg[0], kit.Split(_role_chain(arg[1:]...), ice.PT)...) { if _role_right(m, arg[0], kit.Split(_role_chain(arg[1:]...), ice.PT)...) {
m.Echo(ice.OK) m.Echo(ice.OK)
} }
}}, }},
}, 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) < 2 { // 角色列表 _role_list(m, kit.Select("", arg, 0))
_role_list(m, kit.Select("", arg, 0)) m.PushAction(mdb.DELETE)
m.PushAction(mdb.REMOVE)
return
}
// 设置角色
_role_user(m, arg[0], arg[1:]...)
}}, }},
}}) }})
} }

View File

@ -13,7 +13,7 @@ func _sess_check(m *ice.Message, sessid string) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
m.Log_AUTH( m.Log_AUTH(
USERROLE, m.Option(ice.MSG_USERROLE, UserRole(m, value[USERNAME])), USERROLE, m.Option(ice.MSG_USERROLE, value[USERROLE]),
USERNAME, m.Option(ice.MSG_USERNAME, value[USERNAME]), USERNAME, m.Option(ice.MSG_USERNAME, value[USERNAME]),
USERNICK, m.Option(ice.MSG_USERNICK, value[USERNICK]), USERNICK, m.Option(ice.MSG_USERNICK, value[USERNICK]),
) )
@ -25,24 +25,24 @@ func _sess_create(m *ice.Message, username string) string {
return "" return ""
} }
if m.Richs(USER, nil, username, nil) == nil { if m.Richs(USER, nil, username, nil) == nil {
_user_create(m, username, kit.Hashs()) _user_create(m, kit.Select(TECH, VOID, m.Option(ice.MSG_USERROLE) == VOID), username, kit.Hashs())
} }
h := m.Cmdx(mdb.INSERT, SESS, "", mdb.HASH, h := m.Cmdx(mdb.INSERT, SESS, "", mdb.HASH,
USERROLE, UserRole(m, username), USERNAME, username, USERROLE, UserRole(m, username), USERNAME, username,
IP, m.Option(ice.MSG_USERIP), UA, m.Option(ice.MSG_USERUA), IP, m.Option(ice.MSG_USERIP), UA, m.Option(ice.MSG_USERUA),
kit.MDB_TIME, m.Time(m.Conf(SESS, kit.Keym(kit.MDB_EXPIRE))), mdb.TIME, m.Time(m.Conf(SESS, kit.Keym(mdb.EXPIRE))),
) )
m.Event(SESS_CREATE, SESS, h, USERNAME, username) m.Event(SESS_CREATE, SESS, h, USERNAME, username)
return h return h
} }
func SessCheck(m *ice.Message, sessid string) {
_sess_check(m, sessid)
}
func SessCreate(m *ice.Message, username string) string { func SessCreate(m *ice.Message, username string) string {
return m.Option(ice.MSG_SESSID, _sess_create(m, username)) return m.Option(ice.MSG_SESSID, _sess_create(m, username))
} }
func SessCheck(m *ice.Message, sessid string) {
_sess_check(m, sessid)
}
const ( const (
IP = "ip" IP = "ip"
@ -60,8 +60,7 @@ const SESS = "sess"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
SESS: {Name: SESS, Help: "会话", Value: kit.Data( SESS: {Name: SESS, Help: "会话", Value: kit.Data(
kit.MDB_SHORT, "uniq", kit.MDB_FIELD, "time,hash,userrole,username,ip,ua", mdb.SHORT, "uniq", mdb.FIELD, "time,hash,userrole,username,ip,ua", mdb.EXPIRE, "720h",
kit.MDB_EXPIRE, "720h",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
SESS: {Name: "sess hash auto prunes", Help: "会话", Action: ice.MergeAction(map[string]*ice.Action{ SESS: {Name: "sess hash auto prunes", Help: "会话", Action: ice.MergeAction(map[string]*ice.Action{

View File

@ -55,8 +55,8 @@ const TOTP = "totp"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
TOTP: {Name: TOTP, Help: "动态令牌", Value: kit.Data( TOTP: {Name: TOTP, Help: "动态令牌", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_FIELD, "time,name,secret,period,number", mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,secret,period,number",
kit.MDB_LINK, "otpauth://totp/%s?secret=%s", mdb.LINK, "otpauth://totp/%s?secret=%s",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
TOTP: {Name: "totp name auto create", Help: "动态令牌", Action: ice.MergeAction(map[string]*ice.Action{ TOTP: {Name: "totp name auto create", Help: "动态令牌", Action: ice.MergeAction(map[string]*ice.Action{
@ -65,22 +65,22 @@ func init() {
m.Option(SECRET, _totp_gen(kit.Int64(m.Option(PERIOD)))) m.Option(SECRET, _totp_gen(kit.Int64(m.Option(PERIOD))))
} }
m.Cmd(mdb.INSERT, TOTP, "", mdb.HASH, m.OptionSimple(kit.MDB_NAME, SECRET, PERIOD, NUMBER)) m.Cmd(mdb.INSERT, TOTP, "", mdb.HASH, m.OptionSimple(mdb.NAME, SECRET, PERIOD, NUMBER))
}}, }},
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
mdb.HashSelect(m.Spawn(c), arg...).Table(func(index int, value map[string]string, head []string) { mdb.HashSelect(m.Spawn(c), arg...).Table(func(index int, value map[string]string, head []string) {
if len(arg) > 0 { if len(arg) > 0 {
m.OptionFields(mdb.DETAIL) m.OptionFields(mdb.DETAIL)
} }
m.Push(kit.MDB_TIME, m.Time()) m.Push(mdb.TIME, m.Time())
m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(mdb.NAME, value[mdb.NAME])
period := kit.Int64(value[PERIOD]) period := kit.Int64(value[PERIOD])
m.Push("rest", period-time.Now().Unix()%period) m.Push("rest", period-time.Now().Unix()%period)
m.Push("code", _totp_get(value[SECRET], kit.Int(value[NUMBER]), period)) m.Push("code", _totp_get(value[SECRET], kit.Int(value[NUMBER]), period))
if len(arg) > 0 { if len(arg) > 0 {
m.PushQRCode(kit.MDB_SCAN, kit.Format(m.Config(kit.MDB_LINK), value[kit.MDB_NAME], value[SECRET])) m.PushQRCode(mdb.SCAN, kit.Format(m.Config(mdb.LINK), value[mdb.NAME], value[SECRET]))
m.Echo(_totp_get(value[SECRET], kit.Int(value[NUMBER]), kit.Int64(value[PERIOD]))) m.Echo(_totp_get(value[SECRET], kit.Int(value[NUMBER]), kit.Int64(value[PERIOD])))
} }
}) })

View File

@ -8,7 +8,7 @@ import (
func _user_login(m *ice.Message, name, word string) (ok bool) { func _user_login(m *ice.Message, name, word string) (ok bool) {
if m.Richs(USER, nil, name, nil) == nil { if m.Richs(USER, nil, name, nil) == nil {
_user_create(m, name, word) _user_create(m, "", name, word)
} }
m.Richs(USER, nil, name, func(key string, value map[string]interface{}) { m.Richs(USER, nil, name, func(key string, value map[string]interface{}) {
@ -16,19 +16,20 @@ func _user_login(m *ice.Message, name, word string) (ok bool) {
}) })
return ok return ok
} }
func _user_create(m *ice.Message, name, word string) { func _user_create(m *ice.Message, role, name, word string) {
m.Rich(USER, nil, kit.Dict( m.Rich(USER, nil, kit.Dict(
USERNAME, name, PASSWORD, word, USERNICK, name, USERROLE, role, USERNAME, name, PASSWORD, word,
USERZONE, m.Option(ice.MSG_USERZONE), USERNICK, name, USERZONE, m.Option(ice.MSG_USERZONE),
)) ))
m.Event(USER_CREATE, USER, name) m.Event(USER_CREATE, USER, name)
} }
func _user_search(m *ice.Message, name, text string) { func _user_search(m *ice.Message, name, text string) {
m.Richs(USER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(USER, nil, mdb.FOREACH, func(key string, value map[string]interface{}) {
if value = kit.GetMeta(value); name != "" && name != value[USERNAME] { if value = kit.GetMeta(value); name != "" && name != value[USERNAME] {
return return
} }
m.PushSearch(kit.MDB_TYPE, UserRole(m, value[USERNAME]), kit.MDB_NAME, kit.Format(value[USERNAME]), kit.MDB_TEXT, kit.Format(value[USERNICK]), value) m.PushSearch(kit.SimpleKV("type,name,text",
kit.Format(value[USERROLE]), kit.Format(value[USERNAME]), kit.Format(value[USERNICK])), value)
}) })
} }
@ -37,17 +38,15 @@ func UserRoot(m *ice.Message) {
m.Option(ice.MSG_USERNAME, ice.Info.UserName) m.Option(ice.MSG_USERNAME, ice.Info.UserName)
if m.Richs(USER, "", ice.Info.UserName, nil) == nil { if m.Richs(USER, "", ice.Info.UserName, nil) == nil {
_user_create(m, ice.Info.UserName, kit.Hashs()) _user_create(m, ROOT, ice.Info.UserName, kit.Hashs())
} }
} }
func UserRole(m *ice.Message, username interface{}) (role string) { func UserRole(m *ice.Message, username interface{}) (role string) {
if role = VOID; username == ice.Info.UserName { if role = VOID; username == ice.Info.UserName {
return ROOT return ROOT
} }
m.Richs(ROLE, nil, TECH, func(key string, value map[string]interface{}) { m.Richs(USER, nil, kit.Format(username), func(key string, value map[string]interface{}) {
if kit.Value(kit.GetMeta(value), kit.Keys(USER, username)) == true { role = kit.Format(kit.GetMeta(value)[USERROLE])
role = TECH
}
}) })
return return
} }
@ -107,31 +106,23 @@ const USER = "user"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
USER: {Name: USER, Help: "用户", Value: kit.Data( USER: {Name: USER, Help: "用户", Value: kit.Data(
kit.MDB_SHORT, USERNAME, kit.MDB_FIELD, "time,username,usernick,userzone", mdb.SHORT, USERNAME, mdb.FIELD, "time,userrole,username,usernick,userzone",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.SEARCH, mdb.CREATE, USER, m.Prefix(USER))
}},
USER: {Name: "user username auto create", Help: "用户", Action: ice.MergeAction(map[string]*ice.Action{ USER: {Name: "user username auto create", Help: "用户", Action: ice.MergeAction(map[string]*ice.Action{
mdb.CREATE: {Name: "create userrole=void,tech username password", Help: "创建", Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
_user_create(m, m.Option(USERNAME), m.Option(PASSWORD)) m.Cmd(mdb.SEARCH, mdb.CREATE, USER, m.PrefixKey())
_role_user(m, m.Option(USERROLE), m.Option(USERNAME))
}},
mdb.REMOVE: {Name: "remove username", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(m.Config(kit.MDB_FIELD))
m.Cmdy(mdb.DELETE, USER, "", mdb.HASH, m.OptionSimple(m.Config(kit.MDB_SHORT)))
m.Event(USER_REMOVE, USER, m.Option(m.Config(kit.MDB_SHORT)))
}}, }},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == USER { if arg[0] == USER {
_user_search(m, arg[1], kit.Select("", arg, 2)) _user_search(m, arg[1], kit.Select("", arg, 2))
} }
}}, }},
mdb.CREATE: {Name: "create userrole=void,tech username password", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
_user_create(m, m.Option(USERROLE), m.Option(USERNAME), m.Option(PASSWORD))
}},
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
mdb.HashSelect(m, arg...).Table(func(index int, value map[string]string, head []string) { mdb.HashSelect(m, arg...)
m.Push(USERROLE, UserRole(m, value[USERNAME]))
})
}}, }},
}}) }})
} }

View File

@ -48,7 +48,7 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
SIGNAL: {Name: SIGNAL, Help: "信号器", Value: kit.Data( SIGNAL: {Name: SIGNAL, Help: "信号器", Value: kit.Data(
kit.MDB_SHORT, SIGNAL, kit.MDB_FIELD, "time,signal,name,cmd", kit.MDB_SHORT, SIGNAL, kit.MDB_FIELD, "time,signal,name,cmd",
kit.MDB_PATH, path.Join(ice.VAR_RUN, "ice.pid"), nfs.PATH, path.Join(ice.VAR_RUN, "ice.pid"),
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -5,6 +5,7 @@ import (
"path" "path"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
log "shylinux.com/x/toolkits/logs" log "shylinux.com/x/toolkits/logs"
) )
@ -89,17 +90,17 @@ const (
var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]*ice.Config{ var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]*ice.Config{
FILE: {Name: FILE, Help: "日志文件", Value: kit.Dict( FILE: {Name: FILE, Help: "日志文件", Value: kit.Dict(
BENCH, kit.Dict(kit.MDB_PATH, path.Join(ice.VAR_LOG, "bench.log"), kit.MDB_LIST, []string{}), BENCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "bench.log"), kit.MDB_LIST, []string{}),
WATCH, kit.Dict(kit.MDB_PATH, path.Join(ice.VAR_LOG, "watch.log"), kit.MDB_LIST, []string{ WATCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "watch.log"), kit.MDB_LIST, []string{
ice.LOG_CREATE, ice.LOG_REMOVE, ice.LOG_CREATE, ice.LOG_REMOVE,
ice.LOG_INSERT, ice.LOG_DELETE, ice.LOG_INSERT, ice.LOG_DELETE,
ice.LOG_MODIFY, ice.LOG_SELECT, ice.LOG_MODIFY, ice.LOG_SELECT,
ice.LOG_EXPORT, ice.LOG_IMPORT, ice.LOG_EXPORT, ice.LOG_IMPORT,
}), }),
ERROR, kit.Dict(kit.MDB_PATH, path.Join(ice.VAR_LOG, "error.log"), kit.MDB_LIST, []string{ ERROR, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "error.log"), kit.MDB_LIST, []string{
ice.LOG_WARN, ice.LOG_ERROR, ice.LOG_WARN, ice.LOG_ERROR,
}), }),
TRACE, kit.Dict(kit.MDB_PATH, path.Join(ice.VAR_LOG, "trace.log"), kit.MDB_LIST, []string{ TRACE, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "trace.log"), kit.MDB_LIST, []string{
ice.LOG_DEBUG, ice.LOG_DEBUG,
}), }),
)}, )},
@ -130,10 +131,10 @@ var Index = &ice.Context{Name: "log", Help: "日志模块", Configs: map[string]
m.Conf(SHOW, kit.Keys(k, FILE), key) m.Conf(SHOW, kit.Keys(k, FILE), key)
}) })
// 日志文件 // 日志文件
if f, p, e := kit.Create(kit.Format(value[kit.MDB_PATH])); m.Assert(e) { if f, p, e := kit.Create(kit.Format(value[nfs.PATH])); m.Assert(e) {
m.Cap(ice.CTX_STREAM, path.Base(p)) m.Cap(ice.CTX_STREAM, path.Base(p))
value[FILE] = bufio.NewWriter(f) value[FILE] = bufio.NewWriter(f)
m.Log_CREATE(kit.MDB_FILE, p) m.Log_CREATE(nfs.FILE, p)
} }
}) })
}}, }},

View File

@ -155,7 +155,9 @@ func HashAction(fields ...string) map[string]*ice.Action {
m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg)
}}, }},
REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(m.Config(FIELD))
m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg) m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg)
m.Event(kit.Keys(m.CommandKey(), REMOVE), m.CommandKey(), m.Option(m.Config(SHORT)))
}}, }},
MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg) m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg)

View File

@ -23,6 +23,25 @@ const (
DICT = "dict" DICT = "dict"
META = "meta" META = "meta"
) )
const (
ID = "id"
KEY = "key"
TIME = "time"
// ZONE = "zone"
TYPE = "type"
NAME = "name"
TEXT = "text"
LINK = "link"
SCAN = "scan"
SHORT = "short"
FIELD = "field"
EXPIRE = "expire"
FOREACH = "*"
RANDOMS = "%"
)
const ( const (
FIELDS = "fields" FIELDS = "fields"
DETAIL = "detail" DETAIL = "detail"

View File

@ -104,7 +104,7 @@ func _cat_list(m *ice.Message, name string) {
buf := make([]byte, ice.MOD_BUFS) buf := make([]byte, ice.MOD_BUFS)
for begin := 0; true; { for begin := 0; true; {
if n, e := f.Read(buf[begin:]); !m.Warn(e, ice.ErrNotFound, name) { if n, e := f.Read(buf[begin:]); !m.Warn(e, ice.ErrNotFound, name) {
m.Log_IMPORT(kit.MDB_FILE, name, kit.MDB_SIZE, n) m.Log_IMPORT(FILE, name, kit.MDB_SIZE, n)
if begin += n; begin < len(buf) { if begin += n; begin < len(buf) {
buf = buf[:begin] buf = buf[:begin]
break break

View File

@ -72,9 +72,9 @@ func _dir_list(m *ice.Message, root string, name string, level int, deep bool, d
} }
case "full": case "full":
m.Push(field, path.Join(root, name, f.Name())+kit.Select("", ice.PS, f.IsDir())) m.Push(field, path.Join(root, name, f.Name())+kit.Select("", ice.PS, f.IsDir()))
case kit.MDB_PATH: case PATH:
m.Push(field, path.Join(name, f.Name())+kit.Select("", ice.PS, f.IsDir())) m.Push(field, path.Join(name, f.Name())+kit.Select("", ice.PS, f.IsDir()))
case kit.MDB_FILE: case FILE:
m.Push(field, f.Name()+kit.Select("", ice.PS, f.IsDir())) m.Push(field, f.Name()+kit.Select("", ice.PS, f.IsDir()))
case kit.MDB_NAME: case kit.MDB_NAME:
m.Push(field, f.Name()) m.Push(field, f.Name())
@ -89,7 +89,7 @@ func _dir_list(m *ice.Message, root string, name string, level int, deep bool, d
} else { } else {
m.Push(field, kit.FmtSize(f.Size())) m.Push(field, kit.FmtSize(f.Size()))
} }
case kit.MDB_LINE: case LINE:
if f.IsDir() { if f.IsDir() {
if ls, e := ioutil.ReadDir(path.Join(root, name, f.Name())); e == nil { if ls, e := ioutil.ReadDir(path.Join(root, name, f.Name())); e == nil {
m.Push(field, len(ls)) m.Push(field, len(ls))
@ -211,13 +211,13 @@ func init() {
nil, kit.Split(kit.Select("time,size,type,path", m.OptionFields()))) nil, kit.Split(kit.Select("time,size,type,path", m.OptionFields())))
}}, }},
mdb.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { mdb.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
m.Upload(m.Option(kit.MDB_PATH)) m.Upload(m.Option(PATH))
}}, }},
TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TRASH, m.Option(kit.MDB_PATH)) m.Cmdy(TRASH, m.Option(PATH))
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
os.Remove(m.Option(kit.MDB_PATH)) os.Remove(m.Option(PATH))
}}, }},
}, 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 m.Option(DIR_ROOT) != "" { if m.Option(DIR_ROOT) != "" {

View File

@ -16,7 +16,7 @@ func _save_file(m *ice.Message, name string, text ...string) {
for _, v := range text { for _, v := range text {
if n, e := f.WriteString(v); m.Assert(e) { if n, e := f.WriteString(v); m.Assert(e) {
m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_SIZE, n) m.Log_EXPORT(FILE, p, kit.MDB_SIZE, n)
} }
} }
m.Echo(p) m.Echo(p)
@ -38,7 +38,7 @@ func _push_file(m *ice.Message, name string, text ...string) {
for _, k := range text { for _, k := range text {
if n, e := f.WriteString(k); m.Assert(e) { if n, e := f.WriteString(k); m.Assert(e) {
m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_SIZE, n) m.Log_EXPORT(FILE, p, kit.MDB_SIZE, n)
} }
} }
m.Echo(p) m.Echo(p)
@ -53,8 +53,8 @@ func _copy_file(m *ice.Message, name string, from ...string) {
defer s.Close() defer s.Close()
if n, e := io.Copy(f, s); !m.Warn(e, ice.ErrNotFound, name) { if n, e := io.Copy(f, s); !m.Warn(e, ice.ErrNotFound, name) {
m.Log_IMPORT(kit.MDB_FILE, v, kit.MDB_SIZE, n) m.Log_IMPORT(FILE, v, kit.MDB_SIZE, n)
m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_SIZE, n) m.Log_EXPORT(FILE, p, kit.MDB_SIZE, n)
} }
} }
} }

View File

@ -18,9 +18,9 @@ func _tail_create(m *ice.Message, arg ...string) {
r, w := io.Pipe() r, w := io.Pipe()
m.Go(func() { m.Go(func() {
for bio := bufio.NewScanner(r); bio.Scan(); { for bio := bufio.NewScanner(r); bio.Scan(); {
m.Log_IMPORT(kit.MDB_FILE, file, kit.MDB_SIZE, len(bio.Text())) m.Log_IMPORT(FILE, file, kit.MDB_SIZE, len(bio.Text()))
m.Grow(TAIL, kit.Keys(kit.MDB_HASH, h), kit.Dict( m.Grow(TAIL, kit.Keys(kit.MDB_HASH, h), kit.Dict(
kit.MDB_FILE, file, kit.MDB_SIZE, len(bio.Text()), kit.MDB_TEXT, bio.Text(), FILE, file, kit.MDB_SIZE, len(bio.Text()), kit.MDB_TEXT, bio.Text(),
)) ))
} }
}) })
@ -46,7 +46,7 @@ func init() {
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(TAIL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(TAIL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
value, _ = kit.GetMeta(value), m.Option(kit.MDB_HASH, key) value, _ = kit.GetMeta(value), m.Option(kit.MDB_HASH, key)
m.Cmd(TAIL, mdb.CREATE, kit.MDB_FILE, kit.Format(value[kit.MDB_FILE]), kit.MDB_NAME, kit.Format(value[kit.MDB_NAME])) m.Cmd(TAIL, mdb.CREATE, FILE, kit.Format(value[FILE]), kit.MDB_NAME, kit.Format(value[kit.MDB_NAME]))
}) })
}}, }},
TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: ice.MergeAction(map[string]*ice.Action{ TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: ice.MergeAction(map[string]*ice.Action{

View File

@ -22,10 +22,10 @@ func _trash_create(m *ice.Message, name string) {
defer f.Close() defer f.Close()
h := kit.Hashs(f) h := kit.Hashs(f)
p := path.Join(m.Config(kit.MDB_PATH), h[:2], h) p := path.Join(m.Config(PATH), h[:2], h)
os.MkdirAll(path.Dir(p), ice.MOD_DIR) os.MkdirAll(path.Dir(p), ice.MOD_DIR)
os.Rename(name, p) os.Rename(name, p)
m.Cmdy(mdb.INSERT, TRASH, "", mdb.HASH, kit.MDB_FILE, p, kit.MDB_FROM, name) m.Cmdy(mdb.INSERT, TRASH, "", mdb.HASH, FILE, p, kit.MDB_FROM, name)
} }
} }
} }
@ -36,21 +36,21 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data( TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_FROM, kit.MDB_FIELD, "time,hash,file,from", kit.MDB_SHORT, kit.MDB_FROM, kit.MDB_FIELD, "time,hash,file,from",
kit.MDB_PATH, ice.VAR_TRASH, PATH, ice.VAR_TRASH,
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
TRASH: {Name: "trash hash auto prunes", Help: "回收站", Action: ice.MergeAction(map[string]*ice.Action{ TRASH: {Name: "trash hash auto prunes", Help: "回收站", Action: ice.MergeAction(map[string]*ice.Action{
mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) { mdb.REVERT: {Name: "revert", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
os.Rename(m.Option(kit.MDB_FILE), m.Option(kit.MDB_FROM)) os.Rename(m.Option(FILE), m.Option(kit.MDB_FROM))
m.Cmd(mdb.DELETE, TRASH, "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) m.Cmd(mdb.DELETE, TRASH, "", mdb.HASH, m.OptionSimple(kit.MDB_HASH))
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
os.Remove(m.Option(kit.MDB_FILE)) os.Remove(m.Option(FILE))
m.Cmd(mdb.DELETE, TRASH, "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)) m.Cmd(mdb.DELETE, TRASH, "", mdb.HASH, m.OptionSimple(kit.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 map[string]string) bool { mdb.HashPrunes(m, func(value map[string]string) bool {
os.Remove(value[kit.MDB_FILE]) os.Remove(value[FILE])
return false return false
}) })
}}, }},

View File

@ -58,7 +58,7 @@ func init() {
m.Option(nfs.DIR_ROOT, m.Conf(cli.DAEMON, kit.META_PATH)) m.Option(nfs.DIR_ROOT, m.Conf(cli.DAEMON, kit.META_PATH))
m.Cmd(nfs.DIR, ice.PWD, "time,path,size").Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, ice.PWD, "time,path,size").Table(func(index int, value map[string]string, head []string) {
m.Push(kit.MDB_TIME, value[kit.MDB_TIME]) m.Push(kit.MDB_TIME, value[kit.MDB_TIME])
m.Push(PORT, path.Base(value[kit.MDB_PATH])) m.Push(PORT, path.Base(value[nfs.PATH]))
m.Push(kit.MDB_SIZE, value[kit.MDB_SIZE]) m.Push(kit.MDB_SIZE, value[kit.MDB_SIZE])
}) })
m.SortInt(PORT) m.SortInt(PORT)

View File

@ -13,7 +13,7 @@ import (
) )
func _cache_name(m *ice.Message, h string) string { func _cache_name(m *ice.Message, h string) string {
return path.Join(m.Config(kit.MDB_PATH), h[:2], h) return path.Join(m.Config(nfs.PATH), h[:2], h)
} }
func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // file size func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // file size
if name == "" { if name == "" {
@ -30,7 +30,7 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi
text = kit.Select(file, text) text = kit.Select(file, text)
h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH, h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH,
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text, kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
kit.MDB_FILE, file, kit.MDB_SIZE, size) nfs.FILE, file, kit.MDB_SIZE, size)
// 返回结果 // 返回结果
m.Push(kit.MDB_TIME, m.Time()) m.Push(kit.MDB_TIME, m.Time())
@ -38,16 +38,16 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi
m.Push(kit.MDB_NAME, name) m.Push(kit.MDB_NAME, name)
m.Push(kit.MDB_TEXT, text) m.Push(kit.MDB_TEXT, text)
m.Push(kit.MDB_SIZE, size) m.Push(kit.MDB_SIZE, size)
m.Push(kit.MDB_FILE, file) m.Push(nfs.FILE, file)
m.Push(kit.MDB_HASH, h) m.Push(kit.MDB_HASH, h)
m.Push(DATA, h) m.Push(DATA, h)
} }
func _cache_watch(m *ice.Message, key, file string) { func _cache_watch(m *ice.Message, key, file string) {
mdb.HashSelect(m.Spawn(), key).Table(func(index int, value map[string]string, head []string) { mdb.HashSelect(m.Spawn(), key).Table(func(index int, value map[string]string, head []string) {
if value[kit.MDB_FILE] == "" { if value[nfs.FILE] == "" {
m.Cmdy(nfs.SAVE, file, value[kit.MDB_TEXT]) m.Cmdy(nfs.SAVE, file, value[kit.MDB_TEXT])
} else { } else {
m.Cmdy(nfs.LINK, file, value[kit.MDB_FILE]) m.Cmdy(nfs.LINK, file, value[nfs.FILE])
} }
}) })
} }
@ -72,7 +72,7 @@ func _cache_upload(m *ice.Message, r *http.Request) (kind, name, file, size stri
// 导入数据 // 导入数据
buf.Seek(0, os.SEEK_SET) buf.Seek(0, os.SEEK_SET)
if n, e := io.Copy(f, buf); m.Assert(e) { if n, e := io.Copy(f, buf); m.Assert(e) {
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(n))) m.Log_IMPORT(nfs.FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(n)))
return h.Header.Get(ContentType), h.Filename, p, kit.Format(n) return h.Header.Get(ContentType), h.Filename, p, kit.Format(n)
} }
} }
@ -102,7 +102,7 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
}) })
default: default:
if s != step && s%10 == 0 { if s != step && s%10 == 0 {
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_STEP, s, m.Log_IMPORT(nfs.FILE, p, kit.MDB_STEP, s,
kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total))) kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
} }
} }
@ -117,7 +117,7 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
if f, e := os.Open(p); m.Assert(e) { if f, e := os.Open(p); m.Assert(e) {
defer f.Close() defer f.Close()
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(size))) m.Log_IMPORT(nfs.FILE, p, kit.MDB_SIZE, kit.FmtSize(int64(size)))
c := _cache_name(m, kit.Hashs(f)) c := _cache_name(m, kit.Hashs(f))
m.Cmd(nfs.LINK, c, p) m.Cmd(nfs.LINK, c, p)
return c, kit.Format(size) return c, kit.Format(size)
@ -139,16 +139,16 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
CACHE: {Name: CACHE, Help: "缓存池", Value: kit.Data( CACHE: {Name: CACHE, Help: "缓存池", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,size,type,name,text", kit.MDB_SHORT, kit.MDB_TEXT, kit.MDB_FIELD, "time,hash,size,type,name,text",
kit.MDB_STORE, ice.VAR_DATA, kit.MDB_PATH, ice.VAR_FILE, kit.MDB_FSIZE, "200000", kit.MDB_STORE, ice.VAR_DATA, nfs.PATH, ice.VAR_FILE, kit.MDB_FSIZE, "200000",
kit.MDB_LIMIT, "50", kit.MDB_LEAST, "30", kit.MDB_LIMIT, "50", kit.MDB_LEAST, "30",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
"/cache/": {Name: "/cache/", Help: "缓存池", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "/cache/": {Name: "/cache/", Help: "缓存池", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(CACHE, nil, arg[0], func(key string, value map[string]interface{}) { m.Richs(CACHE, nil, arg[0], func(key string, value map[string]interface{}) {
if kit.Format(value[kit.MDB_FILE]) == "" { if kit.Format(value[nfs.FILE]) == "" {
m.RenderResult(value[kit.MDB_TEXT]) m.RenderResult(value[kit.MDB_TEXT])
} else { } else {
m.RenderDownload(value[kit.MDB_FILE]) m.RenderDownload(value[nfs.FILE])
} }
}) })
}}, }},
@ -178,7 +178,7 @@ func init() {
return return
} }
if m.Append(kit.MDB_FILE) == "" { if m.Append(nfs.FILE) == "" {
m.PushScript("inner", m.Append(kit.MDB_TEXT)) m.PushScript("inner", m.Append(kit.MDB_TEXT))
} else { } else {
m.PushDownload(m.Append(kit.MDB_NAME), m.MergeURL2("/share/cache/"+arg[0])) m.PushDownload(m.Append(kit.MDB_NAME), m.MergeURL2("/share/cache/"+arg[0]))

View File

@ -16,7 +16,7 @@ import (
) )
func _dream_list(m *ice.Message) { func _dream_list(m *ice.Message) {
m.Cmdy(nfs.DIR, m.Config(kit.MDB_PATH), "time,size,name").Table(func(index int, value map[string]string, head []string) { m.Cmdy(nfs.DIR, m.Config(nfs.PATH), "time,size,name").Table(func(index int, value map[string]string, head []string) {
if m.Richs(SPACE, nil, value[kit.MDB_NAME], func(key string, value map[string]interface{}) { if m.Richs(SPACE, nil, value[kit.MDB_NAME], func(key string, value map[string]interface{}) {
m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE])
m.Push(kit.MDB_STATUS, cli.START) m.Push(kit.MDB_STATUS, cli.START)
@ -36,9 +36,9 @@ func _dream_show(m *ice.Message, name string) {
m.Option(kit.MDB_NAME, name) m.Option(kit.MDB_NAME, name)
// 任务目录 // 任务目录
p := path.Join(m.Config(kit.MDB_PATH), name) p := path.Join(m.Config(nfs.PATH), name)
if m.Option(kit.SSH_REPOS) != "" { // 下载源码 if m.Option(kit.SSH_REPOS) != "" { // 下载源码
m.Cmd("web.code.git.repos", mdb.CREATE, m.OptionSimple(kit.SSH_REPOS), kit.MDB_PATH, p) m.Cmd("web.code.git.repos", mdb.CREATE, m.OptionSimple(kit.SSH_REPOS), nfs.PATH, p)
} else { // 创建目录 } else { // 创建目录
os.MkdirAll(p, ice.MOD_DIR) os.MkdirAll(p, ice.MOD_DIR)
} }
@ -77,12 +77,12 @@ func _dream_show(m *ice.Message, name string) {
m.Optionv(cli.CMD_ENV, kit.Simple( m.Optionv(cli.CMD_ENV, kit.Simple(
cli.CTX_DEV, "http://:"+m.Cmd(SERVE).Append(tcp.PORT), cli.CTX_DEV, "http://:"+m.Cmd(SERVE).Append(tcp.PORT),
cli.PATH, kit.Path(path.Join(p, ice.BIN))+":"+kit.Path(ice.BIN)+":"+os.Getenv(cli.PATH), cli.PATH, kit.Path(path.Join(p, ice.BIN))+":"+kit.Path(ice.BIN)+":"+os.Getenv(cli.PATH),
cli.USER, ice.Info.UserName, m.Confv(DREAM, kit.Keym(cli.ENV)), cli.USER, ice.Info.UserName, m.Configv(cli.ENV),
)) ))
// 启动任务 // 启动任务
m.Optionv(cli.CMD_OUTPUT, path.Join(p, m.Config(kit.Keys(cli.ENV, cli.CTX_LOG)))) m.Optionv(cli.CMD_OUTPUT, path.Join(p, m.Config(kit.Keys(cli.ENV, cli.CTX_LOG))))
m.Cmd(cli.DAEMON, m.Confv(DREAM, kit.Keym(ice.CMD)), ice.DEV, ice.DEV, kit.MDB_NAME, name, m.OptionSimple(RIVER)) m.Cmd(cli.DAEMON, m.Configv(ice.CMD), ice.DEV, ice.DEV, kit.MDB_NAME, name, m.OptionSimple(RIVER))
m.Sleep(ice.MOD_TICK) m.Sleep(ice.MOD_TICK)
m.Event(DREAM_CREATE, kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, name) m.Event(DREAM_CREATE, kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, name)
} }
@ -102,10 +102,10 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case kit.MDB_NAME: case kit.MDB_NAME:
m.Cmdy(nfs.DIR, m.Config(kit.MDB_PATH), "name,time") m.Cmdy(nfs.DIR, m.Config(nfs.PATH), "name,time")
case kit.MDB_TEMPLATE: case kit.MDB_TEMPLATE:
m.Cmdy(nfs.DIR, m.Config(kit.MDB_PATH), "path,size,time") m.Cmdy(nfs.DIR, m.Config(nfs.PATH), "path,size,time")
m.SortStrR(kit.MDB_PATH) m.SortStrR(nfs.PATH)
} }
}}, }},
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
@ -124,11 +124,11 @@ func init() {
return return
} }
m.Option(nfs.DIR_ROOT, path.Join(m.Config(kit.MDB_PATH), arg[0])) m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), arg[0]))
m.Cmdy(nfs.CAT, arg[1:]) m.Cmdy(nfs.CAT, arg[1:])
}}, }},
}, Configs: map[string]*ice.Config{ }, Configs: map[string]*ice.Config{
DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_WORK, DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(nfs.PATH, ice.USR_LOCAL_WORK,
ice.CMD, []interface{}{"ice.bin", SPACE, tcp.DIAL}, ice.CMD, []interface{}{"ice.bin", SPACE, tcp.DIAL},
cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOT_LOG), cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOT_LOG),
"miss", `#!/bin/bash "miss", `#!/bin/bash

View File

@ -96,11 +96,11 @@ func init() {
switch arg[0] { switch arg[0] {
case kit.MDB_NAME: case kit.MDB_NAME:
m.Cmdy(nfs.DIR, m.Conf(DREAM, kit.META_PATH), "name,size,time") m.Cmdy(nfs.DIR, m.Conf(DREAM, kit.META_PATH), "name,size,time")
m.SortStrR(kit.MDB_PATH) m.SortStrR(nfs.PATH)
case kit.MDB_TEMPLATE: case kit.MDB_TEMPLATE:
m.Cmdy(nfs.DIR, m.Conf(DREAM, kit.META_PATH), "path,size,time") m.Cmdy(nfs.DIR, m.Conf(DREAM, kit.META_PATH), "path,size,time")
m.SortStrR(kit.MDB_PATH) m.SortStrR(nfs.PATH)
} }
}}, }},
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "添加", Hand: func(m *ice.Message, arg ...string) {

View File

@ -67,7 +67,7 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
msg := m.Spawn() msg := m.Spawn()
msg.W, msg.R = w, r msg.W, msg.R = w, r
repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0")) repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0"))
Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Config(kit.Keys(repos, kit.MDB_PATH)), m.Config(kit.Keys(repos, kit.MDB_INDEX)))) Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Config(kit.Keys(repos, nfs.PATH)), m.Config(kit.Keys(repos, kit.MDB_INDEX))))
return false // 网站主页 return false // 网站主页
} }
@ -263,12 +263,12 @@ func init() {
"help", ice.TRUE, "x", ice.TRUE, "help", ice.TRUE, "x", ice.TRUE,
), LOGHEADERS, ice.FALSE, ), LOGHEADERS, ice.FALSE,
kit.MDB_PATH, kit.Dict("/", ice.USR_VOLCANOS), nfs.PATH, kit.Dict("/", ice.USR_VOLCANOS),
ice.VOLCANOS, kit.Dict(kit.MDB_PATH, ice.USR_VOLCANOS, kit.MDB_INDEX, "page/index.html", ice.VOLCANOS, kit.Dict(nfs.PATH, ice.USR_VOLCANOS, kit.MDB_INDEX, "page/index.html",
kit.SSH_REPOS, "https://shylinux.com/x/volcanos", kit.SSH_BRANCH, kit.SSH_MASTER, kit.SSH_REPOS, "https://shylinux.com/x/volcanos", kit.SSH_BRANCH, kit.SSH_MASTER,
), ice.PUBLISH, ice.USR_PUBLISH, ), ice.PUBLISH, ice.USR_PUBLISH,
ice.INTSHELL, kit.Dict(kit.MDB_PATH, ice.USR_INTSHELL, kit.MDB_INDEX, ice.INDEX_SH, ice.INTSHELL, kit.Dict(nfs.PATH, ice.USR_INTSHELL, kit.MDB_INDEX, ice.INDEX_SH,
kit.SSH_REPOS, "https://shylinux.com/x/intshell", kit.SSH_BRANCH, kit.SSH_MASTER, kit.SSH_REPOS, "https://shylinux.com/x/intshell", kit.SSH_BRANCH, kit.SSH_MASTER,
), ice.REQUIRE, ".ish/pluged", ), ice.REQUIRE, ".ish/pluged",
)}, )},

View File

@ -12,6 +12,7 @@ import (
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/ssh" "shylinux.com/x/icebergs/base/ssh"
"shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
@ -24,33 +25,33 @@ func _share_link(m *ice.Message, p string, arg ...interface{}) string {
func _share_repos(m *ice.Message, repos string, arg ...string) { func _share_repos(m *ice.Message, repos string, arg ...string) {
prefix := kit.Path(m.Conf(SERVE, kit.Keym(ice.REQUIRE))) prefix := kit.Path(m.Conf(SERVE, kit.Keym(ice.REQUIRE)))
if _, e := os.Stat(path.Join(prefix, repos)); e != nil { // 克隆代码 if _, e := os.Stat(path.Join(prefix, repos)); e != nil { // 克隆代码
m.Cmd("web.code.git.repos", mdb.CREATE, kit.SSH_REPOS, "https://"+repos, kit.MDB_PATH, path.Join(prefix, repos)) m.Cmd("web.code.git.repos", mdb.CREATE, kit.SSH_REPOS, "https://"+repos, nfs.PATH, path.Join(prefix, repos))
} }
m.RenderDownload(path.Join(prefix, repos, path.Join(arg...))) m.RenderDownload(path.Join(prefix, repos, path.Join(arg...)))
} }
func _share_proxy(m *ice.Message) { func _share_proxy(m *ice.Message) {
switch p := path.Join(ice.VAR_PROXY, m.Option(ice.POD), m.Option(kit.MDB_PATH)); m.R.Method { switch p := path.Join(ice.VAR_PROXY, m.Option(ice.POD), m.Option(nfs.PATH)); m.R.Method {
case http.MethodGet: // 下发文件 case http.MethodGet: // 下发文件
m.RenderDownload(path.Join(p, m.Option(kit.MDB_NAME))) m.RenderDownload(path.Join(p, m.Option(kit.MDB_NAME)))
case http.MethodPost: // 上传文件 case http.MethodPost: // 上传文件
m.Cmdy(CACHE, UPLOAD) m.Cmdy(CACHE, UPLOAD)
m.Cmdy(CACHE, WATCH, m.Option(kit.MDB_DATA), p) m.Cmdy(CACHE, WATCH, m.Option(kit.MDB_DATA), p)
m.RenderResult(m.Option(kit.MDB_PATH)) m.RenderResult(m.Option(nfs.PATH))
} }
} }
func _share_cache(m *ice.Message, arg ...string) { func _share_cache(m *ice.Message, arg ...string) {
if pod := m.Option(ice.POD); m.PodCmd(CACHE, arg[0]) { if pod := m.Option(ice.POD); m.PodCmd(CACHE, arg[0]) {
if m.Append(kit.MDB_FILE) == "" { if m.Append(nfs.FILE) == "" {
m.RenderResult(m.Append(kit.MDB_TEXT)) m.RenderResult(m.Append(kit.MDB_TEXT))
} else { } else {
m.Option(ice.POD, pod) m.Option(ice.POD, pod)
_share_local(m, m.Append(kit.MDB_FILE)) _share_local(m, m.Append(nfs.FILE))
} }
return return
} }
msg := m.Cmd(CACHE, arg[0]) msg := m.Cmd(CACHE, arg[0])
m.RenderDownload(msg.Append(kit.MDB_FILE), msg.Append(kit.MDB_TYPE), msg.Append(kit.MDB_NAME)) m.RenderDownload(msg.Append(nfs.FILE), msg.Append(kit.MDB_TYPE), msg.Append(kit.MDB_NAME))
} }
func _share_local(m *ice.Message, arg ...string) { func _share_local(m *ice.Message, arg ...string) {
p := path.Join(arg...) p := path.Join(arg...)
@ -76,7 +77,7 @@ func _share_local(m *ice.Message, arg ...string) {
// 上传文件 // 上传文件
m.Cmdy(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, m.MergeURL2("/share/proxy"), m.Cmdy(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, m.MergeURL2("/share/proxy"),
SPIDE_PART, m.OptionSimple(ice.POD), kit.MDB_PATH, p, CACHE, cache.Format(ice.MOD_TIME), UPLOAD, "@"+p) SPIDE_PART, m.OptionSimple(ice.POD), nfs.PATH, p, CACHE, cache.Format(ice.MOD_TIME), UPLOAD, "@"+p)
if s, e := os.Stat(pp); e == nil && !s.IsDir() { if s, e := os.Stat(pp); e == nil && !s.IsDir() {
p = pp p = pp

View File

@ -16,6 +16,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -31,7 +32,7 @@ func _spide_create(m *ice.Message, name, address string) {
SPIDE_COOKIE, kit.Dict(), SPIDE_HEADER, kit.Dict(), SPIDE_CLIENT, kit.Dict( SPIDE_COOKIE, kit.Dict(), SPIDE_HEADER, kit.Dict(), SPIDE_CLIENT, kit.Dict(
kit.MDB_NAME, name, SPIDE_METHOD, SPIDE_POST, "url", address, kit.MDB_NAME, name, SPIDE_METHOD, SPIDE_POST, "url", address,
tcp.PROTOCOL, uri.Scheme, tcp.HOSTNAME, uri.Host, tcp.PROTOCOL, uri.Scheme, tcp.HOSTNAME, uri.Host,
kit.MDB_PATH, dir, kit.MDB_FILE, file, "query", uri.RawQuery, nfs.PATH, dir, nfs.FILE, file, "query", uri.RawQuery,
kit.MDB_TIMEOUT, "600s", LOGHEADERS, ice.FALSE, kit.MDB_TIMEOUT, "600s", LOGHEADERS, ice.FALSE,
), ),
))) )))
@ -259,7 +260,7 @@ func _spide_save(m *ice.Message, cache, save, uri string, res *http.Response) {
defer f.Close() defer f.Close()
if n, e := io.Copy(f, res.Body); m.Assert(e) { if n, e := io.Copy(f, res.Body); m.Assert(e) {
m.Log_EXPORT(kit.MDB_SIZE, n, kit.MDB_FILE, p) m.Log_EXPORT(kit.MDB_SIZE, n, nfs.FILE, p)
m.Echo(p) m.Echo(p)
} }
} }

View File

@ -45,12 +45,12 @@ func _story_index(m *ice.Message, name string, withdata bool) {
m.Richs(CACHE, nil, name, func(key string, value map[string]interface{}) { m.Richs(CACHE, nil, name, func(key string, value map[string]interface{}) {
// 查询数据 // 查询数据
m.Push(DATA, key) m.Push(DATA, key)
m.Push(key, value, []string{kit.MDB_TEXT, kit.MDB_FILE, kit.MDB_SIZE, kit.MDB_TIME, kit.MDB_NAME, kit.MDB_TYPE}) m.Push(key, value, []string{kit.MDB_TEXT, nfs.FILE, kit.MDB_SIZE, kit.MDB_TIME, kit.MDB_NAME, kit.MDB_TYPE})
if withdata { if withdata {
if value[kit.MDB_FILE] == "" { if value[nfs.FILE] == "" {
m.Echo("%s", kit.Format(value[kit.MDB_TEXT])) m.Echo("%s", kit.Format(value[kit.MDB_TEXT]))
} else { } else {
m.Echo("%s", m.Cmdx(nfs.CAT, value[kit.MDB_FILE])) m.Echo("%s", m.Cmdx(nfs.CAT, value[nfs.FILE]))
} }
} }
}) })

View File

@ -7,6 +7,7 @@ import (
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"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/web" "shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -131,7 +132,7 @@ func _action_domain(m *ice.Message, cmd string, arg ...string) (domain string) {
case PRIVATE: // 私有群 case PRIVATE: // 私有群
domain = m.Option(ice.MSG_DOMAIN, kit.Keys("U"+m.Option(ice.MSG_USERNAME))) domain = m.Option(ice.MSG_DOMAIN, kit.Keys("U"+m.Option(ice.MSG_USERNAME)))
} }
m.Option(ice.MSG_LOCAL, path.Join(m.Config(kit.MDB_PATH), domain)) m.Option(ice.MSG_LOCAL, path.Join(m.Config(nfs.PATH), domain))
}) })
m.Log_AUTH(RIVER, river, STORM, storm, DOMAIN, domain) m.Log_AUTH(RIVER, river, STORM, storm, DOMAIN, domain)
return return
@ -154,7 +155,7 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
ACTION: {Name: ACTION, Help: "应用", Value: kit.Data( ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(
MENUS, kit.List(kit.List("help", "tutor", "manual", "service", "devops", "refer")), MENUS, kit.List(kit.List("help", "tutor", "manual", "service", "devops", "refer")),
kit.MDB_PATH, ice.USR_LOCAL_RIVER, nfs.PATH, ice.USR_LOCAL_RIVER,
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
"/action": {Name: "/action river storm action arg...", Help: "工作台", Action: ice.MergeAction(map[string]*ice.Action{ "/action": {Name: "/action river storm action arg...", Help: "工作台", Action: ice.MergeAction(map[string]*ice.Action{

View File

@ -16,7 +16,7 @@ const CMD = "cmd"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
CMD: {Name: CMD, Help: "命令", Value: kit.Data(kit.MDB_SHORT, "type", kit.MDB_PATH, ice.PWD)}, CMD: {Name: CMD, Help: "命令", Value: kit.Data(kit.MDB_SHORT, "type", nfs.PATH, ice.PWD)},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
"/cmd/": {Name: "/cmd/", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{ "/cmd/": {Name: "/cmd/", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Name: "_init", Help: "初始化", Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Name: "_init", Help: "初始化", Hand: func(m *ice.Message, arg ...string) {
@ -35,7 +35,7 @@ func init() {
return // 目录 return // 目录
} }
p := path.Join(m.Config(kit.MDB_PATH), path.Join(arg...)) p := path.Join(m.Config(nfs.PATH), path.Join(arg...))
if mdb.HashSelect(m.Spawn(), kit.Ext(m.R.URL.Path)).Table(func(index int, value map[string]string, head []string) { if mdb.HashSelect(m.Spawn(), kit.Ext(m.R.URL.Path)).Table(func(index int, value map[string]string, head []string) {
m.RenderCmd(value[kit.MDB_NAME], p) m.RenderCmd(value[kit.MDB_NAME], p)
}).Length() > 0 { }).Length() > 0 {
@ -52,7 +52,7 @@ func init() {
}}, }},
CMD: {Name: "cmd path auto upload up home", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{ CMD: {Name: "cmd path auto upload up home", Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
m.Upload(path.Join(m.Config(kit.MDB_PATH), strings.TrimPrefix(path.Dir(m.R.URL.Path), "/cmd"))) m.Upload(path.Join(m.Config(nfs.PATH), strings.TrimPrefix(path.Dir(m.R.URL.Path), "/cmd")))
}}, }},
"home": {Name: "home", Help: "根目录", Hand: func(m *ice.Message, arg ...string) { "home": {Name: "home", Help: "根目录", Hand: func(m *ice.Message, arg ...string) {
@ -72,7 +72,7 @@ func init() {
m.ProcessLocation(arg[0]) m.ProcessLocation(arg[0])
return return
} }
m.Option(nfs.DIR_ROOT, path.Join(m.Config(kit.MDB_PATH), strings.TrimPrefix(path.Dir(m.R.URL.Path), "/cmd"))) m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), strings.TrimPrefix(path.Dir(m.R.URL.Path), "/cmd")))
m.Cmdy(nfs.DIR, arg) m.Cmdy(nfs.DIR, arg)
}}, }},
}}) }})

View File

@ -27,7 +27,7 @@ const DIV = "div"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
DIV: {Name: "div", Help: "定制", Value: kit.Data( DIV: {Name: "div", Help: "定制", Value: kit.Data(
kit.MDB_FIELD, "time,hash,type,name,text", kit.MDB_PATH, ice.USR_PUBLISH, kit.MDB_FIELD, "time,hash,type,name,text", nfs.PATH, ice.USR_PUBLISH,
kit.MDB_TEMPLATE, _div_template, kit.MDB_TEMPLATE, _div_template,
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{

View File

@ -46,7 +46,6 @@ func _header_grant(m *ice.Message, arg ...string) {
} }
// 授权登录 // 授权登录
m.Cmd(aaa.ROLE, kit.Select(aaa.TECH, aaa.VOID, m.Option(ice.MSG_USERROLE) == aaa.VOID), m.Option(ice.MSG_USERNAME))
m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME))) m.Cmd(web.SPACE, m.Option(web.SPACE), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(ice.MSG_USERNAME)))
} }
func _header_share(m *ice.Message, arg ...string) { func _header_share(m *ice.Message, arg ...string) {

View File

@ -6,6 +6,7 @@ import (
"shylinux.com/x/icebergs/base/cli" "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/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/core/code"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
@ -170,8 +171,8 @@ func init() {
}}, }},
aaa.INVITE: {Name: "invite", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { aaa.INVITE: {Name: "invite", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(code.PUBLISH, ice.CONTEXTS) m.Cmdy(code.PUBLISH, ice.CONTEXTS)
m.Cmd(code.PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) m.Cmd(code.PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_SH)
m.Cmd(code.PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) m.Cmd(code.PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_BIN)
}}, }},
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) { SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
_header_share(m, arg...) _header_share(m, arg...)

View File

@ -149,7 +149,7 @@ func init() {
switch arg[0] { switch arg[0] {
case kit.MDB_MAIN: case kit.MDB_MAIN:
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go`}) m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go`})
m.RenameAppend(kit.MDB_PATH, arg[0]) m.RenameAppend(nfs.PATH, arg[0])
} }
}}, }},
mdb.CREATE: {Name: "create main=src/main.go@key key zone type=Zone,Hash,Data name=hi list help", Help: "模块", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create main=src/main.go@key key zone type=Zone,Hash,Data name=hi list help", Help: "模块", Hand: func(m *ice.Message, arg ...string) {

View File

@ -38,16 +38,16 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_TYPE, nfs.CAT) m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Option(nfs.DIR_ROOT, dir) m.Option(nfs.DIR_ROOT, dir)
m.Cmd(nfs.DIR, ice.PWD).Sort(kit.MDB_PATH).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, ice.PWD).Sort(nfs.PATH).Table(func(index int, value map[string]string, head []string) {
if path.Base(value[kit.MDB_PATH]) == "binpack.go" { if path.Base(value[nfs.PATH]) == "binpack.go" {
return return
} }
switch strings.Split(value[kit.MDB_PATH], ice.PS)[0] { switch strings.Split(value[nfs.PATH], ice.PS)[0] {
case "pluged", "trash": case "pluged", "trash":
return return
} }
pack.WriteString(_pack_file(m, path.Join(dir, value[kit.MDB_PATH]), path.Join(dir, value[kit.MDB_PATH]))) pack.WriteString(_pack_file(m, path.Join(dir, value[nfs.PATH]), path.Join(dir, value[nfs.PATH])))
}) })
pack.WriteString(ice.NL) pack.WriteString(ice.NL)
} }
@ -61,8 +61,8 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
pack.WriteString(_pack_file(m, ice.PS+k, path.Join(dir, k))) pack.WriteString(_pack_file(m, ice.PS+k, path.Join(dir, k)))
} }
for _, k := range []string{"lib", "page", "panel", "plugin"} { for _, k := range []string{"lib", "page", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Sort(kit.MDB_PATH).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, k).Sort(nfs.PATH).Table(func(index int, value map[string]string, head []string) {
pack.WriteString(_pack_file(m, ice.PS+value[kit.MDB_PATH], path.Join(dir, value[kit.MDB_PATH]))) pack.WriteString(_pack_file(m, ice.PS+value[nfs.PATH], path.Join(dir, value[nfs.PATH])))
}) })
} }
pack.WriteString(ice.NL) pack.WriteString(ice.NL)

View File

@ -8,6 +8,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -95,7 +96,7 @@ func init() {
} }
for _, i := range []string{"1", "2", "3", "8"} { for _, i := range []string{"1", "2", "3", "8"} {
if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" { if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" {
m.PushSearch(ice.CMD, MAN, kit.MDB_FILE, kit.Keys(arg[1], MAN+i), kit.MDB_LINE, 1, kit.MDB_TEXT, text) m.PushSearch(ice.CMD, MAN, nfs.FILE, kit.Keys(arg[1], MAN+i), nfs.LINE, 1, kit.MDB_TEXT, text)
} }
} }
}}, }},

View File

@ -27,7 +27,7 @@ func init() {
COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key run:button", Help: "编译", Action: map[string]*ice.Action{ COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key run:button", Help: "编译", Action: map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`}) m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`})
m.Sort(kit.MDB_PATH) m.Sort(nfs.PATH)
}}, }},
}, 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) == 0 { if len(arg) == 0 {

View File

@ -10,6 +10,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -40,7 +41,7 @@ func _go_tags(m *ice.Message, key string) {
bio := bufio.NewScanner(f) bio := bufio.NewScanner(f)
for i := 1; bio.Scan(); i++ { for i := 1; bio.Scan(); i++ {
if i == line || bio.Text() == text { if i == line || bio.Text() == text {
m.PushSearch(ice.CMD, "tags", kit.MDB_FILE, strings.TrimPrefix(file, ice.PWD), kit.MDB_LINE, kit.Format(i), kit.MDB_TEXT, bio.Text()) m.PushSearch(ice.CMD, "tags", nfs.FILE, strings.TrimPrefix(file, ice.PWD), nfs.LINE, kit.Format(i), kit.MDB_TEXT, bio.Text())
} }
} }
} }
@ -50,14 +51,14 @@ func _go_help(m *ice.Message, key string) {
if p == "" { if p == "" {
return return
} }
m.PushSearch(ice.CMD, "help", kit.MDB_FILE, key+".godoc", kit.MDB_LINE, 1, kit.MDB_TEXT, p) m.PushSearch(ice.CMD, "help", nfs.FILE, key+".godoc", nfs.LINE, 1, kit.MDB_TEXT, p)
} }
func _go_find(m *ice.Message, key string) { func _go_find(m *ice.Message, key string) {
for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, FIND, ".", "-name", key), ice.NL) { for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, FIND, ".", "-name", key), ice.NL) {
if p == "" { if p == "" {
continue continue
} }
m.PushSearch(ice.CMD, FIND, kit.MDB_FILE, strings.TrimPrefix(p, ice.PWD), kit.MDB_LINE, 1, kit.MDB_TEXT, "") m.PushSearch(ice.CMD, FIND, nfs.FILE, strings.TrimPrefix(p, ice.PWD), nfs.LINE, 1, kit.MDB_TEXT, "")
} }
} }
func _go_grep(m *ice.Message, key string) { func _go_grep(m *ice.Message, key string) {

View File

@ -94,7 +94,7 @@ func init() {
return return
} }
if len(arg) < 2 { if len(arg) < 2 {
nfs.Dir(m, kit.MDB_PATH) nfs.Dir(m, nfs.PATH)
m.Set(ice.MSG_STATUS) m.Set(ice.MSG_STATUS)
return return
} }

View File

@ -18,7 +18,7 @@ import (
func _install_download(m *ice.Message) { func _install_download(m *ice.Message) {
link := m.Option(kit.MDB_LINK) link := m.Option(kit.MDB_LINK)
name := path.Base(link) name := path.Base(link)
file := path.Join(kit.Select(m.Config(kit.MDB_PATH), m.Option(kit.MDB_PATH)), name) file := path.Join(kit.Select(m.Config(nfs.PATH), m.Option(nfs.PATH)), name)
defer m.Cmdy(nfs.DIR, file) defer m.Cmdy(nfs.DIR, file)
if _, e := os.Stat(file); e == nil { if _, e := os.Stat(file); e == nil {
@ -46,7 +46,7 @@ func _install_download(m *ice.Message) {
// 下载 // 下载
msg := m.Cmd("web.spide", ice.DEV, web.SPIDE_CACHE, web.SPIDE_GET, link) msg := m.Cmd("web.spide", ice.DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE)) m.Cmd(nfs.LINK, file, msg.Append(nfs.FILE))
// 解压 // 解压
m.Option(cli.CMD_DIR, path.Dir(file)) m.Option(cli.CMD_DIR, path.Dir(file))
@ -54,7 +54,7 @@ func _install_download(m *ice.Message) {
}) })
} }
func _install_build(m *ice.Message, arg ...string) { func _install_build(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, path.Join(m.Config(kit.MDB_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))) p := m.Option(cli.CMD_DIR, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
pp := kit.Path(path.Join(p, "_install")) pp := kit.Path(path.Join(p, "_install"))
// 推流 // 推流
@ -90,7 +90,7 @@ func _install_build(m *ice.Message, arg ...string) {
m.Toast(ice.SUCCESS, cli.BUILD) m.Toast(ice.SUCCESS, cli.BUILD)
} }
func _install_order(m *ice.Message, arg ...string) { func _install_order(m *ice.Message, arg ...string) {
p := path.Join(m.Config(kit.MDB_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), m.Option(kit.MDB_PATH)+ice.NL) p := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), m.Option(nfs.PATH)+ice.NL)
if !strings.Contains(m.Cmdx(nfs.CAT, ice.ETC_PATH), p) { if !strings.Contains(m.Cmdx(nfs.CAT, ice.ETC_PATH), p) {
m.Cmd(nfs.PUSH, ice.ETC_PATH, p) m.Cmd(nfs.PUSH, ice.ETC_PATH, p)
} }
@ -108,10 +108,10 @@ func _install_spawn(m *ice.Message, arg ...string) {
} }
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT)) target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT))
source := path.Join(m.Config(kit.MDB_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))) source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], ice.PS), target) m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[nfs.PATH], ice.PS), target)
}) })
m.Echo(target) m.Echo(target)
} }
@ -154,7 +154,7 @@ const INSTALL = "install"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data( INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL, kit.MDB_SHORT, kit.MDB_NAME, nfs.PATH, ice.USR_INSTALL,
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{ INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
@ -174,9 +174,9 @@ func init() {
_install_start(m, arg...) _install_start(m, arg...)
}}, }},
cli.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) { cli.SOURCE: {Name: "source link path", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, path.Join(m.Config(kit.MDB_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), "_install")) m.Option(nfs.DIR_ROOT, path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(kit.MDB_LINK)), "_install"))
defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT)) defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT))
m.Cmdy(nfs.DIR, m.Option(kit.MDB_PATH)) m.Cmdy(nfs.DIR, m.Option(nfs.PATH))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch len(arg) { switch len(arg) {

View File

@ -48,7 +48,7 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case BINNARY: case BINNARY:
m.Cmdy(nfs.DIR, "bin/", "path,size,time").RenameAppend(kit.MDB_PATH, BINNARY) m.Cmdy(nfs.DIR, "bin/", "path,size,time").RenameAppend(nfs.PATH, BINNARY)
case SERVICE: case SERVICE:
m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) { m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) {
m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile")) m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile"))

View File

@ -24,7 +24,7 @@ func _bin_list(m *ice.Message, dir string) {
if s, e := os.Stat(path.Join(p, file)); e == nil { if s, e := os.Stat(path.Join(p, file)); e == nil {
m.Push(kit.MDB_TIME, s.ModTime()) m.Push(kit.MDB_TIME, s.ModTime())
m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size())) m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size()))
m.Push(kit.MDB_FILE, file) m.Push(nfs.FILE, file)
m.PushDownload(kit.MDB_LINK, file, path.Join(p, file)) m.PushDownload(kit.MDB_LINK, file, path.Join(p, file))
} }
} }
@ -44,7 +44,7 @@ func _publish_file(m *ice.Message, file string, arg ...string) string {
} }
// 发布文件 // 发布文件
target := path.Join(m.Config(kit.MDB_PATH), kit.Select(path.Base(file), arg, 0)) target := path.Join(m.Config(nfs.PATH), kit.Select(path.Base(file), arg, 0))
m.Log_EXPORT(PUBLISH, target, kit.MDB_FROM, file) m.Log_EXPORT(PUBLISH, target, kit.MDB_FROM, file)
m.Cmd(nfs.LINK, target, file) m.Cmd(nfs.LINK, target, file)
return target return target
@ -52,7 +52,7 @@ func _publish_file(m *ice.Message, file string, arg ...string) string {
func _publish_list(m *ice.Message, arg ...string) { func _publish_list(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_REG, kit.Select("", arg, 0)) m.Option(nfs.DIR_REG, kit.Select("", arg, 0))
m.Option(nfs.DIR_ROOT, m.Config(kit.MDB_PATH)) m.Option(nfs.DIR_ROOT, m.Config(nfs.PATH))
m.Cmdy(nfs.DIR, ice.PWD, kit.Select("time,size,line,path,link", arg, 1)) m.Cmdy(nfs.DIR, ice.PWD, kit.Select("time,size,line,path,link", arg, 1))
} }
@ -61,7 +61,7 @@ const PUBLISH = "publish"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(
kit.MDB_PATH, ice.USR_PUBLISH, ice.CONTEXTS, _contexts, nfs.PATH, ice.USR_PUBLISH, ice.CONTEXTS, _contexts,
SH, `#!/bin/bash SH, `#!/bin/bash
echo "hello world" echo "hello world"
`, `,
@ -71,30 +71,30 @@ echo "hello world"
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell export", Help: "发布", Action: map[string]*ice.Action{ PUBLISH: {Name: "publish path auto create volcanos icebergs intshell export", Help: "发布", Action: map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Config(kit.MDB_PATH)) m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Config(nfs.PATH))
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey()) m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
m.Config(ice.CONTEXTS, _contexts) m.Config(ice.CONTEXTS, _contexts)
}}, }},
ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }() defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.CORE) }() defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.CORE) }()
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS_SH) m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.ETC_MISS_SH)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD) m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.GO_MOD)
m.Cmd(nfs.DEFS, path.Join(m.Config(kit.MDB_PATH), ice.ORDER_JS), m.Config(JS)) m.Cmd(nfs.DEFS, path.Join(m.Config(nfs.PATH), ice.ORDER_JS), m.Config(JS))
m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_JS), "") m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_JS), "")
m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_CSS), "") m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_CSS), "")
_publish_list(m, `.*\.(html|css|js)$`) _publish_list(m, `.*\.(html|css|js)$`)
}}, }},
ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.BASE) }() defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.BASE) }()
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_BIN)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_SH)
_bin_list(m, m.Config(kit.MDB_PATH)) _bin_list(m, m.Config(nfs.PATH))
}}, }},
ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.MISC) }() defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.MISC) }()
m.Cmd(nfs.DEFS, path.Join(m.Config(kit.MDB_PATH), ice.ORDER_SH), m.Config(SH)) m.Cmd(nfs.DEFS, path.Join(m.Config(nfs.PATH), ice.ORDER_SH), m.Config(SH))
_publish_list(m, ".*\\.(sh|vim|conf)$") _publish_list(m, ".*\\.(sh|vim|conf)$")
}}, }},
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
@ -115,11 +115,11 @@ echo "hello world"
m.ProcessAgain() m.ProcessAgain()
}}, }},
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, m.Option(kit.MDB_FILE)) _publish_file(m, m.Option(nfs.FILE))
}}, }},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Config(kit.MDB_PATH)) p := m.Option(cli.CMD_DIR, m.Config(nfs.PATH))
os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) os.Remove(path.Join(p, m.Option(nfs.PATH)))
}}, }},
mdb.EXPORT: {Name: "export", Help: "工具链", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "工具链", Hand: func(m *ice.Message, arg ...string) {
var list = []string{} var list = []string{}
@ -152,7 +152,7 @@ echo "hello world"
m.ToastSuccess() m.ToastSuccess()
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Config(kit.MDB_PATH)) m.Option(nfs.DIR_ROOT, m.Config(nfs.PATH))
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link") m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link")
}}, }},
}}) }})

View File

@ -6,6 +6,7 @@ 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/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -16,27 +17,27 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict( UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict(
cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List( cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List(
kit.MDB_TYPE, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, ice.BIN_ICE_SH, kit.MDB_TYPE, "bin", nfs.FILE, "ice.sh", nfs.PATH, ice.BIN_ICE_SH,
kit.MDB_TYPE, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, ice.BIN_ICE_BIN, kit.MDB_TYPE, "bin", nfs.FILE, "ice.bin", nfs.PATH, ice.BIN_ICE_BIN,
)), )),
cli.SOURCE, kit.Dict(kit.MDB_LIST, kit.List( cli.SOURCE, kit.Dict(kit.MDB_LIST, kit.List(
kit.MDB_TYPE, "txt", kit.MDB_FILE, "main.go", kit.MDB_PATH, ice.SRC_MAIN_GO, kit.MDB_TYPE, "txt", nfs.FILE, "main.go", nfs.PATH, ice.SRC_MAIN_GO,
kit.MDB_TYPE, "txt", kit.MDB_FILE, "miss.sh", kit.MDB_PATH, ice.ETC_MISS_SH, kit.MDB_TYPE, "txt", nfs.FILE, "miss.sh", nfs.PATH, ice.ETC_MISS_SH,
kit.MDB_TYPE, "txt", kit.MDB_FILE, "go.mod", kit.MDB_PATH, ice.GO_MOD, kit.MDB_TYPE, "txt", nfs.FILE, "go.mod", nfs.PATH, ice.GO_MOD,
)), )),
))}, ))},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
UPGRADE: {Name: "upgrade item=system,source run:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { UPGRADE: {Name: "upgrade item=system,source run:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) { m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
if value[kit.MDB_PATH] == ice.BIN_ICE_BIN { // 程序文件 if value[nfs.PATH] == ice.BIN_ICE_BIN { // 程序文件
value[kit.MDB_FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH) value[nfs.FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)
m.Option(ice.EXIT, ice.TRUE) m.Option(ice.EXIT, ice.TRUE)
} }
// 下载文件 // 下载文件
msg := m.Cmd(web.SPIDE, ice.DEV, web.SPIDE_CACHE, web.SPIDE_GET, "/publish/"+kit.Format(value[kit.MDB_FILE])) msg := m.Cmd(web.SPIDE, ice.DEV, web.SPIDE_CACHE, web.SPIDE_GET, "/publish/"+kit.Format(value[nfs.FILE]))
m.Cmd(web.STORY, web.WATCH, msg.Append(kit.MDB_FILE), value[kit.MDB_PATH]) m.Cmd(web.STORY, web.WATCH, msg.Append(nfs.FILE), value[nfs.PATH])
os.Chmod(kit.Format(value[kit.MDB_PATH]), 0770) os.Chmod(kit.Format(value[nfs.PATH]), 0770)
}) })
if m.Option(ice.EXIT) == ice.TRUE { if m.Option(ice.EXIT) == ice.TRUE {
m.Sleep("1s").Go(func() { m.Cmd(ice.EXIT, 1) }) m.Sleep("1s").Go(func() { m.Cmd(ice.EXIT, 1) })

View File

@ -18,7 +18,7 @@ func init() {
ice.Display("/plugin/local/code/vimer.js", INNER), ice.Display("/plugin/local/code/vimer.js", INNER),
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) { nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE))) m.Cmdy(nfs.SAVE, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)))
}}, }},
ice.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, GO, ice.RUN, path.Join(kit.Slice(arg, 0, 2)...)) m.Cmdy(cli.SYSTEM, GO, ice.RUN, path.Join(kit.Slice(arg, 0, 2)...))

View File

@ -12,10 +12,10 @@ import (
) )
func _volcanos(m *ice.Message, file ...string) string { func _volcanos(m *ice.Message, file ...string) string {
return path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), path.Join(file...)) return path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), path.Join(file...))
} }
func _publish(m *ice.Message, file ...string) string { func _publish(m *ice.Message, file ...string) string {
return path.Join(m.Conf(PUBLISH, kit.Keym(kit.MDB_PATH)), path.Join(file...)) return path.Join(m.Conf(PUBLISH, kit.Keym(nfs.PATH)), path.Join(file...))
} }
const ( const (
@ -50,18 +50,18 @@ func init() {
for _, k := range []string{"lib", "panel", "plugin"} { for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
if kit.Ext(value[kit.MDB_PATH]) == CSS { if kit.Ext(value[nfs.PATH]) == CSS {
js.WriteString(`Volcanos.meta.cache["` + path.Join(ice.PS, value[kit.MDB_PATH]) + "\"] = []\n") js.WriteString(`Volcanos.meta.cache["` + path.Join(ice.PS, value[nfs.PATH]) + "\"] = []\n")
css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) css.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH]))
} }
}) })
} }
js.WriteString(ice.NL) js.WriteString(ice.NL)
for _, k := range []string{"lib", "panel", "plugin"} { for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
if kit.Ext(value[kit.MDB_PATH]) == JS { if kit.Ext(value[nfs.PATH]) == JS {
js.WriteString(`_can_name = "` + path.Join(ice.PS, value[kit.MDB_PATH]) + "\";\n") js.WriteString(`_can_name = "` + path.Join(ice.PS, value[nfs.PATH]) + "\";\n")
js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) js.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH]))
} }
}) })
} }

View File

@ -11,7 +11,7 @@ const DATA = "data"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data( DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(
kit.MDB_PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.csv", nfs.PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.csv",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict( DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict(

View File

@ -6,6 +6,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -15,14 +16,14 @@ const FEEL = "feel"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data( FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data(
kit.MDB_PATH, ice.USR_LOCAL_IMAGE, kit.MDB_REGEXP, ".*.(png|PNG|jpg|JPG|jpeg|mp4|m4v|MOV)", nfs.PATH, ice.USR_LOCAL_IMAGE, kit.MDB_REGEXP, ".*.(png|PNG|jpg|JPG|jpeg|mp4|m4v|MOV)",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
FEEL: {Name: "feel path auto upload 上一页 下一页 actions", Help: "影音媒体", Meta: kit.Dict( FEEL: {Name: "feel path auto upload 上一页 下一页 actions", Help: "影音媒体", Meta: kit.Dict(
ice.Display("/plugin/local/wiki/feel.js"), ice.Display("/plugin/local/wiki/feel.js"),
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
_wiki_upload(m, m.CommandKey(), m.Option(kit.MDB_PATH)) _wiki_upload(m, m.CommandKey(), m.Option(nfs.PATH))
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
os.Remove(strings.TrimPrefix(arg[0], "/share/local/")) os.Remove(strings.TrimPrefix(arg[0], "/share/local/"))

View File

@ -5,6 +5,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -34,7 +35,7 @@ func init() {
}, Configs: map[string]*ice.Config{ }, Configs: map[string]*ice.Config{
IMAGE: {Name: IMAGE, Help: "图片", Value: kit.Data( IMAGE: {Name: IMAGE, Help: "图片", Value: kit.Data(
kit.MDB_TEMPLATE, `<img {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}">`, kit.MDB_TEMPLATE, `<img {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}">`,
kit.MDB_PATH, ice.USR_LOCAL_IMAGE, nfs.PATH, ice.USR_LOCAL_IMAGE,
)}, )},
}}) }})
} }

View File

@ -52,7 +52,7 @@ const JSON = "json"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
JSON: {Name: JSON, Help: "数据结构", Value: kit.Data( JSON: {Name: JSON, Help: "数据结构", Value: kit.Data(
kit.MDB_PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.json", nfs.PATH, ice.USR_LOCAL_EXPORT, kit.MDB_REGEXP, ".*\\.json",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
JSON: {Name: "json path auto", Help: "数据结构", Meta: kit.Dict( JSON: {Name: "json path auto", Help: "数据结构", Meta: kit.Dict(

View File

@ -5,6 +5,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -32,7 +33,7 @@ func init() {
}, Configs: map[string]*ice.Config{ }, Configs: map[string]*ice.Config{
VIDEO: {Name: "video", Help: "视频", Value: kit.Data( VIDEO: {Name: "video", Help: "视频", Value: kit.Data(
kit.MDB_TEMPLATE, `<video {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}" controls></video>`, kit.MDB_TEMPLATE, `<video {{.OptionTemplate}} title="{{.Option "text"}}" src="{{.Option "text"}}" controls></video>`,
kit.MDB_PATH, ice.USR_LOCAL_IMAGE, nfs.PATH, ice.USR_LOCAL_IMAGE,
)}, )},
}}) }})
} }

View File

@ -25,7 +25,7 @@ const WORD = "word"
func init() { func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
WORD: {Name: WORD, Help: "语言文字", Value: kit.Data( WORD: {Name: WORD, Help: "语言文字", Value: kit.Data(
kit.MDB_PATH, "", kit.MDB_REGEXP, ".*\\.shy", kit.MDB_ALIAS, kit.Dict( nfs.PATH, "", kit.MDB_REGEXP, ".*\\.shy", kit.MDB_ALIAS, kit.Dict(
NAVMENU, kit.List(TITLE, NAVMENU), NAVMENU, kit.List(TITLE, NAVMENU),
PREMENU, kit.List(TITLE, PREMENU), PREMENU, kit.List(TITLE, PREMENU),
CHAPTER, kit.List(TITLE, CHAPTER), CHAPTER, kit.List(TITLE, CHAPTER),

View File

@ -8,6 +8,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/core/wiki" "shylinux.com/x/icebergs/core/wiki"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -67,7 +68,7 @@ var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ALPHA: {Name: "alpha method=word,line word auto", Help: "英汉", Action: map[string]*ice.Action{ ALPHA: {Name: "alpha method=word,line word auto", Help: "英汉", Action: map[string]*ice.Action{
mdb.IMPORT: {Name: "import file=usr/word-dict/ecdict name=ecdict", Help: "加载词库", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import file=usr/word-dict/ecdict name=ecdict", Help: "加载词库", Hand: func(m *ice.Message, arg ...string) {
_alpha_load(m, m.Option(kit.MDB_FILE), kit.Select(path.Base(m.Option(kit.MDB_FILE)), m.Option(kit.MDB_NAME))) _alpha_load(m, m.Option(nfs.FILE), kit.Select(path.Base(m.Option(nfs.FILE)), m.Option(kit.MDB_NAME)))
}}, }},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == ALPHA { if arg[0] == ALPHA {

View File

@ -2,6 +2,7 @@ package bash
import ( import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/core/chat" "shylinux.com/x/icebergs/core/chat"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
@ -17,7 +18,7 @@ func init() {
// 下载文件 // 下载文件
m.Cmdy(web.CACHE, m.Cmd(chat.FILES, arg[0]).Append(kit.MDB_DATA)) m.Cmdy(web.CACHE, m.Cmd(chat.FILES, arg[0]).Append(kit.MDB_DATA))
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(kit.MDB_FILE) == ""), m.Append(kit.MDB_TEXT)) m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(nfs.FILE) == ""), m.Append(kit.MDB_TEXT))
}}, }},
"/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
msg := m.Cmd(chat.FILES, web.UPLOAD) // 上传文件 msg := m.Cmd(chat.FILES, web.UPLOAD) // 上传文件

View File

@ -16,7 +16,7 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
CACHE: {Name: CACHE, Help: "爬虫缓存", Value: kit.Data( CACHE: {Name: CACHE, Help: "爬虫缓存", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_FIELD, "time,hash,step,size,total,type,name,text,link", kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_FIELD, "time,hash,step,size,total,type,name,text,link",
kit.MDB_PATH, ice.USR_LOCAL_IMAGE, nfs.PATH, ice.USR_LOCAL_IMAGE,
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
CACHE: {Name: "cache hash auto prunes", Help: "爬虫缓存", Action: ice.MergeAction(map[string]*ice.Action{ CACHE: {Name: "cache hash auto prunes", Help: "爬虫缓存", Action: ice.MergeAction(map[string]*ice.Action{
@ -31,8 +31,8 @@ func init() {
value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.MDB_STEP] = total, size, kit.Format(size*100/total) value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.MDB_STEP] = total, size, kit.Format(size*100/total)
}) })
p := path.Join(m.Config(kit.MDB_PATH), m.Option(kit.MDB_NAME)) p := path.Join(m.Config(nfs.PATH), m.Option(kit.MDB_NAME))
m.Cmdy(nfs.LINK, p, msg.Append(kit.MDB_FILE)) m.Cmdy(nfs.LINK, p, msg.Append(nfs.FILE))
m.Toast("下载成功") m.Toast("下载成功")
}}, }},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {

View File

@ -24,7 +24,7 @@ func _repos_path(name string) string {
func _repos_insert(m *ice.Message, name string, dir string) { func _repos_insert(m *ice.Message, name string, dir string) {
if s, e := os.Stat(m.Option(cli.CMD_DIR, path.Join(dir, ".git"))); e == nil && s.IsDir() { if s, e := os.Stat(m.Option(cli.CMD_DIR, path.Join(dir, ".git"))); e == nil && s.IsDir() {
ls := strings.SplitN(strings.Trim(m.Cmdx(cli.SYSTEM, GIT, "log", "-n1", `--pretty=format:"%ad %s"`, "--date=iso"), `"`), ice.SP, 4) ls := strings.SplitN(strings.Trim(m.Cmdx(cli.SYSTEM, GIT, "log", "-n1", `--pretty=format:"%ad %s"`, "--date=iso"), `"`), ice.SP, 4)
m.Rich(REPOS, nil, kit.Data(kit.MDB_NAME, name, kit.MDB_PATH, dir, m.Rich(REPOS, nil, kit.Data(kit.MDB_NAME, name, nfs.PATH, dir,
COMMIT, kit.Select("", ls, 3), kit.MDB_TIME, strings.Join(ls[:2], ice.SP), COMMIT, kit.Select("", ls, 3), kit.MDB_TIME, strings.Join(ls[:2], ice.SP),
BRANCH, strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, BRANCH)), BRANCH, strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, BRANCH)),
REMOTE, strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, REMOTE, "-v")), REMOTE, strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, REMOTE, "-v")),
@ -55,30 +55,30 @@ func init() {
m.Conf(REPOS, kit.MDB_HASH, "") m.Conf(REPOS, kit.MDB_HASH, "")
_repos_insert(m, path.Base(kit.Pwd()), kit.Pwd()) _repos_insert(m, path.Base(kit.Pwd()), kit.Pwd())
m.Cmd(nfs.DIR, ice.USR, "name,path").Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, ice.USR, "name,path").Table(func(index int, value map[string]string, head []string) {
_repos_insert(m, value[kit.MDB_NAME], value[kit.MDB_PATH]) _repos_insert(m, value[kit.MDB_NAME], value[nfs.PATH])
}) })
}}, }},
mdb.CREATE: {Name: "create repos branch name path", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create repos branch name path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Option(kit.MDB_NAME, kit.Select(strings.TrimSuffix(path.Base(m.Option(REPOS)), ".git"), m.Option(kit.MDB_NAME))) m.Option(kit.MDB_NAME, kit.Select(strings.TrimSuffix(path.Base(m.Option(REPOS)), ".git"), m.Option(kit.MDB_NAME)))
m.Option(kit.MDB_PATH, kit.Select(path.Join(ice.USR, m.Option(kit.MDB_NAME)), m.Option(kit.MDB_PATH))) m.Option(nfs.PATH, kit.Select(path.Join(ice.USR, m.Option(kit.MDB_NAME)), m.Option(nfs.PATH)))
m.Option(REPOS, kit.Select(m.Config(REPOS)+ice.PS+m.Option(kit.MDB_NAME), m.Option(REPOS))) m.Option(REPOS, kit.Select(m.Config(REPOS)+ice.PS+m.Option(kit.MDB_NAME), m.Option(REPOS)))
if s, e := os.Stat(path.Join(m.Option(kit.MDB_PATH), ".git")); e == nil && s.IsDir() { if s, e := os.Stat(path.Join(m.Option(nfs.PATH), ".git")); e == nil && s.IsDir() {
return return
} }
// 下载仓库 // 下载仓库
if s, e := os.Stat(m.Option(kit.MDB_PATH)); e == nil && s.IsDir() { if s, e := os.Stat(m.Option(nfs.PATH)); e == nil && s.IsDir() {
m.Option(cli.CMD_DIR, m.Option(kit.MDB_PATH)) m.Option(cli.CMD_DIR, m.Option(nfs.PATH))
m.Cmd(cli.SYSTEM, GIT, INIT) m.Cmd(cli.SYSTEM, GIT, INIT)
m.Cmd(cli.SYSTEM, GIT, REMOTE, ADD, ORIGIN, m.Option(REPOS)) m.Cmd(cli.SYSTEM, GIT, REMOTE, ADD, ORIGIN, m.Option(REPOS))
m.Cmd(cli.SYSTEM, GIT, PULL, ORIGIN, MASTER) m.Cmd(cli.SYSTEM, GIT, PULL, ORIGIN, MASTER)
} else { } else {
m.Cmd(cli.SYSTEM, GIT, CLONE, "-b", kit.Select(MASTER, m.Option(BRANCH)), m.Cmd(cli.SYSTEM, GIT, CLONE, "-b", kit.Select(MASTER, m.Option(BRANCH)),
m.Option(REPOS), m.Option(kit.MDB_PATH)) m.Option(REPOS), m.Option(nfs.PATH))
} }
_repos_insert(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_PATH)) _repos_insert(m, m.Option(kit.MDB_NAME), m.Option(nfs.PATH))
}}, }},
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 仓库列表 if len(arg) == 0 { // 仓库列表

View File

@ -43,8 +43,8 @@ func _spide_go(m *ice.Message, file string) {
} }
m.Push(kit.MDB_NAME, ls[0]) m.Push(kit.MDB_NAME, ls[0])
m.Push(kit.MDB_FILE, ls[1]) m.Push(nfs.FILE, ls[1])
m.Push(kit.MDB_LINE, strings.TrimSuffix(ls[2], ";\"")) m.Push(nfs.LINE, strings.TrimSuffix(ls[2], ";\""))
m.Push(kit.MDB_TYPE, ls[3]) m.Push(kit.MDB_TYPE, ls[3])
m.Push(kit.MDB_EXTRA, strings.Join(ls[4:], ice.SP)) m.Push(kit.MDB_EXTRA, strings.Join(ls[4:], ice.SP))
}) })
@ -52,8 +52,8 @@ func _spide_go(m *ice.Message, file string) {
func _spide_c(m *ice.Message, file string) { func _spide_c(m *ice.Message, file string) {
_spide_for(m.Cmdx(cli.SYSTEM, "ctags", "-f", "-", file), func(ls []string) { _spide_for(m.Cmdx(cli.SYSTEM, "ctags", "-f", "-", file), func(ls []string) {
m.Push(kit.MDB_NAME, ls[0]) m.Push(kit.MDB_NAME, ls[0])
m.Push(kit.MDB_FILE, ls[1]) m.Push(nfs.FILE, ls[1])
m.Push(kit.MDB_LINE, "1") m.Push(nfs.LINE, "1")
}) })
} }
@ -61,10 +61,48 @@ const SPIDE = "spide"
func init() { func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
SPIDE: {Name: "spide name auto", Help: "构架图", Action: ice.MergeAction(map[string]*ice.Action{ SPIDE: {Name: "spide name auto depend", Help: "构架图", Action: ice.MergeAction(map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(REPOS, ice.OptionFields("name,time")) m.Cmdy(REPOS, ice.OptionFields("name,time"))
}}, code.INNER: {Name: "web.code.inner"}, }}, code.INNER: {Name: "web.code.inner"},
"depend": {Name: "depend path=icebergs/base", Help: "依赖", Hand: func(m *ice.Message, arg ...string) {
keys := map[string]bool{}
list := map[string]map[string]bool{}
dir := path.Join(ice.USR, m.Option(nfs.PATH)) + ice.PS
_spide_for(m.Cmdx(cli.SYSTEM, "gotags", "-R", dir), func(ls []string) {
if kit.Select("", ls, 3) != "i" {
return
}
if !strings.Contains(ls[0], m.Option(nfs.PATH)) {
return
}
item, ok := list[ls[0]]
if !ok {
item = map[string]bool{}
list[ls[0]] = item
}
p := strings.TrimPrefix(path.Dir(ls[1]), path.Join(ice.USR, m.Option(nfs.PATH)))
keys[p], item[p] = true, true
})
item := []string{}
for k := range keys {
item = append(item, k)
}
item = kit.Sort(item)
for k, v := range list {
m.Push("pkg", k)
m.Push("count", len(v))
for _, i := range item {
m.Push(i, kit.Select("", "ok", v[i]))
}
}
m.SortIntR("count")
m.ProcessInner()
}},
}, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, ctx.CmdAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 仓库列表 if len(arg) == 0 { // 仓库列表
m.Cmdy(REPOS) m.Cmdy(REPOS)
@ -81,8 +119,8 @@ func init() {
if len(arg) == 1 { // 目录列表 if len(arg) == 1 { // 目录列表
m.Option(nfs.DIR_DEEP, ice.TRUE) m.Option(nfs.DIR_DEEP, ice.TRUE)
color := []string{cli.YELLOW, cli.BLUE, cli.CYAN, cli.RED} color := []string{cli.YELLOW, cli.BLUE, cli.CYAN, cli.RED}
nfs.Dir(m, kit.MDB_PATH).Table(func(index int, value map[string]string, head []string) { nfs.Dir(m, nfs.PATH).Table(func(index int, value map[string]string, head []string) {
m.Push(kit.MDB_COLOR, color[strings.Count(value[kit.MDB_PATH], ice.PS)%len(color)]) m.Push(kit.MDB_COLOR, color[strings.Count(value[nfs.PATH], ice.PS)%len(color)])
}) })
return return
} }
@ -97,7 +135,7 @@ func init() {
default: default:
_spide_c(m, arg[1]) _spide_c(m, arg[1])
} }
m.SortInt(kit.MDB_LINE) m.SortInt(nfs.LINE)
}}, }},
}}) }})
} }

View File

@ -92,7 +92,7 @@ func _status_each(m *ice.Message, title string, cmds ...string) {
m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) { m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) {
toast(value[kit.MDB_NAME], count, total) toast(value[kit.MDB_NAME], count, total)
if msg := m.Cmd(cmds, ice.Option{cli.CMD_DIR, value[kit.MDB_PATH]}); !cli.IsSuccess(msg) { if msg := m.Cmd(cmds, ice.Option{cli.CMD_DIR, value[nfs.PATH]}); !cli.IsSuccess(msg) {
m.Toast3s(msg.Append(cli.CMD_ERR), "error: "+value[kit.MDB_NAME]) m.Toast3s(msg.Append(cli.CMD_ERR), "error: "+value[kit.MDB_NAME])
list = append(list, value[kit.MDB_NAME]) list = append(list, value[kit.MDB_NAME])
m.Sleep3s() m.Sleep3s()
@ -123,7 +123,7 @@ func _status_stat(m *ice.Message, files, adds, dels int) (int, int, int) {
} }
func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) { func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) { m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) {
m.Option(cli.CMD_DIR, value[kit.MDB_PATH]) m.Option(cli.CMD_DIR, value[nfs.PATH])
diff := m.Cmdx(cli.SYSTEM, GIT, STATUS, "-sb") diff := m.Cmdx(cli.SYSTEM, GIT, STATUS, "-sb")
tags := m.Cmdx(cli.SYSTEM, GIT, "describe", "--tags") tags := m.Cmdx(cli.SYSTEM, GIT, "describe", "--tags")
@ -139,7 +139,7 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
m.Push(kit.MDB_TYPE, vs[0]) m.Push(kit.MDB_TYPE, vs[0])
m.Push(kit.MDB_FILE, vs[1]) m.Push(nfs.FILE, vs[1])
list := []string{} list := []string{}
switch vs[0] { switch vs[0] {
@ -229,7 +229,7 @@ func init() {
_repos_cmd(m, m.Option(kit.MDB_NAME), PUSH, "--tags") _repos_cmd(m, m.Option(kit.MDB_NAME), PUSH, "--tags")
}}, }},
ADD: {Name: "add", Help: "添加", Hand: func(m *ice.Message, arg ...string) { ADD: {Name: "add", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_repos_cmd(m, m.Option(kit.MDB_NAME), ADD, m.Option(kit.MDB_FILE)) _repos_cmd(m, m.Option(kit.MDB_NAME), ADD, m.Option(nfs.FILE))
}}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "升级"}, }}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "升级"},
COMMIT: {Name: "commit action=opt,add,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) { COMMIT: {Name: "commit action=opt,add,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == ctx.ACTION { if arg[0] == ctx.ACTION {
@ -254,8 +254,8 @@ func init() {
} }
case COMMENT: case COMMENT:
m.Push(kit.MDB_TEXT, m.Option(kit.MDB_FILE)) m.Push(kit.MDB_TEXT, m.Option(nfs.FILE))
for _, v := range kit.Split(m.Option(kit.MDB_FILE), " /") { for _, v := range kit.Split(m.Option(nfs.FILE), " /") {
m.Push(kit.MDB_TEXT, v) m.Push(kit.MDB_TEXT, v)
} }
} }

View File

@ -55,7 +55,7 @@ func init() {
return return
} }
msg := m.Cmd("_sum", value[kit.MDB_PATH], kit.MDB_TOTAL, "10000") msg := m.Cmd("_sum", value[nfs.PATH], kit.MDB_TOTAL, "10000")
mu.Lock() mu.Lock()
defer mu.Unlock() defer mu.Unlock()

View File

@ -4,6 +4,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
"encoding/csv" "encoding/csv"
@ -213,7 +214,7 @@ func _favor_import(m *ice.Message, file string) {
count++ count++
}) })
} }
m.Log_IMPORT(kit.MDB_FILE, file, kit.MDB_COUNT, count) m.Log_IMPORT(nfs.FILE, file, kit.MDB_COUNT, count)
} }
func _favor_export(m *ice.Message, file string) { func _favor_export(m *ice.Message, file string) {
f, p, e := kit.Create(file) f, p, e := kit.Create(file)
@ -246,7 +247,7 @@ func _favor_export(m *ice.Message, file string) {
count++ count++
}) })
}) })
m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_COUNT, count) m.Log_EXPORT(nfs.FILE, p, kit.MDB_COUNT, count)
} }
func FavorInsert(m *ice.Message, zone, kind string, name interface{}, text interface{}, extra ...string) { func FavorInsert(m *ice.Message, zone, kind string, name interface{}, text interface{}, extra ...string) {

View File

@ -6,6 +6,7 @@ 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/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/core/code"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -30,14 +31,14 @@ func init() {
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) { m.Cmd(FAVOR, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) {
m.Echo("%v\n", m.Option(kit.MDB_ZONE)).Echo("%v:%v:%v:(%v): %v\n", m.Echo("%v\n", m.Option(kit.MDB_ZONE)).Echo("%v:%v:%v:(%v): %v\n",
value[kit.MDB_FILE], value[kit.MDB_LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT]) value[nfs.FILE], value[nfs.LINE], "1", value[kit.MDB_NAME], value[kit.MDB_TEXT])
}) })
}}, }},
FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{ FAVOR: {Name: "favor zone id auto", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{
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: "添加"},
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
p := path.Join(m.Option(cli.PWD), m.Option(kit.MDB_FILE)) p := path.Join(m.Option(cli.PWD), m.Option(nfs.FILE))
m.ProcessCommand(code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(kit.MDB_LINE)}, arg...) m.ProcessCommand(code.INNER, []string{path.Dir(p) + ice.PS, path.Base(p), m.Option(nfs.LINE)}, arg...)
}}, }},
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if mdb.ZoneSelect(m, arg...); len(arg) == 0 { if mdb.ZoneSelect(m, arg...); len(arg) == 0 {

View File

@ -6,6 +6,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/core/code"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -28,9 +29,9 @@ func init() {
if mdb.ZoneSelect(m, m.Option("module")); m.Length() > 0 { if mdb.ZoneSelect(m, m.Option("module")); m.Length() > 0 {
switch m.Append(kit.MDB_TYPE) { switch m.Append(kit.MDB_TYPE) {
case "function": case "function":
m.Echo("4\nusr/volcanos%s\n/\\<%s: \\(shy\\|func\\)/\n", m.Append(kit.MDB_FILE), m.Option("pattern")) m.Echo("4\nusr/volcanos%s\n/\\<%s: \\(shy\\|func\\)/\n", m.Append(nfs.FILE), m.Option("pattern"))
default: default:
m.Echo("4\nusr/volcanos%s\n/\\<%s: /\n", m.Append(kit.MDB_FILE), m.Option("pattern")) m.Echo("4\nusr/volcanos%s\n/\\<%s: /\n", m.Append(nfs.FILE), m.Option("pattern"))
} }
return return
} }
@ -41,9 +42,9 @@ func init() {
mdb.INSERT: {Name: "insert zone=core type name=hi text=hello file line", Help: "添加"}, mdb.INSERT: {Name: "insert zone=core type name=hi text=hello file line", Help: "添加"},
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
m.ProcessCommand(code.INNER, []string{ m.ProcessCommand(code.INNER, []string{
kit.Select(ice.PWD, path.Dir(m.Option(kit.MDB_FILE))), kit.Select(ice.PWD, path.Dir(m.Option(nfs.FILE))),
path.Base(m.Option(kit.MDB_FILE)), path.Base(m.Option(nfs.FILE)),
m.Option(kit.MDB_LINE), m.Option(nfs.LINE),
}, arg...) }, arg...)
}}, }},
"listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) { "listTags": {Name: "listTags", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
@ -64,7 +65,7 @@ func init() {
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
m.Echo("func\n").Table(func(index int, value map[string]string, head []string) { m.Echo("func\n").Table(func(index int, value map[string]string, head []string) {
m.Echo(arg[0] + ice.PT + value[kit.MDB_NAME] + ice.NL) m.Echo(arg[0] + ice.PT + value[kit.MDB_NAME] + ice.NL)
m.Echo("%s: %s: %s // %s\n", value[kit.MDB_TYPE], value[kit.MDB_NAME], strings.Split(value[kit.MDB_TEXT], ice.NL)[0], value[kit.MDB_FILE]) m.Echo("%s: %s: %s // %s\n", value[kit.MDB_TYPE], value[kit.MDB_NAME], strings.Split(value[kit.MDB_TEXT], ice.NL)[0], value[nfs.FILE])
}) })
return return
} }