diff --git a/data/server_duplicates_tracking.json b/data/server_duplicates_tracking.json index 8a83707..02b14c5 100644 --- a/data/server_duplicates_tracking.json +++ b/data/server_duplicates_tracking.json @@ -15998,5 +15998,237 @@ "channel": "songlist", "marked_at": "2025-07-25T12:23:36.638151", "reason": "already_on_server" + }, + "traveling wilburys_end of the line": { + "artist": "Traveling Wilburys", + "title": "End Of The Line", + "video_title": "Traveling Wilburys - End Of The Line (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.019708", + "reason": "already_on_server" + }, + "morgan wallen_i got better": { + "artist": "Morgan Wallen", + "title": "I Got Better", + "video_title": "Morgan Wallen - I Got Better (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.064308", + "reason": "already_on_server" + }, + "ella langley_weren't for the wind": { + "artist": "Ella Langley", + "title": "weren't for the wind", + "video_title": "Ella Langley - weren't for the wind (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.096908", + "reason": "already_on_server" + }, + "bell biv devoe_poison": { + "artist": "Bell Biv Devoe", + "title": "Poison", + "video_title": "Bell Biv Devoe - Poison (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.125365", + "reason": "already_on_server" + }, + "morgan wallen_superman": { + "artist": "Morgan Wallen", + "title": "Superman", + "video_title": "Morgan Wallen - Superman (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.164131", + "reason": "already_on_server" + }, + "the fray_look after you": { + "artist": "The Fray", + "title": "Look After You", + "video_title": "The Fray - Look After You (Karaoke Version)", + "channel": "@SingKingKaraoke", + "marked_at": "2025-07-25T12:49:15.191133", + "reason": "already_on_server" + }, + "little richard_long tall sally": { + "artist": "Little Richard", + "title": "Long Tall Sally", + "video_title": "Little Richard - Long Tall Sally (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.281965", + "reason": "already_on_server" + }, + "lobo_me and you and a dog named boo": { + "artist": "Lobo", + "title": "Me And You And A Dog Named Boo", + "video_title": "Lobo - Me And You And A Dog Named Boo (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.315670", + "reason": "already_on_server" + }, + "royal teens_short shorts": { + "artist": "Royal Teens", + "title": "Short Shorts", + "video_title": "Royal Teens - Short Shorts (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.347383", + "reason": "already_on_server" + }, + "george jones_a picture of me (without you)": { + "artist": "George Jones", + "title": "A Picture Of Me (Without You)", + "video_title": "George Jones - A Picture Of Me (Without You) (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.379887", + "reason": "already_on_server" + }, + "the beatles_all my loving": { + "artist": "The Beatles", + "title": "All My Loving", + "video_title": "The Beatles - All My Loving (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.405180", + "reason": "already_on_server" + }, + "james taylor_sweet baby james": { + "artist": "James Taylor", + "title": "Sweet Baby James", + "video_title": "James Taylor - Sweet Baby James (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.442647", + "reason": "already_on_server" + }, + "phil collins_sussudio": { + "artist": "Phil Collins", + "title": "Sussudio", + "video_title": "Phil Collins - Sussudio (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.465594", + "reason": "already_on_server" + }, + "avril lavigne_things i'll never say": { + "artist": "Avril Lavigne", + "title": "Things I'll Never Say", + "video_title": "Avril Lavigne - Things I'll Never Say (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:49:15.491503", + "reason": "already_on_server" + }, + "def leppard_bringin' on the heartbreak": { + "artist": "Def Leppard", + "title": "Bringin' On The Heartbreak", + "video_title": "Def Leppard - Bringin' On The Heartbreak (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:59:50.515839", + "reason": "already_on_server" + }, + "no doubt_rock steady": { + "artist": "No Doubt", + "title": "Rock Steady", + "video_title": "No Doubt - Rock Steady (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:59:50.555007", + "reason": "already_on_server" + }, + "ultravox_vienna": { + "artist": "Ultravox", + "title": "Vienna", + "video_title": "Ultravox - Vienna (Karaoke)", + "channel": "@KaraokeOnVEVO", + "marked_at": "2025-07-25T12:59:50.676346", + "reason": "already_on_server" + }, + "lola young_messy": { + "artist": "Lola Young", + "title": "Messy", + "video_title": "Lola Young - Messy (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:50.909221", + "reason": "already_on_server" + }, + "gigi perez_sailor song": { + "artist": "Gigi Perez", + "title": "Sailor Song", + "video_title": "Gigi Perez - Sailor Song (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:50.968247", + "reason": "already_on_server" + }, + "sum 41_fat lip": { + "artist": "Sum 41", + "title": "Fat Lip", + "video_title": "Sum 41 - Fat Lip (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.058154", + "reason": "already_on_server" + }, + "the verve_bitter sweet symphony": { + "artist": "The Verve", + "title": "Bitter Sweet Symphony", + "video_title": "The Verve - Bitter Sweet Symphony (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.124494", + "reason": "already_on_server" + }, + "lionel richie_all night long": { + "artist": "Lionel Richie", + "title": "All Night Long", + "video_title": "Lionel Richie - All Night Long (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.187581", + "reason": "already_on_server" + }, + "rod stewart_maggie may": { + "artist": "Rod Stewart", + "title": "Maggie May", + "video_title": "Rod Stewart - Maggie May (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.227996", + "reason": "already_on_server" + }, + "tom jones_it's not unusual": { + "artist": "Tom Jones", + "title": "It's Not Unusual", + "video_title": "Tom Jones - It's Not Unusual (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.260004", + "reason": "already_on_server" + }, + "lana del rey_diet mountain dew": { + "artist": "Lana Del Rey", + "title": "Diet Mountain Dew", + "video_title": "Lana Del Rey - Diet Mountain Dew (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.295715", + "reason": "already_on_server" + }, + "adele_hometown glory": { + "artist": "Adele", + "title": "Hometown Glory", + "video_title": "Adele - Hometown Glory (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.327313", + "reason": "already_on_server" + }, + "lorde_green light": { + "artist": "Lorde", + "title": "Green Light", + "video_title": "Lorde - Green Light (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.359902", + "reason": "already_on_server" + }, + "the isley brothers_shout": { + "artist": "The Isley Brothers", + "title": "Shout", + "video_title": "The Isley Brothers - Shout (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.401168", + "reason": "already_on_server" + }, + "tate mcrae_sports car": { + "artist": "Tate McRae", + "title": "Sports Car", + "video_title": "Tate McRae - Sports Car (Karaoke Version)", + "channel": "@StingrayKaraoke", + "marked_at": "2025-07-25T12:59:51.430437", + "reason": "already_on_server" } } \ No newline at end of file diff --git a/data/songList.json b/data/songList.json index 4f4c42f..25e545d 100644 --- a/data/songList.json +++ b/data/songList.json @@ -1,6 +1,6 @@ [ { - "title": "2025 - Apple Top 50", + "title": "2025 - Apple Music Top 50", "songs": [ { "position": 1, diff --git a/karaoke_downloader/video_downloader.py b/karaoke_downloader/video_downloader.py index 23e5d91..6a7fa56 100644 --- a/karaoke_downloader/video_downloader.py +++ b/karaoke_downloader/video_downloader.py @@ -198,10 +198,12 @@ def execute_download_plan(download_plan, unmatched, cache_file, config, yt_dlp_p downloaded_count = 0 total_to_download = limit if limit is not None else len(download_plan) - for idx, item in enumerate(download_plan[:]): # Use slice to allow modification during iteration + # Use reverse iteration to avoid index shifting issues when removing items + for idx in range(len(download_plan) - 1, -1, -1): if limit is not None and downloaded_count >= limit: break + item = download_plan[idx] artist = item['artist'] title = item['title'] channel_name = item['channel_name'] @@ -209,7 +211,7 @@ def execute_download_plan(download_plan, unmatched, cache_file, config, yt_dlp_p video_id = item['video_id'] video_title = item['video_title'] - print(f"\n⬇️ Downloading {idx+1} of {total_to_download}:") + print(f"\n⬇️ Downloading {len(download_plan) - idx} of {total_to_download}:") print(f" 📋 Songlist: {artist} - {title}") print(f" 🎬 Video: {video_title} ({channel_name})") if 'match_score' in item: