mirror of https://github.com/Xhofe/alist
				
				
				
			
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
| package _115_share
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| 
 | |
| 	driver115 "github.com/SheltonZhu/115driver/pkg/driver"
 | |
| 	"github.com/alist-org/alist/v3/internal/model"
 | |
| 	"github.com/alist-org/alist/v3/pkg/utils"
 | |
| 	"github.com/pkg/errors"
 | |
| )
 | |
| 
 | |
| var _ model.Obj = (*FileObj)(nil)
 | |
| 
 | |
| type FileObj struct {
 | |
| 	Size     int64
 | |
| 	Sha1     string
 | |
| 	Utm      time.Time
 | |
| 	FileName string
 | |
| 	isDir    bool
 | |
| 	FileID   string
 | |
| }
 | |
| 
 | |
| func (f *FileObj) CreateTime() time.Time {
 | |
| 	return f.Utm
 | |
| }
 | |
| 
 | |
| func (f *FileObj) GetHash() utils.HashInfo {
 | |
| 	return utils.NewHashInfo(utils.SHA1, f.Sha1)
 | |
| }
 | |
| 
 | |
| func (f *FileObj) GetSize() int64 {
 | |
| 	return f.Size
 | |
| }
 | |
| 
 | |
| func (f *FileObj) GetName() string {
 | |
| 	return f.FileName
 | |
| }
 | |
| 
 | |
| func (f *FileObj) ModTime() time.Time {
 | |
| 	return f.Utm
 | |
| }
 | |
| 
 | |
| func (f *FileObj) IsDir() bool {
 | |
| 	return f.isDir
 | |
| }
 | |
| 
 | |
| func (f *FileObj) GetID() string {
 | |
| 	return f.FileID
 | |
| }
 | |
| 
 | |
| func (f *FileObj) GetPath() string {
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| func transFunc(sf driver115.ShareFile) (model.Obj, error) {
 | |
| 	timeInt, err := strconv.ParseInt(sf.UpdateTime, 10, 64)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	var (
 | |
| 		utm    = time.Unix(timeInt, 0)
 | |
| 		isDir  = (sf.IsFile == 0)
 | |
| 		fileID = string(sf.FileID)
 | |
| 	)
 | |
| 	if isDir {
 | |
| 		fileID = string(sf.CategoryID)
 | |
| 	}
 | |
| 	return &FileObj{
 | |
| 		Size:     int64(sf.Size),
 | |
| 		Sha1:     sf.Sha1,
 | |
| 		Utm:      utm,
 | |
| 		FileName: string(sf.FileName),
 | |
| 		isDir:    isDir,
 | |
| 		FileID:   fileID,
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| var UserAgent = driver115.UA115Browser
 | |
| 
 | |
| func (d *Pan115Share) login() error {
 | |
| 	var err error
 | |
| 	opts := []driver115.Option{
 | |
| 		driver115.UA(UserAgent),
 | |
| 	}
 | |
| 	d.client = driver115.New(opts...)
 | |
| 	if _, err := d.client.GetShareSnap(d.ShareCode, d.ReceiveCode, ""); err != nil {
 | |
| 		return errors.Wrap(err, "failed to get share snap")
 | |
| 	}
 | |
| 	cr := &driver115.Credential{}
 | |
| 	if d.QRCodeToken != "" {
 | |
| 		s := &driver115.QRCodeSession{
 | |
| 			UID: d.QRCodeToken,
 | |
| 		}
 | |
| 		if cr, err = d.client.QRCodeLoginWithApp(s, driver115.LoginApp(d.QRCodeSource)); err != nil {
 | |
| 			return errors.Wrap(err, "failed to login by qrcode")
 | |
| 		}
 | |
| 		d.Cookie = fmt.Sprintf("UID=%s;CID=%s;SEID=%s", cr.UID, cr.CID, cr.SEID)
 | |
| 		d.QRCodeToken = ""
 | |
| 	} else if d.Cookie != "" {
 | |
| 		if err = cr.FromCookie(d.Cookie); err != nil {
 | |
| 			return errors.Wrap(err, "failed to login by cookies")
 | |
| 		}
 | |
| 		d.client.ImportCredential(cr)
 | |
| 	} else {
 | |
| 		return errors.New("missing cookie or qrcode account")
 | |
| 	}
 | |
| 
 | |
| 	return d.client.LoginCheck()
 | |
| }
 |