From 9af43bc745a19695f4c60021ed36118a2cf99663 Mon Sep 17 00:00:00 2001 From: shaoying Date: Tue, 24 Mar 2020 15:14:05 +0800 Subject: [PATCH] add favor.save --- base/mdb/mdb.go | 15 +++++-- base/tcp/tcp.go | 7 ++++ base/web/web.go | 43 ++++++++++++++++++++ misc/alpha/alpha.go | 98 ++++++++++++++++++++++++++++----------------- misc/input/input.go | 2 +- 5 files changed, 124 insertions(+), 41 deletions(-) diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 11ca31bc..1c310127 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -112,6 +112,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", r = csv.NewReader(f) } } + head, _ := r.Read() for { @@ -122,7 +123,11 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", data := kit.Dict() 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) @@ -145,8 +150,10 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", case kit.MDB_DICT: case kit.MDB_META: case kit.MDB_LIST: - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - w := csv.NewWriter(buf) + f, p, e := kit.Create("var/temp/" + kit.Keys(name, "csv")) + m.Assert(e) + w := csv.NewWriter(f) + head := []string{} m.Grows(arg[0], arg[1], "", "", func(index int, value map[string]interface{}) { if index == 0 { @@ -167,7 +174,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", }) 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: m.Cmdy(ice.WEB_STORY, "add", "json", name, kit.Formats(m.Confv(arg[0], arg[1]))) diff --git a/base/tcp/tcp.go b/base/tcp/tcp.go index 03ce1032..74aa95fd 100644 --- a/base/tcp/tcp.go +++ b/base/tcp/tcp.go @@ -11,6 +11,13 @@ var Index = &ice.Context{Name: "tcp", Help: "通信模块", Caches: map[string]*ice.Cache{}, Configs: map[string]*ice.Config{}, 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) { if ifs, e := net.Interfaces(); m.Assert(e) { for _, v := range ifs { diff --git a/base/web/web.go b/base/web/web.go index de087a21..f2f8abcd 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -7,6 +7,7 @@ import ( "github.com/skip2/go-qrcode" "bytes" + "encoding/csv" "encoding/json" "fmt" "io" @@ -1028,6 +1029,46 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", } 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": m.Richs(ice.WEB_FAVOR, nil, arg[1], func(key string, val map[string]interface{}) { remote := kit.Keys("meta.remote", arg[2], arg[3]) @@ -1090,6 +1131,8 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", 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( kit.MDB_TYPE, arg[1], kit.MDB_NAME, arg[2], kit.MDB_TEXT, arg[3], diff --git a/misc/alpha/alpha.go b/misc/alpha/alpha.go index c13703b8..00f6afb6 100644 --- a/misc/alpha/alpha.go +++ b/misc/alpha/alpha.go @@ -15,7 +15,9 @@ var Index = &ice.Context{Name: "alpha", Help: "英汉词典", Caches: map[string]*ice.Cache{}, Configs: map[string]*ice.Config{ "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{ @@ -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) { m.Save("alpha") }}, - - "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")) + "load": {Name: "load file [name]", Help: "加载词库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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": - // 加载词库 - m.Cmd(ice.MDB_IMPORT, "alpha", "", "list", - m.Cmd(ice.WEB_CACHE, "catch", "csv", arg[1]).Append("data")) - case "list": - // 词汇列表 - m.Option("cache.offend", kit.Select("0", arg, 1)) - m.Option("cache.limit", kit.Select("10", arg, 2)) - m.Grows("alpha", nil, "", "", func(index int, value map[string]interface{}) { - m.Push("", value, []string{"id", "word", "translation", "definition"}) - }) - } + // 清空数据 + lib := kit.Select(path.Base(arg[0]), arg, 1) + m.Assert(os.RemoveAll(path.Join(m.Conf("alpha", "meta.store"), lib))) + m.Conf("alpha", lib, "") + + // 缓存配置 + m.Conf("alpha", kit.Keys(lib, "meta.store"), path.Join(m.Conf("alpha", "meta.store"), lib)) + m.Conf("alpha", kit.Keys(lib, "meta.fsize"), m.Conf("alpha", "meta.fsize")) + m.Conf("alpha", kit.Keys(lib, "meta.limit"), m.Conf("alpha", "meta.limit")) + m.Conf("alpha", kit.Keys(lib, "meta.least"), m.Conf("alpha", "meta.least")) + + 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) { - 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++ { - 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) { @@ -70,23 +108,11 @@ var Index = &ice.Context{Name: "alpha", Help: "英汉词典", 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")))) for i := 0; i < 100; i++ { if line, e := bio.Read(); e != nil { diff --git a/misc/input/input.go b/misc/input/input.go index 248b9673..9b5aff85 100644 --- a/misc/input/input.go +++ b/misc/input/input.go @@ -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) { 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") { m.Echo("wubi86: %v", m.Conf("input", "wubi86.meta.count")) return