[BUGFIX] Fix collection urls using wrong variables (#297)
This commit is contained in:
parent
6fbed2e4b0
commit
1de5014c2f
1 changed files with 21 additions and 3 deletions
|
|
@ -21,6 +21,7 @@ from typing import TypeVar
|
||||||
|
|
||||||
import yt_dlp as ytdl
|
import yt_dlp as ytdl
|
||||||
from yt_dlp.utils import ExistingVideoReached
|
from yt_dlp.utils import ExistingVideoReached
|
||||||
|
from yt_dlp.utils import MaxDownloadsReached
|
||||||
from yt_dlp.utils import RejectedVideoReached
|
from yt_dlp.utils import RejectedVideoReached
|
||||||
|
|
||||||
from ytdl_sub.config.preset_options import AddsVariablesMixin
|
from ytdl_sub.config.preset_options import AddsVariablesMixin
|
||||||
|
|
@ -364,6 +365,8 @@ class Downloader(DownloadArchiver, Generic[DownloaderOptionsT], ABC):
|
||||||
download_logger.debug("RejectedVideoReached, stopping additional downloads")
|
download_logger.debug("RejectedVideoReached, stopping additional downloads")
|
||||||
except ExistingVideoReached:
|
except ExistingVideoReached:
|
||||||
download_logger.debug("ExistingVideoReached, stopping additional downloads")
|
download_logger.debug("ExistingVideoReached, stopping additional downloads")
|
||||||
|
except MaxDownloadsReached:
|
||||||
|
download_logger.debug("MaxDownloadsReached, stopping additional downloads")
|
||||||
|
|
||||||
return self._get_entry_dicts_from_info_json_files()
|
return self._get_entry_dicts_from_info_json_files()
|
||||||
|
|
||||||
|
|
@ -382,10 +385,15 @@ class Downloader(DownloadArchiver, Generic[DownloaderOptionsT], ABC):
|
||||||
return self.download_options.collection_validator
|
return self.download_options.collection_validator
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def _separate_download_archives(self):
|
def _separate_download_archives(self, clear_info_json_files: bool = False):
|
||||||
"""
|
"""
|
||||||
Separate download archive writing between collection urls. This is so break_on_existing
|
Separate download archive writing between collection urls. This is so break_on_existing
|
||||||
does not break when downloading from subset urls.
|
does not break when downloading from subset urls.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
clear_info_json_files
|
||||||
|
Whether to delete info.json files after yield
|
||||||
"""
|
"""
|
||||||
archive_path = self.ytdl_options.get("download_archive", "")
|
archive_path = self.ytdl_options.get("download_archive", "")
|
||||||
backup_archive_path = f"{archive_path}.backup"
|
backup_archive_path = f"{archive_path}.backup"
|
||||||
|
|
@ -410,6 +418,16 @@ class Downloader(DownloadArchiver, Generic[DownloaderOptionsT], ABC):
|
||||||
elif archive_file_exists:
|
elif archive_file_exists:
|
||||||
FileHandler.copy(src_file_path=backup_archive_path, dst_file_path=archive_path)
|
FileHandler.copy(src_file_path=backup_archive_path, dst_file_path=archive_path)
|
||||||
|
|
||||||
|
# Clear info json files if true
|
||||||
|
if clear_info_json_files:
|
||||||
|
info_json_files = [
|
||||||
|
Path(self.working_directory) / path
|
||||||
|
for path in os.listdir(self.working_directory)
|
||||||
|
if path.endswith(".info.json")
|
||||||
|
]
|
||||||
|
for info_json_file in info_json_files:
|
||||||
|
os.remove(info_json_file)
|
||||||
|
|
||||||
def _extract_entry_info_with_retry(self, entry: Entry) -> Entry:
|
def _extract_entry_info_with_retry(self, entry: Entry) -> Entry:
|
||||||
download_entry_dict = self.extract_info_with_retry(
|
download_entry_dict = self.extract_info_with_retry(
|
||||||
is_downloaded_fn=None if self.is_dry_run else entry.is_downloaded,
|
is_downloaded_fn=None if self.is_dry_run else entry.is_downloaded,
|
||||||
|
|
@ -440,7 +458,6 @@ class Downloader(DownloadArchiver, Generic[DownloaderOptionsT], ABC):
|
||||||
UPLOAD_DATE_INDEX: upload_date_idx,
|
UPLOAD_DATE_INDEX: upload_date_idx,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
# pylint: enable=protected-access
|
|
||||||
|
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
|
|
@ -521,7 +538,8 @@ class Downloader(DownloadArchiver, Generic[DownloaderOptionsT], ABC):
|
||||||
if orphans is None:
|
if orphans is None:
|
||||||
orphans = []
|
orphans = []
|
||||||
|
|
||||||
with self._separate_download_archives():
|
# Delete info json files afterwards so other collection URLs do not use them
|
||||||
|
with self._separate_download_archives(clear_info_json_files=True):
|
||||||
for parent in parents:
|
for parent in parents:
|
||||||
for entry_child in self._download_parent_entry(parent=parent):
|
for entry_child in self._download_parent_entry(parent=parent):
|
||||||
yield entry_child
|
yield entry_child
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue