1

Add release_date

This commit is contained in:
Kim Wittenburg
2018-09-03 23:13:15 +02:00
parent 32035af5a7
commit 474f3da3a2

View File

@@ -3,12 +3,14 @@ import re
import struct
import shutil
import itunespy
import datetime
import urllib.request
from tempfile import NamedTemporaryFile
from beets import config
from beets.autotag.hooks import AlbumInfo, TrackInfo, Distance
from beets.plugins import BeetsPlugin, sanitize_choices
from beets.dbcore import types
import beets.mediafile as mediafile
AVAILABLE_COUNTRIES = ['DE', 'US', 'GB', 'FR', 'AU', 'CA', 'IT', 'JP', 'DZ', 'AO', 'AI', 'AG', 'AR', 'AM', 'AT', 'AZ', 'BS', 'BH', 'BD', 'BB', 'BY', 'BE', 'BZ', 'BM', 'BO', 'BW', 'BR', 'BN', 'BG', 'CM', 'KY', 'CL', 'CN', 'CO', 'CR', 'CI', 'HR', 'CY', 'CZ', 'DK', 'DM', 'DO', 'EC', 'EG', 'SV', 'EE', 'ET', 'FI', 'GH', 'GR', 'GD', 'GT', 'GY', 'HN', 'HK', 'HU', 'IS', 'IN', 'ID', 'IE', 'IL', 'JM', 'JO', 'KZ', 'KE', 'KR', 'KW', 'LV', 'LB', 'LY', 'LI', 'LT', 'LU', 'MO', 'MK', 'MG', 'MY', 'MV', 'ML', 'MT', 'MU', 'MX', 'MD', 'MS', 'MM', 'NP', 'NL', 'NZ', 'NI', 'NE', 'NG', 'NO', 'OM', 'PK', 'PA', 'PY', 'PE', 'PH', 'PL', 'PT', 'QA', 'RO', 'RU', 'KN', 'LC', 'VC', 'SA', 'SN', 'RS', 'SG', 'SK', 'SI', 'ZA', 'ES', 'LK', 'SR', 'SE', 'CH', 'TW', 'TZ', 'TH', 'TT', 'TN', 'TR', 'TC', 'UG', 'UA', 'AE', 'UY', 'UZ', 'VE', 'VN', 'VG', 'YE']
@@ -16,14 +18,20 @@ VA_ARTIST_ID = 120644327
_track_ids = {}
class SearchAPIPlugin(BeetsPlugin):
class iTunesPlugin(BeetsPlugin):
"""A beets plugin that adds the iTunes API as a metadata source.
The plugin can also lookup song metadata of songs the have been
matched by iTunes Match.
"""
def __init__(self):
super(SearchAPIPlugin, self).__init__()
super(iTunesPlugin, self).__init__()
self.add_media_field('release_date', mediafile.MediaField(
mediafile.MP3StorageStyle('TDRC'),
mediafile.MP4StorageStyle('\xa9day'),
mediafile.StorageStyle('DATE'),
mediafile.ASFStorageStyle('WM/Year')
))
self.add_media_field('title_sort', mediafile.MediaField(
mediafile.MP3StorageStyle('TSOT'),
mediafile.MP4StorageStyle('sonm'),
@@ -36,6 +44,12 @@ class SearchAPIPlugin(BeetsPlugin):
mediafile.StorageStyle('ALBUMSORT'),
mediafile.ASFStorageStyle('WM/AlbumSortOrder')
))
self.add_media_field('copyright', mediafile.MediaField(
mediafile.MP3StorageStyle('TCOP'),
mediafile.MP4StorageStyle('cprt'),
mediafile.StorageStyle('COPYRIGHT'),
mediafile.ASFStorageStyle('Copyright')
))
self.add_media_field('itunes_content_id', mediafile.MediaField(
mediafile.MP4StorageStyle('cnID', as_type=int),
mediafile.StorageStyle(u'ITUNES_CONTENT_ID', as_type=int)
@@ -44,10 +58,6 @@ class SearchAPIPlugin(BeetsPlugin):
mediafile.MP4StorageStyle('atID', as_type=int),
mediafile.StorageStyle(u'ITUNES_ARTIST_ID', as_type=int)
))
self.add_media_field('itunes_genre_id', mediafile.MediaField(
mediafile.MP4StorageStyle('geID', as_type=int),
mediafile.StorageStyle('ITUNES_GENRE_ID', as_type=int)
))
self.add_media_field('itunes_advisory', mediafile.MediaField(
mediafile.MP4StorageStyle('rtng', as_type=int),
mediafile.StorageStyle('ITUNES_ADVISORY', as_type=int)
@@ -206,18 +216,15 @@ class SearchAPIPlugin(BeetsPlugin):
def apply_itunes_metadata(self, session, task):
for item in task.imported_items():
info = task.match.mapping[item]
try:
item.genre = info.genre
if not item.title == info.title_sort:
item.title_sort = info.title_sort
if not item.album == info.album_sort:
item.album_sort = info.album_sort
item.itunes_content_id = info.itunes_content_id
item.itunes_artist_id = info.itunes_artist_id
item.itunes_advisory = info.itunes_advisory
for tag in ['genre', 'title_sort', 'album_sprt', 'itunes_content_id', 'itunes_artist_id', 'itunes_advisory']:
item[tag] = getattr(info, tag, None)
if task.is_album:
album_info = task.match.info
for tag in ['copyright']:
item[tag] = getattr(album_info, tag, None)
# Fix Release Date
item.release_date = "%04i-%02i-%02i" % (album_info.year, album_info.month, album_info.day)
item.itunes_media_type = 1 # Set media type to "Music"
except AttributeError:
pass
def fetch_artwork(self, session, task):
try:
@@ -280,6 +287,7 @@ class SearchAPIPlugin(BeetsPlugin):
info.genre = album.primary_genre_name
info.itunes_advisory = decode_explicitness(album.collection_explicitness)
info.itunes_artwork_url = decode_artwork_url(album.artwork_url_100)
info.copyright = album.copyright
return info
def make_track_info(self, track, index):