From a5100d79cb942d43d64a7bb8c16220a671c17fa5 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 8 Jan 2024 17:53:24 -0800 Subject: [PATCH] try again --- src/ytdl_sub/downloaders/url/downloader.py | 1 + src/ytdl_sub/entries/entry_parent.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index f6f32605..b1be016b 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -404,6 +404,7 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]): ) parents = EntryParent.from_entry_dicts( + url=url, entry_dicts=entry_dicts, working_directory=self.working_directory, include_sibling_metadata=include_sibling_metadata, diff --git a/src/ytdl_sub/entries/entry_parent.py b/src/ytdl_sub/entries/entry_parent.py index 3257d17c..232b2ab4 100644 --- a/src/ytdl_sub/entries/entry_parent.py +++ b/src/ytdl_sub/entries/entry_parent.py @@ -144,11 +144,16 @@ class EntryParent(BaseEntry): return self.uid == playlist_id or any(item in child for child in self.parent_children()) @classmethod - def _get_disconnected_root_parent(cls, parents: List["EntryParent"]) -> Optional["EntryParent"]: + def _get_disconnected_root_parent( + cls, url: str, parents: List["EntryParent"] + ) -> Optional["EntryParent"]: """ Sometimes the root-level parent is disconnected via playlist_ids Find it if it exists. """ + def _url_matches(parent: "EntryParent"): + return parent.webpage_url in url or url in parent.webpage_url + def _uid_is_uploader_id(parent: "EntryParent"): return parent.uid == parent.uploader_id @@ -156,7 +161,12 @@ class EntryParent(BaseEntry): # If more than 1 parent exists, assume the uploader_id is the root parent if len(top_level_parents) > 1: - top_level_parents = [parent for parent in parents if _uid_is_uploader_id(parent)] + top_level_parents = [ + parent for parent in top_level_parents if _uid_is_uploader_id(parent) + ] + + if len(top_level_parents) > 1: + top_level_parents = [parent for parent in top_level_parents if _url_matches(parent)] match len(top_level_parents): case 0: @@ -178,6 +188,7 @@ class EntryParent(BaseEntry): @classmethod def from_entry_dicts( cls, + url: str, entry_dicts: List[Dict], working_directory: str, include_sibling_metadata: bool, @@ -197,7 +208,7 @@ class EntryParent(BaseEntry): return [] # If a disconnected root parent exists, connect it here - if (root_parent := cls._get_disconnected_root_parent(parents)) is not None: + if (root_parent := cls._get_disconnected_root_parent(url, parents)) is not None: parents.remove(root_parent) root_parent._parent_children = parents parents = [root_parent]