From b515642f62e3d07b43c1ce3bd4a9464030d09fdc Mon Sep 17 00:00:00 2001 From: jmeacoe Date: Tue, 28 May 2019 18:46:40 -0400 Subject: [PATCH] fixes music syncing for kodi 18 while still usable by kodi 17. Also removes the message in kodi 18 to scan media. tested in kodi 17 and 18. --- resources/lib/objects/kodi/music.py | 63 ++++++++++++++++----- resources/lib/objects/kodi/queries_music.py | 41 ++++++++++++++ 2 files changed, 91 insertions(+), 13 deletions(-) diff --git a/resources/lib/objects/kodi/music.py b/resources/lib/objects/kodi/music.py index 5402a3b5..5f0a7797 100644 --- a/resources/lib/objects/kodi/music.py +++ b/resources/lib/objects/kodi/music.py @@ -16,10 +16,11 @@ LOG = logging.getLogger("JELLYFIN."+__name__) class Music(Kodi): - def __init__(self, cursor): self.cursor = cursor + self.version_id = self.get_version() + self.update_versiontagscan() Kodi.__init__(self) def create_entry(self): @@ -128,7 +129,10 @@ class Music(Kodi): self.cursor.execute(QU.get_album, (musicbrainz,)) album = None else: - self.cursor.execute(QU.get_album_by_name, (name,)) + if self.version_id < 72: + self.cursor.execute(QU.get_album_by_name, (name,)) + else: + self.cursor.execute(QU.get_album_by_name72, (name,)) album = self.cursor.fetchone() if album[1] and album[1].split(' / ')[0] not in artists.split(' / '): @@ -146,41 +150,59 @@ class Music(Kodi): def add_album(self, album_id, *args): album_id = album_id or self.create_entry_album() - self.cursor.execute(QU.add_album, (album_id,) + args) - + if self.version_id < 72: + self.cursor.execute(QU.add_album, (album_id,) + args) + else: + self.cursor.execute(QU.add_album72, (album_id,) + args) return album_id def update_album(self, *args): - self.cursor.execute(QU.update_album, args) + if self.version_id < 72: + self.cursor.execute(QU.update_album, args) + else: + self.cursor.execute(QU.update_album72, args) def get_album_artist(self, album_id, artists): try: - self.cursor.execute(QU.get_album_artist, (album_id,)) + if self.version_id < 72: + self.cursor.execute(QU.get_album_artist, (album_id,)) + else: + self.cursor.execute(QU.get_album_artist72, (album_id,)) curr_artists = self.cursor.fetchone()[0] except TypeError: return if curr_artists != artists: - self.update_album_artist(artists, album_id) + self.update_album_artist(artists, album_id) def update_album_artist(self, *args): - self.cursor.execute(QU.update_album_artist, args) + if self.version_id < 72: + self.cursor.execute(QU.update_album_artist, args) + else: + self.cursor.execute(QU.update_album_artist72, args) def add_single(self, *args): self.cursor.execute(QU.add_single, args) def add_song(self, *args): - self.cursor.execute(QU.add_song, args) + if self.version_id < 72: + self.cursor.execute(QU.add_song, args) + else: + self.cursor.execute(QU.add_song72, args) def update_song(self, *args): - self.cursor.execute(QU.update_song, args) + if self.version_id < 72: + self.cursor.execute(QU.update_song, args) + else: + self.cursor.execute(QU.update_song72, args) def link_song_artist(self, *args): self.cursor.execute(QU.update_song_artist, args) def link_song_album(self, *args): - self.cursor.execute(QU.update_song_album, args) + if self.version_id < 72: + self.cursor.execute(QU.update_song_album, args) def rate_song(self, *args): self.cursor.execute(QU.update_song_rating, args) @@ -188,8 +210,9 @@ class Music(Kodi): def add_genres(self, kodi_id, genres, media): ''' Add genres, but delete current genres first. + Album_genres was removed in kodi 18 ''' - if media == 'album': + if media == 'album' and self.version_id < 72 : self.cursor.execute(QU.delete_genres_album, (kodi_id,)) for genre in genres: @@ -197,7 +220,7 @@ class Music(Kodi): genre_id = self.get_genre(genre) self.cursor.execute(QU.update_genre_album, (genre_id, kodi_id)) - elif media == 'song': + if media == 'song': self.cursor.execute(QU.delete_genres_song, (kodi_id,)) for genre in genres: @@ -229,3 +252,17 @@ class Music(Kodi): def delete_song(self, *args): self.cursor.execute(QU.delete_song, args) + + def get_version(self): + self.cursor.execute(QU.get_version) + + return self.cursor.fetchone()[0] + + #current bug in Kodi 18 that will ask for a scan of music tags unless this is set without a lastscanned + def update_versiontagscan(self): + if self.version_id < 72: + return + else: + self.cursor.execute(QU.get_versiontagcount) + if self.cursor.fetchone()[0] == 0: + self.cursor.execute(QU.update_versiontag, (self.version_id,)) \ No newline at end of file diff --git a/resources/lib/objects/kodi/queries_music.py b/resources/lib/objects/kodi/queries_music.py index da481f36..069d97ef 100644 --- a/resources/lib/objects/kodi/queries_music.py +++ b/resources/lib/objects/kodi/queries_music.py @@ -53,10 +53,18 @@ get_album_by_name = """ SELECT idAlbum, strArtists FROM album WHERE strAlbum = ? """ +get_album_by_name72 = """ SELECT idAlbum, strArtistDisp + FROM album + WHERE strAlbum = ? + """ get_album_artist = """ SELECT strArtists FROM album WHERE idAlbum = ? """ +get_album_artist72 = """ SELECT strArtistDisp + FROM album + WHERE idAlbum = ? + """ get_album_artist_obj = [ "{AlbumId}","{strAlbumArtists}" ] get_genre = """ SELECT idGenre @@ -77,6 +85,9 @@ add_artist = """ INSERT INTO artist(idArtist, strArtist, strMusicBrainzArti add_album = """ INSERT INTO album(idAlbum, strAlbum, strMusicBrainzAlbumID, strReleaseType) VALUES (?, ?, ?, ?) """ +add_album72 = """ INSERT INTO album(idAlbum, strAlbum, strMusicBrainzAlbumID, strReleaseType, bScrapedMBID) + VALUES (?, ?, ?, ?, 1) + """ add_single = """ INSERT INTO album(idAlbum, strGenres, iYear, strReleaseType) VALUES (?, ?, ?, ?) """ @@ -87,6 +98,11 @@ add_song = """ INSERT INTO song(idSong, idAlbum, idPath, strArtists, strG rating, comment, dateAdded) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ +add_song72 = """ INSERT INTO song(idSong, idAlbum, idPath, strArtistDisp, strGenres, strTitle, iTrack, + iDuration, iYear, strFileName, strMusicBrainzTrackID, iTimesPlayed, lastplayed, + rating, comment, dateAdded) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """ add_song_obj = [ "{SongId}","{AlbumId}","{PathId}","{Artists}","{Genre}","{Title}","{Index}", "{Runtime}","{Year}","{Filename}","{UniqueId}","{PlayCount}","{DatePlayed}","{Rating}", "{Comment}","{DateAdded}" @@ -135,19 +151,35 @@ update_album = """ UPDATE album iUserrating = ?, lastScraped = ?, strReleaseType = ? WHERE idAlbum = ? """ +update_album72 = """ UPDATE album + SET strArtistDisp = ?, iYear = ?, strGenres = ?, strReview = ?, strImage = ?, + iUserrating = ?, lastScraped = ?, bScrapedMBID = 1, strReleaseType = ? + WHERE idAlbum = ? + """ update_album_obj = [ "{Artists}","{Year}","{Genre}","{Bio}","{Thumb}","{Rating}","{LastScraped}", "album","{AlbumId}" + ] update_album_artist = """ UPDATE album SET strArtists = ? WHERE idAlbum = ? """ +update_album_artist72 = """ UPDATE album + SET strArtistDisp = ? + WHERE idAlbum = ? + """ update_song = """ UPDATE song SET idAlbum = ?, strArtists = ?, strGenres = ?, strTitle = ?, iTrack = ?, iDuration = ?, iYear = ?, strFilename = ?, iTimesPlayed = ?, lastplayed = ?, rating = ?, comment = ?, dateAdded = ? WHERE idSong = ? """ +update_song72 = """ UPDATE song + SET idAlbum = ?, strArtistDisp = ?, strGenres = ?, strTitle = ?, iTrack = ?, + iDuration = ?, iYear = ?, strFilename = ?, iTimesPlayed = ?, lastplayed = ?, + rating = ?, comment = ?, dateAdded = ? + WHERE idSong = ? + """ update_song_obj = [ "{AlbumId}","{Artists}","{Genre}","{Title}","{Index}","{Runtime}","{Year}", "{Filename}","{PlayCount}","{DatePlayed}","{Rating}","{Comment}", "{DateAdded}","{SongId}" @@ -195,3 +227,12 @@ delete_album = """ DELETE FROM album delete_song = """ DELETE FROM song WHERE idSong = ? """ +get_version = """ SELECT idVersion + FROM version + """ +update_versiontag = """ INSERT OR REPLACE INTO versiontagscan(idVersion, iNeedsScan) + VALUES (?, 0) + """ +get_versiontagcount = """ SELECT COUNT(*) + FROM versiontagscan + """ \ No newline at end of file