consolidate adding logic
This commit is contained in:
42
app/ytdl.py
42
app/ytdl.py
@@ -471,7 +471,25 @@ class DownloadQueue:
|
|||||||
self.pending.put(download)
|
self.pending.put(download)
|
||||||
await self.notifier.added(dl)
|
await self.notifier.added(dl)
|
||||||
|
|
||||||
async def __process_playlist_or_channel_entry(self, etype, entry, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already):
|
async def __add_entry(self, entry, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already):
|
||||||
|
if not entry:
|
||||||
|
return {'status': 'error', 'msg': "Invalid/empty data was given."}
|
||||||
|
|
||||||
|
error = None
|
||||||
|
if "live_status" in entry and "release_timestamp" in entry and entry.get("live_status") == "is_upcoming":
|
||||||
|
dt_ts = datetime.fromtimestamp(entry.get("release_timestamp")).strftime('%Y-%m-%d %H:%M:%S %z')
|
||||||
|
error = f"Live stream is scheduled to start at {dt_ts}"
|
||||||
|
else:
|
||||||
|
if "msg" in entry:
|
||||||
|
error = entry["msg"]
|
||||||
|
|
||||||
|
etype = entry.get('_type') or 'video'
|
||||||
|
|
||||||
|
if etype.startswith('url'):
|
||||||
|
log.debug('Processing as a url')
|
||||||
|
return await self.add(entry['url'], quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already)
|
||||||
|
elif etype == 'playlist' or etype == 'channel':
|
||||||
|
log.debug(f'Processing as a {etype}')
|
||||||
entries = entry['entries']
|
entries = entry['entries']
|
||||||
# Convert generator to list if needed (for len() and slicing operations)
|
# Convert generator to list if needed (for len() and slicing operations)
|
||||||
if isinstance(entries, types.GeneratorType):
|
if isinstance(entries, types.GeneratorType):
|
||||||
@@ -492,27 +510,7 @@ class DownloadQueue:
|
|||||||
results.append(await self.__add_entry(etr, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already))
|
results.append(await self.__add_entry(etr, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already))
|
||||||
if any(res['status'] == 'error' for res in results):
|
if any(res['status'] == 'error' for res in results):
|
||||||
return {'status': 'error', 'msg': ', '.join(res['msg'] for res in results if res['status'] == 'error' and 'msg' in res)}
|
return {'status': 'error', 'msg': ', '.join(res['msg'] for res in results if res['status'] == 'error' and 'msg' in res)}
|
||||||
|
return {'status': 'ok'}
|
||||||
async def __add_entry(self, entry, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already):
|
|
||||||
if not entry:
|
|
||||||
return {'status': 'error', 'msg': "Invalid/empty data was given."}
|
|
||||||
|
|
||||||
error = None
|
|
||||||
if "live_status" in entry and "release_timestamp" in entry and entry.get("live_status") == "is_upcoming":
|
|
||||||
dt_ts = datetime.fromtimestamp(entry.get("release_timestamp")).strftime('%Y-%m-%d %H:%M:%S %z')
|
|
||||||
error = f"Live stream is scheduled to start at {dt_ts}"
|
|
||||||
else:
|
|
||||||
if "msg" in entry:
|
|
||||||
error = entry["msg"]
|
|
||||||
|
|
||||||
etype = entry.get('_type') or 'video'
|
|
||||||
|
|
||||||
if etype.startswith('url'):
|
|
||||||
log.debug('Processing as a url')
|
|
||||||
return await self.add(entry['url'], quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already)
|
|
||||||
elif etype == 'playlist' or etype == 'channel':
|
|
||||||
log.debug(f'Processing as a {etype}')
|
|
||||||
return await self.__process_playlist_or_channel_entry(etype, entry, quality, format, folder, custom_name_prefix, playlist_item_limit, auto_start, split_by_chapters, chapter_template, already)
|
|
||||||
elif etype == 'video' or (etype.startswith('url') and 'id' in entry and 'title' in entry):
|
elif etype == 'video' or (etype.startswith('url') and 'id' in entry and 'title' in entry):
|
||||||
log.debug('Processing as a video')
|
log.debug('Processing as a video')
|
||||||
key = entry.get('webpage_url') or entry['url']
|
key = entry.get('webpage_url') or entry['url']
|
||||||
|
|||||||
Reference in New Issue
Block a user