Files
deezspot-spotizerr-dev/debug_flac.py
cool.gitter.not.me.again.duh 089cb3dc5a first commit
2025-05-31 15:51:18 -06:00

161 lines
5.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Specialized debugging script for investigating FLAC decryption issues.
This script downloads a track and analyzes the decryption process in detail.
"""
import os
import sys
import logging
import json
import argparse
from pathlib import Path
# Configure logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("flac_debug.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger('flac-debug')
# Import our modules
from deezspot.deezloader import DeeLogin
from deezspot.exceptions import BadCredentials, TrackNotFound
from deezspot.deezloader.__download_utils__ import analyze_flac_file
def debug_flac_decryption(arl_token, track_url, output_dir="debug_output"):
"""
Debug the FLAC decryption process by downloading a track and analyzing each step.
Args:
arl_token: Deezer ARL token
track_url: URL of the track to download
output_dir: Directory to save output files
Returns:
Dict with debugging results
"""
os.makedirs(output_dir, exist_ok=True)
results = {
"track_url": track_url,
"steps": [],
"success": False,
"output_file": None,
"analysis": None
}
try:
# Step 1: Initialize DeeLogin
logger.info("Step 1: Initializing DeeLogin")
results["steps"].append({"step": "init", "status": "starting"})
deezer = DeeLogin(arl=arl_token)
results["steps"][-1]["status"] = "success"
# Step 2: Download the track
logger.info(f"Step 2: Downloading track from {track_url}")
results["steps"].append({"step": "download", "status": "starting"})
download_result = deezer.download_trackdee(
track_url,
output_dir=output_dir,
quality_download="FLAC",
recursive_quality=True,
recursive_download=True
)
if not download_result.success:
results["steps"][-1]["status"] = "failed"
results["steps"][-1]["error"] = "Download failed"
return results
results["steps"][-1]["status"] = "success"
results["output_file"] = download_result.song_path
logger.info(f"Downloaded file to: {download_result.song_path}")
# Step 3: Analyze the downloaded file
logger.info("Step 3: Analyzing downloaded FLAC file")
results["steps"].append({"step": "analyze", "status": "starting"})
analysis = analyze_flac_file(download_result.song_path)
results["analysis"] = analysis
if analysis.get("has_flac_signature", False) and not analysis.get("potential_issues"):
results["steps"][-1]["status"] = "success"
results["success"] = True
logger.info("FLAC analysis completed successfully - file appears valid")
else:
results["steps"][-1]["status"] = "warning"
issues = analysis.get("potential_issues", [])
results["steps"][-1]["issues"] = issues
logger.warning(f"FLAC analysis found potential issues: {issues}")
# Save detailed analysis to a JSON file
analysis_file = os.path.join(output_dir, "flac_analysis.json")
with open(analysis_file, 'w') as f:
json.dump(analysis, f, indent=2)
logger.info(f"Saved detailed analysis to {analysis_file}")
return results
except BadCredentials:
logger.error("Invalid ARL token")
results["steps"].append({"step": "error", "status": "failed", "error": "Invalid ARL token"})
return results
except TrackNotFound:
logger.error(f"Track not found at URL: {track_url}")
results["steps"].append({"step": "error", "status": "failed", "error": "Track not found"})
return results
except Exception as e:
logger.error(f"Error during debugging: {str(e)}", exc_info=True)
results["steps"].append({"step": "error", "status": "failed", "error": str(e)})
return results
def main():
parser = argparse.ArgumentParser(description="Debug FLAC decryption issues")
parser.add_argument("--arl", help="Deezer ARL token")
parser.add_argument("--track", help="Deezer track URL", default="https://www.deezer.com/us/track/2306672155")
parser.add_argument("--output-dir", help="Output directory", default="debug_output")
args = parser.parse_args()
# Check for ARL token
arl_token = args.arl or os.environ.get("DEEZER_ARL")
if not arl_token:
print("Error: Deezer ARL token not provided")
print("Please provide with --arl or set the DEEZER_ARL environment variable")
return 1
# Run the debugging
print(f"Starting FLAC decryption debugging for track: {args.track}")
results = debug_flac_decryption(arl_token, args.track, args.output_dir)
# Print summary
print("\n===== Debugging Summary =====")
for step in results["steps"]:
status_icon = "" if step["status"] == "success" else "⚠️" if step["status"] == "warning" else ""
print(f"{status_icon} {step['step'].capitalize()}: {step['status'].upper()}")
if step["status"] == "failed" and "error" in step:
print(f" Error: {step['error']}")
elif step["status"] == "warning" and "issues" in step:
for issue in step["issues"]:
print(f" Issue: {issue}")
if results["success"]:
print("\n✅ FLAC file appears to be valid!")
if results["output_file"]:
print(f"Output file: {results['output_file']}")
return 0
else:
print("\n❌ FLAC decryption had issues")
return 1
if __name__ == "__main__":
sys.exit(main())