Fix music database if new music is added in the background
This commit is contained in:
parent
4e7829969b
commit
54c132d3e3
1 changed files with 34 additions and 60 deletions
|
@ -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:
|
||||||
|
try:
|
||||||
|
artist_id = plex_db.getItem_byId(parent_id)[0]
|
||||||
|
except TypeError:
|
||||||
|
LOG.info('Artist %s does not yet exist in Plex DB', parent_id)
|
||||||
|
artist = GetPlexMetadata(parent_id)
|
||||||
|
try:
|
||||||
|
artist[0].attrib
|
||||||
|
except (TypeError, IndexError, AttributeError):
|
||||||
|
LOG.error('Could not get artist xml for %s', parent_id)
|
||||||
|
else:
|
||||||
|
self.add_updateArtist(artist[0])
|
||||||
plex_dbartist = plex_db.getItem_byId(parent_id)
|
plex_dbartist = plex_db.getItem_byId(parent_id)
|
||||||
try:
|
try:
|
||||||
artistid = plex_dbartist[0]
|
artist_id = plex_dbartist[0]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
LOG.info('Artist %s does not exist in plex database',
|
LOG.error('Adding artist failed for %s', parent_id)
|
||||||
parent_id)
|
# Update plex reference with the artist_id
|
||||||
artist = GetPlexMetadata(parent_id)
|
plex_db.updateParentId(plex_id, artist_id)
|
||||||
# Item may not be an artist, verification necessary.
|
|
||||||
if artist is not None and artist != 401:
|
|
||||||
if artist[0].attrib.get('type') == v.PLEX_TYPE_ARTIST:
|
|
||||||
# Update with the parent_id, for remove reference
|
|
||||||
plex_db.addReference(parent_id,
|
|
||||||
v.PLEX_TYPE_ARTIST,
|
|
||||||
parent_id,
|
|
||||||
v.KODI_TYPE_ARTIST,
|
|
||||||
view_id=viewid)
|
|
||||||
plex_db.updateParentId(itemid, parent_id)
|
|
||||||
else:
|
|
||||||
# Update plex reference with the artistid
|
|
||||||
plex_db.updateParentId(itemid, artistid)
|
|
||||||
|
|
||||||
# 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:
|
||||||
|
|
Loading…
Reference in a new issue