github.com/fzfile/BaiduPCS-Go@v0.0.0-20200606205115-4408961cf336/baidupcs/jsontable.go (about)

     1  package baidupcs
     2  
     3  import (
     4  	"errors"
     5  	"github.com/fzfile/BaiduPCS-Go/pcstable"
     6  	"github.com/fzfile/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  }