Fix limit options

Consider limits as amount of added/removed videos instead
of amount of checked videos in playlist.
This commit is contained in:
Maks Snegov 2024-02-03 13:18:00 -08:00
parent e3c51daa10
commit acd15f49f1

19
main.py
View File

@ -169,18 +169,23 @@ def copy_playlist_items(yt_api,
src_playlist_items = list_playlist(yt_api, src_playlist) src_playlist_items = list_playlist(yt_api, src_playlist)
dst_playlist_items = list_playlist(yt_api, dst_playlist) dst_playlist_items = list_playlist(yt_api, dst_playlist)
if limit < 0:
limit = len(src_playlist_items)
dst_videos = {pl_item['snippet']['resourceId']['videoId'] dst_videos = {pl_item['snippet']['resourceId']['videoId']
for pl_item in dst_playlist_items} for pl_item in dst_playlist_items}
processed_amt = 0
for src_pl_item in src_playlist_items[:limit]: for src_pl_item in src_playlist_items:
if 0 <= limit <= processed_amt:
break
was_processed = False
video_id = src_pl_item['snippet']['resourceId']['videoId'] video_id = src_pl_item['snippet']['resourceId']['videoId']
if video_id not in dst_videos: if video_id not in dst_videos:
add_video_to_playlist(yt_api, video_id, dst_playlist, dry_run) add_video_to_playlist(yt_api, video_id, dst_playlist, dry_run)
was_processed = True
if delete_from_src: if delete_from_src:
remove_video_from_playlist(yt_api, src_pl_item["id"], src_playlist, dry_run) remove_video_from_playlist(yt_api, src_pl_item["id"], src_playlist, dry_run)
was_processed = True
if was_processed:
processed_amt += 1
def get_video_info(youtube, video_id: str): def get_video_info(youtube, video_id: str):
@ -262,13 +267,17 @@ def main():
add_video_to_playlist(youtube, video_id, playlist, args.dry_run) add_video_to_playlist(youtube, video_id, playlist, args.dry_run)
elif args.command == "dups": elif args.command == "dups":
processed = 0
playlist_id = get_playlist_id(args.playlist) playlist_id = get_playlist_id(args.playlist)
plitems = list_playlist(youtube, playlist_id) plitems = list_playlist(youtube, playlist_id)
plitems_processed = set() plitems_processed = set()
for plitem in plitems[:args.limit]: for plitem in plitems:
if 0 <= args.limit <= processed:
break
video_id = plitem["snippet"]["resourceId"]["videoId"] video_id = plitem["snippet"]["resourceId"]["videoId"]
if video_id in plitems_processed: if video_id in plitems_processed:
remove_video_from_playlist(youtube, plitem["id"], playlist_id, args.dry_run) remove_video_from_playlist(youtube, plitem["id"], playlist_id, args.dry_run)
processed += 1
else: else:
plitems_processed.add(video_id) plitems_processed.add(video_id)