forked from x/icebergs
144 lines
5.3 KiB
Go
144 lines
5.3 KiB
Go
package chat
|
|
|
|
import (
|
|
"strings"
|
|
|
|
ice "shylinux.com/x/icebergs"
|
|
"shylinux.com/x/icebergs/base/aaa"
|
|
"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/nfs"
|
|
"shylinux.com/x/icebergs/base/web"
|
|
"shylinux.com/x/icebergs/base/web/html"
|
|
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", Help: "收藏夹", Icon: "favor.png", Actions: ice.MergeActions(ice.Actions{
|
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
|
if mdb.IsSearchPreview(m, arg) {
|
|
m.Cmds("", func(value ice.Maps) {
|
|
if arg[1] == "" || arg[1] == value[mdb.TYPE] || strings.Contains(value[mdb.TEXT], arg[1]) {
|
|
m.PushSearch(value)
|
|
}
|
|
})
|
|
}
|
|
}},
|
|
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, cli.OPENS)
|
|
case mdb.NAME:
|
|
switch m.Option(mdb.TYPE) {
|
|
case ctx.INDEX:
|
|
m.Copy(mdb.HashInputs(m.Spawn(), ctx.INDEX).CutTo(ctx.INDEX, arg[0]))
|
|
return
|
|
}
|
|
case mdb.TEXT:
|
|
switch m.Option(mdb.TYPE) {
|
|
case ctx.INDEX:
|
|
m.Option(ctx.INDEX, m.Option(mdb.NAME))
|
|
m.Copy(mdb.HashInputs(m.Spawn(), ctx.ARGS).CutTo(ctx.ARGS, arg[0]))
|
|
return
|
|
}
|
|
}
|
|
gdb.Event(m, "", arg)
|
|
}},
|
|
html.GetLocation: {Name: "favor create", Help: "定位", Icon: "bi bi-geo-alt"},
|
|
html.GetClipboardData: {Name: "favor create", Help: "粘贴", Icon: "bi bi-copy"},
|
|
html.ScanQRCode: {Name: "favor create", Help: "扫码", Icon: "bi bi-qr-code-scan"},
|
|
html.Record1: {Name: "favor upload", Help: "截图"},
|
|
html.Record2: {Name: "favor upload", Help: "录屏"},
|
|
mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) {
|
|
if strings.HasPrefix(m.Option(mdb.TEXT), ice.HTTP) {
|
|
m.OptionDefault(mdb.TYPE, mdb.LINK, mdb.NAME, kit.ParseURL(m.Option(mdb.TEXT)).Host)
|
|
}
|
|
mdb.HashCreate(m, m.OptionSimple())
|
|
}},
|
|
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) {
|
|
kit.If(!web.PodCmd(m, web.SPACE, kit.Simple(ctx.ACTION, m.ActionKey(), arg)...), func() { mdb.HashRemove(m, arg) })
|
|
}},
|
|
web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) {
|
|
m.Cmd("", mdb.CREATE, m.OptionSimple(mdb.TYPE, mdb.NAME, mdb.TEXT))
|
|
}},
|
|
web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) {
|
|
m.ProcessOpen(m.MergeLink(web.SHARE_LOCAL+m.Option(mdb.TEXT), nfs.FILENAME, m.Option(mdb.NAME)))
|
|
}},
|
|
web.PREVIEW: {Hand: FavorPreview},
|
|
cli.OPENS: {Hand: func(m *ice.Message, arg ...string) { cli.Opens(m, m.Option(mdb.TEXT)) }},
|
|
web.PAGES: {Name: "favor.js"},
|
|
}, FavorAction(), mdb.ExportHashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
|
|
if len(arg) > 0 && arg[0] == ctx.ACTION {
|
|
if m.Option(ice.MSG_INDEX) == m.PrefixKey() {
|
|
m.Option(mdb.TYPE, mdb.HashSelects(m.Spawn(), m.Option(mdb.HASH)).Append(mdb.TYPE))
|
|
gdb.Event(m, FAVOR_ACTION, arg)
|
|
} else if aaa.Right(m, m.Option(ice.MSG_INDEX), arg[3:]) {
|
|
m.Cmdy(m.Option(ice.MSG_INDEX), arg[3:])
|
|
}
|
|
return
|
|
} else if mdb.HashSelect(m, arg...); len(arg) == 0 {
|
|
defer web.PushPodCmd(m, "", arg...)
|
|
if m.SortStrR(mdb.TIME); m.IsMobileUA() {
|
|
m.Action(mdb.CREATE, web.UPLOAD, html.GetClipboardData, html.GetLocation, html.ScanQRCode)
|
|
} else {
|
|
m.Action(mdb.CREATE, web.UPLOAD, html.GetClipboardData, html.Record1, html.Record2)
|
|
}
|
|
} else {
|
|
m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT))
|
|
m.PushScript(m.Append(mdb.TEXT))
|
|
}
|
|
m.Table(func(value ice.Maps) {
|
|
delete(value, ctx.ACTION)
|
|
if msg := gdb.Event(m.Spawn(value), FAVOR_TABLES, mdb.TYPE, value[mdb.TYPE]); msg.Append(ctx.ACTION) != "" {
|
|
m.PushButton(msg.Append(ctx.ACTION), mdb.REMOVE)
|
|
return
|
|
}
|
|
switch value[mdb.TYPE] {
|
|
case cli.OPENS:
|
|
m.PushButton(cli.OPENS, mdb.REMOVE)
|
|
default:
|
|
m.PushButton(web.PREVIEW, mdb.REMOVE)
|
|
}
|
|
})
|
|
}},
|
|
})
|
|
}
|
|
|
|
func FavorAction() ice.Actions { return gdb.EventsAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) }
|
|
func FavorPreview(m *ice.Message, arg ...string) {
|
|
if kit.HasPrefixList(arg, ctx.RUN) {
|
|
if pod := arg[1]; pod != "" {
|
|
arg[1] = ""
|
|
m.Options(ice.MSG_USERPOD, pod).Cmdy(web.SPACE, pod, m.CommandKey(), ctx.ACTION, m.ActionKey(), arg)
|
|
} else {
|
|
index, args := favorPreview(m, arg[2], arg...)
|
|
ctx.ProcessField(m, index, args, kit.Simple(ctx.RUN, arg[3:])...)
|
|
}
|
|
} else if !web.PodCmd(m, web.SPACE, kit.Simple(ctx.ACTION, m.ActionKey(), arg)...) {
|
|
index, args := favorPreview(m, m.Option(mdb.HASH), arg...)
|
|
ctx.ProcessField(m, index, args, arg...).Push(ice.MSG_SPACE, m.Option(ice.MSG_USERPOD))
|
|
m.Option(ice.FIELD_PREFIX, ctx.ACTION, m.ActionKey(), ctx.RUN, m.Option(ice.MSG_USERPOD), m.Option(mdb.HASH))
|
|
}
|
|
}
|
|
func favorPreview(m *ice.Message, h string, arg ...string) (string, []string) {
|
|
msg := mdb.HashSelects(m.Spawn(), h)
|
|
index, args := msg.Append(mdb.TYPE), kit.Split(msg.Append(mdb.TEXT))
|
|
switch msg.Append(mdb.TYPE) {
|
|
case ctx.INDEX:
|
|
index = msg.Append(mdb.NAME)
|
|
case nfs.SHY:
|
|
index = web.WIKI_WORD
|
|
}
|
|
return index, args
|
|
}
|