diff --git a/addon.xml b/addon.xml index 7f685113f..d8bb8113f 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/core/movies.py b/core/movies.py index e07691779..bd26cfa07 100644 --- a/core/movies.py +++ b/core/movies.py @@ -17,7 +17,6 @@ def __init__(self, EmbyServer, embydb, videodb): self.video = videodb self.emby_db = database.emby_db.EmbyDatabase(embydb.cursor) self.objects = obj_ops.Objects() - self.item_ids = [] self.Common = common.Common(self.emby_db, self.objects, self.EmbyServer) self.KodiDBIO = kodi.Kodi(videodb.cursor, self.EmbyServer.Utils) self.MoviesDBIO = MoviesDBIO(videodb.cursor) @@ -128,7 +127,6 @@ def movie(self, item, library): self.KodiDBIO.add_people(*self.EmbyServer.Utils.values(obj, queries_videos.add_people_movie_obj)) self.KodiDBIO.add_streams(*self.EmbyServer.Utils.values(obj, queries_videos.add_streams_obj)) self.ArtworkDBIO.add(obj['Artwork'], obj['MovieId'], "movie") - self.item_ids.append(obj['Id']) if "StackTimes" in obj: self.KodiDBIO.add_stacktimes(*self.EmbyServer.Utils.values(obj, queries_videos.add_stacktimes_obj)) diff --git a/core/music.py b/core/music.py index 536dde351..2d909caeb 100644 --- a/core/music.py +++ b/core/music.py @@ -19,20 +19,20 @@ def __init__(self, EmbyServer, embydb, musicdb): self.music = musicdb self.emby_db = database.emby_db.EmbyDatabase(self.emby.cursor) self.objects = obj_ops.Objects() - self.item_ids = [] self.Common = common.Common(self.emby_db, self.objects, self.EmbyServer) self.MusicDBIO = MusicDBIO(self.music.cursor, self.EmbyServer.Utils.DatabaseFiles['music-version']) self.ArtworkDBIO = artwork.Artwork(musicdb.cursor, self.EmbyServer.Utils) self.APIHelper = helper.api.API(self.EmbyServer.Utils) self.MusicDBIO.disable_rescan() + self.library = None #If item does not exist, entry will be added. #If item exists, entry will be updated def artist(self, item, library): e_item = self.emby_db.get_item_by_id(item['Id']) - library = self.Common.library_check(e_item, item, library) + self.library = self.Common.library_check(e_item, item, library) - if not library: + if not self.library: return False obj = self.objects.map(item, 'Artist') @@ -49,8 +49,8 @@ def artist(self, item, library): obj['ArtistId'] = None self.LOG.debug("ArtistId %s not found" % obj['Id']) - obj['LibraryId'] = library['Id'] - obj['LibraryName'] = library['Name'] + obj['LibraryId'] = self.library['Id'] + obj['LibraryName'] = self.library['Name'] obj['LastScraped'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') obj['ArtistType'] = "MusicArtist" obj['Genre'] = " / ".join(obj['Genres'] or []) @@ -80,7 +80,6 @@ def artist(self, item, library): self.MusicDBIO.update(obj['Genre'], obj['Bio'], obj['Thumb'], obj['Backdrops'], obj['LastScraped'], obj['SortName'], obj['ArtistId']) self.ArtworkDBIO.add(obj['Artwork'], obj['ArtistId'], "artist") - self.item_ids.append(obj['Id']) return not update #Add object to kodi @@ -99,9 +98,9 @@ def artist_update(self, obj): #Update object to kodi def album(self, item, library): e_item = self.emby_db.get_item_by_id(item['Id']) - library = self.Common.library_check(e_item, item, library) + self.library = self.Common.library_check(e_item, item, library) - if not library: + if not self.library: return False obj = self.objects.map(item, 'Album') @@ -117,8 +116,8 @@ def album(self, item, library): obj['AlbumId'] = None self.LOG.debug("AlbumId %s not found" % obj['Id']) - obj['LibraryId'] = library['Id'] - obj['LibraryName'] = library['Name'] + obj['LibraryId'] = self.library['Id'] + obj['LibraryName'] = self.library['Name'] obj['Rating'] = 0 obj['LastScraped'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') obj['Genres'] = obj['Genres'] or [] @@ -144,7 +143,6 @@ def album(self, item, library): self.artist_link(obj) self.artist_discography(obj) self.ArtworkDBIO.add(obj['Artwork'], obj['AlbumId'], "album") - self.item_ids.append(obj['Id']) return not update #Add object to kodi @@ -156,6 +154,7 @@ def album_add(self, obj): self.emby_db.add_reference(*self.EmbyServer.Utils.values(obj, database.queries.add_reference_album_obj)) self.LOG.info("ADD album [%s] %s: %s" % (obj['AlbumId'], obj['Title'], obj['Id'])) + return obj['AlbumId'] #Update object to kodi def album_update(self, obj): @@ -206,14 +205,13 @@ def artist_link(self, obj): self.MusicDBIO.update_artist_name(*self.EmbyServer.Utils.values(temp_obj, queries_music.update_artist_name_obj)) self.MusicDBIO.link(*self.EmbyServer.Utils.values(temp_obj, queries_music.update_link_obj)) - self.item_ids.append(temp_obj['Id']) #Update object to kodi def song(self, item, library): e_item = self.emby_db.get_item_by_id(item['Id']) - library = self.Common.library_check(e_item, item, library) + self.library = self.Common.library_check(e_item, item, library) - if not library: + if not self.library: return False obj = self.objects.map(item, 'Song') @@ -231,8 +229,8 @@ def song(self, item, library): obj['SongId'] = self.MusicDBIO.create_entry_song() self.LOG.debug("SongId %s not found" % obj['Id']) - obj['LibraryId'] = library['Id'] - obj['LibraryName'] = library['Name'] + obj['LibraryId'] = self.library['Id'] + obj['LibraryName'] = self.library['Name'] obj['Path'] = self.APIHelper.get_file_path(obj['Path'], item) PathValid, obj = self.Common.get_path_filename(obj, "audio") @@ -267,6 +265,8 @@ def song(self, item, library): if obj['Thumb']: obj['Thumb'] = "%s" % obj['Thumb'] + obj['AlbumId'] = self.song_album_link(obj) + if update: self.song_update(obj) else: @@ -279,7 +279,6 @@ def song(self, item, library): self.MusicDBIO.get_album_artist(*self.EmbyServer.Utils.values(obj, queries_music.get_album_artist_obj)) self.MusicDBIO.add_genres(*self.EmbyServer.Utils.values(obj, queries_music.update_genre_song_obj)) self.ArtworkDBIO.add(obj['Artwork'], obj['SongId'], "song") - self.item_ids.append(obj['Id']) if obj['SongAlbumId'] is None: self.ArtworkDBIO.add(obj['Artwork'], obj['AlbumId'], "album") @@ -290,30 +289,8 @@ def song(self, item, library): #Verify if there's an album associated. #If no album found, create a single's album def song_add(self, obj): - AlbumFound = False obj['PathId'] = self.MusicDBIO.add_path(obj['Path']) - if obj['SongAlbumId']: - result = self.emby_db.get_item_by_id(*self.EmbyServer.Utils.values(obj, database.queries.get_item_song_obj)) - - if result: - obj['AlbumId'] = result[0] - AlbumFound = True - - if not AlbumFound: - obj['LastScraped'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') - obj['AlbumId'] = None - BackupTitle = obj['Title'] - obj['Title'] = "--NO INFO--" - obj['Type'] = obj['LibraryName'] - - if self.EmbyServer.Utils.DatabaseFiles['music-version'] >= 82: - obj['AlbumId'] = self.MusicDBIO.get_album(*self.EmbyServer.Utils.values(obj, queries_music.get_single_obj82)) - else: - obj['AlbumId'] = self.MusicDBIO.get_album(*self.EmbyServer.Utils.values(obj, queries_music.get_single_obj)) - - obj['Title'] = BackupTitle - if not self.MusicDBIO.add_song(*self.EmbyServer.Utils.values(obj, queries_music.add_song_obj)): obj['Index'] = None #Duplicate track number for same album self.MusicDBIO.add_song(*self.EmbyServer.Utils.values(obj, queries_music.add_song_obj)) @@ -356,7 +333,6 @@ def song_artist_discography(self, obj): continue self.MusicDBIO.link(*self.EmbyServer.Utils.values(temp_obj, queries_music.update_link_obj)) - self.item_ids.append(temp_obj['Id']) if obj['Album']: temp_obj['Title'] = obj['Album'] @@ -373,21 +349,41 @@ def song_artist_link(self, obj): temp_obj['Name'] = artist['Name'] temp_obj['Id'] = artist['Id'] temp_obj['Index'] = index - Data = self.emby_db.get_item_by_id(*self.EmbyServer.Utils.values(temp_obj, database.queries.get_item_obj)) + Data = self.emby_db.get_item_by_id(artist['Id']) if Data: temp_obj['ArtistId'] = Data[0] else: - self.artist(self.EmbyServer.API.get_item(temp_obj['Id']), library=None) - Result = self.emby_db.get_item_by_id(*self.EmbyServer.Utils.values(temp_obj, database.queries.get_item_obj)) - - if Result: - temp_obj['ArtistId'] = Result[0] - else: - continue + self.artist(self.EmbyServer.API.get_item(artist['Id']), self.library) + temp_obj['ArtistId'] = self.emby_db.get_item_by_id(artist['Id'])[0] self.MusicDBIO.link_song_artist(*self.EmbyServer.Utils.values(temp_obj, queries_music.update_song_artist_obj)) - self.item_ids.append(temp_obj['Id']) + + def song_album_link(self, obj): + if obj['SongAlbumId']: + temp_obj = dict(obj) + temp_obj['Name'] = obj['Album'] + temp_obj['AlbumId'] = obj['SongAlbumId'] + Data = self.emby_db.get_item_by_id(obj['SongAlbumId']) + + if Data: + temp_obj['AlbumId'] = Data[0] + else: + self.album(self.EmbyServer.API.get_item(obj['SongAlbumId']), self.library) + else: # Single + temp_obj = dict(obj) + temp_obj['Title'] = "--NO INFO--" + temp_obj['AlbumId'] = None + temp_obj['Year'] = None + temp_obj['LastScraped'] = None + temp_obj['Type'] = obj['LibraryName'] + + if self.EmbyServer.Utils.DatabaseFiles['music-version'] >= 82: + temp_obj['AlbumId'] = self.MusicDBIO.get_album(*self.EmbyServer.Utils.values(temp_obj, queries_music.get_single_obj82)) + else: + temp_obj['AlbumId'] = self.MusicDBIO.get_album(*self.EmbyServer.Utils.values(temp_obj, queries_music.get_single_obj)) + + return temp_obj['AlbumId'] #This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks #Poster with progress bar @@ -611,35 +607,37 @@ def validate_song(self, *args): return None - def get_album(self, album_id, name, musicbrainz, Type, artists, *args): + def get_album(self, album_id, name, musicbrainz, AlbumOrSingle, artists, *args): if musicbrainz: self.cursor.execute(queries_music.get_album, (musicbrainz,)) + album = None else: - self.cursor.execute(queries_music.get_album_by_name, (name, artists,)) + self.cursor.execute(queries_music.get_album_by_name_type, (name, artists, args[len(args) - 1],)) + album = self.cursor.fetchone() - album = self.cursor.fetchone() - album_id = (album or self.cursor.fetchone()) + try: + album_id = (album or self.cursor.fetchone())[0] + except: + album_id = None - if album_id: - album_id = album_id[0] - else: - album_id = self.add_album(*(album_id, name, musicbrainz, Type, artists,) + args) + if not album_id: + album_id = self.add_album(*(album_id, name, musicbrainz, AlbumOrSingle, artists,) + args) return album_id - def add_album(self, album_id, name, musicbrainz, Type, artists, *args): + def add_album(self, album_id, name, musicbrainz, AlbumOrSingle, artists, *args): album_id = album_id or self.create_entry_album() - if Type == "album": + if AlbumOrSingle == "album": if self.DBVersion >= 82: - self.cursor.execute(queries_music.add_album82, (album_id, name, musicbrainz, Type, artists,) + args) + self.cursor.execute(queries_music.add_album82, (album_id, name, musicbrainz, AlbumOrSingle, artists,) + args) else: - self.cursor.execute(queries_music.add_album, (album_id, name, musicbrainz, Type, artists,) + args) + self.cursor.execute(queries_music.add_album, (album_id, name, musicbrainz, AlbumOrSingle, artists,) + args) else: #single if self.DBVersion >= 82: - self.cursor.execute(queries_music.add_single82, (album_id, name, musicbrainz, Type, artists,) + args) + self.cursor.execute(queries_music.add_single82, (album_id, name, musicbrainz, AlbumOrSingle, artists,) + args) else: - self.cursor.execute(queries_music.add_single, (album_id, name, musicbrainz, Type, artists,) + args) + self.cursor.execute(queries_music.add_single, (album_id, name, musicbrainz, AlbumOrSingle, artists,) + args) return album_id @@ -689,6 +687,9 @@ def update_song(self, *args): def link_song_artist(self, *args): self.cursor.execute(queries_music.update_song_artist, args) + def link_song_album(self, *args): + self.cursor.execute(queries_music.update_song_album, args) + def rate_song(self, *args): self.cursor.execute(queries_music.update_song_rating, args) diff --git a/core/musicvideos.py b/core/musicvideos.py index 1ab78d1b4..9d5bedcf4 100644 --- a/core/musicvideos.py +++ b/core/musicvideos.py @@ -21,7 +21,6 @@ def __init__(self, EmbyServer, embydb, videodb): self.video = videodb self.emby_db = database.emby_db.EmbyDatabase(embydb.cursor) self.objects = obj_ops.Objects() - self.item_ids = [] self.Common = common.Common(self.emby_db, self.objects, self.EmbyServer) self.MusicVideosDBIO = MusicVideosDBIO(videodb.cursor) self.KodiDBIO = kodi.Kodi(videodb.cursor, self.EmbyServer.Utils) @@ -136,7 +135,6 @@ def musicvideo(self, item, library): self.KodiDBIO.add_people(*self.EmbyServer.Utils.values(obj, queries_videos.add_people_mvideo_obj)) self.KodiDBIO.add_streams(*self.EmbyServer.Utils.values(obj, queries_videos.add_streams_obj)) self.ArtworkDBIO.add(obj['Artwork'], obj['MvideoId'], "musicvideo") - self.item_ids.append(obj['Id']) if "StackTimes" in obj: self.KodiDBIO.add_stacktimes(*self.EmbyServer.Utils.values(obj, queries_videos.add_stacktimes_obj)) diff --git a/core/queries_music.py b/core/queries_music.py index c29c528a3..8df165fa3 100644 --- a/core/queries_music.py +++ b/core/queries_music.py @@ -14,6 +14,7 @@ get_song_by_id_obj = ["{SongId}"] get_album = """ SELECT idAlbum FROM album WHERE strMusicBrainzAlbumID = ? """ get_album_by_name = """ SELECT idAlbum FROM album WHERE strAlbum = ? AND strArtistDisp = ? """ +get_album_by_name_type = """ SELECT idAlbum FROM album WHERE strAlbum = ? AND strArtistDisp = ? AND strType = ? """ get_album_artist = """ SELECT strArtistDisp FROM album WHERE idAlbum = ? """ get_album_artist_obj = ["{AlbumId}", "{strAlbumArtists}"] get_genre = """ SELECT idGenre FROM genre WHERE strGenre = ? COLLATE NOCASE """ diff --git a/core/tvshows.py b/core/tvshows.py index 0f9be6684..37b7e294e 100644 --- a/core/tvshows.py +++ b/core/tvshows.py @@ -21,7 +21,6 @@ def __init__(self, EmbyServer, embydb, videodb, update_library=False): self.video = videodb self.emby_db = database.emby_db.EmbyDatabase(embydb.cursor) self.objects = obj_ops.Objects() - self.item_ids = [] self.Common = common.Common(self.emby_db, self.objects, self.EmbyServer) self.KodiDBIO = kodi.Kodi(videodb.cursor, self.EmbyServer.Utils) self.TVShowsDBIO = TVShowsDBIO(videodb.cursor) @@ -112,7 +111,6 @@ def tvshow(self, item, library, pooling=None, redirect=None): self.KodiDBIO.add_genres(*self.EmbyServer.Utils.values(obj, queries_videos.add_genres_tvshow_obj)) self.KodiDBIO.add_studios(*self.EmbyServer.Utils.values(obj, queries_videos.add_studios_tvshow_obj)) self.ArtworkDBIO.add(obj['Artwork'], obj['ShowId'], "tvshow") - self.item_ids.append(obj['Id']) if "StackTimes" in obj: self.KodiDBIO.add_stacktimes(*self.EmbyServer.Utils.values(obj, queries_videos.add_stacktimes_obj)) @@ -136,7 +134,6 @@ def tvshow(self, item, library, pooling=None, redirect=None): try: self.emby_db.get_item_by_id(season['Id'])[0] - self.item_ids.append(season['Id']) except TypeError: self.season(season, library, obj['ShowId']) @@ -243,7 +240,6 @@ def season(self, item, library, show_id=None): if obj['Location'] != 'Virtual': self.emby_db.add_reference(*self.EmbyServer.Utils.values(obj, database.queries.add_reference_season_obj)) - self.item_ids.append(obj['Id']) self.ArtworkDBIO.add(obj['Artwork'], obj['SeasonId'], "season") self.LOG.info("UPDATE season [%s/%s] %s: %s" % (obj['ShowId'], obj['SeasonId'], obj['Title'] or obj['Index'], obj['Id'])) @@ -362,7 +358,6 @@ def episode(self, item, library): self.KodiDBIO.add_streams(*self.EmbyServer.Utils.values(obj, queries_videos.add_streams_obj)) self.KodiDBIO.add_playstate(*self.EmbyServer.Utils.values(obj, queries_videos.add_bookmark_obj)) self.ArtworkDBIO.update(obj['Artwork']['Primary'], obj['EpisodeId'], "episode", "thumb") - self.item_ids.append(obj['Id']) return not update #Add object to kodi @@ -433,7 +428,6 @@ def get_show_id(self, obj): else: obj['ShowId'] = obj['ShowId'][0] - self.item_ids.append(obj['SeriesId']) return True #This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks diff --git a/database/library.py b/database/library.py index 0401827f2..a296ba22b 100644 --- a/database/library.py +++ b/database/library.py @@ -56,6 +56,7 @@ def __init__(self, Player, EmbyServer): self.Views = emby.views.Views(self.EmbyServer) self.progress_percent = 0 self.Xmls = helper.xmls.Xmls(self.EmbyServer.Utils) + threading.Thread.__init__(self) self.start() @@ -114,6 +115,8 @@ def update_progress_dialog(self, item): def run(self): self.LOG.warning("--->[ library ]") + self.Xmls.advanced_settings() + self.Xmls.advanced_settings_add_timeouts() self.Views.update_views() self.sync.update_library = False diff --git a/database/sync.py b/database/sync.py index 54ad34598..5d3608425 100644 --- a/database/sync.py +++ b/database/sync.py @@ -190,15 +190,6 @@ def movies(self, library): dialog.close() return - #Compare entries from library to what's in the embydb. Remove surplus - if self.update_library: - items = emby_db.EmbyDatabase(embydb.cursor).get_item_by_media_folder(library['Id']) - current = MoviesObject.item_ids - - for x in items: - if x[0] not in current and x[1] == 'Movie': - MoviesObject.remove(x[0]) - dialog.close() def tvshows(self, library): @@ -229,19 +220,6 @@ def tvshows(self, library): dialog.close() return - #Compare entries from library to what's in the embydb. Remove surplus - if self.update_library: - items = emby_db.EmbyDatabase(embydb.cursor).get_item_by_media_folder(library['Id']) - - for x in list(items): - items.extend(TVShowsObject.get_child(x[0])) - - current = TVShowsObject.item_ids - - for x in items: - if x[0] not in current and x[1] == 'Series': - TVShowsObject.remove(x[0]) - dialog.close() def musicvideos(self, library): @@ -266,15 +244,6 @@ def musicvideos(self, library): dialog.close() return - #Compare entries from library to what's in the embydb. Remove surplus - if self.update_library: - items = emby_db.EmbyDatabase(embydb.cursor).get_item_by_media_folder(library['Id']) - current = MusicVideosObject.item_ids - - for x in items: - if x[0] not in current and x[1] == 'MusicVideo': - MusicVideosObject.remove(x[0]) - dialog.close() def music(self, library): @@ -313,19 +282,6 @@ def music(self, library): dialog.close() return - #Compare entries from library to what's in the embydb. Remove surplus - if self.update_library: - items = emby_db.EmbyDatabase(embydb.cursor).get_item_by_media_folder(library['Id']) - - for x in list(items): - items.extend(MusicObject.get_child(x[0])) - - current = MusicObject.item_ids - - for x in items: - if x[0] not in current and x[1] == 'MusicArtist': - MusicObject.remove(x[0]) - dialog.close() def boxsets(self, library_id): diff --git a/emby/core/api.py b/emby/core/api.py index 64ca948fb..2ea299426 100644 --- a/emby/core/api.py +++ b/emby/core/api.py @@ -53,6 +53,19 @@ def browse_MusicByArtistId(self, Artist_id, Parent_id, Media, Extra): return self._http("GET", "Users/%s/Items" % self.EmbyServer.Data['auth.user_id'], {'params': params}) + def get_recently_added(self, media, parent_id, limit): + params = { + 'Limit': limit, + 'IncludeItemTypes': media, + 'ParentId': parent_id, + 'Fields': self.browse_info + } + + if media and 'Photo' in media: + params['Fields'] += ",Width,Height" + + return self._http("GET", "Users/%s/Items/Latest" % self.EmbyServer.Data['auth.user_id'], {'params': params}) + #Get dynamic listings def get_filtered_section(self, data): if not 'ViewId' in data: @@ -72,7 +85,6 @@ def get_filtered_section(self, data): 'IncludeItemTypes': data['media'], 'Recursive': data['recursive'], 'Limit': data['limit'], - 'SortBy': "Random", 'Fields': self.browse_info } @@ -96,19 +108,6 @@ def get_filtered_section(self, data): return self._http("GET", "Users/%s/Items" % self.EmbyServer.Data['auth.user_id'], {'params': params}) - def get_recently_added(self, media, parent_id, limit): - params = { - 'Limit': limit, - 'IncludeItemTypes': media, - 'ParentId': parent_id, - 'Fields': self.browse_info - } - - if media and 'Photo' in media: - params['Fields'] += ",Width,Height" - - return self._http("GET", "Users/%s/Items/Latest" % self.EmbyServer.Data['auth.user_id'], {'params': params}) - def get_movies_by_boxset(self, boxset_id): for items in self.get_itemsSync(boxset_id, "Movie", False, None): yield items diff --git a/helper/pluginmenu.py b/helper/pluginmenu.py index e4ce323d9..07091bdee 100644 --- a/helper/pluginmenu.py +++ b/helper/pluginmenu.py @@ -145,7 +145,7 @@ def browse(self, Handle, media, view_id, folder, name, extra, server_id): elif media == 'playlists': listing = self.EmbyServers[server_id].API.get_filtered_section({'ViewId': ID, 'extra': extra, 'recursive': False}) elif media == 'homevideos': - listing = self.EmbyServers[server_id].API.get_filtered_section({'ViewId': ID, 'extra': extra, 'media': "Video,PhotoAlbum,Photo", 'recursive': False}) + listing = self.EmbyServers[server_id].API.get_filtered_section({'ViewId': ID, 'extra': extra, 'media': "Video,Folder,PhotoAlbum,Photo", 'recursive': False}) elif media == 'mixed': listing = self.EmbyServers[server_id].API.get_filtered_section({'ViewId': ID, 'extra': extra, 'media': "Movie,Series,Video", 'recursive': False}) diff --git a/hooks/monitor.py b/hooks/monitor.py index d6bd24ddf..e2cd3368d 100644 --- a/hooks/monitor.py +++ b/hooks/monitor.py @@ -29,6 +29,7 @@ class Monitor(xbmc.Monitor): def __init__(self, Service): self.LOG = helper.loghandler.LOG('EMBY.hooks.monitor.Monitor') self.sleep = False + self.ItemSkipUpdateReset = False self.EmbyServers = {} self.library = {} self.ServerIP = None @@ -418,6 +419,11 @@ def UserDataChanged(self, data): return self.LOG.info("[ UserDataChanged ] %s" % data) + + if not self.player.SyncPause and not self.ItemSkipUpdateReset: + self.player.ItemSkipUpdate = [] + self.LOG.info("[ reset skip after playback ]") + UpdateData = [] for ItemData in data['UserDataList']: @@ -439,10 +445,9 @@ def UserDataChanged(self, data): if UpdateData: self.library[data['ServerId']].userdata(UpdateData) - if self.player.ItemSkipUpdateReset: - self.player.ItemSkipUpdateReset = False + if self.ItemSkipUpdateReset: self.player.ItemSkipUpdate = [] - self.LOG.info("[ skip reset ]") + self.LOG.info("[ reset skip after video library update ]") def LibraryChanged(self, data): self.LOG.info("[ LibraryChanged ] %s" % data) @@ -620,6 +625,8 @@ def VideoLibrary_OnUpdate(self, data): for server_id in self.EmbyServers: ######################## WORKAROUND!!!!!!!!!!! ADD Serverid info in emby.db and query from there break + self.LOG.info("[ VideoLibraryUpdate ] %s" % data) + if 'item' in data: if 'playcount' in data: kodi_id = data['item']['id'] @@ -628,22 +635,12 @@ def VideoLibrary_OnUpdate(self, data): if item: if not item[0] in self.player.ItemSkipUpdate: #Check EmbyID - if media == "tvshow": #Search for all items in TVShow and update them - PresentationKey = item[10].split("-") - items = database.database.get_ItemsByPresentationkey(self.Service.Utils, PresentationKey[0]) - - for item2 in items: - self.player.ItemSkipUpdate.append(item2[0]) - self.EmbyServers[server_id].API.item_played(item2[0], bool(data['playcount'])) - + if media in ("season", "tvshow"): return - self.EmbyServers[server_id].API.item_played(item[0], bool(data['playcount'])) - - else: + self.ItemSkipUpdateReset = True self.player.ItemSkipUpdate.append(item[0]) - - self.player.ItemSkipUpdateReset = True + self.EmbyServers[server_id].API.item_played(item[0], bool(data['playcount'])) #Emby backup def Backup(self, data): diff --git a/hooks/player.py b/hooks/player.py index f375ebbf2..06394dac9 100644 --- a/hooks/player.py +++ b/hooks/player.py @@ -39,8 +39,6 @@ def __init__(self): self.PlayerLastItem = "" self.PlayerLastItemID = "-1" self.ItemSkipUpdate = [] - self.ItemSkipUpdateAfterStop = [] - self.ItemSkipUpdateReset = False self.SyncPause = False self.ProgressThread = None self.PlaySessionId = "" @@ -73,8 +71,6 @@ def OnPlay(self, data, EmbyServer, library): self.ProgressThread.Stop() self.ProgressThread = None - self.SyncPause = True - if not self.Trailer: if not "id" in data['item']: DynamicID = EmbyServer.Utils.ReplaceSpecialCharecters(data['item']['title']) @@ -99,20 +95,16 @@ def OnPlay(self, data, EmbyServer, library): PresentationKey = item[10].split("-") self.ItemSkipUpdate.append(PresentationKey[0]) self.ItemSkipUpdate.append(self.CurrentItem['Id']) - self.ItemSkipUpdateAfterStop.append(PresentationKey[0]) - self.ItemSkipUpdateAfterStop.append(self.CurrentItem['Id']) self.PlaySessionId = str(uuid.uuid4()).replace("-", "") self.CurrentItem['Tracking'] = True self.CurrentItem['Type'] = data['item']['type'] - self.CurrentItem['Volume'], self.CurrentItem['Muted'] = self.get_volume() self.CurrentItem['MediaSourceId'] = self.MediasourceID - self.CurrentItem['EmbyServer'] = EmbyServer self.CurrentItem['RunTime'] = 0 self.CurrentItem['CurrentPosition'] = 0 self.CurrentItem['Paused'] = False + self.CurrentItem['EmbyServer'] = EmbyServer self.CurrentItem['library'] = library - self.CurrentItem['MediaSourceId'] = self.MediasourceID self.CurrentItem['Volume'], self.CurrentItem['Muted'] = self.get_volume() def onAVChange(self): @@ -123,6 +115,7 @@ def onQueueNextItem(self): def onPlayBackStarted(self): self.LOG.info("[ onPlayBackStarted ]") + self.SyncPause = True if self.ReloadStream():#Media reload (3D Movie) return @@ -156,7 +149,6 @@ def onPlayBackStopped(self): self.PlayerLastItemID = "-1" self.PlayerLastItem = "" self.Trailer = False - self.SyncPause = True self.stop_playback(False) self.LOG.info("--<[ playback ]") @@ -184,13 +176,13 @@ def onPlayBackEnded(self): self.PlayerLastItemID = "-1" self.PlayerLastItem = "" - self.SyncPause = True self.stop_playback(False) self.LOG.info("--<<[ playback ]") #Threaded to ThreadAVStarted def onAVStarted(self): self.LOG.info("[ onAVStarted ]") + self.SyncPause = True new_thread = PlayerWorker(self, "ThreadAVStarted") new_thread.start() @@ -322,8 +314,6 @@ def stop_playback(self, Init): self.CurrentlyPlaying['EmbyServer'].API.close_transcode() if not Init: - self.ItemSkipUpdate = self.ItemSkipUpdateAfterStop - self.ItemSkipUpdateReset = True self.SyncPause = False #Offer delete @@ -497,7 +487,6 @@ def run(self): if EmbyDBItem[1]: PresentationKey = EmbyDBItem[1].split("-") self.Player.ItemSkipUpdate.append(PresentationKey[0]) - self.Player.ItemSkipUpdateAfterStop.append(PresentationKey[0]) self.KodiID = str(EmbyDBItem[0]) self.KodiFileID = str(EmbyDBItem[2]) @@ -719,7 +708,6 @@ def GetParametersFromURLQuery(self): self.Player.SyncPause = True self.Player.ItemSkipUpdate.append(Data[0]) - self.Player.ItemSkipUpdateAfterStop.append(Data[0]) self.EmbyID = Data[0] self.MediasourceID = Data[1] diff --git a/service.py b/service.py index b3e15ece0..ab4ce77d1 100644 --- a/service.py +++ b/service.py @@ -10,7 +10,7 @@ import database.database import helper.setup import helper.utils -import helper.xmls +#import helper.xmls import helper.loghandler class Service(): @@ -28,9 +28,9 @@ def Startup(self): self.Delay = int(self.Utils.Settings.startupDelay) self.Monitor = hooks.monitor.Monitor(self) database.database.EmbyDatabaseBuild(self.Utils) - Xmls = helper.xmls.Xmls(self.Utils) - Xmls.advanced_settings() - Xmls.advanced_settings_add_timeouts() +# Xmls = helper.xmls.Xmls(self.Utils) +# Xmls.advanced_settings() +# Xmls.advanced_settings_add_timeouts() self.ServerReconnecting = {} if not self.Setup.Migrate(): #Check Migrate