1
0
forked from x/icebergs

add favor.save

This commit is contained in:
shaoying 2020-03-24 15:14:05 +08:00
parent 330613b736
commit 9af43bc745
5 changed files with 124 additions and 41 deletions

View File

@ -112,6 +112,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
r = csv.NewReader(f) r = csv.NewReader(f)
} }
} }
head, _ := r.Read() head, _ := r.Read()
for { for {
@ -122,7 +123,11 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
data := kit.Dict() data := kit.Dict()
for i, k := range head { for i, k := range head {
data[k] = line[i] if k == kit.MDB_EXTRA {
data[k] = kit.UnMarshal(line[i])
} else {
data[k] = line[i]
}
} }
// 导入数据 // 导入数据
n := m.Grow(arg[0], arg[1], data) n := m.Grow(arg[0], arg[1], data)
@ -145,8 +150,10 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
case kit.MDB_DICT: case kit.MDB_DICT:
case kit.MDB_META: case kit.MDB_META:
case kit.MDB_LIST: case kit.MDB_LIST:
buf := bytes.NewBuffer(make([]byte, 0, 1024)) f, p, e := kit.Create("var/temp/" + kit.Keys(name, "csv"))
w := csv.NewWriter(buf) m.Assert(e)
w := csv.NewWriter(f)
head := []string{} head := []string{}
m.Grows(arg[0], arg[1], "", "", func(index int, value map[string]interface{}) { m.Grows(arg[0], arg[1], "", "", func(index int, value map[string]interface{}) {
if index == 0 { if index == 0 {
@ -167,7 +174,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
}) })
w.Flush() w.Flush()
m.Cmdy(ice.WEB_STORY, "add", "csv", name, string(buf.Bytes())) m.Cmdy(ice.WEB_STORY, "catch", "csv", p)
case kit.MDB_HASH: case kit.MDB_HASH:
m.Cmdy(ice.WEB_STORY, "add", "json", name, kit.Formats(m.Confv(arg[0], arg[1]))) m.Cmdy(ice.WEB_STORY, "add", "json", name, kit.Formats(m.Confv(arg[0], arg[1])))

View File

@ -11,6 +11,13 @@ var Index = &ice.Context{Name: "tcp", Help: "通信模块",
Caches: map[string]*ice.Cache{}, Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{}, Configs: map[string]*ice.Config{},
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
"ip": {Name: "ifconfig [name]", Help: "网络配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if addr, e := net.InterfaceAddrs(); m.Assert(e) {
for _, v := range addr {
m.Info("%v", v)
}
}
}},
"ifconfig": {Name: "ifconfig [name]", Help: "网络配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "ifconfig": {Name: "ifconfig [name]", Help: "网络配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if ifs, e := net.Interfaces(); m.Assert(e) { if ifs, e := net.Interfaces(); m.Assert(e) {
for _, v := range ifs { for _, v := range ifs {

View File

@ -7,6 +7,7 @@ import (
"github.com/skip2/go-qrcode" "github.com/skip2/go-qrcode"
"bytes" "bytes"
"encoding/csv"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -1028,6 +1029,46 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
} }
switch arg[0] { switch arg[0] {
case "save":
f, p, e := kit.Create(arg[1])
m.Assert(e)
defer f.Close()
w := csv.NewWriter(f)
w.Write([]string{"favor", "type", "name", "text", "extra"})
n := 0
m.Option("cache.offend", 0)
m.Option("cache.limit", -2)
for _, favor := range arg[2:] {
m.Richs(ice.WEB_FAVOR, nil, favor, func(key string, val map[string]interface{}) {
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
w.Write(kit.Simple(kit.Value(val, "meta.name"), value["type"], value["name"], value["text"], kit.Format(value["extra"])))
n++
})
})
}
w.Flush()
m.Echo("%s: %d", p, n)
case "load":
f, e := os.Open(arg[1])
m.Assert(e)
defer f.Close()
r := csv.NewReader(f)
head, e := r.Read()
m.Assert(e)
m.Info("head: %v", head)
for {
line, e := r.Read()
if e != nil {
break
}
m.Cmd(ice.WEB_FAVOR, line)
}
case "sync": case "sync":
m.Richs(ice.WEB_FAVOR, nil, arg[1], func(key string, val map[string]interface{}) { m.Richs(ice.WEB_FAVOR, nil, arg[1], func(key string, val map[string]interface{}) {
remote := kit.Keys("meta.remote", arg[2], arg[3]) remote := kit.Keys("meta.remote", arg[2], arg[3])
@ -1090,6 +1131,8 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
arg = append(arg, "") arg = append(arg, "")
} }
m.Info("what %v", arg[4:])
m.Info("what %v", kit.Dict(arg[4:]))
// 添加收藏 // 添加收藏
index := m.Grow(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), kit.Dict( index := m.Grow(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, favor), kit.Dict(
kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3], kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3],

View File

@ -15,7 +15,9 @@ var Index = &ice.Context{Name: "alpha", Help: "英汉词典",
Caches: map[string]*ice.Cache{}, Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
"alpha": {Name: "alpha", Help: "英汉词典", Value: kit.Data( "alpha": {Name: "alpha", Help: "英汉词典", Value: kit.Data(
"store", "var/alpha/", "limit", "2000", "least", "1000", "store", "var/data/alpha", "fsize", "200000", "limit", "5000", "least", "1000",
"repos", "word-dict", "local", "some",
"field", []interface{}{"audio", "bnc", "collins", "definition", "detail", "exchange", "frq", "id", "oxford", "phonetic", "pos", "tag", "time", "translation", "word"},
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
@ -25,31 +27,67 @@ var Index = &ice.Context{Name: "alpha", Help: "英汉词典",
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save("alpha") m.Save("alpha")
}}, }},
"load": {Name: "load file [name]", Help: "加载词库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
"alpha": {Name: "alpha [load|list]", Help: "英汉词典", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
count := kit.Int(m.Conf("alpha", "meta.count"))
if len(arg) == 0 { if len(arg) == 0 {
arg = append(arg, "list", kit.Format(count-rand.Intn(count))) // 下载词库
if m.Cmd("web.code.git.repos", m.Conf("alpha", "meta.repos"), "usr/"+m.Conf("alpha", "meta.repos")); m.Confs("alpha", "ecdict") {
m.Echo("ecdict: %v", m.Conf("alpha", "ecdict.meta.count"))
return
}
arg = append(arg, path.Join("usr", m.Conf("alpha", "meta.repos"), "ecdict"))
} }
switch arg[0] { // 清空数据
case "load": lib := kit.Select(path.Base(arg[0]), arg, 1)
// 加载词库 m.Assert(os.RemoveAll(path.Join(m.Conf("alpha", "meta.store"), lib)))
m.Cmd(ice.MDB_IMPORT, "alpha", "", "list", m.Conf("alpha", lib, "")
m.Cmd(ice.WEB_CACHE, "catch", "csv", arg[1]).Append("data"))
case "list": // 缓存配置
// 词汇列表 m.Conf("alpha", kit.Keys(lib, "meta.store"), path.Join(m.Conf("alpha", "meta.store"), lib))
m.Option("cache.offend", kit.Select("0", arg, 1)) m.Conf("alpha", kit.Keys(lib, "meta.fsize"), m.Conf("alpha", "meta.fsize"))
m.Option("cache.limit", kit.Select("10", arg, 2)) m.Conf("alpha", kit.Keys(lib, "meta.limit"), m.Conf("alpha", "meta.limit"))
m.Grows("alpha", nil, "", "", func(index int, value map[string]interface{}) { m.Conf("alpha", kit.Keys(lib, "meta.least"), m.Conf("alpha", "meta.least"))
m.Push("", value, []string{"id", "word", "translation", "definition"})
}) m.Cmd(ice.MDB_IMPORT, "alpha", lib, "list",
} m.Cmd(ice.WEB_CACHE, "catch", "csv", arg[0]+".csv").Append("data"))
// 保存词库
m.Conf("alpha", kit.Keys(lib, "meta.limit"), 0)
m.Conf("alpha", kit.Keys(lib, "meta.least"), 0)
m.Echo("%s: %d", lib, m.Grow("alpha", lib, kit.Dict("word", " ")))
}}, }},
"push": {Name: "push lib word text", Help: "添加词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Conf("alpha", kit.Keys(arg[0], "meta.limit"), 0)
m.Conf("alpha", kit.Keys(arg[0], "meta.least"), 0)
m.Echo("%s: %d", arg[0], m.Grow("alpha", arg[0], kit.Dict("word", arg[1], "translation", arg[2])))
}},
"list": {Name: "list [lib [offend [limit]]]", Help: "查看词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
kit.Fetch(m.Confv("alpha"), func(key string, value map[string]interface{}) {
if key != "meta" {
m.Push(key, value["meta"], []string{"key", "count"})
}
})
return
}
lib := kit.Select("ecdict", arg, 0)
m.Option("cache.offend", kit.Select("0", arg, 1))
m.Option("cache.limit", kit.Select("10", arg, 2))
m.Grows("alpha", lib, "", "", func(index int, value map[string]interface{}) {
m.Push("", value, []string{"id", "word", "translation"})
})
}},
"save": {Name: "save lib [filename]", Help: "导出词库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option("cache.offend", 0)
m.Option("cache.limit", -2)
m.Cmdy(ice.WEB_STORY, "watch", m.Cmdx(ice.MDB_EXPORT, "alpha", arg[0], "list"), arg[1:])
}},
"random": {Name: "random [count]", Help: "随机词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "random": {Name: "random [count]", Help: "随机词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
count := kit.Int(m.Conf("alpha", "meta.count")) count := kit.Int(m.Conf("alpha", "ecdict.meta.count")) + 1
for i := 0; i < kit.Int(kit.Select("10", arg, 0)); i++ { for i := 0; i < kit.Int(kit.Select("10", arg, 0)); i++ {
m.Cmdy("alpha", "list", count-rand.Intn(count), 1) m.Cmdy("list", "ecdict", count-rand.Intn(count), 1)
} }
}}, }},
"search": {Name: "search [word [method]]", Help: "查找词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "search": {Name: "search [word [method]]", Help: "查找词汇", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
@ -70,23 +108,11 @@ var Index = &ice.Context{Name: "alpha", Help: "英汉词典",
arg[0] = "," + arg[0] + "$" arg[0] = "," + arg[0] + "$"
} }
// 字段列表
field := m.Confm("alpha", "meta.field")
if field == nil {
field = map[string]interface{}{}
head := []string{}
if f, e := os.Open(path.Join(m.Conf("alpha", "meta.store"), "web.wiki.alpha.alpha.csv")); m.Assert(e) {
defer f.Close()
bio := csv.NewReader(f)
head, e = bio.Read()
}
for i, k := range head {
field[k] = i
}
m.Conf("alpha", "meta.field", field)
}
// 搜索词汇 // 搜索词汇
field := map[string]int{}
for i, k := range kit.Simple(m.Confv("alpha", "meta.field")) {
field[k] = i
}
bio := csv.NewReader(bytes.NewBufferString(m.Cmdx(ice.CLI_SYSTEM, "grep", "-rh", arg[0], m.Conf("alpha", "meta.store")))) bio := csv.NewReader(bytes.NewBufferString(m.Cmdx(ice.CLI_SYSTEM, "grep", "-rh", arg[0], m.Conf("alpha", "meta.store"))))
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
if line, e := bio.Read(); e != nil { if line, e := bio.Read(); e != nil {

View File

@ -32,7 +32,7 @@ var Index = &ice.Context{Name: "input", Help: "输入法",
"load": {Name: "load file [name]", Help: "加载词库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "load": {Name: "load file [name]", Help: "加载词库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {
// 默认词库 // 下载词库
if m.Cmd("web.code.git.repos", m.Conf("input", "meta.repos"), "usr/"+m.Conf("input", "meta.repos")); m.Confs("input", "wubi86") { if m.Cmd("web.code.git.repos", m.Conf("input", "meta.repos"), "usr/"+m.Conf("input", "meta.repos")); m.Confs("input", "wubi86") {
m.Echo("wubi86: %v", m.Conf("input", "wubi86.meta.count")) m.Echo("wubi86: %v", m.Conf("input", "wubi86.meta.count"))
return return