From 1036cd9e6c3f795508366dca15e1ad6b8449093a Mon Sep 17 00:00:00 2001 From: oskvr37 Date: Mon, 27 Jan 2025 22:46:30 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20add=20search=20on=20Tidal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tiddl/cli/download/search.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tiddl/cli/download/search.py b/tiddl/cli/download/search.py index ad3be53..db8c82a 100644 --- a/tiddl/cli/download/search.py +++ b/tiddl/cli/download/search.py @@ -1,5 +1,8 @@ import click +from tiddl.utils import TidalResource +from tiddl.models.resource import Artist, Album, Playlist, Track, Video + from ..ctx import Context, passContext @@ -9,4 +12,33 @@ from ..ctx import Context, passContext def SearchGroup(ctx: Context, query: str): """Search on Tidal""" - # TODO: search on Tidal + # TODO: give user interactive choice what to select + + api = ctx.obj.getApi() + + search = api.getSearch(query) + + # issue is that we get resource data in search api call, + # in download we refetch that data. + # it's not that big deal as we refetch one resource at most, + # but it should be redesigned + + value = search.topHit.value + icon = click.style("\u2bcc", "magenta") + + if isinstance(value, Album): + resource = TidalResource(type="album", id=str(value.id)) + click.echo(f"{icon} Album {value.title}") + elif isinstance(value, Artist): + resource = TidalResource(type="artist", id=str(value.id)) + click.echo(f"{icon} Artist {value.name}") + elif isinstance(value, Track): + resource = TidalResource(type="track", id=str(value.id)) + click.echo(f"{icon} Track {value.title}") + elif isinstance(value, Playlist): + resource = TidalResource(type="playlist", id=str(value.uuid)) + click.echo(f"{icon} Playlist {value.title}") + elif isinstance(value, Video): + click.echo(f"{icon} Video {value.title} (currently not supported)") + + ctx.obj.resources.append(resource)