1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 09:34:05 +08:00

opt chrome

This commit is contained in:
shaoying 2020-09-20 15:58:27 +08:00
parent e09b17a7a3
commit 222f5d2bcb
10 changed files with 107 additions and 234 deletions

View File

@ -107,19 +107,29 @@ func _cache_upload(m *ice.Message, r *http.Request) (kind, name, file, size stri
func _cache_download(m *ice.Message, r *http.Response) (file, size string) { func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
defer r.Body.Close() defer r.Body.Close()
progress, _ := m.Optionv("progress").(func(int, int))
total := kit.Int(kit.Select("1", r.Header.Get("Content-Length"))) total := kit.Int(kit.Select("1", r.Header.Get("Content-Length")))
if f, p, e := kit.Create(path.Join("var/tmp", kit.Hashs("uniq"))); m.Assert(e) { if f, p, e := kit.Create(path.Join("var/tmp", kit.Hashs("uniq"))); m.Assert(e) {
size, buf := 0, make([]byte, 1024) size, buf := 0, make([]byte, 1024)
for { for {
if n, _ := r.Body.Read(buf); n > 0 { if n, _ := r.Body.Read(buf); n > 0 {
f.Write(buf[0:n]) f.Write(buf[0:n])
if size += n; progress != nil { switch size += n; cb := m.Optionv("progress").(type) {
progress(size, total) case []string:
} else { m.Richs(cb[0], cb[1], cb[2], func(key string, value map[string]interface{}) {
value = value[kit.MDB_META].(map[string]interface{})
s := size * 100 / total
if s != kit.Int(value[kit.MDB_STEP]) && s%10 == 0 {
m.Log_IMPORT(kit.MDB_FILE, path.Base(cb[2]), kit.MDB_STEP, s, kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
}
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
})
case func(int, int):
cb(size, total)
default:
m.Log_IMPORT(kit.MDB_FILE, p, "per", size*100/total, kit.MDB_SIZE, kit.FmtSize(int64(size)), "total", kit.FmtSize(int64(total))) m.Log_IMPORT(kit.MDB_FILE, p, "per", size*100/total, kit.MDB_SIZE, kit.FmtSize(int64(size)), "total", kit.FmtSize(int64(total)))
} }
} else { } else {
f.Close() f.Close()
break break

View File

@ -46,7 +46,7 @@ func init() {
ROUTE: {Name: ROUTE, Help: "路由器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ROUTE)}, ROUTE: {Name: ROUTE, Help: "路由器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ROUTE)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ROUTE: {Name: "route route ctx cmd auto 启动 添加", Help: "路由", Action: map[string]*ice.Action{ ROUTE: {Name: "route route ctx cmd auto 添加", Help: "路由", Action: map[string]*ice.Action{
"inputs": {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { "inputs": {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case "cmd": case "cmd":
@ -117,9 +117,9 @@ func init() {
kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod", value[kit.MDB_ROUTE])))) kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod", value[kit.MDB_ROUTE]))))
switch value[kit.MDB_TYPE] { switch value[kit.MDB_TYPE] {
case MYSELF, SERVER: case MYSELF, SERVER:
m.PushRender("action", "button", "创建", "启动") m.PushRender("action", "button", "启动")
case WORKER: case WORKER:
m.PushRender("action", "button", "创建", "结束") m.PushRender("action", "button", "结束")
} }
}) })
m.Sort(kit.MDB_ROUTE) m.Sort(kit.MDB_ROUTE)

View File

@ -90,7 +90,14 @@ func (m *Message) Push(key string, value interface{}, arg ...interface{}) *Messa
// 查找数据 // 查找数据
var v interface{} var v interface{}
switch k { switch k {
case kit.MDB_KEY, kit.MDB_ZONE, kit.MDB_HASH: case "action":
list := []string{}
for _, k := range kit.Simple(m.Optionv(MSG_ACTION)) {
list = append(list, fmt.Sprintf(`<input type="button" value="%s">`, k))
}
v = strings.Join(list, "")
case kit.MDB_KEY, kit.MDB_HASH:
if key != "" { if key != "" {
v = key v = key
break break

View File

@ -77,10 +77,12 @@ func (m *Message) PushRender(key, view, name string, arg ...string) *Message {
list = append(list, fmt.Sprintf(`<input type="button" value="%s">`, k)) list = append(list, fmt.Sprintf(`<input type="button" value="%s">`, k))
} }
m.Push(key, strings.Join(list, "")) m.Push(key, strings.Join(list, ""))
case "video":
m.Push(key, fmt.Sprintf(`<video src="%s" height=%s controls>`, name, kit.Select("120", arg, 0)))
case "img":
m.Push(key, fmt.Sprintf(`<img src="%s" height=%s>`, name, kit.Select("120", arg, 0)))
case "a": case "a":
if m.W != nil {
m.Push(key, fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(name, arg, 0), name)) m.Push(key, fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(name, arg, 0), name))
}
default: default:
m.Push(key, name) m.Push(key, name)
} }

View File

@ -10,124 +10,67 @@ import (
"github.com/nareix/joy4/av" "github.com/nareix/joy4/av"
"github.com/nareix/joy4/av/avutil" "github.com/nareix/joy4/av/avutil"
"encoding/csv"
"io/ioutil"
"os"
"path" "path"
"sort"
) )
const CACHED = "cached" const CACHE = "cache"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
CACHED: {Name: "spided", Help: "网页爬虫", Value: kit.Data( CACHE: {Name: CACHE, Help: "爬虫缓存", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_PATH, "usr/spide", kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_FIELD, "time,step,size,total,action,text,name,type,link",
kit.MDB_PATH, "usr/spide",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
CACHED: {Name: "cached hash=auto auto 清理:button 导出:button", Help: "网页爬虫", Action: map[string]*ice.Action{ CACHE: {Name: "cache hash auto 添加 清理", Help: "爬虫缓存", Action: map[string]*ice.Action{
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create link type name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(CACHED, "", m.Option("link"), func(key string, value map[string]interface{}) { m.Option("_process", "_progress")
value = value[kit.MDB_META].(map[string]interface{}) if m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_LINK, m.Option(kit.MDB_LINK)); len(m.Appendv(kit.MDB_TOTAL)) > 0 {
m.Optionv("progress", func(size int, total int) { return // 已经下载
value["progress"], value["size"], value["total"] = size*100/total, size, total }
m.Log_IMPORT(kit.MDB_FILE, m.Option("name"), "per", size*100/total, kit.MDB_SIZE, kit.FmtSize(int64(size)), "total", kit.FmtSize(int64(total))) m.Cmd(mdb.INSERT, m.Prefix(CACHE), "", mdb.HASH,
}) kit.MDB_LINK, m.Option(kit.MDB_LINK),
}) kit.MDB_TYPE, m.Option(kit.MDB_TYPE),
kit.MDB_NAME, m.Option(kit.MDB_NAME),
kit.MDB_TEXT, m.Option(kit.MDB_TEXT),
)
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option("link")) m.Option("progress", m.Prefix(CACHE), "", m.Option(kit.MDB_LINK))
p := path.Join(m.Conf(CACHED, kit.META_PATH), m.Option("name")) msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(kit.MDB_LINK))
m.Cmdy(nfs.LINK, p, msg.Append("file"))
// 完成 p := path.Join(m.Conf(m.Prefix(CACHE), kit.META_PATH), m.Option(kit.MDB_NAME))
if file, e := avutil.Open(p); m.Assert(e) { m.Cmdy(nfs.LINK, p, msg.Append(kit.MDB_FILE))
if file, e := avutil.Open(p); e == nil {
defer file.Close() defer file.Close()
if streams, e := file.Streams(); m.Assert(e) {
if streams, e := file.Streams(); e == nil {
for _, stream := range streams { for _, stream := range streams {
if stream.Type().IsAudio() {
} else if stream.Type().IsVideo() { switch {
case stream.Type().IsAudio():
case stream.Type().IsVideo():
// 自动分屏
vstream := stream.(av.VideoCodecData) vstream := stream.(av.VideoCodecData)
if vstream.Width() > vstream.Height() { m.Cmd(nfs.LINK, path.Join(m.Conf(m.Prefix(CACHE), kit.META_PATH),
m.Cmdy(nfs.LINK, path.Join(m.Conf(CACHED, kit.META_PATH), "横屏", m.Option("name")), p) kit.Select("竖屏", "横屏", vstream.Width() > vstream.Height()), m.Option(kit.MDB_NAME)), p)
} else {
m.Cmdy(nfs.LINK, path.Join(m.Conf(CACHED, kit.META_PATH), "竖屏", m.Option("name")), p)
}
} }
} }
} }
} }
}}, }},
"prune": {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Richs(CACHED, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Cmdy(mdb.DELETE, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
if kit.Int(value["progress"]) == 100 {
dir := path.Join("var/data", m.Prefix(CACHED), "")
name := path.Join(dir, kit.Keys(key, "json"))
if f, p, e := kit.Create(name); e == nil {
defer f.Close()
// 保存数据
if n, e := f.WriteString(kit.Format(value)); e == nil {
m.Log_EXPORT("file", p, kit.MDB_SIZE, n)
}
}
m.Conf(CACHED, kit.Keys(kit.MDB_HASH, key), "")
}
})
}}, }},
"export": {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
f, p, e := kit.Create(path.Join("usr/export", m.Prefix(CACHED), "list.csv")) m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_STEP, "100")
m.Assert(e)
defer f.Close()
w := csv.NewWriter(f)
defer w.Flush()
count := 0
head := []string{}
m.Cmd(nfs.DIR, path.Join("var/data", m.Prefix(CACHED))+"/").Table(func(index int, v map[string]string, h []string) {
f, e := os.Open(v["path"])
m.Assert(e)
defer f.Close()
b, e := ioutil.ReadAll(f)
m.Assert(e)
value, ok := kit.UnMarshal(string(b)).(map[string]interface{})
if !ok {
return
}
if index == 0 {
// 输出表头
for k := range value {
head = append(head, k)
}
sort.Strings(head)
w.Write(head)
}
// 输出数据
data := []string{}
for _, k := range head {
data = append(data, kit.Format(value[k]))
}
w.Write(data)
count++
})
m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_COUNT, count)
m.Echo(p)
}}, }},
}, 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("cache.limit", 100) m.Option(ice.MSG_ACTION, "删除")
m.Option("fields", "time,hash,type,progress,size,total,name,text,link") m.Option(mdb.FIELDS, m.Conf(m.Prefix(CACHE), kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(CACHED), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH)
m.Sort("time", "time_r")
m.PushAction("下载")
m.Appendv(ice.MSG_APPEND, "time", "type", "name", "text",
"action", "progress", "size", "total", "hash", "link")
}}, }},
}, },
}, nil) }, nil)

