feat: add m3u8api upload

pull/8/head
WorldObservationLog 5 months ago
parent fc43a72ebf
commit 668b64cabb
  1. 14
      src/api.py
  2. 17
      src/cmd.py

@ -9,6 +9,7 @@ from loguru import logger
from tenacity import retry, retry_if_exception_type, stop_after_attempt, before_sleep_log from tenacity import retry, retry_if_exception_type, stop_after_attempt, before_sleep_log
from src.models import * from src.models import *
from src.models.song_data import Datum
client: httpx.AsyncClient client: httpx.AsyncClient
lock: asyncio.Semaphore lock: asyncio.Semaphore
@ -33,6 +34,19 @@ async def get_m3u8_from_api(endpoint: str, song_id: str) -> str:
return resp return resp
async def upload_m3u8_to_api(endpoint: str, m3u8_url: str, song_info: Datum):
await client.post(endpoint, json={
"method": "add_m3u8",
"params": {
"songid": song_info.id,
"song_title": f"Disk {song_info.attributes.discNumber} Track {song_info.attributes.trackNumber} - {song_info.attributes.name}",
"albumid": song_info.relationships.albums.data[0].id,
"album_title": song_info.attributes.albumName,
"m3u8": m3u8_url,
}
})
@retry(retry=retry_if_exception_type((httpx.TimeoutException, httpcore.ConnectError, SSLError, FileNotFoundError)), @retry(retry=retry_if_exception_type((httpx.TimeoutException, httpcore.ConnectError, SSLError, FileNotFoundError)),
stop=stop_after_attempt(5), stop=stop_after_attempt(5),
before_sleep=before_sleep_log(logger, logging.WARN)) before_sleep=before_sleep_log(logger, logging.WARN))

@ -9,7 +9,7 @@ from prompt_toolkit import PromptSession, print_formatted_text, ANSI
from prompt_toolkit.patch_stdout import patch_stdout from prompt_toolkit.patch_stdout import patch_stdout
from src.adb import Device from src.adb import Device
from src.api import get_token, init_client_and_lock from src.api import get_token, init_client_and_lock, upload_m3u8_to_api, get_info_from_adam
from src.config import Config from src.config import Config
from src.rip import rip_song, rip_album from src.rip import rip_song, rip_album
from src.types import GlobalAuthParams from src.types import GlobalAuthParams
@ -118,17 +118,26 @@ class NewInteractiveShell:
m3u8_urls = set() m3u8_urls = set()
tasks = set() tasks = set()
async def upload(song_id: str, m3u8_url: str):
song_info = await get_info_from_adam(song_id, self.anonymous_access_token,
self.config.region.defaultStorefront, self.config.region.language)
await upload_m3u8_to_api(self.config.m3u8Api.endpoint, m3u8_url, song_info)
def callback(m3u8_url): def callback(m3u8_url):
if m3u8_url in m3u8_urls: if m3u8_url in m3u8_urls:
return return
song_id = get_song_id_from_m3u8(m3u8_url) song_id = get_song_id_from_m3u8(m3u8_url)
song = Song(id=song_id, storefront=self.config.region.defaultStorefront, url="", type=URLType.Song) song = Song(id=song_id, storefront=self.config.region.defaultStorefront, url="", type=URLType.Song)
task = self.loop.create_task( rip_task = self.loop.create_task(
rip_song(song, global_auth_param, codec, self.config, available_device, force_save=force_download, rip_song(song, global_auth_param, codec, self.config, available_device, force_save=force_download,
specified_m3u8=m3u8_url) specified_m3u8=m3u8_url)
) )
tasks.update(task) tasks.update(rip_task)
task.add_done_callback(tasks.remove) rip_task.add_done_callback(tasks.remove)
if self.config.m3u8Api.enable:
upload_task = self.loop.create_task(upload(song_id, m3u8_url))
tasks.update(upload_task)
upload_task.add_done_callback(tasks.remove)
m3u8_urls.update(m3u8_url) m3u8_urls.update(m3u8_url)
self.loop.create_task(start_proxy(self.config.mitm.host, self.config.mitm.port, callback)) self.loop.create_task(start_proxy(self.config.mitm.host, self.config.mitm.port, callback))

Loading…
Cancel
Save