diff --git a/musicfetch b/musicfetch index 47ead33..fe90979 100755 --- a/musicfetch +++ b/musicfetch @@ -1284,6 +1284,26 @@ def parse_args(): return p.parse_args() +def _dispatch_chosen(chosen: Hit, hits: list[Hit], root: str, quality: str, + dry_run: bool, lidarr_only: bool, search_all: bool) -> None: + """Act on a picked Hit: Lidarr album (add+search, fall to top YouTube hit on + no release), Lidarr artist, or a YouTube track. Shared by main() and handle_link.""" + if chosen.source == "lidarr": + if chosen.kind == "album": + handled = act_lidarr_album(chosen, root, search_all, dry_run) + if not handled and not lidarr_only: + yt_fallback = next((h for h in hits if h.source == "youtube"), None) + if yt_fallback: + print("Using top YouTube hit as fallback.") + act_youtube(yt_fallback, root, quality, dry_run) + else: + print("No YouTube fallback available.") + else: + act_lidarr_artist(chosen, root, search_all, dry_run) + else: + act_youtube(chosen, root, quality, dry_run) + + def main(): global DEBUG, COOKIES_FILE, COOKIES_FROM_BROWSER args = parse_args() @@ -1325,21 +1345,8 @@ def main(): print("Nothing selected.") return - if chosen.source == "lidarr": - if chosen.kind == "album": - handled = act_lidarr_album(chosen, args.root, args.search_all, args.dry_run) - if not handled and not args.lidarr_only: - # Fall through to the top YouTube hit for the same query. - yt_fallback = next((h for h in hits if h.source == "youtube"), None) - if yt_fallback: - print("Using top YouTube hit as fallback.") - act_youtube(yt_fallback, args.root, args.quality, args.dry_run) - else: - print("No YouTube fallback available.") - else: - act_lidarr_artist(chosen, args.root, args.search_all, args.dry_run) - else: - act_youtube(chosen, args.root, args.quality, args.dry_run) + _dispatch_chosen(chosen, hits, args.root, args.quality, args.dry_run, + args.lidarr_only, args.search_all) if __name__ == "__main__":