1
0
forked from x/icebergs

add email

This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-08-19 22:07:01 +08:00
parent a3b915b34a
commit c9a8bbbcf4
15 changed files with 49 additions and 18 deletions

View File

@ -24,7 +24,11 @@ func init() {
DF = ": " DF = ": "
) )
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
EMAIL: {Name: "email name auto create", Help: "邮件", Actions: ice.MergeActions(ice.Actions{ EMAIL: {Name: "email name auto create website", Help: "邮件", Actions: ice.MergeActions(ice.Actions{
"website": {Help: "邮箱", Hand: func(m *ice.Message, arg ...string) {
// m.ProcessOpen(m.Cmdv("web.spide", EMAIL, "client.url"))
m.EchoIFrame(m.Cmdv("web.spide", EMAIL, "client.url")).ProcessInner()
}},
SEND: {Name: "send to*='shylinux@163.com' subject*=hi content*:textarea=hello", Help: "发送", Hand: func(m *ice.Message, arg ...string) { SEND: {Name: "send to*='shylinux@163.com' subject*=hi content*:textarea=hello", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
msg := m.Cmd("", m.OptionDefault(mdb.NAME, ADMIN)) msg := m.Cmd("", m.OptionDefault(mdb.NAME, ADMIN))
if m.Warn(msg.Append(SERVICE) == "", ice.ErrNotValid, SERVICE) { if m.Warn(msg.Append(SERVICE) == "", ice.ErrNotValid, SERVICE) {

View File

@ -126,6 +126,7 @@ const (
const ( const (
CTX_SHY = "ctx_shy" CTX_SHY = "ctx_shy"
CTX_COM = "ctx_com" CTX_COM = "ctx_com"
CTX_HUB = "ctx_hub"
CTX_DEV = "ctx_dev" CTX_DEV = "ctx_dev"
CTX_OPS = "ctx_ops" CTX_OPS = "ctx_ops"
CTX_ARG = "ctx_arg" CTX_ARG = "ctx_arg"
@ -137,7 +138,7 @@ const (
CTX_DAEMON = "ctx_daemon" CTX_DAEMON = "ctx_daemon"
) )
var ENV_LIST = []string{TZ, LANG, TERM, SHELL, CTX_SHY, CTX_COM, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_DAEMON} var ENV_LIST = []string{TZ, LANG, TERM, SHELL, CTX_SHY, CTX_HUB, CTX_COM, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_DAEMON}
const ( const (
HOSTNAME = "hostname" HOSTNAME = "hostname"

View File

@ -105,7 +105,9 @@ func CmdInputs(m *ice.Message, arg ...string) {
case INDEX: case INDEX:
m.Cmdy(COMMAND, mdb.SEARCH, COMMAND, ice.OptionFields(INDEX)) m.Cmdy(COMMAND, mdb.SEARCH, COMMAND, ice.OptionFields(INDEX))
case ARGS: case ARGS:
m.Cmdy(m.Option(INDEX)) if m.Cmdy(m.Option(INDEX), mdb.INPUTS, arg); m.Length() == 0 {
m.Cmdy(m.Option(INDEX))
}
} }
} }
func PodCmd(m *ice.Message, arg ...ice.Any) bool { func PodCmd(m *ice.Message, arg ...ice.Any) bool {

View File

@ -177,9 +177,15 @@ func HashKey(m *ice.Message) string {
return HashShort(m) return HashShort(m)
} }
func HashShort(m *ice.Message) string { func HashShort(m *ice.Message) string {
if m.Option(SHORT) != "" {
return m.Option(SHORT)
}
return kit.Select(HASH, Config(m, SHORT), Config(m, SHORT) != UNIQ) return kit.Select(HASH, Config(m, SHORT), Config(m, SHORT) != UNIQ)
} }
func HashField(m *ice.Message) string { func HashField(m *ice.Message) string {
if m.Option(FIELD) != "" {
return m.Option(FIELD)
}
return kit.Select(HASH_FIELD, Config(m, FIELD)) return kit.Select(HASH_FIELD, Config(m, FIELD))
// return kit.Select(HASH_FIELD, Config(m, FIELD), Config(m, FIELDS)) // return kit.Select(HASH_FIELD, Config(m, FIELD), Config(m, FIELDS))
} }
@ -210,7 +216,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
} else { } else {
m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m)) m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m))
} }
m.Cmdy(SELECT, m.PrefixKey(), "", HASH, HashShort(m), arg, logs.FileLineMeta(-1)) m.Cmdy(SELECT, m.PrefixKey(), m.Option(SUBKEY), HASH, HashShort(m), arg, logs.FileLineMeta(-1))
kit.If(Config(m, SORT), func(sort string) { m.Sort(sort) }) kit.If(Config(m, SORT), func(sort string) { m.Sort(sort) })
if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() { if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() {
return m.StatusTimeCount() return m.StatusTimeCount()

View File

@ -121,6 +121,8 @@ const (
RANDOM = "random" RANDOM = "random"
OFFEND = "offend" OFFEND = "offend"
OFFSET = "offset" OFFSET = "offset"
SUBKEY = "subkey"
ORDER = "order"
ICON = "icon" ICON = "icon"
PAGE = "page" PAGE = "page"

View File

@ -121,6 +121,11 @@ func Append(m *ice.Message, p string, cb ice.Any) {
} }
} }
func Save(m *ice.Message, w io.Writer, s string, cb ice.Any) { func Save(m *ice.Message, w io.Writer, s string, cb ice.Any) {
switch content := m.Optionv(CONTENT).(type) {
case io.Reader:
io.Copy(w, content)
return
}
if n, e := fmt.Fprint(w, s); !m.Warn(e) { if n, e := fmt.Fprint(w, s); !m.Warn(e) {
switch cb := cb.(type) { switch cb := cb.(type) {
case func(int): case func(int):

View File

@ -56,7 +56,7 @@ const ROUTE = "route"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel prunes", Help: "路由表", Actions: ice.MergeActions(ice.Actions{ ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel monitor prunes", Help: "路由表", Actions: ice.MergeActions(ice.Actions{
ice.MAIN: {Help: "首页", Hand: func(m *ice.Message, arg ...string) { ice.MAIN: {Help: "首页", Hand: func(m *ice.Message, arg ...string) {
ctx.ProcessField(m, CHAT_IFRAME, m.MergePod(kit.Select(m.Option(SPACE), arg, 0)), arg...) ctx.ProcessField(m, CHAT_IFRAME, m.MergePod(kit.Select(m.Option(SPACE), arg, 0)), arg...)
}}, }},
@ -113,7 +113,9 @@ func init() {
PushPodCmd(m, "", m.ActionKey()) PushPodCmd(m, "", m.ActionKey())
m.Table(func(value ice.Maps) { kit.If(value[SPACE], func() { mdb.HashCreate(m.Spawn(), kit.Simple(value)) }) }) m.Table(func(value ice.Maps) { kit.If(value[SPACE], func() { mdb.HashCreate(m.Spawn(), kit.Simple(value)) }) })
m.ProcessRefresh() m.ProcessRefresh()
// m.StatusTimeCount() }},
"monitor": {Help: "监控", Hand: func(m *ice.Message, arg ...string) {
m.ProcessOpen(m.Cmdv(SPIDE, "monitor", CLIENT_URL))
}}, }},
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) { }, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 1 { if len(arg) > 1 {

View File

@ -152,6 +152,8 @@ func ShareLocalFile(m *ice.Message, arg ...string) {
} else if p := kit.Path(ice.USR_LOCAL_WORK, m.Option(ice.POD), p); nfs.Exists(m, p) { } else if p := kit.Path(ice.USR_LOCAL_WORK, m.Option(ice.POD), p); nfs.Exists(m, p) {
m.RenderDownload(p) m.RenderDownload(p)
return return
} else {
m.Debug("what %v %v", p, nfs.Exists(m, p))
} }
pp := path.Join(ice.VAR_PROXY, m.Option(ice.POD), p) pp := path.Join(ice.VAR_PROXY, m.Option(ice.POD), p)
cache, size := time.Now().Add(-time.Hour*24), int64(0) cache, size := time.Now().Add(-time.Hour*24), int64(0)

View File

@ -127,7 +127,7 @@ func _space_exec(m *ice.Message, source, target []string, c *websocket.Conn) {
} }
func _space_echo(m *ice.Message, source, target []string, c *websocket.Conn) { func _space_echo(m *ice.Message, source, target []string, c *websocket.Conn) {
if m.Options(ice.MSG_SOURCE, source, ice.MSG_TARGET, target[1:]); !m.Warn(c.WriteMessage(1, []byte(m.FormatMeta()))) { if m.Options(ice.MSG_SOURCE, source, ice.MSG_TARGET, target[1:]); !m.Warn(c.WriteMessage(1, []byte(m.FormatMeta()))) {
m.Log(tcp.SEND, "%v->%v %v %v", source, target, m.Detailv(), m.FormatsMeta(nil)) // m.Log(tcp.SEND, "%v->%v %v %v", source, target, m.Detailv(), m.FormatsMeta(nil))
} }
} }
func _space_send(m *ice.Message, name string, arg ...string) (h string) { func _space_send(m *ice.Message, name string, arg ...string) (h string) {

View File

@ -258,16 +258,17 @@ func init() {
m.Cmd("", mdb.CREATE, ice.OPS, kit.Select("http://127.0.0.1:9020", conf[cli.CTX_OPS])) m.Cmd("", mdb.CREATE, ice.OPS, kit.Select("http://127.0.0.1:9020", conf[cli.CTX_OPS]))
m.Cmd("", mdb.CREATE, ice.DEV, kit.Select(kit.Select("https://contexts.com.cn", ice.Info.Make.Domain), conf[cli.CTX_DEV])) m.Cmd("", mdb.CREATE, ice.DEV, kit.Select(kit.Select("https://contexts.com.cn", ice.Info.Make.Domain), conf[cli.CTX_DEV]))
m.Cmd("", mdb.CREATE, ice.COM, kit.Select("https://contexts.com.cn", conf[cli.CTX_COM])) m.Cmd("", mdb.CREATE, ice.COM, kit.Select("https://contexts.com.cn", conf[cli.CTX_COM]))
m.Cmd("", mdb.CREATE, ice.HUB, kit.Select("https://repos.shylinux.com", conf[cli.CTX_HUB]))
m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY])) m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY]))
}}, }},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelectValue(m, func(value ice.Map) { m.Push(kit.Select(ORIGIN, arg, 0), value[ORIGIN]) }) mdb.HashSelectValue(m.Spawn(), func(value ice.Map) { m.Push(kit.Select(ORIGIN, arg, 0), kit.Value(value, CLIENT_ORIGIN)) })
}}, }},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if mdb.IsSearchPreview(m, arg) { if mdb.IsSearchPreview(m, arg) {
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.DEV, mdb.TEXT, mdb.HashSelectField(m, ice.DEV, CLIENT_ORIGIN)) mdb.HashSelectValue(m.Spawn(), func(value ice.Map) {
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.COM, mdb.TEXT, mdb.HashSelectField(m, ice.COM, CLIENT_ORIGIN)) m.PushSearch(mdb.TYPE, LINK, mdb.NAME, kit.Value(value, CLIENT_NAME), mdb.TEXT, kit.Value(value, CLIENT_ORIGIN), value)
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.SHY, mdb.TEXT, mdb.HashSelectField(m, ice.SHY, CLIENT_ORIGIN)) })
} }
}}, }},
mdb.CREATE: {Name: "create name link", Hand: func(m *ice.Message, arg ...string) { _spide_create(m, m.Option(mdb.NAME), m.Option(LINK)) }}, mdb.CREATE: {Name: "create name link", Hand: func(m *ice.Message, arg ...string) { _spide_create(m, m.Option(mdb.NAME), m.Option(LINK)) }},

