feat: initial implementation of navidrome-music-sync with Yandex, Spotify, Apple, YouTube support and Web UI
This commit is contained in:
1 parent
44c67ab49d
commit
5b6c2c72f7
23 files changed
+1445
-2
No files matched your search
@@ -0,0 +1,51 @@
|
||||
import sys, os, time
|
||||
from yandex_music import Client
|
||||
from yandex_music.exceptions import NetworkError
|
||||
|
||||
c = Client()
|
||||
code = c.request_device_code()
|
||||
|
||||
print("="*50, flush=True)
|
||||
print(f"URL: {code.verification_url}", flush=True)
|
||||
print(f"CODE: {code.user_code}", flush=True)
|
||||
print("="*50, flush=True)
|
||||
|
||||
with open("/tmp/ya_device_status.txt", "w") as f:
|
||||
f.write(f"URL: {code.verification_url}\nCODE: {code.user_code}\n")
|
||||
|
||||
deadline = time.monotonic() + code.expires_in
|
||||
interval = max(code.interval or 5, 6)
|
||||
|
||||
while time.monotonic() < deadline:
|
||||
try:
|
||||
token_obj = c.poll_device_token(code.device_code)
|
||||
if token_obj is not None:
|
||||
token = token_obj.access_token
|
||||
print(f"SUCCESS_TOKEN: {token}", flush=True)
|
||||
with open("/tmp/ya_token.txt", "w") as f:
|
||||
f.write(token)
|
||||
|
||||
# Read and update credentials.txt
|
||||
cred_path = "/home/ai-projects/memory/credentials.txt"
|
||||
if os.path.exists(cred_path):
|
||||
with open(cred_path, "r") as cf:
|
||||
content = cf.read()
|
||||
if "yandex_music_token:" not in content:
|
||||
content += f"\n# Yandex Music Token\nyandex_music_token: {token}\n"
|
||||
with open(cred_path, "w") as cf:
|
||||
cf.write(content)
|
||||
print("CREDENTIALS_UPDATED", flush=True)
|
||||
sys.exit(0)
|
||||
except NetworkError as e:
|
||||
if "429" in str(e):
|
||||
print("Got 429 rate limit, sleeping 10s...", flush=True)
|
||||
time.sleep(10)
|
||||
continue
|
||||
print(f"Network error: {e}", flush=True)
|
||||
except Exception as e:
|
||||
print(f"Error polling: {e}", flush=True)
|
||||
|
||||
time.sleep(interval)
|
||||
|
||||
print("TIMED_OUT", flush=True)
|
||||
sys.exit(1)
|
||||
Reference in new issue
Block a user