View File

@ -9,18 +9,20 @@ import (
const CHROME = "chrome" const CHROME = "chrome"
var Index = &ice.Context{Name: "chrome", Help: "浏览器", var Index = &ice.Context{Name: CHROME, Help: "浏览器",
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
CHROME: {Name: "chrome", Help: "浏览器", Value: kit.Data( CHROME: {Name: CHROME, Help: "浏览器", Value: kit.Data()},
kit.MDB_SHORT, "name", "history", "url.history",
)},
}, },
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.Load() }}, ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
CHROME: {Name: "chrome wid=auto url auto 编译:button 下载:button", Help: "浏览器", Action: map[string]*ice.Action{ CHROME: {Name: "chrome wid url auto 启动 构建 下载", Help: "浏览器", Action: map[string]*ice.Action{
"compile": {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { "install": {Name: "install", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
}},
"build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
}},
"start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
}}, }},
}, 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.Cmdy(web.SPACE, CHROME, CHROME, arg) m.Cmdy(web.SPACE, CHROME, CHROME, arg)

View File

@ -11,6 +11,8 @@ field chrome web.code.chrome.chrome
chapter "应用" chapter "应用"
field "浏览器" web.space field "浏览器" web.space
field "收藏夹" web.code.chrome.spide
field "收藏夹" web.code.chrome.cache
field "收藏夹" web.code.chrome.favor field "收藏夹" web.code.chrome.favor
field "同步流" web.code.chrome.sync field "同步流" web.code.chrome.sync

