Preserve track provenance through lossy transcoding (#245)
- Update provenance file_path when Blasphemy Mode deletes the original FLAC and replaces it with a lossy copy — provenance now points to the transcoded file instead of the deleted original - New update_provenance_file_path() database method - Non-blocking: wrapped in try/except, never interrupts transcode flow - Downsample (hi-res → CD quality) is unaffected — replaces in-place with same filename, provenance stays valid
This commit is contained in:
parent
c67ca40b08
commit
c7d6cc21e8
2 changed files with 20 additions and 0 deletions
|
|
@ -8667,6 +8667,20 @@ class MusicDatabase:
|
||||||
logger.error(f"Error getting track downloads: {e}")
|
logger.error(f"Error getting track downloads: {e}")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def update_provenance_file_path(self, old_path: str, new_path: str) -> bool:
|
||||||
|
"""Update file_path in provenance records when a file is transcoded/moved."""
|
||||||
|
try:
|
||||||
|
conn = self._get_connection()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE track_downloads SET file_path = ? WHERE file_path = ?
|
||||||
|
""", (new_path, old_path))
|
||||||
|
conn.commit()
|
||||||
|
return cursor.rowcount > 0
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error updating provenance file path: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
def get_download_by_file_path(self, file_path: str) -> Optional[dict]:
|
def get_download_by_file_path(self, file_path: str) -> Optional[dict]:
|
||||||
"""Find the most recent download record for a file path."""
|
"""Find the most recent download record for a file path."""
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -16520,6 +16520,12 @@ def _create_lossy_copy(final_path):
|
||||||
from mutagen import File as MutagenFile
|
from mutagen import File as MutagenFile
|
||||||
test_audio = MutagenFile(out_path)
|
test_audio = MutagenFile(out_path)
|
||||||
if test_audio is not None:
|
if test_audio is not None:
|
||||||
|
# Update provenance record to point to the new transcoded file
|
||||||
|
try:
|
||||||
|
db = get_database()
|
||||||
|
db.update_provenance_file_path(final_path, out_path)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
os.remove(final_path)
|
os.remove(final_path)
|
||||||
print(f"🔥 [Blasphemy Mode] Deleted original: {os.path.basename(final_path)}")
|
print(f"🔥 [Blasphemy Mode] Deleted original: {os.path.basename(final_path)}")
|
||||||
# Rename lyrics sidecar file to match the output filename
|
# Rename lyrics sidecar file to match the output filename
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue