1
0
forked from x/icebergs

add chat/favor.go

This commit is contained in:
harveyshao 2022-11-17 15:43:25 +08:00
parent 5db51d4724
commit 8e8470d910
21 changed files with 240 additions and 154 deletions

View File

@ -123,6 +123,32 @@ func init() {
}) })
} }
func Run(m *ice.Message, arg ...string) {
if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
switch arg[3] {
case "help":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.wiki.word", file)
}
case "script":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.code.inner", file)
}
case "source":
if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.code.inner", file)
}
case "select":
m.Cmdy(CONFIG, arg[0])
case "reset":
m.Cmd(CONFIG, "reset", arg[0])
}
return
}
if !PodCmd(m, arg) && aaa.Right(m, arg) {
m.Cmdy(arg)
}
}
func CmdHandler(args ...ice.Any) ice.Handler { func CmdHandler(args ...ice.Any) ice.Handler {
return func(m *ice.Message, arg ...string) { m.Cmdy(args...) } return func(m *ice.Message, arg ...string) { m.Cmdy(args...) }
} }
@ -133,32 +159,7 @@ func CmdAction(args ...ice.Any) ice.Actions {
m.Cmdy(COMMAND, arg) m.Cmdy(COMMAND, arg)
} }
}}, }},
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "执行", Hand: Run},
if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG {
switch arg[3] {
case "help":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.wiki.word", file)
}
case "script":
if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.code.inner", file)
}
case "source":
if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) {
ProcessFloat(m, "web.code.inner", file)
}
case "select":
m.Cmdy(CONFIG, arg[0])
case "reset":
m.Cmd(CONFIG, "reset", arg[0])
}
return
}
if !PodCmd(m, arg) && aaa.Right(m, arg) {
m.Cmdy(arg)
}
}},
} }
} }
func PodCmd(m *ice.Message, arg ...ice.Any) bool { func PodCmd(m *ice.Message, arg ...ice.Any) bool {

View File

@ -30,7 +30,8 @@ func Process(m *ice.Message, key string, args []string, arg ...string) {
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) { func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
cmd = kit.Select(m.PrefixKey(), cmd) cmd = kit.Select(m.PrefixKey(), cmd)
if len(arg) == 0 || arg[0] != ice.RUN { if len(arg) == 0 || arg[0] != ice.RUN {
if m.Cmdy(COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN); len(args) > 0 { m.Option("_index", m.PrefixKey())
if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 {
m.Push(ARGS, kit.Format(args)) m.Push(ARGS, kit.Format(args))
} }
return return
@ -48,6 +49,9 @@ func ProcessFloat(m *ice.Message, arg ...string) {
func ProcessHold(m *ice.Message, text ...ice.Any) { func ProcessHold(m *ice.Message, text ...ice.Any) {
m.Process(ice.PROCESS_HOLD, text...) m.Process(ice.PROCESS_HOLD, text...)
} }
func ProcessOpen(m *ice.Message, url string) {
m.Process(ice.PROCESS_OPEN, url)
}
func ProcessRefresh(m *ice.Message, arg ...string) { func ProcessRefresh(m *ice.Message, arg ...string) {
m.ProcessRefresh(kit.Select("300ms", arg, 0)) m.ProcessRefresh(kit.Select("300ms", arg, 0))
} }

View File

@ -15,7 +15,7 @@ func init() {
mdb.ZoneInsert(m, m.OptionSimple(EVENT, ice.CMD)) mdb.ZoneInsert(m, m.OptionSimple(EVENT, ice.CMD))
}}, }},
HAPPEN: {Name: "happen event arg", Help: "触发", Hand: func(m *ice.Message, arg ...string) { HAPPEN: {Name: "happen event arg", Help: "触发", Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneSelect(m.Spawn(), m.Option(EVENT)).Tables(func(value ice.Maps) { mdb.ZoneSelect(m.Spawn(ice.OptionFields("")), m.Option(EVENT)).Tables(func(value ice.Maps) {
m.Cmdy(kit.Split(value[ice.CMD]), m.Option(EVENT), arg[2:], ice.OptionFields("")).Cost() m.Cmdy(kit.Split(value[ice.CMD]), m.Option(EVENT), arg[2:], ice.OptionFields("")).Cost()
}) })
}}, }},
@ -38,5 +38,5 @@ func Watch(m *ice.Message, key string, arg ...string) *ice.Message {
return m.Cmd("gdb.event", LISTEN, EVENT, key, ice.CMD, kit.Join(arg, ice.SP)) return m.Cmd("gdb.event", LISTEN, EVENT, key, ice.CMD, kit.Join(arg, ice.SP))
} }
func Event(m *ice.Message, key string, arg ...ice.Any) *ice.Message { func Event(m *ice.Message, key string, arg ...ice.Any) *ice.Message {
return m.Cmdy("gdb.event", HAPPEN, EVENT, key, arg) return m.Cmdy("gdb.event", HAPPEN, EVENT, kit.Select(kit.Keys(m.CommandKey(), m.ActionKey()), key), arg)
} }

View File

@ -119,6 +119,7 @@ const (
WRITE = "write" WRITE = "write"
UPLOAD = "upload" UPLOAD = "upload"
DOWNLOAD = "download" DOWNLOAD = "download"
DISPLAY = "display"
UPLOAD_WATCH = "upload_watch" UPLOAD_WATCH = "upload_watch"
) )

