forked from Angey40/BaiduPCS-Go
/
maniper.go
176 lines (151 loc) · 4.04 KB
/
maniper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package pcsconfig
import (
"strings"
)
const (
opDelete = "delete"
opSwitch = "switch"
opGet = "get"
)
func (c *PCSConfig) manipUser(op string, baiduBase *BaiduBase) (*Baidu, error) {
// empty baiduBase
if baiduBase == nil || (baiduBase.UID == 0 && baiduBase.Name == "") {
switch op {
case opGet:
return &Baidu{}, nil
default:
return nil, ErrBaiduUserNotFound
}
}
if len(c.baiduUserList) == 0 {
return nil, ErrNoSuchBaiduUser
}
for k, user := range c.baiduUserList {
if user == nil {
continue
}
switch {
case baiduBase.UID != 0 && baiduBase.Name != "":
// 不区分大小写
if user.UID == baiduBase.UID && strings.Compare(strings.ToUpper(user.Name), strings.ToUpper(baiduBase.Name)) == 0 {
goto handle
}
continue
case baiduBase.UID == 0 && baiduBase.Name != "":
// 不区分大小写
if strings.Compare(strings.ToUpper(user.Name), strings.ToUpper(baiduBase.Name)) == 0 {
goto handle
}
continue
case baiduBase.UID != 0 && baiduBase.Name == "":
if user.UID == baiduBase.UID {
goto handle
}
continue
default:
continue
}
// unreachable zone
handle:
switch op {
case opSwitch:
c.setupNewUser(user)
case opDelete:
c.baiduUserList = append(c.baiduUserList[:k], c.baiduUserList[k+1:]...)
// 修改 正在使用的 百度帐号
// 如果要删除的帐号为当前登录的帐号, 则设置当前登录帐号为列表中第一个帐号
if c.baiduActiveUID == user.UID {
if len(c.baiduUserList) != 0 {
c.setupNewUser(c.baiduUserList[0])
} else {
c.baiduActiveUID = 0
}
}
case opGet:
// do nothing
default:
// do nothing
}
return user, nil
}
return nil, ErrBaiduUserNotFound
}
//setupNewUser 从已有用户中, 设置新的当前登录用户
func (c *PCSConfig) setupNewUser(user *Baidu) {
if user == nil {
return
}
c.baiduActiveUID = user.UID
c.activeUser = user
c.pcs = user.BaiduPCS()
}
// SwitchUser 切换用户, 返回切换成功的用户
func (c *PCSConfig) SwitchUser(baiduBase *BaiduBase) (*Baidu, error) {
return c.manipUser(opSwitch, baiduBase)
}
// DeleteUser 删除用户, 返回删除成功的用户
func (c *PCSConfig) DeleteUser(baiduBase *BaiduBase) (*Baidu, error) {
return c.manipUser(opDelete, baiduBase)
}
// GetBaiduUser 获取百度用户信息
func (c *PCSConfig) GetBaiduUser(baidubase *BaiduBase) (*Baidu, error) {
return c.manipUser(opGet, baidubase)
}
// CheckBaiduUserExist 检查百度用户是否存在于已登录列表
func (c *PCSConfig) CheckBaiduUserExist(baidubase *BaiduBase) bool {
_, err := c.manipUser("", baidubase)
return err == nil
}
// SetupUserByBDUSS 设置百度 bduss, ptoken, stoken 并保存
func (c *PCSConfig) SetupUserByBDUSS(bduss, ptoken, stoken string) (baidu *Baidu, err error) {
b, err := NewUserInfoByBDUSS(bduss)
if err != nil {
return nil, err
}
c.DeleteUser(&BaiduBase{
UID: b.UID,
}) // 删除旧的信息
b.PTOKEN = ptoken
b.STOKEN = stoken
c.baiduUserList = append(c.baiduUserList, b)
// 自动切换用户
c.setupNewUser(b)
return b, nil
}
// SetAppID 设置app_id
func (c *PCSConfig) SetAppID(appID int) {
c.appID = appID
if c.pcs != nil {
c.pcs.SetAPPID(appID)
}
}
// SetCacheSize 设置cache_size, 下载缓存
func (c *PCSConfig) SetCacheSize(cacheSize int) {
c.cacheSize = cacheSize
}
// SetMaxParallel 设置max_parallel, 下载最大并发量
func (c *PCSConfig) SetMaxParallel(maxParallel int) {
c.maxParallel = maxParallel
}
// SetMaxDownloadLoad 设置max_download_load, 同时进行下载文件的最大数量
func (c *PCSConfig) SetMaxDownloadLoad(maxDownloadLoad int) {
c.maxDownloadLoad = maxDownloadLoad
}
// SetUserAgent 设置User-Agent
func (c *PCSConfig) SetUserAgent(userAgent string) {
c.userAgent = userAgent
if c.pcs != nil {
c.pcs.SetUserAgent(userAgent)
}
}
// SetSaveDir 设置下载保存路径
func (c *PCSConfig) SetSaveDir(saveDir string) {
c.saveDir = saveDir
}
// SetEnableHTTPS 设置是否启用https
func (c *PCSConfig) SetEnableHTTPS(https bool) {
c.enableHTTPS = https
if c.pcs != nil {
c.pcs.SetHTTPS(https)
}
}