From c8e1d8ae54f46116e8e32a87225b1dbd109a63d2 Mon Sep 17 00:00:00 2001 From: shaun Date: Fri, 3 Apr 2015 13:12:09 +1100 Subject: [PATCH] Implement LibraryChanged WebSocket event --- resources/lib/LibrarySync.py | 9 +++++---- resources/lib/ReadEmbyDB.py | 25 ++++++++++++++++--------- resources/lib/WebSocketClient.py | 19 +++++++++++++++++++ service.py | 4 ++-- 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/resources/lib/LibrarySync.py b/resources/lib/LibrarySync.py index c949b279..9dcc3990 100644 --- a/resources/lib/LibrarySync.py +++ b/resources/lib/LibrarySync.py @@ -67,7 +67,7 @@ class LibrarySync(): return True - def MoviesSync(self, fullsync, installFirstRun): + def MoviesSync(self, fullsync, installFirstRun, itemList = []): WINDOW = xbmcgui.Window( 10000 ) pDialog = None @@ -99,7 +99,7 @@ class LibrarySync(): for view in views: #process new movies - allMB3Movies = ReadEmbyDB().getMovies(view.get('id'), True, fullsync) + allMB3Movies = ReadEmbyDB().getMovies(id = view.get('id'), fullinfo=True, fullSync = fullsync, itemList = itemList) allKodiIds = set(ReadKodiDB().getKodiMoviesIds(True)) if(self.ShouldStop(pDialog)): @@ -255,7 +255,7 @@ class LibrarySync(): return True - def TvShowsSync(self, fullsync, installFirstRun): + def TvShowsSync(self, fullsync, installFirstRun, itemList = []): addon = xbmcaddon.Addon(id='plugin.video.emby') WINDOW = xbmcgui.Window( 10000 ) @@ -282,7 +282,8 @@ class LibrarySync(): # incremental sync --> new episodes only if not fullsync: - latestMBEpisodes = ReadEmbyDB().getLatestEpisodes(True) + latestMBEpisodes = ReadEmbyDB().getLatestEpisodes(fullinfo = True, itemList = itemList) + utils.logMsg("Sync TV", "Inc Sync Started on : " + str(len(latestMBEpisodes)) + " : " + str(itemList), 1) if latestMBEpisodes != None: allKodiTvShowsIds = set(ReadKodiDB().getKodiTvShowsIds(True)) diff --git a/resources/lib/ReadEmbyDB.py b/resources/lib/ReadEmbyDB.py index ef4a1242..3175e9f8 100644 --- a/resources/lib/ReadEmbyDB.py +++ b/resources/lib/ReadEmbyDB.py @@ -12,7 +12,7 @@ from DownloadUtils import DownloadUtils addon = xbmcaddon.Addon(id='plugin.video.emby') class ReadEmbyDB(): - def getMovies(self, id, fullinfo = False, fullSync = True): + def getMovies(self, id, fullinfo = False, fullSync = True, itemList = []): result = None addon = xbmcaddon.Addon(id='plugin.video.emby') @@ -23,16 +23,19 @@ class ReadEmbyDB(): downloadUtils = DownloadUtils() userid = downloadUtils.getUserId() - if not fullSync: - sortstring = "&Limit=20&SortBy=DateCreated" - else: + if fullSync: sortstring = "&SortBy=SortName" - + else: + if(len(itemList) > 0): # if we want a certain list specify it + sortstring = "&Ids=" + ",".join(itemList) + else: # just get the last 20 created items + sortstring = "&Limit=20&SortBy=DateCreated" + if fullinfo: url = server + '/mediabrowser/Users/' + userid + '/items?ParentId=' + id + sortstring + '&Fields=Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1' else: url = server + '/mediabrowser/Users/' + userid + '/items?ParentId=' + id + sortstring + '&Fields=CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Movie&CollapseBoxSetItems=false&format=json&ImageTypeLimit=1' - + jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) if jsonData != None and jsonData != "": result = json.loads(jsonData) @@ -179,7 +182,7 @@ class ReadEmbyDB(): result = result['Items'] return result - def getLatestEpisodes(self,fullinfo = False): + def getLatestEpisodes(self, fullinfo = False, itemList = []): result = None addon = xbmcaddon.Addon(id='plugin.video.emby') @@ -190,10 +193,14 @@ class ReadEmbyDB(): downloadUtils = DownloadUtils() userid = downloadUtils.getUserId() + limitString = "Limit=20&SortBy=DateCreated&" + if(len(itemList) > 0): # if we want a certain list specify it + limitString = "Ids=" + ",".join(itemList) + "&" + if fullinfo: - url = server + '/mediabrowser/Users/' + userid + '/Items?Limit=20&SortBy=DateCreated&IsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1' + url = server + '/mediabrowser/Users/' + userid + '/Items?' + limitString + 'IsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,CommunityRating,OfficialRating,CumulativeRunTimeTicks,Metascore,AirTime,DateCreated,MediaStreams,People,Overview&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1' else: - url = server + '/mediabrowser/Users/' + userid + '/Items?Limit=20&SortBy=DateCreated&IsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1' + url = server + '/mediabrowser/Users/' + userid + '/Items?' + limitString + 'IsVirtualUnaired=false&IsMissing=False&Fields=ParentId,Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Descending&IncludeItemTypes=Episode&format=json&ImageTypeLimit=1' jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=0) diff --git a/resources/lib/WebSocketClient.py b/resources/lib/WebSocketClient.py index d74cb107..132e19d1 100644 --- a/resources/lib/WebSocketClient.py +++ b/resources/lib/WebSocketClient.py @@ -191,6 +191,25 @@ class WebSocketThread(threading.Thread): if(embyItemId != None and len(embyItemId) == 2): LibrarySync().updatePlayCount(embyItemId[0], embyItemId[1]) + elif(messageType != None and messageType == "LibraryChanged"): + foldersAddedTo = data.get("FoldersAddedTo") + foldersRemovedFrom = data.get("FoldersRemovedFrom") + + # doing items removed + itemsRemoved = data.get("ItemsRemoved") + self.logMsg("Message : Doing LibraryChanged : Items Removed : " + str(itemsRemoved), 0) + + # doing adds and updates + itemsAdded = data.get("ItemsAdded") + self.logMsg("Message : Doing LibraryChanged : Items Added : " + str(itemsAdded), 0) + itemsUpdated = data.get("ItemsUpdated") + self.logMsg("Message : Doing LibraryChanged : Items Updated : " + str(itemsUpdated), 0) + itemsToUpdate = itemsAdded + itemsUpdated + if(len(itemsToUpdate) > 0): + self.logMsg("Message : Doing LibraryChanged : Processing Added and Updated : " + str(itemsToUpdate), 0) + LibrarySync().MoviesSync(fullsync = False, installFirstRun = False, itemList = itemsToUpdate) + LibrarySync().TvShowsSync(fullsync = False, installFirstRun = False, itemList = itemsToUpdate) + def on_error(self, ws, error): self.logMsg("Error : " + str(error)) #raise diff --git a/service.py b/service.py index 2fe56cd0..248a6e46 100644 --- a/service.py +++ b/service.py @@ -39,8 +39,8 @@ class Service(): player = Player() lastProgressUpdate = datetime.today() - interval_FullSync = 120 - interval_IncrementalSync = 30 + interval_FullSync = 600 + interval_IncrementalSync = 300 cur_seconds_fullsync = interval_FullSync cur_seconds_incrsync = interval_IncrementalSync