View File

@ -12,19 +12,16 @@ import (
"shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/gdb"
"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"
"shylinux.com/x/toolkits/file" "shylinux.com/x/toolkits/file"
) )
func Upload(m *ice.Message) []string { // hash name size func Upload(m *ice.Message) *ice.Message {
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)) if up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); len(up) < 2 {
if len(up) < 2 { m.Cmdy(CACHE, UPLOAD)
msg := m.Cmdy(CACHE, UPLOAD)
up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
} }
return up return m
} }
func PushNotice(m *ice.Message, arg ...ice.Any) { func PushNotice(m *ice.Message, arg ...ice.Any) {
if m.Option(ice.MSG_DAEMON) == "" { if m.Option(ice.MSG_DAEMON) == "" {

View File

@ -351,6 +351,9 @@ const (
CLIENT_URL = "client.url" CLIENT_URL = "client.url"
LOGHEADERS = "logheaders" LOGHEADERS = "logheaders"
OPEN = "open"
FULL = "full"
LINK = "link"
HTTP = "http" HTTP = "http"
FORM = "form" FORM = "form"
ADDRESS = "address" ADDRESS = "address"

View File

@ -289,6 +289,7 @@ const ( // mdb
MDB = "mdb" MDB = "mdb"
KEY = "key" KEY = "key"
VALUE = "value" VALUE = "value"
FIELD = "field"
EXTRA = "extra" EXTRA = "extra"
SCRIPT = "script" SCRIPT = "script"
META = "meta" META = "meta"

View File

@ -69,7 +69,7 @@ func _action_share(m *ice.Message, arg ...string) {
} }
} }
func _action_upload(m *ice.Message) { func _action_upload(m *ice.Message) {
msg := m.Cmd(web.CACHE, web.UPLOAD) msg := m.Cmdy(web.CACHE, web.UPLOAD)
m.Option(ice.MSG_UPLOAD, msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE)) m.Option(ice.MSG_UPLOAD, msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
} }

View File

@ -6,28 +6,24 @@ search.go
action.go action.go
river.go river.go
storm.go storm.go
template.go
pod.go pod.go
cmd.go cmd.go
grant.go grant.go
sso.go sso.go
oauth
scan.go favor.go
paste.go
iframe.go iframe.go
location.go
location.shy
files.go
trans.go
media.go media.go
topic.go
div.go div.go
topic.go
website.go website.go
template.go
keyboard.go keyboard.go
location.go
location.shy
trans.go
room.go room.go
meet.go meet.go
oauth

103
core/chat/favor.go Normal file
View File

@ -0,0 +1,103 @@
package chat
import (
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/gdb"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/ssh"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
const (
FAVOR_INPUTS = "favor.inputs"
FAVOR_TABLES = "favor.tables"
FAVOR_ACTION = "favor.action"
)
const FAVOR = "favor"
func init() {
Index.MergeCommands(ice.Commands{
FAVOR: {Name: "favor hash auto create getClipboardData getLocation scanQRCode upload", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg); arg[0] {
case mdb.TYPE:
m.Push(arg[0], mdb.TEXT, ctx.INDEX)
case mdb.NAME:
switch m.Option(mdb.TYPE) {
case ctx.INDEX:
m.Copy(m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, arg[1:], ice.OptionFields(ctx.INDEX)).RenameAppend(ctx.INDEX, arg[0]))
}
}
gdb.Event(m, "", arg)
}},
"getClipboardData": {Name: "favor create", Help: "粘贴"},
"getLocation": {Name: "favor create", Help: "定位"},
"scanQRCode": {Name: "favor create", Help: "扫码"},
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
m.OptionDefault(mdb.TYPE, mdb.LINK, mdb.NAME, kit.ParseURL(m.Option(mdb.TEXT)).Host)
mdb.HashCreate(m, m.OptionSimple())
}},
web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) {
web.Upload(m).Cmd("", mdb.CREATE, m.AppendSimple(mdb.TYPE, mdb.NAME, mdb.TEXT))
}},
web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) {
ctx.ProcessOpen(m, web.MergeURL2(m, web.SHARE_LOCAL+m.Option(mdb.TEXT), "filename", m.Option(mdb.NAME)))
}},
web.DISPLAY: {Help: "预览", Hand: func(m *ice.Message, arg ...string) {
m.EchoImages(web.SHARE_LOCAL + m.Option(mdb.TEXT)).ProcessInner()
}},
ctx.INDEX: {Help: "命令", Hand: func(m *ice.Message, arg ...string) {
ctx.ProcessField(m, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.NAME), kit.Simple(kit.UnMarshal(m.Option(mdb.TEXT))), arg...)
}},
ice.RUN: {Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE))
ctx.Run(m, arg...)
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 && arg[0] == ctx.ACTION {
m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE))
gdb.Event(m, FAVOR_ACTION, arg)
return
}
if mdb.HashSelect(m, arg...); len(arg) == 0 {
m.Tables(func(value ice.Maps) {
if msg := gdb.Event(m.Spawn(), FAVOR_TABLES, mdb.TYPE, value[mdb.TYPE]); msg.Append(ctx.ACTION) != "" {
m.PushButton(msg.Append(ctx.ACTION))
return
}
switch value[mdb.TYPE] {
case ctx.INDEX:
m.PushButton(ctx.INDEX, mdb.REMOVE)
default:
if strings.HasPrefix(value[mdb.TEXT], ice.VAR_FILE) {
if kit.ExtIsImage(value[mdb.NAME]) {
m.PushButton(web.DISPLAY, web.DOWNLOAD, mdb.REMOVE)
} else {
m.PushButton(web.DOWNLOAD, mdb.REMOVE)
}
} else {
m.PushButton(mdb.REMOVE)
}
}
})
} else {
if strings.HasPrefix(m.Append(mdb.TEXT), ice.VAR_FILE) {
link := web.SHARE_LOCAL + m.Append(mdb.TEXT)
if m.PushDownload(mdb.LINK, m.Append(mdb.NAME), link); len(arg) > 0 && kit.ExtIsImage(m.Append(mdb.NAME)) {
m.PushImages(web.DISPLAY, link)
}
}
m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
m.PushAction(mdb.REMOVE)
}
}},
})
}
func FavorAction() ice.Actions { return gdb.EventAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) }