View File

@ -34,6 +34,7 @@ const (
MISC = "misc" MISC = "misc"
SHY = "shy" SHY = "shy"
HUB = "hub"
COM = "com" COM = "com"
DEV = "dev" DEV = "dev"
APP = "app" APP = "app"

View File

@ -91,6 +91,7 @@ func init() {
}, ctx.ConfAction(SSO, "")), Hand: func(m *ice.Message, arg ...string) { }, ctx.ConfAction(SSO, "")), Hand: func(m *ice.Message, arg ...string) {
m.Option("language.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.LANGUAGE), nfs.FILE).Appendv(nfs.FILE)) m.Option("language.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.LANGUAGE), nfs.FILE).Appendv(nfs.FILE))
m.Option("theme.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.THEME), nfs.FILE).Appendv(nfs.FILE)) m.Option("theme.list", m.Cmd(nfs.DIR, path.Join(ice.SRC_TEMPLATE, m.PrefixKey(), aaa.THEME), nfs.FILE).Appendv(nfs.FILE))
m.Option("spide.hub", m.Cmdv(web.SPIDE, ice.HUB, web.CLIENT_URL))
if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) { if gdb.Event(m, HEADER_AGENT); !_header_check(m, arg...) {
return return
} }

View File

@ -50,9 +50,9 @@ func init() {
switch arg[0] { switch arg[0] {
case mdb.NAME: case mdb.NAME:
m.Push(arg[0], web.UserWeb(m).Host) m.Push(arg[0], web.UserWeb(m).Host)
case mdb.LINK: case mdb.LINK, ctx.ARGS:
m.Push(arg[0], m.Option(ice.MSG_USERWEB)) m.Push(arg[0], m.Option(ice.MSG_USERWEB))
m.Copy(m.Cmd(web.SPIDE).CutTo("client.url", arg[0])) m.Copy(m.Cmd(web.SPIDE).CutTo(web.CLIENT_URL, arg[0]))
} }
} }
}}, }},

