Path: blob/main/internal/offline_download/pikpak/pikpak.go
1562 views
package pikpak12import (3"context"4"fmt"5"github.com/alist-org/alist/v3/internal/conf"6"github.com/alist-org/alist/v3/internal/setting"7"strconv"89"github.com/alist-org/alist/v3/drivers/pikpak"10"github.com/alist-org/alist/v3/internal/errs"11"github.com/alist-org/alist/v3/internal/model"12"github.com/alist-org/alist/v3/internal/offline_download/tool"13"github.com/alist-org/alist/v3/internal/op"14)1516type PikPak struct {17refreshTaskCache bool18}1920func (p *PikPak) Name() string {21return "PikPak"22}2324func (p *PikPak) Items() []model.SettingItem {25return nil26}2728func (p *PikPak) Run(task *tool.DownloadTask) error {29return errs.NotSupport30}3132func (p *PikPak) Init() (string, error) {33p.refreshTaskCache = false34return "ok", nil35}3637func (p *PikPak) IsReady() bool {38tempDir := setting.GetStr(conf.PikPakTempDir)39if tempDir == "" {40return false41}42storage, _, err := op.GetStorageAndActualPath(tempDir)43if err != nil {44return false45}46if _, ok := storage.(*pikpak.PikPak); !ok {47return false48}49return true50}5152func (p *PikPak) AddURL(args *tool.AddUrlArgs) (string, error) {53// 添加新任务刷新缓存54p.refreshTaskCache = true55storage, actualPath, err := op.GetStorageAndActualPath(args.TempDir)56if err != nil {57return "", err58}59pikpakDriver, ok := storage.(*pikpak.PikPak)60if !ok {61return "", fmt.Errorf("unsupported storage driver for offline download, only Pikpak is supported")62}6364ctx := context.Background()6566if err := op.MakeDir(ctx, storage, actualPath); err != nil {67return "", err68}6970parentDir, err := op.GetUnwrap(ctx, storage, actualPath)71if err != nil {72return "", err73}7475t, err := pikpakDriver.OfflineDownload(ctx, args.Url, parentDir, "")76if err != nil {77return "", fmt.Errorf("failed to add offline download task: %w", err)78}7980return t.ID, nil81}8283func (p *PikPak) Remove(task *tool.DownloadTask) error {84storage, _, err := op.GetStorageAndActualPath(task.TempDir)85if err != nil {86return err87}88pikpakDriver, ok := storage.(*pikpak.PikPak)89if !ok {90return fmt.Errorf("unsupported storage driver for offline download, only Pikpak is supported")91}92ctx := context.Background()93err = pikpakDriver.DeleteOfflineTasks(ctx, []string{task.GID}, false)94if err != nil {95return err96}97return nil98}99100func (p *PikPak) Status(task *tool.DownloadTask) (*tool.Status, error) {101storage, _, err := op.GetStorageAndActualPath(task.TempDir)102if err != nil {103return nil, err104}105pikpakDriver, ok := storage.(*pikpak.PikPak)106if !ok {107return nil, fmt.Errorf("unsupported storage driver for offline download, only Pikpak is supported")108}109tasks, err := p.GetTasks(pikpakDriver)110if err != nil {111return nil, err112}113s := &tool.Status{114Progress: 0,115NewGID: "",116Completed: false,117Status: "the task has been deleted",118Err: nil,119}120for _, t := range tasks {121if t.ID == task.GID {122s.Progress = float64(t.Progress)123s.Status = t.Message124s.Completed = (t.Phase == "PHASE_TYPE_COMPLETE")125s.TotalBytes, err = strconv.ParseInt(t.FileSize, 10, 64)126if err != nil {127s.TotalBytes = 0128}129if t.Phase == "PHASE_TYPE_ERROR" {130s.Err = fmt.Errorf(t.Message)131}132return s, nil133}134}135s.Err = fmt.Errorf("the task has been deleted")136return s, nil137}138139func init() {140tool.Tools.Add(&PikPak{})141}142143144