View File

@ -1,31 +0,0 @@
package chat
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
const FILES = "files"
func init() {
Index.MergeCommands(ice.Commands{
FILES: {Name: "files hash auto upload", Help: "文件夹", Actions: ice.MergeActions(ice.Actions{
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
up := web.Upload(m)
mdb.HashCreate(m, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0])
}},
}, mdb.HashAction(mdb.SHORT, mdb.DATA, mdb.FIELD, "time,hash,type,name,size,data")), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
link := web.SHARE_CACHE + value[mdb.DATA]
if m.PushDownload(mdb.LINK, value[mdb.NAME], link); len(arg) > 0 && kit.ExtIsImage(value[mdb.NAME]) {
m.PushImages("image", link)
}
m.PushQRCode(cli.QRCODE, web.MergeURL2(m, link))
}).PushAction(mdb.REMOVE)
}},
})
}

View File

@ -27,10 +27,7 @@ func init() {
}) })
}}, }},
CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) { CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) {
if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) || m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) {
return
}
if m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) {
return return
} }
if msg := m.Cmd(web.SPACE, m.Option(web.SPACE)); m.Warn(msg.Append(mdb.TYPE) != aaa.LOGIN, ice.ErrNotFound, m.Option(web.SPACE)) { if msg := m.Cmd(web.SPACE, m.Option(web.SPACE)); m.Warn(msg.Append(mdb.TYPE) != aaa.LOGIN, ice.ErrNotFound, m.Option(web.SPACE)) {

View File

@ -2,9 +2,9 @@ package chat
import ( import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"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/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
@ -13,18 +13,51 @@ const IFRAME = "iframe"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
IFRAME: {Name: "iframe hash auto", Help: "浏览器", Actions: ice.MergeActions(ice.Actions{ IFRAME: {Name: "iframe hash auto", Help: "浏览器", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create link name type", Hand: func(m *ice.Message, arg ...string) { FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.OptionDefault(mdb.NAME, kit.ParseURL(m.Option(mdb.LINK)).Host, mdb.TYPE, mdb.LINK) switch arg[0] {
mdb.HashCreate(m, m.OptionSimple("link,name,type")) case mdb.TYPE:
m.Push(arg[0], web.LINK)
default:
if m.Option(mdb.TYPE) != web.LINK {
return
}
switch arg[0] {
case mdb.NAME:
m.Push(arg[0], web.OptionUserWeb(m).Host)
case mdb.TEXT:
m.Push(arg[0], m.Option(ice.MSG_USERWEB))
}
}
}}, }},
}, mdb.HashAction(mdb.SHORT, mdb.LINK, mdb.FIELD, "time,hash,type,name,link")), Hand: func(m *ice.Message, arg ...string) { FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 || arg[0] == "" { switch arg[1] {
m.Action(mdb.CREATE, mdb.PRUNES) case web.LINK:
m.PushButton(IFRAME, web.OPEN, mdb.REMOVE)
}
}},
FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(mdb.TYPE) != web.LINK {
return
}
switch kit.Select("", arg, 1) {
case web.OPEN:
ctx.ProcessOpen(m, m.Option(mdb.TEXT))
default:
ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
}
}},
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, mdb.TYPE, web.LINK, mdb.NAME, kit.ParseURL(m.Option(web.LINK)).Host, m.OptionSimple())
}},
web.OPEN: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessOpen(m, m.Option(web.LINK)) }},
}, mdb.HashAction(mdb.SHORT, web.LINK, mdb.FIELD, "time,hash,type,name,link"), FavorAction()), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 {
m.PushAction(web.OPEN, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES)
} else { } else {
if m.Length() == 0 { if m.Length() == 0 {
m.Append(mdb.LINK, arg[0]) m.Append(web.LINK, arg[0])
} }
m.Action(cli.OPEN).StatusTime(mdb.LINK, m.Append(mdb.LINK)) m.Action(web.FULL, web.OPEN).StatusTime(m.AppendSimple(web.LINK))
ctx.DisplayLocal(m, "") ctx.DisplayLocal(m, "")
} }
}}, }},