View File

@ -89,6 +89,7 @@ func _status_list(m *ice.Message) (files, adds, dels int, last string) {
} }
const ( const (
GITEA = "gitea"
OAUTH = "oauth" OAUTH = "oauth"
DIFF = "diff" DIFF = "diff"
OPT = "opt" OPT = "opt"
@ -166,17 +167,18 @@ func init() {
} }
m.Push(mdb.TEXT, strings.Join(text, ", ")) m.Push(mdb.TEXT, strings.Join(text, ", "))
}}, }},
GITEA: {Help: "资源", Hand: func(m *ice.Message, arg ...string) { m.ProcessOpen(m.Cmdv("web.spide", ice.HUB, web.CLIENT_URL)) }},
}, aaa.RoleAction(), web.DreamAction(), Prefix(REPOS), mdb.ImportantHashAction()), Hand: func(m *ice.Message, arg ...string) { }, aaa.RoleAction(), web.DreamAction(), Prefix(REPOS), mdb.ImportantHashAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 && arg[0] == ctx.ACTION { if len(arg) > 0 && arg[0] == ctx.ACTION {
m.Cmdy(REPOS, arg) m.Cmdy(REPOS, arg)
} else if config, err := config.LoadConfig(config.GlobalScope); err == nil && config.User.Email == "" && mdb.Config(m, aaa.EMAIL) == "" { } else if config, err := config.LoadConfig(config.GlobalScope); err == nil && config.User.Email == "" && mdb.Config(m, aaa.EMAIL) == "" {
m.Action(CONFIGS).Echo("please config email and name. ").EchoButton(CONFIGS) m.Action(CONFIGS).Echo("please config email and name. ").EchoButton(CONFIGS)
} else if !nfs.Exists(m, ".git") { } else if !nfs.Exists(m, ".git") {
m.Action("init").Echo("please init repos. ").EchoButton("init") m.Action(INIT).Echo("please init repos. ").EchoButton(INIT)
} else if len(arg) == 0 { } else if len(arg) == 0 {
kit.If(config != nil, func() { m.Option(aaa.EMAIL, kit.Select(mdb.Config(m, aaa.EMAIL), config.User.Email)) }) kit.If(config != nil, func() { m.Option(aaa.EMAIL, kit.Select(mdb.Config(m, aaa.EMAIL), config.User.Email)) })
m.Cmdy(REPOS, STATUS).Action(PULL, PUSH, INSTEADOF, "oauth", CONFIGS) m.Cmdy(REPOS, STATUS).Action(PULL, PUSH, INSTEADOF, OAUTH, CONFIGS, GITEA)
m.Cmdy(code.PUBLISH, ice.CONTEXTS, "dev") m.Cmdy(code.PUBLISH, ice.CONTEXTS, ice.DEV)
} else { } else {
m.Cmdy(REPOS, arg[0], MASTER, INDEX, m.Cmdv(REPOS, arg[0], MASTER, INDEX, nfs.FILE)) m.Cmdy(REPOS, arg[0], MASTER, INDEX, m.Cmdv(REPOS, arg[0], MASTER, INDEX, nfs.FILE))
} }

View File

@ -111,5 +111,7 @@ func (m *Message) ProcessHold(text ...Any) { m.Process(PROCESS_HOLD, text...)
func (m *Message) ProcessBack() { m.Process(PROCESS_BACK) } func (m *Message) ProcessBack() { m.Process(PROCESS_BACK) }
func (m *Message) ProcessRich(arg ...Any) { m.Process(PROCESS_RICH, arg...) } func (m *Message) ProcessRich(arg ...Any) { m.Process(PROCESS_RICH, arg...) }
func (m *Message) ProcessGrow(arg ...Any) { m.Process(PROCESS_GROW, arg...) } func (m *Message) ProcessGrow(arg ...Any) { m.Process(PROCESS_GROW, arg...) }
func (m *Message) ProcessOpen(url string) { m.Process(PROCESS_OPEN, url) } func (m *Message) ProcessOpen(url string) {
func (m *Message) ProcessClose() { m.Process(PROCESS_CLOSE) } kit.If(url, func() { m.Process(PROCESS_OPEN, url) })
}
func (m *Message) ProcessClose() { m.Process(PROCESS_CLOSE) }