mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-13 01:56:58 -07:00
Save MusicBrainz lookups in the database
This commit is contained in:
parent
6ff826bc3a
commit
cba43f675a
2 changed files with 72 additions and 26 deletions
|
@ -751,6 +751,13 @@ def dbcheck():
|
||||||
'themoviedb_id INTEGER, themoviedb_url TEXT, themoviedb_json TEXT)'
|
'themoviedb_id INTEGER, themoviedb_url TEXT, themoviedb_json TEXT)'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# musicbrainz_lookup table :: This table keeps record of the MusicBrainz lookups
|
||||||
|
c_db.execute(
|
||||||
|
'CREATE TABLE IF NOT EXISTS musicbrainz_lookup (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
||||||
|
'rating_key INTEGER, musicbrainz_id INTEGER, musicbrainz_url TEXT, musicbrainz_type TEXT, '
|
||||||
|
'musicbrainz_json TEXT)'
|
||||||
|
)
|
||||||
|
|
||||||
# image_hash_lookup table :: This table keeps record of the image hash lookups
|
# image_hash_lookup table :: This table keeps record of the image hash lookups
|
||||||
c_db.execute(
|
c_db.execute(
|
||||||
'CREATE TABLE IF NOT EXISTS image_hash_lookup (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
'CREATE TABLE IF NOT EXISTS image_hash_lookup (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
||||||
|
@ -1928,6 +1935,9 @@ def dbcheck():
|
||||||
c_db.execute(
|
c_db.execute(
|
||||||
'CREATE UNIQUE INDEX IF NOT EXISTS idx_themoviedb_lookup ON themoviedb_lookup (rating_key)'
|
'CREATE UNIQUE INDEX IF NOT EXISTS idx_themoviedb_lookup ON themoviedb_lookup (rating_key)'
|
||||||
)
|
)
|
||||||
|
c_db.execute(
|
||||||
|
'CREATE UNIQUE INDEX IF NOT EXISTS idx_musicbrainz_lookup ON musicbrainz_lookup (rating_key)'
|
||||||
|
)
|
||||||
|
|
||||||
conn_db.commit()
|
conn_db.commit()
|
||||||
c_db.close()
|
c_db.close()
|
||||||
|
|
|
@ -643,11 +643,10 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m
|
||||||
tracks = notify_params['children_count']
|
tracks = notify_params['children_count']
|
||||||
tnum = notify_params['media_index']
|
tnum = notify_params['media_index']
|
||||||
|
|
||||||
result = lookup_musicbrainz(musicbrainz_type=musicbrainz_type, artist=artist, release=release,
|
musicbrainz_info = lookup_musicbrainz_info(musicbrainz_type=musicbrainz_type, rating_key=rating_key,
|
||||||
recording=recording, tracks=tracks, tnum=tnum)
|
artist=artist, release=release, recording=recording, tracks=tracks,
|
||||||
if result:
|
tnum=tnum)
|
||||||
notify_params['musicbrainz_id'] = result['id']
|
notify_params.update(musicbrainz_info)
|
||||||
notify_params['musicbrainz_url'] = 'https://musicbrainz.org/' + musicbrainz_type + '/' + notify_params['musicbrainz_id']
|
|
||||||
|
|
||||||
if notify_params['media_type'] in ('movie', 'show', 'artist'):
|
if notify_params['media_type'] in ('movie', 'show', 'artist'):
|
||||||
poster_thumb = notify_params['thumb']
|
poster_thumb = notify_params['thumb']
|
||||||
|
@ -1499,30 +1498,67 @@ def get_themoviedb_info(rating_key=None, media_type=None, themoviedb_id=None):
|
||||||
return themoviedb_json
|
return themoviedb_json
|
||||||
|
|
||||||
|
|
||||||
def lookup_musicbrainz(musicbrainz_type=None, artist=None, release=None, recording=None, tracks=None, tnum=None):
|
def lookup_musicbrainz_info(musicbrainz_type=None, rating_key=None, artist=None, release=None, recording=None,
|
||||||
musicbrainzngs.set_useragent(
|
tracks=None, tnum=None):
|
||||||
common.PRODUCT,
|
db = database.MonitorDatabase()
|
||||||
common.RELEASE,
|
|
||||||
"https://tautulli.com",
|
|
||||||
)
|
|
||||||
|
|
||||||
if musicbrainz_type == 'artist':
|
try:
|
||||||
result = musicbrainzngs.search_artists(artist=artist, strict=True, limit=1)
|
query = 'SELECT musicbrainz_id, musicbrainz_url, musicbrainz_type FROM musicbrainz_lookup ' \
|
||||||
if result['artist-list']:
|
'WHERE rating_key = ?'
|
||||||
return result['artist-list'][0]
|
musicbrainz_info = db.select_single(query, args=[rating_key])
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn(u"Tautulli NotificationHandler :: Unable to execute database query for lookup_musicbrainz: %s." % e)
|
||||||
|
return {}
|
||||||
|
|
||||||
elif musicbrainz_type == 'release':
|
if not musicbrainz_info:
|
||||||
result = musicbrainzngs.search_releases(artist=artist, release=release, tracks=tracks,
|
musicbrainzngs.set_useragent(
|
||||||
strict=True, limit=1)
|
common.PRODUCT,
|
||||||
if result['release-list']:
|
common.RELEASE,
|
||||||
return result['release-list'][0]
|
"https://tautulli.com",
|
||||||
|
)
|
||||||
|
|
||||||
elif musicbrainz_type == 'recording':
|
if musicbrainz_type == 'artist':
|
||||||
result = musicbrainzngs.search_recordings(artist=artist, release=release, recording=recording,
|
logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
|
||||||
tracks=tracks, tnum=tnum,
|
u"{} '{}'.".format(musicbrainz_type, artist))
|
||||||
strict=True, limit=1)
|
result = musicbrainzngs.search_artists(artist=artist, strict=True, limit=1)
|
||||||
if result['recording-list']:
|
if result['artist-list']:
|
||||||
return result['recording-list'][0]
|
musicbrainz_info = result['artist-list'][0]
|
||||||
|
|
||||||
|
elif musicbrainz_type == 'release':
|
||||||
|
logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
|
||||||
|
u"{} '{} - {}'.".format(musicbrainz_type, artist, release))
|
||||||
|
result = musicbrainzngs.search_releases(artist=artist, release=release, tracks=tracks,
|
||||||
|
strict=True, limit=1)
|
||||||
|
if result['release-list']:
|
||||||
|
musicbrainz_info = result['release-list'][0]
|
||||||
|
|
||||||
|
elif musicbrainz_type == 'recording':
|
||||||
|
logger.debug(u"Tautulli NotificationHandler :: Looking up MusicBrainz info for "
|
||||||
|
u"{} '{} - {} - {}'.".format(musicbrainz_type, artist, release, recording))
|
||||||
|
result = musicbrainzngs.search_recordings(artist=artist, release=release, recording=recording,
|
||||||
|
tracks=tracks, tnum=tnum,
|
||||||
|
strict=True, limit=1)
|
||||||
|
if result['recording-list']:
|
||||||
|
musicbrainz_info = result['recording-list'][0]
|
||||||
|
|
||||||
|
if musicbrainz_info:
|
||||||
|
musicbrainz_id = musicbrainz_info['id']
|
||||||
|
musicbrainz_url = 'https://musicbrainz.org/' + musicbrainz_type + '/' + musicbrainz_id
|
||||||
|
|
||||||
|
keys = {'musicbrainz_id': musicbrainz_id}
|
||||||
|
musicbrainz_info = {'rating_key': rating_key,
|
||||||
|
'musicbrainz_url': musicbrainz_url,
|
||||||
|
'musicbrainz_type': musicbrainz_type,
|
||||||
|
'musicbrainz_json': json.dumps(musicbrainz_info)}
|
||||||
|
db.upsert(table_name='musicbrainz_lookup', key_dict=keys, value_dict=musicbrainz_info)
|
||||||
|
|
||||||
|
musicbrainz_info.update(keys)
|
||||||
|
musicbrainz_info.pop('musicbrainz_json')
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning(u"Tautulli NotificationHandler :: No match found on MusicBrainz.")
|
||||||
|
|
||||||
|
return musicbrainz_info
|
||||||
|
|
||||||
|
|
||||||
class CustomFormatter(Formatter):
|
class CustomFormatter(Formatter):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue