Signed-off-by: mbrucedogs <mbrucedogs@gmail.com>
This commit is contained in:
parent
273a748a1a
commit
c48c1d3696
19295
data/songs.json
19295
data/songs.json
File diff suppressed because it is too large
Load Diff
145
reset_and_redownload.py
Normal file
145
reset_and_redownload.py
Normal file
@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to reset karaoke tracking and re-download files with the new channel parser.
|
||||
|
||||
This script will:
|
||||
1. Reset the karaoke_tracking.json to remove all downloaded entries
|
||||
2. Optionally delete the downloaded files
|
||||
3. Allow you to re-download with the new channel parser system
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import List, Dict, Any
|
||||
|
||||
|
||||
def reset_karaoke_tracking(tracking_file: str = "data/karaoke_tracking.json") -> None:
|
||||
"""Reset the karaoke tracking file to empty state."""
|
||||
print(f"Resetting {tracking_file}...")
|
||||
|
||||
# Create backup of current tracking
|
||||
backup_file = f"{tracking_file}.backup"
|
||||
if os.path.exists(tracking_file):
|
||||
shutil.copy2(tracking_file, backup_file)
|
||||
print(f"Created backup: {backup_file}")
|
||||
|
||||
# Reset to empty state
|
||||
empty_tracking = {
|
||||
"playlists": {},
|
||||
"songs": {}
|
||||
}
|
||||
|
||||
with open(tracking_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(empty_tracking, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"✅ Reset {tracking_file} to empty state")
|
||||
|
||||
|
||||
def delete_downloaded_files(downloads_dir: str = "downloads") -> None:
|
||||
"""Delete all downloaded files and folders."""
|
||||
if not os.path.exists(downloads_dir):
|
||||
print(f"Downloads directory {downloads_dir} does not exist.")
|
||||
return
|
||||
|
||||
print(f"Deleting all files in {downloads_dir}...")
|
||||
|
||||
try:
|
||||
shutil.rmtree(downloads_dir)
|
||||
print(f"✅ Deleted {downloads_dir} directory")
|
||||
except Exception as e:
|
||||
print(f"❌ Error deleting {downloads_dir}: {e}")
|
||||
|
||||
|
||||
def show_download_stats(tracking_file: str = "data/karaoke_tracking.json") -> None:
|
||||
"""Show statistics about current downloads."""
|
||||
if not os.path.exists(tracking_file):
|
||||
print("No tracking file found.")
|
||||
return
|
||||
|
||||
with open(tracking_file, 'r', encoding='utf-8') as f:
|
||||
tracking = json.load(f)
|
||||
|
||||
songs = tracking.get("songs", {})
|
||||
total_songs = len(songs)
|
||||
|
||||
if total_songs == 0:
|
||||
print("No songs in tracking file.")
|
||||
return
|
||||
|
||||
# Count by status
|
||||
status_counts = {}
|
||||
channel_counts = {}
|
||||
|
||||
for song_id, song_data in songs.items():
|
||||
status = song_data.get("status", "UNKNOWN")
|
||||
channel = song_data.get("channel_name", "UNKNOWN")
|
||||
|
||||
status_counts[status] = status_counts.get(status, 0) + 1
|
||||
channel_counts[channel] = channel_counts.get(channel, 0) + 1
|
||||
|
||||
print(f"\n📊 Current Download Statistics:")
|
||||
print(f"Total songs: {total_songs}")
|
||||
print(f"\nBy Status:")
|
||||
for status, count in status_counts.items():
|
||||
print(f" {status}: {count}")
|
||||
|
||||
print(f"\nBy Channel:")
|
||||
for channel, count in channel_counts.items():
|
||||
print(f" {channel}: {count}")
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function to handle reset and re-download process."""
|
||||
print("🔄 Karaoke Download Reset and Re-download Tool")
|
||||
print("=" * 50)
|
||||
|
||||
# Show current stats
|
||||
print("\nCurrent download statistics:")
|
||||
show_download_stats()
|
||||
|
||||
# Ask user what they want to do
|
||||
print("\nOptions:")
|
||||
print("1. Reset tracking only (keep files)")
|
||||
print("2. Reset tracking and delete all downloaded files")
|
||||
print("3. Show current stats only")
|
||||
print("4. Exit")
|
||||
|
||||
choice = input("\nEnter your choice (1-4): ").strip()
|
||||
|
||||
if choice == "1":
|
||||
print("\n🔄 Resetting tracking only...")
|
||||
reset_karaoke_tracking()
|
||||
print("\n✅ Tracking reset complete!")
|
||||
print("You can now re-download files with the new channel parser system.")
|
||||
print("\nTo re-download, run:")
|
||||
print("python download_karaoke.py --file data/channels.txt --limit 50")
|
||||
|
||||
elif choice == "2":
|
||||
print("\n🔄 Resetting tracking and deleting files...")
|
||||
confirm = input("Are you sure you want to delete ALL downloaded files? (yes/no): ").strip().lower()
|
||||
|
||||
if confirm == "yes":
|
||||
reset_karaoke_tracking()
|
||||
delete_downloaded_files()
|
||||
print("\n✅ Reset complete! All tracking and files have been removed.")
|
||||
print("You can now re-download files with the new channel parser system.")
|
||||
print("\nTo re-download, run:")
|
||||
print("python download_karaoke.py --file data/channels.txt --limit 50")
|
||||
else:
|
||||
print("Operation cancelled.")
|
||||
|
||||
elif choice == "3":
|
||||
print("\n📊 Current statistics:")
|
||||
show_download_stats()
|
||||
|
||||
elif choice == "4":
|
||||
print("Exiting...")
|
||||
|
||||
else:
|
||||
print("Invalid choice. Please enter 1, 2, 3, or 4.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user