Merge pull request #314 from root4loot/fix/rust-credentials-compat

Support Rust librespot credential format in stored_file()
This commit is contained in:
碧舞すみほ
2025-10-01 09:00:02 +09:00
committed by GitHub
2 changed files with 22 additions and 1 deletions

View File

@@ -91,6 +91,18 @@ session = Session.Builder() \
.create() .create()
``` ```
### Use Stored Credentials for Login
```python
from librespot.core import Session
# Supports both Python and Rust librespot credential formats
session = Session.Builder() \
.stored_file("/path/to/credentials.json") \
.create()
```
### Get Spotify's OAuth token ### Get Spotify's OAuth token
```python ```python

View File

@@ -1618,6 +1618,7 @@ class Session(Closeable, MessageListener, SubListener):
pass pass
else: else:
try: try:
# Try Python librespot format first
self.login_credentials = Authentication.LoginCredentials( self.login_credentials = Authentication.LoginCredentials(
typ=Authentication.AuthenticationType.Value( typ=Authentication.AuthenticationType.Value(
obj["type"]), obj["type"]),
@@ -1625,7 +1626,15 @@ class Session(Closeable, MessageListener, SubListener):
auth_data=base64.b64decode(obj["credentials"]), auth_data=base64.b64decode(obj["credentials"]),
) )
except KeyError: except KeyError:
pass # Try Rust librespot format (auth_type as int, auth_data instead of credentials)
try:
self.login_credentials = Authentication.LoginCredentials(
typ=obj["auth_type"],
username=obj["username"],
auth_data=base64.b64decode(obj["auth_data"]),
)
except KeyError:
pass
return self return self
def oauth(self, oauth_url_callback) -> Session.Builder: def oauth(self, oauth_url_callback) -> Session.Builder: