from os.path import basename, splitext
from fnmatch import fnmatch
from ..id3.frames import ImageFrame
FRONT_COVER = "FRONT_COVER"
"""Album front cover."""
BACK_COVER = "BACK_COVER"
"""Album back cover."""
MISC_COVER = "MISC_COVER"
"""Other part of the album cover; liner notes, gate-fold, etc."""
LOGO = "LOGO"
"""Artist/band logo."""
ARTIST = "ARTIST"
"""Artist/band images."""
LIVE = "LIVE"
"""Artist/band images."""
FILENAMES = {
FRONT_COVER: ["cover-front", "cover-alternate*", "cover",
"folder", "front", "cover-front_*", "flier"],
BACK_COVER: ["cover-back", "back", "cover-back_*"],
MISC_COVER: ["cover-insert*", "cover-liner*", "cover-disc",
"cover-media*"],
LOGO: ["logo*"],
ARTIST: ["artist*"],
LIVE: ["live*"],
}
"""A mapping of art types to lists of filename patterns (excluding file
extension): type -> [file_pattern, ..]."""
TO_ID3_ART_TYPES = {
FRONT_COVER: [ImageFrame.FRONT_COVER, ImageFrame.OTHER, ImageFrame.ICON,
ImageFrame.LEAFLET],
BACK_COVER: [ImageFrame.BACK_COVER],
MISC_COVER: [ImageFrame.MEDIA],
LOGO: [ImageFrame.BAND_LOGO],
ARTIST: [ImageFrame.LEAD_ARTIST, ImageFrame.ARTIST, ImageFrame.BAND],
LIVE: [ImageFrame.DURING_PERFORMANCE, ImageFrame.DURING_RECORDING]
}
"""A mapping of art types to ID3 APIC (image) types: type -> [apic_type, ..]"""
# ID3 image types not mapped above:
# OTHER_ICON = 0x02
# CONDUCTOR = 0x09
# COMPOSER = 0x0B
# LYRICIST = 0x0C
# RECORDING_LOCATION = 0x0D
# VIDEO = 0x10
# BRIGHT_COLORED_FISH = 0x11
# ILLUSTRATION = 0x12
# PUBLISHER_LOGO = 0x14
FROM_ID3_ART_TYPES = {}
"""A mapping of ID3 art types to eyeD3 art types; the opposite of
TO_ID3_ART_TYPES."""
for _type in TO_ID3_ART_TYPES:
for _id3_type in TO_ID3_ART_TYPES[_type]:
FROM_ID3_ART_TYPES[_id3_type] = _type
[docs]def matchArtFile(filename):
"""Compares ``filename`` (case insensitive) with lists of common art file
names and returns the type of art that was matched, or None if no types
were matched."""
base = splitext(basename(filename))[0]
for type_ in FILENAMES.keys():
if True in [fnmatch(base.lower(), fname) for fname in FILENAMES[type_]]:
return type_
return None
[docs]def getArtFromTag(tag, type_=None):
"""Returns a list of eyed3.id3.frames.ImageFrame objects matching ``type_``,
all if ``type_`` is None, or empty if tag does not contain art."""
art = []
for img in tag.images:
if not type_ or type_ == img.picture_type:
art.append(img)
return art