mirror of
https://github.com/nathom/streamrip.git
synced 2024-09-19 11:18:45 -04:00
Fix soundcloud error for interactive search
This commit is contained in:
parent
4c84257fc1
commit
8c9673a067
1 changed files with 42 additions and 12 deletions
|
@ -6,7 +6,17 @@ from .. import db
|
||||||
from ..client import Client, DeezerClient, QobuzClient, SoundcloudClient, TidalClient
|
from ..client import Client, DeezerClient, QobuzClient, SoundcloudClient, TidalClient
|
||||||
from ..config import Config
|
from ..config import Config
|
||||||
from ..console import console
|
from ..console import console
|
||||||
from ..media import Media, Pending, PendingLastfmPlaylist, remove_artwork_tempdirs
|
from ..media import (
|
||||||
|
Media,
|
||||||
|
Pending,
|
||||||
|
PendingAlbum,
|
||||||
|
PendingArtist,
|
||||||
|
PendingLabel,
|
||||||
|
PendingLastfmPlaylist,
|
||||||
|
PendingPlaylist,
|
||||||
|
PendingSingle,
|
||||||
|
remove_artwork_tempdirs,
|
||||||
|
)
|
||||||
from ..metadata import SearchResults
|
from ..metadata import SearchResults
|
||||||
from ..progress import clear_progress
|
from ..progress import clear_progress
|
||||||
from .parse_url import parse_url
|
from .parse_url import parse_url
|
||||||
|
@ -21,6 +31,7 @@ class Main:
|
||||||
* Logs in to Clients and prompts for credentials
|
* Logs in to Clients and prompts for credentials
|
||||||
* Handles output logging
|
* Handles output logging
|
||||||
* Handles downloading Media
|
* Handles downloading Media
|
||||||
|
* Handles interactive search
|
||||||
|
|
||||||
User input (urls) -> Main --> Download files & Output messages to terminal
|
User input (urls) -> Main --> Download files & Output messages to terminal
|
||||||
"""
|
"""
|
||||||
|
@ -68,6 +79,32 @@ class Main:
|
||||||
)
|
)
|
||||||
logger.debug("Added url=%s", url)
|
logger.debug("Added url=%s", url)
|
||||||
|
|
||||||
|
async def add_by_id(self, source: str, media_type: str, id: str):
|
||||||
|
client = await self.get_logged_in_client(source)
|
||||||
|
self._add_by_id_client(client, media_type, id)
|
||||||
|
|
||||||
|
async def add_all_by_id(self, info: list[tuple[str, str, str]]):
|
||||||
|
sources = set(s for s, _, _ in info)
|
||||||
|
clients = {s: await self.get_logged_in_client(s) for s in sources}
|
||||||
|
for source, media_type, id in info:
|
||||||
|
self._add_by_id_client(clients[source], media_type, id)
|
||||||
|
|
||||||
|
def _add_by_id_client(self, client: Client, media_type: str, id: str):
|
||||||
|
if media_type == "track":
|
||||||
|
item = PendingSingle(id, client, self.config, self.database)
|
||||||
|
elif media_type == "album":
|
||||||
|
item = PendingAlbum(id, client, self.config, self.database)
|
||||||
|
elif media_type == "playlist":
|
||||||
|
item = PendingPlaylist(id, client, self.config, self.database)
|
||||||
|
elif media_type == "label":
|
||||||
|
item = PendingLabel(id, client, self.config, self.database)
|
||||||
|
elif media_type == "artist":
|
||||||
|
item = PendingArtist(id, client, self.config, self.database)
|
||||||
|
else:
|
||||||
|
raise Exception(media_type)
|
||||||
|
|
||||||
|
self.pending.append(item)
|
||||||
|
|
||||||
async def add_all(self, urls: list[str]):
|
async def add_all(self, urls: list[str]):
|
||||||
"""Add multiple urls concurrently as pending items."""
|
"""Add multiple urls concurrently as pending items."""
|
||||||
parsed = [parse_url(url) for url in urls]
|
parsed = [parse_url(url) for url in urls]
|
||||||
|
@ -105,7 +142,6 @@ class Main:
|
||||||
with console.status(f"[cyan]Logging into {source}", spinner="dots"):
|
with console.status(f"[cyan]Logging into {source}", spinner="dots"):
|
||||||
# Log into client using credentials from config
|
# Log into client using credentials from config
|
||||||
await client.login()
|
await client.login()
|
||||||
# await client.login()
|
|
||||||
|
|
||||||
assert client.logged_in
|
assert client.logged_in
|
||||||
return client
|
return client
|
||||||
|
@ -149,8 +185,8 @@ class Main:
|
||||||
)
|
)
|
||||||
assert isinstance(choices, list)
|
assert isinstance(choices, list)
|
||||||
|
|
||||||
await self.add_all(
|
await self.add_all_by_id(
|
||||||
[f"http://{source}.com/{media_type}/{item.id}" for item, i in choices],
|
[(source, media_type, item.id) for item, _ in choices],
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -173,11 +209,8 @@ class Main:
|
||||||
console.print("[yellow]No items chosen. Exiting.")
|
console.print("[yellow]No items chosen. Exiting.")
|
||||||
else:
|
else:
|
||||||
choices = search_results.get_choices(chosen_ind)
|
choices = search_results.get_choices(chosen_ind)
|
||||||
await self.add_all(
|
await self.add_all_by_id(
|
||||||
[
|
[(source, item.media_type(), item.id) for item in choices],
|
||||||
f"http://{source}.com/{item.media_type()}/{item.id}"
|
|
||||||
for item in choices
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def search_take_first(self, source: str, media_type: str, query: str):
|
async def search_take_first(self, source: str, media_type: str, query: str):
|
||||||
|
@ -229,6 +262,3 @@ class Main:
|
||||||
# may be able to share downloaded artwork in the same `rip` session
|
# may be able to share downloaded artwork in the same `rip` session
|
||||||
# We don't know that a cover will not be used again until end of execution
|
# We don't know that a cover will not be used again until end of execution
|
||||||
remove_artwork_tempdirs()
|
remove_artwork_tempdirs()
|
||||||
|
|
||||||
async def add_by_id(self, source: str, media_type: str, id: str):
|
|
||||||
await self.add(f"http://{source}.com/{media_type}/{id}")
|
|
||||||
|
|
Loading…
Reference in a new issue