View File

@ -4,8 +4,6 @@ import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"strings"
) )
const FAVOR = "favor" const FAVOR = "favor"
@ -14,26 +12,26 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data( FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
kit.MDB_SHORT, "topic", kit.MDB_FIELD, "time,id,type,name,text", kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
FAVOR: {Name: "favor topic=auto id=auto auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{ FAVOR: {Name: "favor topic id auto 创建 导出 导入", Help: "收藏夹", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
}}, }},
mdb.INSERT: {Name: "insert topic=数据结构 name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert topic=数据结构 name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) { m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) {
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg) m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, arg)
}) })
}}, }},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(FAVOR), "", m.Option("topic"), func(key string, value map[string]interface{}) { m.Richs(m.Prefix(FAVOR), "", m.Option(kit.MDB_TOPIC), func(key string, value map[string]interface{}) {
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg) m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.Keys(kit.MDB_HASH, key), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
}) })
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, "topic", m.Option("topic")) m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH) m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH)
@ -43,7 +41,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 "topic": case kit.MDB_TOPIC:
m.Option(mdb.FIELDS, "time,count,topic") m.Option(mdb.FIELDS, "time,count,topic")
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
} }
@ -60,27 +58,6 @@ func init() {
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
m.PushAction("删除") m.PushAction("删除")
}}, }},
"/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{
"select": {Name: "select", Help: "主题", Hand: func(m *ice.Message, arg ...string) {
list := []string{}
m.Cmd(m.Prefix(FAVOR)).Table(func(index int, value map[string]string, head []string) {
list = append(list, value["topic"])
})
m.Render(ice.RENDER_RESULT, strings.Join(list, "\n"))
}},
"insert": {Name: "insert", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(m.Prefix(FAVOR), mdb.INSERT, "topic", m.Option("tab"),
"name", m.Option("note"), "text", m.Option("arg"), "file", m.Option("buf"), "line", m.Option("row"),
)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Render(ice.RENDER_RESULT)
m.Cmd(m.Prefix(FAVOR), m.Option("tab")).Table(func(index int, value map[string]string, head []string) {
m.Echo("%v\n", m.Option("tab")).Echo("%v:%v:%v:(%v): %v\n",
value["file"], value["line"], "1", value["name"], value["text"])
})
}},
}, },
}, nil) }, nil)
} }

