mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 13:34:40 +00:00
99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
# This Python file uses the following encoding: utf-8
|
|
"""This module contains utility scripts used by musi radiostation Conjurer"""
|
|
import time
|
|
import re
|
|
import os
|
|
import argparse
|
|
|
|
from mutagen.easyid3 import EasyID3
|
|
from mutagen.mp3 import MP3
|
|
|
|
|
|
def update_metadata(folder_path):
|
|
for root, _, files in os.walk(folder_path):
|
|
for file in files:
|
|
if file.endswith(".mp3"):
|
|
file_path = os.path.join(root, file)
|
|
|
|
# Sample logic for guessing metadata from filename
|
|
# Assuming the filename format is "Artist - Title.mp3"
|
|
try:
|
|
artist, title = file.rsplit(" - ", 1)
|
|
title = title.replace(".mp3", "")
|
|
except ValueError:
|
|
# If file name doesn't fit the expected pattern, skip
|
|
print(f"Skipping file due to unexpected format: {file}")
|
|
continue
|
|
|
|
try:
|
|
# Load the mp3 file
|
|
audio = MP3(file_path, ID3=EasyID3)
|
|
|
|
# Update metadata
|
|
audio["artist"] = artist.strip()
|
|
audio["title"] = title.strip()
|
|
|
|
# Save changes
|
|
audio.save()
|
|
print(f"Updated metadata for: {file}")
|
|
except Exception as e:
|
|
print(f"Failed to update metadata for {file}: {e}")
|
|
|
|
|
|
NAME = "/home/pi/Conjurer/persistence.log"
|
|
|
|
|
|
def print_top():
|
|
"""
|
|
Prints the top 65 lines from a file specified by the NAME variable.
|
|
"""
|
|
while True:
|
|
line = ""
|
|
buffer = ""
|
|
with open(NAME, "r", encoding="utf-8") as f:
|
|
for _ in range(45):
|
|
line = f.readline()
|
|
if re.match(".*mp3", line):
|
|
buffer += line
|
|
print("=====================================")
|
|
print(buffer)
|
|
print("=====================================")
|
|
time.sleep(180)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Perform operations on a directory of .mp3 files."
|
|
)
|
|
|
|
# Positional argument for choosing the function to execute
|
|
parser.add_argument(
|
|
"operation",
|
|
type=str,
|
|
choices=["update_metadata", "print_top"],
|
|
help="Operation to perform: update_metadata or print_top.",
|
|
default="print_top",
|
|
)
|
|
|
|
# Positional argument for folder path
|
|
parser.add_argument("folder", type=str, help="Path to the folder to operate on.")
|
|
|
|
args = parser.parse_args()
|
|
if args.operation == "update_metadata":
|
|
if args.folder:
|
|
folder_to_scan = args.folder
|
|
else:
|
|
print("Please provide a folder path to scan.")
|
|
raise ValueError("No folder path provided.")
|
|
|
|
if args.operation == "update_metadata" and os.path.isdir(folder_to_scan):
|
|
update_metadata(folder_to_scan)
|
|
elif args.operation == "print_top":
|
|
print_top()
|
|
else:
|
|
print(f"The specified path is not a directory: {folder_to_scan}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|