Path: blob/main/internal/offline_download/115/client.go
1562 views
package _11512import (3"context"4"fmt"5"github.com/alist-org/alist/v3/internal/conf"6"github.com/alist-org/alist/v3/internal/setting"78"github.com/alist-org/alist/v3/drivers/115"9"github.com/alist-org/alist/v3/internal/errs"10"github.com/alist-org/alist/v3/internal/model"11"github.com/alist-org/alist/v3/internal/offline_download/tool"12"github.com/alist-org/alist/v3/internal/op"13)1415type Cloud115 struct {16refreshTaskCache bool17}1819func (p *Cloud115) Name() string {20return "115 Cloud"21}2223func (p *Cloud115) Items() []model.SettingItem {24return nil25}2627func (p *Cloud115) Run(task *tool.DownloadTask) error {28return errs.NotSupport29}3031func (p *Cloud115) Init() (string, error) {32p.refreshTaskCache = false33return "ok", nil34}3536func (p *Cloud115) IsReady() bool {37tempDir := setting.GetStr(conf.Pan115TempDir)38if tempDir == "" {39return false40}41storage, _, err := op.GetStorageAndActualPath(tempDir)42if err != nil {43return false44}45if _, ok := storage.(*_115.Pan115); !ok {46return false47}48return true49}5051func (p *Cloud115) AddURL(args *tool.AddUrlArgs) (string, error) {52// 添加新任务刷新缓存53p.refreshTaskCache = true54storage, actualPath, err := op.GetStorageAndActualPath(args.TempDir)55if err != nil {56return "", err57}58driver115, ok := storage.(*_115.Pan115)59if !ok {60return "", fmt.Errorf("unsupported storage driver for offline download, only 115 Cloud is supported")61}6263ctx := context.Background()6465if err := op.MakeDir(ctx, storage, actualPath); err != nil {66return "", err67}6869parentDir, err := op.GetUnwrap(ctx, storage, actualPath)70if err != nil {71return "", err72}7374hashs, err := driver115.OfflineDownload(ctx, []string{args.Url}, parentDir)75if err != nil || len(hashs) < 1 {76return "", fmt.Errorf("failed to add offline download task: %w", err)77}7879return hashs[0], nil80}8182func (p *Cloud115) Remove(task *tool.DownloadTask) error {83storage, _, err := op.GetStorageAndActualPath(task.TempDir)84if err != nil {85return err86}87driver115, ok := storage.(*_115.Pan115)88if !ok {89return fmt.Errorf("unsupported storage driver for offline download, only 115 Cloud is supported")90}9192ctx := context.Background()93if err := driver115.DeleteOfflineTasks(ctx, []string{task.GID}, false); err != nil {94return err95}96return nil97}9899func (p *Cloud115) Status(task *tool.DownloadTask) (*tool.Status, error) {100storage, _, err := op.GetStorageAndActualPath(task.TempDir)101if err != nil {102return nil, err103}104driver115, ok := storage.(*_115.Pan115)105if !ok {106return nil, fmt.Errorf("unsupported storage driver for offline download, only 115 Cloud is supported")107}108109tasks, err := driver115.OfflineList(context.Background())110if err != nil {111return nil, err112}113114s := &tool.Status{115Progress: 0,116NewGID: "",117Completed: false,118Status: "the task has been deleted",119Err: nil,120}121for _, t := range tasks {122if t.InfoHash == task.GID {123s.Progress = t.Percent124s.Status = t.GetStatus()125s.Completed = t.IsDone()126s.TotalBytes = t.Size127if t.IsFailed() {128s.Err = fmt.Errorf(t.GetStatus())129}130return s, nil131}132}133s.Err = fmt.Errorf("the task has been deleted")134return nil, nil135}136137var _ tool.Tool = (*Cloud115)(nil)138139func init() {140tool.Tools.Add(&Cloud115{})141}142143144