forked from x/icebergs
opt chrome
This commit is contained in:
parent
e09b17a7a3
commit
222f5d2bcb
@ -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) {
|
||||
defer r.Body.Close()
|
||||
|
||||
progress, _ := m.Optionv("progress").(func(int, int))
|
||||
|
||||
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) {
|
||||
size, buf := 0, make([]byte, 1024)
|
||||
for {
|
||||
if n, _ := r.Body.Read(buf); n > 0 {
|
||||
f.Write(buf[0:n])
|
||||
if size += n; progress != nil {
|
||||
progress(size, total)
|
||||
} else {
|
||||
switch size += n; cb := m.Optionv("progress").(type) {
|
||||
case []string:
|
||||
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)))
|
||||
}
|
||||
|
||||
} else {
|
||||
f.Close()
|
||||
break
|
||||
|
@ -46,7 +46,7 @@ func init() {
|
||||
ROUTE: {Name: ROUTE, Help: "路由器", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ROUTE)},
|
||||
},
|
||||
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) {
|
||||
switch arg[0] {
|
||||
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]))))
|
||||
switch value[kit.MDB_TYPE] {
|
||||
case MYSELF, SERVER:
|
||||
m.PushRender("action", "button", "创建", "启动")
|
||||
m.PushRender("action", "button", "启动")
|
||||
case WORKER:
|
||||
m.PushRender("action", "button", "创建", "结束")
|
||||
m.PushRender("action", "button", "结束")
|
||||
}
|
||||
})
|
||||
m.Sort(kit.MDB_ROUTE)
|
||||
|
9
meta.go
9
meta.go
@ -90,7 +90,14 @@ func (m *Message) Push(key string, value interface{}, arg ...interface{}) *Messa
|
||||
// 查找数据
|
||||
var v interface{}
|
||||
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 != "" {
|
||||
v = key
|
||||
break
|
||||
|
8
misc.go
8
misc.go
@ -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))
|
||||
}
|
||||
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":
|
||||
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:
|
||||
m.Push(key, name)
|
||||
}
|
||||
|
@ -10,124 +10,67 @@ import (
|
||||
"github.com/nareix/joy4/av"
|
||||
"github.com/nareix/joy4/av/avutil"
|
||||
|
||||
"encoding/csv"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"sort"
|
||||
)
|
||||
|
||||
const CACHED = "cached"
|
||||
const CACHE = "cache"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
CACHED: {Name: "spided", Help: "网页爬虫", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_LINK, kit.MDB_PATH, "usr/spide",
|
||||
CACHE: {Name: CACHE, Help: "爬虫缓存", Value: kit.Data(
|
||||
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{
|
||||
CACHED: {Name: "cached hash=auto auto 清理:button 导出:button", Help: "网页爬虫", Action: map[string]*ice.Action{
|
||||
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Richs(CACHED, "", m.Option("link"), func(key string, value map[string]interface{}) {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
m.Optionv("progress", func(size int, total int) {
|
||||
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)))
|
||||
})
|
||||
})
|
||||
CACHE: {Name: "cache hash auto 添加 清理", Help: "爬虫缓存", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create link type name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option("_process", "_progress")
|
||||
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 {
|
||||
return // 已经下载
|
||||
}
|
||||
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"))
|
||||
p := path.Join(m.Conf(CACHED, kit.META_PATH), m.Option("name"))
|
||||
m.Cmdy(nfs.LINK, p, msg.Append("file"))
|
||||
m.Option("progress", m.Prefix(CACHE), "", m.Option(kit.MDB_LINK))
|
||||
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(kit.MDB_LINK))
|
||||
|
||||
// 完成
|
||||
if file, e := avutil.Open(p); m.Assert(e) {
|
||||
p := path.Join(m.Conf(m.Prefix(CACHE), kit.META_PATH), m.Option(kit.MDB_NAME))
|
||||
m.Cmdy(nfs.LINK, p, msg.Append(kit.MDB_FILE))
|
||||
|
||||
if file, e := avutil.Open(p); e == nil {
|
||||
defer file.Close()
|
||||
if streams, e := file.Streams(); m.Assert(e) {
|
||||
for _, stream := range streams {
|
||||
if stream.Type().IsAudio() {
|
||||
|
||||
} else if stream.Type().IsVideo() {
|
||||
if streams, e := file.Streams(); e == nil {
|
||||
for _, stream := range streams {
|
||||
|
||||
switch {
|
||||
case stream.Type().IsAudio():
|
||||
case 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)
|
||||
}
|
||||
m.Cmd(nfs.LINK, path.Join(m.Conf(m.Prefix(CACHE), kit.META_PATH),
|
||||
kit.Select("竖屏", "横屏", vstream.Width() > vstream.Height()), m.Option(kit.MDB_NAME)), p)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}},
|
||||
"prune": {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Richs(CACHED, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
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), "")
|
||||
}
|
||||
})
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
"export": {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
f, p, e := kit.Create(path.Join("usr/export", m.Prefix(CACHED), "list.csv"))
|
||||
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)
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_STEP, "100")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option("cache.limit", 100)
|
||||
m.Option("fields", "time,hash,type,progress,size,total,name,text,link")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(CACHED), "", mdb.HASH)
|
||||
m.Sort("time", "time_r")
|
||||
m.PushAction("下载")
|
||||
m.Appendv(ice.MSG_APPEND, "time", "type", "name", "text",
|
||||
"action", "progress", "size", "total", "hash", "link")
|
||||
m.Option(ice.MSG_ACTION, "删除")
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(CACHE), kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH)
|
||||
}},
|
||||
},
|
||||
}, nil)
|
||||
|
@ -9,18 +9,20 @@ import (
|
||||
|
||||
const CHROME = "chrome"
|
||||
|
||||
var Index = &ice.Context{Name: "chrome", Help: "浏览器",
|
||||
var Index = &ice.Context{Name: CHROME, Help: "浏览器",
|
||||
Configs: map[string]*ice.Config{
|
||||
CHROME: {Name: "chrome", Help: "浏览器", Value: kit.Data(
|
||||
kit.MDB_SHORT, "name", "history", "url.history",
|
||||
)},
|
||||
CHROME: {Name: CHROME, Help: "浏览器", Value: kit.Data()},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
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() }},
|
||||
|
||||
CHROME: {Name: "chrome wid=auto url auto 编译:button 下载:button", Help: "浏览器", Action: map[string]*ice.Action{
|
||||
"compile": {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
|
||||
CHROME: {Name: "chrome wid url auto 启动 构建 下载", Help: "浏览器", Action: map[string]*ice.Action{
|
||||
"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) {
|
||||
m.Cmdy(web.SPACE, CHROME, CHROME, arg)
|
||||
|
@ -11,6 +11,8 @@ field chrome web.code.chrome.chrome
|
||||
|
||||
chapter "应用"
|
||||
field "浏览器" web.space
|
||||
field "收藏夹" web.code.chrome.spide
|
||||
field "收藏夹" web.code.chrome.cache
|
||||
field "收藏夹" web.code.chrome.favor
|
||||
field "同步流" web.code.chrome.sync
|
||||
|
||||
|
@ -4,8 +4,6 @@ import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
)
|
||||
|
||||
const FAVOR = "favor"
|
||||
@ -14,26 +12,26 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
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{
|
||||
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) {
|
||||
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) {
|
||||
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)
|
||||
})
|
||||
}},
|
||||
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)
|
||||
})
|
||||
}},
|
||||
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) {
|
||||
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) {
|
||||
switch arg[0] {
|
||||
case "topic":
|
||||
case kit.MDB_TOPIC:
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
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.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)
|
||||
}
|
||||
|
@ -3,104 +3,35 @@ package crx
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
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() {
|
||||
Index.Merge(&ice.Context{
|
||||
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",
|
||||
)},
|
||||
},
|
||||
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) {
|
||||
if m.Richs(CACHED, "", m.Option("link"), func(key string, value map[string]interface{}) {
|
||||
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) {
|
||||
m.Cmd(m.Prefix(CACHE), mdb.CREATE, arg)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
msg := m.Cmd(web.SPACE, CHROME, CHROME, arg)
|
||||
switch kit.Select("spide", arg, 2) {
|
||||
case "cache":
|
||||
m.Option("fields", "time,type,progress,size,total,name,text,link")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SPIDED), "", mdb.HASH)
|
||||
case "spide":
|
||||
switch msg := m.Cmd(web.SPACE, CHROME, CHROME, arg); kit.Select(SPIDE, arg, 2) {
|
||||
case SPIDE:
|
||||
if len(arg) > 1 {
|
||||
msg.PushAction("下载")
|
||||
msg.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push("time", value["time"])
|
||||
m.Push("type", value["type"])
|
||||
m.Push("action", value["action"])
|
||||
m.Push("name", value["name"])
|
||||
switch value["type"] {
|
||||
case "img":
|
||||
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"])
|
||||
m.Push(kit.MDB_TIME, value[kit.MDB_TIME])
|
||||
m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE])
|
||||
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
|
||||
m.PushRender("action", "button", "下载")
|
||||
m.PushRender(kit.MDB_TEXT, value[kit.MDB_TYPE], value[kit.MDB_LINK])
|
||||
m.Push(kit.MDB_LINK, value[kit.MDB_LINK])
|
||||
})
|
||||
break
|
||||
}
|
||||
|
@ -8,13 +8,12 @@ import (
|
||||
)
|
||||
|
||||
const SYNC = "sync"
|
||||
const SPIDE = "spide"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
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{
|
||||
@ -25,19 +24,18 @@ func init() {
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
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) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
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) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
if len(arg) > 0 {
|
||||
if m.Option(mdb.FIELDS, kit.Select(m.Conf(SYNC, kit.META_FIELD), mdb.DETAIL, len(arg) > 0)); len(arg) > 0 {
|
||||
m.Option("cache.field", kit.MDB_ID)
|
||||
m.Option("cache.value", arg[0])
|
||||
} else {
|
||||
@ -50,12 +48,13 @@ func init() {
|
||||
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) {
|
||||
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{
|
||||
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_DEV, "/code/chrome/sync", "name", arg[1], "note", arg[2])
|
||||
m.Cmdy(web.SPIDE, web.SPIDE_SELF, "/code/chrome/sync",
|
||||
kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2])
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
}},
|
||||
|
Loading…
x
Reference in New Issue
Block a user