diff --git a/internal/deezer/session.go b/internal/deezer/session.go index 28e05b4..b224869 100644 --- a/internal/deezer/session.go +++ b/internal/deezer/session.go @@ -29,6 +29,7 @@ type Session struct { APIToken string LicenseToken string HttpClient *http.Client + Premium bool } func Authenticate(ctx context.Context, arlCookie string) (*Session, error) { @@ -75,14 +76,14 @@ func Authenticate(ctx context.Context, arlCookie string) (*Session, error) { if res.Results.User.Id == 0 { return nil, fmt.Errorf("invalid arl cookie") } - if !res.Results.User.Options.MobileOffline && !res.Results.User.Options.WebOffline { - return nil, fmt.Errorf("premium account required") - } + + isPremium := res.Results.User.Options.MobileOffline || res.Results.User.Options.WebOffline return &Session{ ArlCookie: arlCookie, APIToken: res.Results.APIToken, LicenseToken: res.Results.User.Options.LicenseToken, HttpClient: client, + Premium: isPremium, }, nil } diff --git a/internal/downloader/client.go b/internal/downloader/client.go index cedef63..7043a4a 100644 --- a/internal/downloader/client.go +++ b/internal/downloader/client.go @@ -47,6 +47,10 @@ func (c *Client) Run(ctx context.Context, opts Options, id string) error { return err } + if !c.deezerClient.Session.Premium && (opts.Quality == "mp3_320" || opts.Quality == "flac") { + return fmt.Errorf("premium account required for %s quality", opts.Quality) + } + var resource deezer.Resource switch c.resourceType { case "album":