View File

@ -38,6 +38,24 @@ func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
LOCATION: {Name: "location hash auto", Help: "地理位置", Actions: ice.MergeActions(ice.Actions{ LOCATION: {Name: "location hash auto", Help: "地理位置", Actions: ice.MergeActions(ice.Actions{
FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case mdb.TYPE:
m.Push(arg[0], LOCATION)
}
}},
FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) {
if m.Option(mdb.TYPE) != LOCATION {
return
}
ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...)
}},
FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) {
switch arg[1] {
case LOCATION:
m.PushButton(LOCATION, mdb.REMOVE)
}
}},
"explore": {Name: "explore", Help: "周边", Hand: func(m *ice.Message, arg ...string) { "explore": {Name: "explore", Help: "周边", Hand: func(m *ice.Message, arg ...string) {
m.Echo(get(m, "place/v1/explore", m.OptionSimple("boundary,page_index"))) m.Echo(get(m, "place/v1/explore", m.OptionSimple("boundary,page_index")))
}}, }},
@ -53,7 +71,7 @@ func init() {
"district": {Name: "district", Help: "地区", Hand: func(m *ice.Message, arg ...string) { "district": {Name: "district", Help: "地区", Hand: func(m *ice.Message, arg ...string) {
m.Echo(get(m, "district/v1/getchildren", m.OptionSimple(mdb.ID))) m.Echo(get(m, "district/v1/getchildren", m.OptionSimple(mdb.ID)))
}}, }},
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction(), FavorAction()), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...) mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
ctx.DisplayLocal(m, "", m.ConfigSimple(aaa.TOKEN)) ctx.DisplayLocal(m, "", m.ConfigSimple(aaa.TOKEN))
m.Option(LOCATION, get(m, "location/v1/ip", aaa.IP, m.Option(ice.MSG_USERIP))) m.Option(LOCATION, get(m, "location/v1/ip", aaa.IP, m.Option(ice.MSG_USERIP)))

View File

@ -1,27 +0,0 @@
package chat
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/ssh"
)
const PASTE = "paste"
func init() {
Index.MergeCommands(ice.Commands{
PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴", Actions: ice.MergeActions(ice.Actions{
"getClipboardData": {Name: "getClipboardData", Help: "粘贴", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(PASTE, mdb.CREATE, arg)
}},
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
}, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) > 0 {
m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
m.PushAction(mdb.REMOVE)
}
}},
})
}

View File

