Fix music database if new music is added in the background

This commit is contained in:
Croneter 2018-04-26 08:01:27 +02:00
parent 4e7829969b
commit 54c132d3e3

View file

@ -1217,6 +1217,7 @@ class Music(Items):
""" """
Adds a single music album Adds a single music album
children: list of child xml's, so in this case songs children: list of child xml's, so in this case songs
scan_children: set to False if you don't want to add children
""" """
kodicursor = self.kodicursor kodicursor = self.kodicursor
plex_db = self.plex_db plex_db = self.plex_db
@ -1224,20 +1225,18 @@ class Music(Items):
api = API(item) api = API(item)
update_item = True update_item = True
itemid = api.plex_id() plex_id = api.plex_id()
if not itemid: if not plex_id:
LOG.error('Error processing Album, skipping') LOG.error('Error processing Album, skipping')
return return
plex_dbitem = plex_db.getItem_byId(itemid) plex_dbitem = plex_db.getItem_byId(plex_id)
try: try:
albumid = plex_dbitem[0] album_id = plex_dbitem[0]
except TypeError: except TypeError:
# Albumid not found
update_item = False update_item = False
# The album details ##### # The album details #####
lastScraped = datetime.now().strftime('%Y-%m-%d %H:%M:%S') lastScraped = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
dateadded = api.date_created()
userdata = api.userdata() userdata = api.userdata()
checksum = api.checksum() checksum = api.checksum()
@ -1269,22 +1268,22 @@ class Music(Items):
# UPDATE THE ALBUM ##### # UPDATE THE ALBUM #####
if update_item: if update_item:
LOG.info("UPDATE album itemid: %s - Name: %s", itemid, name) LOG.info("UPDATE album plex_id: %s - Name: %s", plex_id, name)
# Update the checksum in plex table # Update the checksum in plex table
plex_db.updateReference(itemid, checksum) plex_db.updateReference(plex_id, checksum)
# OR ADD THE ALBUM ##### # OR ADD THE ALBUM #####
else: else:
LOG.info("ADD album itemid: %s - Name: %s", itemid, name) LOG.info("ADD album plex_id: %s - Name: %s", plex_id, name)
# safety checks: It looks like plex supports the same artist # safety checks: It looks like plex supports the same artist
# multiple times. # multiple times.
# Kodi doesn't allow that. In case that happens we just merge the # Kodi doesn't allow that. In case that happens we just merge the
# artist entries. # artist entries.
albumid = self.kodi_db.addAlbum(name, musicBrainzId) album_id = self.kodi_db.addAlbum(name, musicBrainzId)
# Create the reference in plex table # Create the reference in plex table
plex_db.addReference(itemid, plex_db.addReference(plex_id,
v.PLEX_TYPE_ALBUM, v.PLEX_TYPE_ALBUM,
albumid, album_id,
v.KODI_TYPE_ALBUM, v.KODI_TYPE_ALBUM,
view_id=viewid, view_id=viewid,
checksum=checksum) checksum=checksum)
@ -1302,7 +1301,7 @@ class Music(Items):
kodicursor.execute(query, (artistname, year, self.genre, bio, kodicursor.execute(query, (artistname, year, self.genre, bio,
thumb, rating, lastScraped, thumb, rating, lastScraped,
v.KODI_TYPE_ALBUM, studio, v.KODI_TYPE_ALBUM, studio,
self.compilation, albumid)) self.compilation, album_id))
elif v.KODIVERSION == 17: elif v.KODIVERSION == 17:
# Kodi Krypton # Kodi Krypton
query = ''' query = '''
@ -1315,7 +1314,7 @@ class Music(Items):
kodicursor.execute(query, (artistname, year, self.genre, bio, kodicursor.execute(query, (artistname, year, self.genre, bio,
thumb, rating, lastScraped, thumb, rating, lastScraped,
v.KODI_TYPE_ALBUM, studio, v.KODI_TYPE_ALBUM, studio,
self.compilation, albumid)) self.compilation, album_id))
elif v.KODIVERSION == 16: elif v.KODIVERSION == 16:
# Kodi Jarvis # Kodi Jarvis
query = ''' query = '''
@ -1328,71 +1327,46 @@ class Music(Items):
kodicursor.execute(query, (artistname, year, self.genre, bio, kodicursor.execute(query, (artistname, year, self.genre, bio,
thumb, rating, lastScraped, thumb, rating, lastScraped,
v.KODI_TYPE_ALBUM, studio, v.KODI_TYPE_ALBUM, studio,
self.compilation, albumid)) self.compilation, album_id))
# Associate the parentid for plex reference # Associate the parentid for plex reference
parent_id = api.parent_plex_id() parent_id = api.parent_plex_id()
artist_id = None
if parent_id is not None: if parent_id is not None:
plex_dbartist = plex_db.getItem_byId(parent_id)
try: try:
artistid = plex_dbartist[0] artist_id = plex_db.getItem_byId(parent_id)[0]
except TypeError: except TypeError:
LOG.info('Artist %s does not exist in plex database', LOG.info('Artist %s does not yet exist in Plex DB', parent_id)
parent_id)
artist = GetPlexMetadata(parent_id) artist = GetPlexMetadata(parent_id)
# Item may not be an artist, verification necessary. try:
if artist is not None and artist != 401: artist[0].attrib
if artist[0].attrib.get('type') == v.PLEX_TYPE_ARTIST: except (TypeError, IndexError, AttributeError):
# Update with the parent_id, for remove reference LOG.error('Could not get artist xml for %s', parent_id)
plex_db.addReference(parent_id, else:
v.PLEX_TYPE_ARTIST, self.add_updateArtist(artist[0])
parent_id, plex_dbartist = plex_db.getItem_byId(parent_id)
v.KODI_TYPE_ARTIST, try:
view_id=viewid) artist_id = plex_dbartist[0]
plex_db.updateParentId(itemid, parent_id) except TypeError:
else: LOG.error('Adding artist failed for %s', parent_id)
# Update plex reference with the artistid # Update plex reference with the artist_id
plex_db.updateParentId(itemid, artistid) plex_db.updateParentId(plex_id, artist_id)
# Assign main artists to album
# Plex unfortunately only supports 1 artist :-(
artist_id = parent_id
plex_dbartist = plex_db.getItem_byId(artist_id)
try:
artistid = plex_dbartist[0]
except TypeError:
# Artist does not exist in plex database, create the reference
LOG.info('Artist %s does not exist in Plex database', artist_id)
artist = GetPlexMetadata(artist_id)
if artist is not None and artist != 401:
self.add_updateArtist(artist[0])
plex_dbartist = plex_db.getItem_byId(artist_id)
artistid = plex_dbartist[0]
else:
# Best take this name over anything else.
query = "UPDATE artist SET strArtist = ? WHERE idArtist = ?"
kodicursor.execute(query, (artistname, artistid,))
LOG.info("UPDATE artist: strArtist: %s, idArtist: %s",
artistname, artistid)
# Add artist to album # Add artist to album
query = ''' query = '''
INSERT OR REPLACE INTO album_artist(idArtist, idAlbum, strArtist) INSERT OR REPLACE INTO album_artist(idArtist, idAlbum, strArtist)
VALUES (?, ?, ?) VALUES (?, ?, ?)
''' '''
kodicursor.execute(query, (artistid, albumid, artistname)) kodicursor.execute(query, (artist_id, album_id, artistname))
# Update discography # Update discography
query = ''' query = '''
INSERT OR REPLACE INTO discography(idArtist, strAlbum, strYear) INSERT OR REPLACE INTO discography(idArtist, strAlbum, strYear)
VALUES (?, ?, ?) VALUES (?, ?, ?)
''' '''
kodicursor.execute(query, (artistid, name, year)) kodicursor.execute(query, (artist_id, name, year))
# Update plex reference with parentid
plex_db.updateParentId(artist_id, albumid)
if v.KODIVERSION < 18: if v.KODIVERSION < 18:
self.kodi_db.addMusicGenres(albumid, self.genres, v.KODI_TYPE_ALBUM) self.kodi_db.addMusicGenres(album_id, self.genres, v.KODI_TYPE_ALBUM)
# Update artwork # Update artwork
artwork.modify_artwork(artworks, albumid, v.KODI_TYPE_ALBUM, kodicursor) artwork.modify_artwork(artworks, album_id, v.KODI_TYPE_ALBUM, kodicursor)
# Add all children - all tracks # Add all children - all tracks
if scan_children: if scan_children:
for child in children: for child in children: