Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/115_share/utils.go
1987 views
1
package _115_share
2
3
import (
4
"fmt"
5
"strconv"
6
"time"
7
8
driver115 "github.com/SheltonZhu/115driver/pkg/driver"
9
"github.com/alist-org/alist/v3/internal/model"
10
"github.com/alist-org/alist/v3/pkg/utils"
11
"github.com/pkg/errors"
12
)
13
14
var _ model.Obj = (*FileObj)(nil)
15
16
type FileObj struct {
17
Size int64
18
Sha1 string
19
Utm time.Time
20
FileName string
21
isDir bool
22
FileID string
23
}
24
25
func (f *FileObj) CreateTime() time.Time {
26
return f.Utm
27
}
28
29
func (f *FileObj) GetHash() utils.HashInfo {
30
return utils.NewHashInfo(utils.SHA1, f.Sha1)
31
}
32
33
func (f *FileObj) GetSize() int64 {
34
return f.Size
35
}
36
37
func (f *FileObj) GetName() string {
38
return f.FileName
39
}
40
41
func (f *FileObj) ModTime() time.Time {
42
return f.Utm
43
}
44
45
func (f *FileObj) IsDir() bool {
46
return f.isDir
47
}
48
49
func (f *FileObj) GetID() string {
50
return f.FileID
51
}
52
53
func (f *FileObj) GetPath() string {
54
return ""
55
}
56
57
func transFunc(sf driver115.ShareFile) (model.Obj, error) {
58
timeInt, err := strconv.ParseInt(sf.UpdateTime, 10, 64)
59
if err != nil {
60
return nil, err
61
}
62
var (
63
utm = time.Unix(timeInt, 0)
64
isDir = (sf.IsFile == 0)
65
fileID = string(sf.FileID)
66
)
67
if isDir {
68
fileID = string(sf.CategoryID)
69
}
70
return &FileObj{
71
Size: int64(sf.Size),
72
Sha1: sf.Sha1,
73
Utm: utm,
74
FileName: string(sf.FileName),
75
isDir: isDir,
76
FileID: fileID,
77
}, nil
78
}
79
80
var UserAgent = driver115.UA115Browser
81
82
func (d *Pan115Share) login() error {
83
var err error
84
opts := []driver115.Option{
85
driver115.UA(UserAgent),
86
}
87
d.client = driver115.New(opts...)
88
if _, err := d.client.GetShareSnap(d.ShareCode, d.ReceiveCode, ""); err != nil {
89
return errors.Wrap(err, "failed to get share snap")
90
}
91
cr := &driver115.Credential{}
92
if d.QRCodeToken != "" {
93
s := &driver115.QRCodeSession{
94
UID: d.QRCodeToken,
95
}
96
if cr, err = d.client.QRCodeLoginWithApp(s, driver115.LoginApp(d.QRCodeSource)); err != nil {
97
return errors.Wrap(err, "failed to login by qrcode")
98
}
99
d.Cookie = fmt.Sprintf("UID=%s;CID=%s;SEID=%s;KID=%s", cr.UID, cr.CID, cr.SEID, cr.KID)
100
d.QRCodeToken = ""
101
} else if d.Cookie != "" {
102
if err = cr.FromCookie(d.Cookie); err != nil {
103
return errors.Wrap(err, "failed to login by cookies")
104
}
105
d.client.ImportCredential(cr)
106
} else {
107
return errors.New("missing cookie or qrcode account")
108
}
109
110
return d.client.LoginCheck()
111
}
112
113