dfsa
This commit is contained in:
parent
133e360562
commit
a00cbb0d0c
@ -222,7 +222,7 @@ class Database:
|
|||||||
values = (
|
values = (
|
||||||
source.id,
|
source.id,
|
||||||
source.song_ref_id,
|
source.song_ref_id,
|
||||||
source.src,
|
source.type_str,
|
||||||
source.url
|
source.url
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
class Mapping(Enum):
|
class Mapping(Enum):
|
||||||
|
"""
|
||||||
|
These frames belong to the id3 standart
|
||||||
|
"""
|
||||||
|
# Textframes
|
||||||
TITLE = "TIT2"
|
TITLE = "TIT2"
|
||||||
ISRC = "TSRC"
|
ISRC = "TSRC"
|
||||||
LENGTH = "TLEN"
|
LENGTH = "TLEN"
|
||||||
DATE = "TYER"
|
DATE = "TYER"
|
||||||
UNSYNCED_LYRICS = "USLT"
|
|
||||||
TRACKNUMBER = "TRCK"
|
TRACKNUMBER = "TRCK"
|
||||||
TOTALTRACKS = "TRCK" # Stored in the same frame with TRACKNUMBER, separated by '/': e.g. '4/9'.
|
TOTALTRACKS = "TRCK" # Stored in the same frame with TRACKNUMBER, separated by '/': e.g. '4/9'.
|
||||||
TITLESORTORDER = "TSOT"
|
TITLESORTORDER = "TSOT"
|
||||||
@ -24,12 +27,6 @@ class Mapping(Enum):
|
|||||||
ORIGINAL_RELEASE_DATE = "TDOR"
|
ORIGINAL_RELEASE_DATE = "TDOR"
|
||||||
ORIGINAL_ARTIST = "TOPE"
|
ORIGINAL_ARTIST = "TOPE"
|
||||||
ORIGINAL_ALBUM = "TOAL"
|
ORIGINAL_ALBUM = "TOAL"
|
||||||
INTERNET_RADIO_WEBPAGE_URL = "WORS"
|
|
||||||
SOURCE_WEBPAGE_URL = "WOAS"
|
|
||||||
FILE_WEBPAGE_URL = "WOAF"
|
|
||||||
ARTIST_WEBPAGE_URL = "WOAR"
|
|
||||||
MOVEMENT_INDEX = "MVIN"
|
|
||||||
MOVEMENT_NAME = "MVNM"
|
|
||||||
MEDIA_TYPE = "TMED"
|
MEDIA_TYPE = "TMED"
|
||||||
LYRICIST = "TEXT"
|
LYRICIST = "TEXT"
|
||||||
WRITER = "TEXT"
|
WRITER = "TEXT"
|
||||||
@ -42,15 +39,12 @@ class Mapping(Enum):
|
|||||||
INITIAL_KEY = "TKEY"
|
INITIAL_KEY = "TKEY"
|
||||||
OWNER = "TOWN"
|
OWNER = "TOWN"
|
||||||
ENCODED_BY = "TENC"
|
ENCODED_BY = "TENC"
|
||||||
COPYRIGHT_URL = "WCOP"
|
|
||||||
COPYRIGHT = "TCOP"
|
COPYRIGHT = "TCOP"
|
||||||
GENRE = "TCON"
|
GENRE = "TCON"
|
||||||
GROUPING = "TIT1"
|
GROUPING = "TIT1"
|
||||||
CONDUCTOR = "TPE3"
|
CONDUCTOR = "TPE3"
|
||||||
COMPOSERSORTORDER = "TSOC"
|
COMPOSERSORTORDER = "TSOC"
|
||||||
COMPOSER = "TCOM"
|
COMPOSER = "TCOM"
|
||||||
COMMERCIAL_INFORMATION_URL = "WCOM"
|
|
||||||
COMMENT = "COMM"
|
|
||||||
BPM = "TBPM"
|
BPM = "TBPM"
|
||||||
ALBUM_ARTIST = "TPE2"
|
ALBUM_ARTIST = "TPE2"
|
||||||
BAND = "TPE2"
|
BAND = "TPE2"
|
||||||
@ -59,3 +53,16 @@ class Mapping(Enum):
|
|||||||
ALBUMSORTORDER = "TSOA"
|
ALBUMSORTORDER = "TSOA"
|
||||||
ALBUMARTISTSORTORDER = "TSO2"
|
ALBUMARTISTSORTORDER = "TSO2"
|
||||||
|
|
||||||
|
SOURCE_WEBPAGE_URL = "WOAS"
|
||||||
|
FILE_WEBPAGE_URL = "WOAF"
|
||||||
|
INTERNET_RADIO_WEBPAGE_URL = "WORS"
|
||||||
|
ARTIST_WEBPAGE_URL = "WOAR"
|
||||||
|
COPYRIGHT_URL = "WCOP"
|
||||||
|
COMMERCIAL_INFORMATION_URL = "WCOM"
|
||||||
|
|
||||||
|
MOVEMENT_INDEX = "MVIN"
|
||||||
|
MOVEMENT_NAME = "MVNM"
|
||||||
|
|
||||||
|
UNSYNCED_LYRICS = "USLT"
|
||||||
|
COMMENT = "COMM"
|
||||||
|
|
@ -64,3 +64,10 @@ class SongAttribute:
|
|||||||
self.song_ref = Reference(song_id)
|
self.song_ref = Reference(song_id)
|
||||||
|
|
||||||
song_ref_id = property(fget=get_ref_song_id, fset=set_ref_song_id)
|
song_ref_id = property(fget=get_ref_song_id, fset=set_ref_song_id)
|
||||||
|
|
||||||
|
|
||||||
|
class ID3Metadata:
|
||||||
|
def get_id3_dict(self) -> dict:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
id3_dict: dict = property(fget=get_id3_dict)
|
||||||
|
@ -10,7 +10,8 @@ from ...utils.shared import (
|
|||||||
from .parents import (
|
from .parents import (
|
||||||
DatabaseObject,
|
DatabaseObject,
|
||||||
Reference,
|
Reference,
|
||||||
SongAttribute
|
SongAttribute,
|
||||||
|
ID3Metadata
|
||||||
)
|
)
|
||||||
from .source import Source
|
from .source import Source
|
||||||
|
|
||||||
@ -19,9 +20,6 @@ All Objects dependent
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Metadata:
|
class Metadata:
|
||||||
"""
|
"""
|
||||||
Shall only be read or edited via the Song object.
|
Shall only be read or edited via the Song object.
|
||||||
@ -39,20 +37,35 @@ class Metadata:
|
|||||||
def get_all_metadata(self):
|
def get_all_metadata(self):
|
||||||
return list(self.id3_attributes.items())
|
return list(self.id3_attributes.items())
|
||||||
|
|
||||||
def __setitem__(self, key: str, value: list):
|
def __setitem__(self, key: str, value: list, override_existing: bool = True):
|
||||||
if len(value) == 0:
|
if len(value) == 0:
|
||||||
return
|
return
|
||||||
if type(value) != list:
|
if type(value) != list:
|
||||||
raise ValueError(f"can only set attribute to list, not {type(value)}")
|
raise ValueError(f"can only set attribute to list, not {type(value)}")
|
||||||
|
|
||||||
# self.id3_attributes[key] = [value[0], "HHHHSSSS"]
|
# self.id3_attributes[key] = [value[0], "HHHHSSSS"]
|
||||||
self.id3_attributes[key] = value[0]
|
if override_existing:
|
||||||
|
self.id3_attributes[key] = value
|
||||||
|
else:
|
||||||
|
if key not in self.id3_attributes:
|
||||||
|
self.id3_attributes[key] = value
|
||||||
|
return
|
||||||
|
self.id3_attributes[key].extend(value)
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
if key not in self.id3_attributes:
|
if key not in self.id3_attributes:
|
||||||
return None
|
return None
|
||||||
return self.id3_attributes[key]
|
return self.id3_attributes[key]
|
||||||
|
|
||||||
|
def add_id3_metadata_obj(self, id3_metadata: ID3Metadata, override_existing: bool = True):
|
||||||
|
metadata_dict = id3_metadata.get_id3_dict()
|
||||||
|
for field_enum, value in metadata_dict.items():
|
||||||
|
self.__setitem__(field_enum.value, value, override_existing=override_existing)
|
||||||
|
|
||||||
|
def add_many_id3_metadata_obj(self, id3_metadata_list: List[ID3Metadata], override_existing: bool = False):
|
||||||
|
for id3_metadata in id3_metadata_list:
|
||||||
|
self.add_id3_metadata_obj(id3_metadata, override_existing=override_existing)
|
||||||
|
|
||||||
def delete_item(self, key: str):
|
def delete_item(self, key: str):
|
||||||
if key in self.id3_attributes:
|
if key in self.id3_attributes:
|
||||||
return self.id3_attributes.pop(key)
|
return self.id3_attributes.pop(key)
|
||||||
@ -273,7 +286,8 @@ class Song(DatabaseObject):
|
|||||||
for source in self._sources:
|
for source in self._sources:
|
||||||
source.add_song(self)
|
source.add_song(self)
|
||||||
|
|
||||||
self.metadata[ID3_MAPPING.FILE_WEBPAGE_URL.value] = [s.url for s in self._sources]
|
# self.metadata[ID3_MAPPING.FILE_WEBPAGE_URL.value] = [s.url for s in self._sources]
|
||||||
|
self.metadata.add_many_id3_metadata_obj(self._sources)
|
||||||
|
|
||||||
def get_metadata(self):
|
def get_metadata(self):
|
||||||
return self.metadata.get_all_metadata()
|
return self.metadata.get_all_metadata()
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
from .id3_mapping import Mapping
|
||||||
from .parents import (
|
from .parents import (
|
||||||
DatabaseObject,
|
DatabaseObject,
|
||||||
SongAttribute
|
SongAttribute,
|
||||||
|
ID3Metadata
|
||||||
)
|
)
|
||||||
|
|
||||||
class sources(Enum):
|
class sources(Enum):
|
||||||
@ -19,7 +21,7 @@ class sources(Enum):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Source(DatabaseObject, SongAttribute):
|
class Source(DatabaseObject, SongAttribute, ID3Metadata):
|
||||||
"""
|
"""
|
||||||
create somehow like that
|
create somehow like that
|
||||||
```python
|
```python
|
||||||
@ -35,7 +37,14 @@ class Source(DatabaseObject, SongAttribute):
|
|||||||
self.src = sources(src)
|
self.src = sources(src)
|
||||||
self.url = url
|
self.url = url
|
||||||
|
|
||||||
|
def get_id3_dict(self) -> dict:
|
||||||
|
return {
|
||||||
|
Mapping.FILE_WEBPAGE_URL: [self.url],
|
||||||
|
Mapping.SOURCE_WEBPAGE_URL: [self.homepage]
|
||||||
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.src}: {self.url}"
|
return f"{self.src}: {self.url}"
|
||||||
|
|
||||||
|
type_str = property(fget=lambda self: self.src.value)
|
||||||
homepage = property(fget=lambda self: sources.get_homepage(self.src))
|
homepage = property(fget=lambda self: sources.get_homepage(self.src))
|
||||||
|
Loading…
Reference in New Issue
Block a user