|
package netease_music |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
|
|
"github.com/alist-org/alist/v3/internal/driver" |
|
"github.com/alist-org/alist/v3/internal/errs" |
|
"github.com/alist-org/alist/v3/internal/model" |
|
_ "golang.org/x/image/webp" |
|
) |
|
|
|
type NeteaseMusic struct { |
|
model.Storage |
|
Addition |
|
|
|
csrfToken string |
|
musicU string |
|
fileMapByName map[string]model.Obj |
|
} |
|
|
|
func (d *NeteaseMusic) Config() driver.Config { |
|
return config |
|
} |
|
|
|
func (d *NeteaseMusic) GetAddition() driver.Additional { |
|
return &d.Addition |
|
} |
|
|
|
func (d *NeteaseMusic) Init(ctx context.Context) error { |
|
d.csrfToken = d.Addition.getCookie("__csrf") |
|
d.musicU = d.Addition.getCookie("MUSIC_U") |
|
|
|
if d.csrfToken == "" || d.musicU == "" { |
|
return errs.EmptyToken |
|
} |
|
|
|
return nil |
|
} |
|
|
|
func (d *NeteaseMusic) Drop(ctx context.Context) error { |
|
return nil |
|
} |
|
|
|
func (d *NeteaseMusic) Get(ctx context.Context, path string) (model.Obj, error) { |
|
if path == "/" { |
|
return &model.Object{ |
|
IsFolder: true, |
|
Path: path, |
|
}, nil |
|
} |
|
|
|
fragments := strings.Split(path, "/") |
|
if len(fragments) > 1 { |
|
fileName := fragments[1] |
|
if strings.HasSuffix(fileName, ".lrc") { |
|
lrc := d.fileMapByName[fileName] |
|
return d.getLyricObj(lrc) |
|
} |
|
if song, ok := d.fileMapByName[fileName]; ok { |
|
return song, nil |
|
} else { |
|
return nil, errs.ObjectNotFound |
|
} |
|
} |
|
|
|
return nil, errs.ObjectNotFound |
|
} |
|
|
|
func (d *NeteaseMusic) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { |
|
return d.getSongObjs(args) |
|
} |
|
|
|
func (d *NeteaseMusic) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) { |
|
if lrc, ok := file.(*LyricObj); ok { |
|
if args.Type == "parsed" { |
|
return lrc.getLyricLink(), nil |
|
} else { |
|
return lrc.getProxyLink(args), nil |
|
} |
|
} |
|
|
|
return d.getSongLink(file) |
|
} |
|
|
|
func (d *NeteaseMusic) Remove(ctx context.Context, obj model.Obj) error { |
|
return d.removeSongObj(obj) |
|
} |
|
|
|
func (d *NeteaseMusic) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { |
|
return d.putSongStream(stream) |
|
} |
|
|
|
func (d *NeteaseMusic) Copy(ctx context.Context, srcObj, dstDir model.Obj) error { |
|
return errs.NotSupport |
|
} |
|
|
|
func (d *NeteaseMusic) Move(ctx context.Context, srcObj, dstDir model.Obj) error { |
|
return errs.NotSupport |
|
} |
|
|
|
func (d *NeteaseMusic) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error { |
|
return errs.NotSupport |
|
} |
|
|
|
func (d *NeteaseMusic) Rename(ctx context.Context, srcObj model.Obj, newName string) error { |
|
return errs.NotSupport |
|
} |
|
|
|
var _ driver.Driver = (*NeteaseMusic)(nil) |
|
|