Implement LibraryChanged WebSocket event

This commit is contained in:
shaun 2015-04-03 13:12:09 +11:00
parent e9646407a0
commit c8e1d8ae54
4 changed files with 42 additions and 15 deletions

View file

@ -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))

View file

@ -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)

View file

@ -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

View file

@ -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