81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
from PyQt5.QtWidgets import (
|
|
QDialog,
|
|
QFrame,
|
|
QVBoxLayout,
|
|
QLabel,
|
|
QLineEdit,
|
|
QPushButton,
|
|
)
|
|
from PyQt5.QtGui import QFont
|
|
from mutagen.id3 import ID3
|
|
from utils.get_id3_tags import get_id3_tags
|
|
|
|
|
|
class MetadataWindow(QDialog):
|
|
def __init__(self, songs: list):
|
|
"""
|
|
Takes in a list of songs (absolute paths)
|
|
"""
|
|
super(MetadataWindow, self).__init__()
|
|
self.id3_tag_mapping = {
|
|
"TIT2": "title",
|
|
"TPE1": "artist",
|
|
"TALB": "album",
|
|
"TPE2": "album_artist",
|
|
"TCON": "genre",
|
|
"TRCK": "track_number",
|
|
"APIC": "album_cover",
|
|
"TCOP": "copyright",
|
|
}
|
|
self.setWindowTitle("Edit metadata")
|
|
self.setMinimumSize(600, 800)
|
|
layout = QVBoxLayout()
|
|
h_separator = QFrame()
|
|
h_separator.setFrameShape(QFrame.HLine)
|
|
|
|
# Labels and categories and stuff
|
|
# category_label = QLabel("Edit metadata")
|
|
# category_label.setFont(QFont("Sans", weight=QFont.Bold)) # bold category
|
|
# category_label.setStyleSheet("text-transform:uppercase;") # uppercase category
|
|
layout.addWidget(h_separator)
|
|
|
|
# FIXME: dynamically load fields and stuf
|
|
# Dict of sets
|
|
# {
|
|
# "TIT2": ["song_title1", "song_title2"],
|
|
# ...
|
|
# }
|
|
tag_sets: dict = {}
|
|
# List of dictionaries of ID3 tags for each song
|
|
# songs_id3_data: list = []
|
|
for song in songs:
|
|
# songs_id3_data.append(get_id3_tags(song))
|
|
song_data = get_id3_tags(song)
|
|
for tag in self.id3_tag_mapping:
|
|
tag_sets[tag] = song[tag]
|
|
|
|
for tag, value in tag_sets:
|
|
if value == set(value):
|
|
# Normal field
|
|
input_field = QLineEdit()
|
|
else:
|
|
pass
|
|
# Danger field
|
|
|
|
# Editable fields
|
|
label = QLabel("Title")
|
|
input_field = QLineEdit({songs["TPE1"]})
|
|
layout.addWidget(label)
|
|
layout.addWidget(input_field)
|
|
|
|
# Save button
|
|
save_button = QPushButton("Save")
|
|
save_button.clicked.connect(self.save)
|
|
layout.addWidget(save_button)
|
|
self.setLayout(layout)
|
|
|
|
def save(self):
|
|
"""Save changes made to metadata for each song in dict"""
|
|
pass
|
|
self.close()
|