View File

@ -3,104 +3,35 @@ package crx
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"os"
"path"
"github.com/nareix/joy4/av"
"github.com/nareix/joy4/av/avutil"
) )
const SPIDED = "spided" const SPIDE = "spide"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SPIDED: {Name: "spided", Help: "网页爬虫", Value: kit.Data( SPIDE: {Name: SPIDE, Help: "网页爬虫", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_PATH, "usr/spide", kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_PATH, "usr/spide",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SPIDED: {Name: "spided wid=auto tid=auto cmd auto", Help: "网页爬虫", Action: map[string]*ice.Action{ SPIDE: {Name: "spide wid tid cmd auto", Help: "网页爬虫", Action: map[string]*ice.Action{
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { "download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
if m.Richs(CACHED, "", m.Option("link"), func(key string, value map[string]interface{}) { m.Cmd(m.Prefix(CACHE), mdb.CREATE, arg)
if _, e := os.Stat(path.Join(m.Conf(CACHED, kit.META_PATH), m.Option("name"))); e == nil {
m.Push(key, value)
}
}) != nil && len(m.Appendv("name")) > 0 {
return
}
m.Cmd(mdb.INSERT, m.Prefix(CACHED), "", mdb.HASH,
kit.MDB_LINK, m.Option("link"),
kit.MDB_TYPE, m.Option("type"),
kit.MDB_NAME, m.Option("name"),
kit.MDB_TEXT, m.Option("text"),
)
// 进度
m.Richs(CACHED, "", m.Option("link"), func(key string, value map[string]interface{}) {
m.Optionv("progress", func(size int, total int) {
p := size * 100 / total
if p != value["progress"] {
m.Log_IMPORT(kit.MDB_FILE, m.Option("name"), "per", size*100/total, kit.MDB_SIZE, kit.FmtSize(int64(size)), "total", kit.FmtSize(int64(total)))
}
value["progress"], value["size"], value["total"] = p, size, total
})
})
// 下载
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option("link"))
p := path.Join(m.Conf(CACHED, kit.META_PATH), m.Option("name"))
m.Cmdy(nfs.LINK, p, msg.Append("file"))
if file, e := avutil.Open(p); m.Assert(e) {
defer file.Close()
if streams, e := file.Streams(); m.Assert(e) {
for _, stream := range streams {
if stream.Type().IsAudio() {
} else if stream.Type().IsVideo() {
vstream := stream.(av.VideoCodecData)
if vstream.Width() > vstream.Height() {
m.Cmdy(nfs.LINK, path.Join(m.Conf(CACHED, kit.META_PATH), "横屏", m.Option("name")), p)
} else {
m.Cmdy(nfs.LINK, path.Join(m.Conf(CACHED, kit.META_PATH), "竖屏", m.Option("name")), p)
}
}
}
}
}
}},
"compile": {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
msg := m.Cmd(web.SPACE, CHROME, CHROME, arg) switch msg := m.Cmd(web.SPACE, CHROME, CHROME, arg); kit.Select(SPIDE, arg, 2) {
switch kit.Select("spide", arg, 2) { case SPIDE:
case "cache":
m.Option("fields", "time,type,progress,size,total,name,text,link")
m.Cmdy(mdb.SELECT, m.Prefix(SPIDED), "", mdb.HASH)
case "spide":
if len(arg) > 1 { if len(arg) > 1 {
msg.PushAction("下载")
msg.Table(func(index int, value map[string]string, head []string) { msg.Table(func(index int, value map[string]string, head []string) {
m.Push("time", value["time"]) m.Push(kit.MDB_TIME, value[kit.MDB_TIME])
m.Push("type", value["type"]) m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE])
m.Push("action", value["action"]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
m.Push("name", value["name"]) m.PushRender("action", "button", "下载")
switch value["type"] { m.PushRender(kit.MDB_TEXT, value[kit.MDB_TYPE], value[kit.MDB_LINK])
case "img": m.Push(kit.MDB_LINK, value[kit.MDB_LINK])
m.Push("text", m.Cmdx(mdb.RENDER, web.RENDER.IMG, value["text"]))
case "video":
m.Push("text", m.Cmdx(mdb.RENDER, web.RENDER.Video, value["text"]))
default:
m.Push("text", value["text"])
}
m.Push("link", value["link"])
}) })
break break
} }

View File

@ -8,13 +8,12 @@ import (
) )
const SYNC = "sync" const SYNC = "sync"
const SPIDE = "spide"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data( SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_FIELD, "time,id,type,name,text", kit.MDB_FIELD, "time,id,type,name,text",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
@ -25,19 +24,18 @@ func init() {
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST) m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST)
}}, }},
FAVOR: {Name: "favor topic name", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
kit.MDB_TYPE, SPIDE, kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
}},
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_TOPIC: case kit.MDB_TOPIC:
m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME) m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME)
} }
}}, }},
FAVOR: {Name: "favor topic name", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
kit.MDB_TYPE, SPIDE, kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
}},
}, 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(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)) if m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)); len(arg) > 0 {
if len(arg) > 0 {
m.Option("cache.field", kit.MDB_ID) m.Option("cache.field", kit.MDB_ID)
m.Option("cache.value", arg[0]) m.Option("cache.value", arg[0])
} else { } else {
@ -50,12 +48,13 @@ func init() {
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value")) m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option("cache.field"), m.Option("cache.value"))
}}, }},
"/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "/sync": {Name: "/sync", Help: "同步", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SPIDE, kit.MDB_NAME, m.Option("name"), kit.MDB_TEXT, m.Option("note")) m.Cmdy(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SPIDE,
kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
}}, }},
"/crx": {Name: "/crx", Help: "插件", Action: map[string]*ice.Action{ "/crx": {Name: "/crx", Help: "插件", Action: map[string]*ice.Action{
web.HISTORY: {Name: "history", Help: "历史记录", Hand: func(m *ice.Message, arg ...string) { web.HISTORY: {Name: "history", Help: "历史记录", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.SPIDE, web.SPIDE_SELF, "/code/chrome/sync", "name", arg[1], "note", arg[2]) m.Cmdy(web.SPIDE, web.SPIDE_SELF, "/code/chrome/sync",
// m.Cmdy(web.SPIDE, web.SPIDE_DEV, "/code/chrome/sync", "name", arg[1], "note", arg[2]) kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2])
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}}, }},