Mr.L
feat: add full alist source code for Docker build
7107f0b
package lanzou
import (
"errors"
"fmt"
"github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"time"
)
var ErrFileShareCancel = errors.New("file sharing cancellation")
var ErrFileNotExist = errors.New("file does not exist")
var ErrCookieExpiration = errors.New("cookie expiration")
type RespText[T any] struct {
Text T `json:"text"`
}
type RespInfo[T any] struct {
Info T `json:"info"`
}
var _ model.Obj = (*FileOrFolder)(nil)
var _ model.Obj = (*FileOrFolderByShareUrl)(nil)
type FileOrFolder struct {
Name string `json:"name"`
//Onof string `json:"onof"` // 是否存在提取码
//IsLock string `json:"is_lock"`
//IsCopyright int `json:"is_copyright"`
// 文件通用
ID string `json:"id"`
NameAll string `json:"name_all"`
Size string `json:"size"`
Time string `json:"time"`
//Icon string `json:"icon"`
//Downs string `json:"downs"`
//Filelock string `json:"filelock"`
//IsBakdownload int `json:"is_bakdownload"`
//Bakdownload string `json:"bakdownload"`
//IsDes int `json:"is_des"` // 是否存在描述
//IsIco int `json:"is_ico"`
// 文件夹
FolID string `json:"fol_id"`
//Folderlock string `json:"folderlock"`
//FolderDes string `json:"folder_des"`
// 缓存字段
size *int64 `json:"-"`
time *time.Time `json:"-"`
repairFlag bool `json:"-"`
shareInfo *FileShare `json:"-"`
}
func (f *FileOrFolder) CreateTime() time.Time {
return f.ModTime()
}
func (f *FileOrFolder) GetHash() utils.HashInfo {
return utils.HashInfo{}
}
func (f *FileOrFolder) GetID() string {
if f.IsDir() {
return f.FolID
}
return f.ID
}
func (f *FileOrFolder) GetName() string {
if f.IsDir() {
return f.Name
}
return f.NameAll
}
func (f *FileOrFolder) GetPath() string { return "" }
func (f *FileOrFolder) GetSize() int64 {
if f.size == nil {
size := SizeStrToInt64(f.Size)
f.size = &size
}
return *f.size
}
func (f *FileOrFolder) IsDir() bool { return f.FolID != "" }
func (f *FileOrFolder) ModTime() time.Time {
if f.time == nil {
time := MustParseTime(f.Time)
f.time = &time
}
return *f.time
}
func (f *FileOrFolder) SetShareInfo(fs *FileShare) {
f.shareInfo = fs
}
func (f *FileOrFolder) GetShareInfo() *FileShare {
return f.shareInfo
}
/* 通过ID获取文件/文件夹分享信息 */
type FileShare struct {
Pwd string `json:"pwd"`
Onof string `json:"onof"`
Taoc string `json:"taoc"`
IsNewd string `json:"is_newd"`
// 文件
FID string `json:"f_id"`
// 文件夹
NewUrl string `json:"new_url"`
Name string `json:"name"`
Des string `json:"des"`
}
/* 分享类型为文件夹 */
type FileOrFolderByShareUrlResp struct {
Text []FileOrFolderByShareUrl `json:"text"`
}
type FileOrFolderByShareUrl struct {
ID string `json:"id"`
NameAll string `json:"name_all"`
// 文件特有
Duan string `json:"duan"`
Size string `json:"size"`
Time string `json:"time"`
//Icon string `json:"icon"`
//PIco int `json:"p_ico"`
//T int `json:"t"`
// 文件夹特有
IsFloder bool `json:"-"`
//
Url string `json:"-"`
Pwd string `json:"-"`
// 缓存字段
size *int64 `json:"-"`
time *time.Time `json:"-"`
repairFlag bool `json:"-"`
}
func (f *FileOrFolderByShareUrl) CreateTime() time.Time {
return f.ModTime()
}
func (f *FileOrFolderByShareUrl) GetHash() utils.HashInfo {
return utils.HashInfo{}
}
func (f *FileOrFolderByShareUrl) GetID() string { return f.ID }
func (f *FileOrFolderByShareUrl) GetName() string { return f.NameAll }
func (f *FileOrFolderByShareUrl) GetPath() string { return "" }
func (f *FileOrFolderByShareUrl) GetSize() int64 {
if f.size == nil {
size := SizeStrToInt64(f.Size)
f.size = &size
}
return *f.size
}
func (f *FileOrFolderByShareUrl) IsDir() bool { return f.IsFloder }
func (f *FileOrFolderByShareUrl) ModTime() time.Time {
if f.time == nil {
time := MustParseTime(f.Time)
f.time = &time
}
return *f.time
}
// 获取下载链接的响应
type FileShareInfoAndUrlResp[T string | int] struct {
Dom string `json:"dom"`
URL string `json:"url"`
Inf T `json:"inf"`
}
func (u *FileShareInfoAndUrlResp[T]) GetBaseUrl() string {
return fmt.Sprint(u.Dom, "/file")
}
func (u *FileShareInfoAndUrlResp[T]) GetDownloadUrl() string {
return fmt.Sprint(u.GetBaseUrl(), "/", u.URL)
}