@ -1,29 +0,0 @@
package chat
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/ssh"
)
const SCAN = "scan"
func init() {
Index.MergeCommands(ice.Commands{
SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Actions: ice.MergeActions(ice.Actions{
"scanQRCode0": {Name: "scan create", Help: "本机扫码"},
"scanQRCode": {Name: "scan create", Help: "扫码"},
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"},
}, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) > 0 {
if m.Append(mdb.TYPE) == "image" {
m.PushImages("image", m.Append(mdb.TEXT))
}
m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT))
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
m.PushAction(mdb.REMOVE)
}
}},
})
}

View File

@ -282,7 +282,7 @@ func (m *Message) CmdHand(cmd *Command, key string, arg ...string) *Message {
} }
func (c *Context) _command(m *Message, cmd *Command, key string, arg ...string) *Message { func (c *Context) _command(m *Message, cmd *Command, key string, arg ...string) *Message {
key = kit.Slice(strings.Split(key, PT), -1)[0] key = kit.Slice(strings.Split(key, PT), -1)[0]
if m._key, m._cmd = key, cmd; cmd == nil { if m._key, m._sub, m._cmd = key, "select", cmd; cmd == nil {
return m return m
} }

View File

@ -57,12 +57,12 @@ func init() {
m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE), m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE),
) )
}}, }},
chat.SCAN: {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { "scan": {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) {
if m.Option(chat.GRANT) != "" { if m.Option(chat.GRANT) != "" {
m.Cmdy(chat.HEADER, chat.GRANT, web.SPACE, m.Option(chat.GRANT)) m.Cmdy(chat.HEADER, chat.GRANT, web.SPACE, m.Option(chat.GRANT))
return return
} }
m.Cmdy(chat.SCAN, arg) m.Cmdy("scan", arg)
}}, }},
}}, }},
LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{ LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{

View File

@ -87,10 +87,10 @@ func init() {
"latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"), "latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"),
) )
case mdb.LINK: // 打卡 case mdb.LINK: // 打卡
m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) m.Cmdy("scan", mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case "image": // 文本 case "image": // 文本
m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) m.Cmdy("scan", mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case TEXT: // 文本 case TEXT: // 文本
if cmds := kit.Split(m.Option("Content")); aaa.Right(m, cmds) { if cmds := kit.Split(m.Option("Content")); aaa.Right(m, cmds) {

View File

@ -35,6 +35,19 @@ func (m *Message) OptionDefault(arg ...string) string {
return m.Option(arg[0]) return m.Option(arg[0])
} }
func (m *Message) OptionSimple(key ...string) (res []string) { func (m *Message) OptionSimple(key ...string) (res []string) {
if len(key) == 0 {
for _, k := range kit.Split(m.Config(FIELD)) {
switch k {
case "", TIME, HASH:
continue
}
if m.Option(k) == "" {
continue
}
res = append(res, k, m.Option(k))
}
return
}
for _, k := range kit.Split(kit.Join(key)) { for _, k := range kit.Split(kit.Join(key)) {
if k == "" || m.Option(k) == "" { if k == "" || m.Option(k) == "" {
continue continue

View File

@ -21,6 +21,9 @@ func Render(m *Message, cmd string, args ...Any) string {
return kit.Format(`<a href="%s" target="_blank">%s</a>`, p, arg[0]) return kit.Format(`<a href="%s" target="_blank">%s</a>`, p, arg[0])
case RENDER_BUTTON: // name... case RENDER_BUTTON: // name...
if strings.HasPrefix(kit.Join(arg), "<input") {
return kit.Join(arg)
}
list := []string{} list := []string{}
for _, k := range kit.Split(kit.Join(arg)) { for _, k := range kit.Split(kit.Join(arg)) {
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`, k, list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`, k,
@ -29,6 +32,9 @@ func Render(m *Message, cmd string, args ...Any) string {
return strings.Join(list, "") return strings.Join(list, "")
case RENDER_IMAGES: // src [height] case RENDER_IMAGES: // src [height]
if m.Option("height") != "" && m.Option("width") != "" {
return kit.Format(`<img src="%s" style="max-height:%spx; max-width:%spx">`, arg[0], m.Option("height"), m.Option("width"))
}
if strings.Contains(m.Option(MSG_USERUA), "Mobile") { if strings.Contains(m.Option(MSG_USERUA), "Mobile") {
return kit.Format(`<img src="%s" width=%d>`, arg[0], kit.Int(kit.Select(kit.Select("120", m.Option("width")), arg, 1))-24) return kit.Format(`<img src="%s" width=%d>`, arg[0], kit.Int(kit.Select(kit.Select("120", m.Option("width")), arg, 1))-24)
} }