151 lines
4.8 KiB
Python
151 lines
4.8 KiB
Python
#!/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
|
|
|
|
from karaoke_downloader.data_path_manager import get_data_path_manager
|
|
|
|
|
|
def reset_karaoke_tracking(tracking_file: str = None) -> None:
|
|
if tracking_file is None:
|
|
tracking_file = str(get_data_path_manager().get_karaoke_tracking_path())
|
|
"""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 = None) -> None:
|
|
if tracking_file is None:
|
|
tracking_file = str(get_data_path_manager().get_karaoke_tracking_path())
|
|
"""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() |