github.com/qjfoidnh/BaiduPCS-Go@v0.0.0-20231011165705-caa18a3765f3/baidupcs/jsontable.go (about) 1 package baidupcs 2 3 import ( 4 "errors" 5 "github.com/qjfoidnh/BaiduPCS-Go/pcstable" 6 "github.com/qjfoidnh/BaiduPCS-Go/pcsutil" 7 "github.com/json-iterator/go" 8 "path" 9 "strconv" 10 "strings" 11 ) 12 13 type ( 14 // PathJSON 网盘路径 15 PathJSON struct { 16 Path string `json:"path"` 17 } 18 19 // PathsListJSON 网盘路径列表 20 PathsListJSON struct { 21 List []*PathJSON `json:"list"` 22 } 23 24 // FsIDJSON 文件或目录ID 25 FsIDJSON struct { 26 FsID int64 `json:"fs_id"` // fs_id 27 } 28 29 // FsIDListJSON fs_id 列表 30 FsIDListJSON struct { 31 List []*FsIDJSON `json:"list"` 32 } 33 34 // CpMvJSON 源文件目录的地址和目标文件目录的地址 35 CpMvJSON struct { 36 From string `json:"from"` // 源文件或目录 37 To string `json:"to"` // 目标文件或目录 38 } 39 40 // CpMvJSONList CpMvJSON 列表 41 CpMvJSONList []*CpMvJSON 42 43 // CpMvListJSON []*CpMvJSON 对象数组 44 CpMvListJSON struct { 45 List CpMvJSONList `json:"list"` 46 } 47 48 // BlockListJSON 文件分块信息JSON 49 BlockListJSON struct { 50 BlockList []string `json:"block_list"` 51 } 52 ) 53 54 var ( 55 // ErrNilJSONValue 解析出的json值为空 56 ErrNilJSONValue = errors.New("json value is nil") 57 ) 58 59 // JSON json 数据构造 60 func (plj *PathsListJSON) JSON(paths ...string) (data []byte, err error) { 61 plj.List = make([]*PathJSON, len(paths)) 62 63 for k := range paths { 64 plj.List[k] = &PathJSON{ 65 Path: paths[k], 66 } 67 } 68 69 data, err = jsoniter.Marshal(plj) 70 return 71 } 72 73 // JSON json 数据构造 74 func (cj *CpMvJSON) JSON() (data []byte, err error) { 75 data, err = jsoniter.Marshal(cj) 76 return 77 } 78 79 // JSON json 数据构造 80 func (clj *CpMvListJSON) JSON() (data []byte, err error) { 81 data, err = jsoniter.Marshal(clj) 82 return 83 } 84 85 func (clj *CpMvListJSON) String() string { 86 builder := &strings.Builder{} 87 88 tb := pcstable.NewTable(builder) 89 tb.SetHeader([]string{"#", "原路径", "目标路径"}) 90 91 for k := range clj.List { 92 if clj.List[k] == nil { 93 continue 94 } 95 tb.Append([]string{strconv.Itoa(k), clj.List[k].From, clj.List[k].To}) 96 } 97 98 tb.Render() 99 return builder.String() 100 } 101 102 // AllRelatedDir 获取所有相关的目录 103 func (cjl *CpMvJSONList) AllRelatedDir() (dirs []string) { 104 for _, cj := range *cjl { 105 fromDir, toDir := path.Dir(cj.From), path.Dir(cj.To) 106 if !pcsutil.ContainsString(dirs, fromDir) { 107 dirs = append(dirs, fromDir) 108 } 109 if !pcsutil.ContainsString(dirs, toDir) { 110 dirs = append(dirs, toDir) 111 } 112 } 113 return 114 }