diff --git a/default.py b/default.py index aa042b6c..695c6d63 100644 --- a/default.py +++ b/default.py @@ -67,7 +67,7 @@ class Main(object): if mode == 'settings': xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)') - elif mode in ('manualsync', 'fastsync', 'repair'): + elif mode in ('manualsync', 'fastsync', 'repair', 'refreshboxsets'): self._library_sync(mode) elif mode == 'texturecache': @@ -76,6 +76,10 @@ class Main(object): else: entrypoint.doMainListing() + try: + xbmcplugin.endOfDirectory(int(sys.argv[1])) + except Exception: pass + @classmethod def _modes(cls, mode, params): import utils @@ -153,6 +157,8 @@ class Main(object): librarysync.ManualSync().sync() elif mode == 'fastsync': library_sync.startSync() + elif mode == 'refreshboxsets': + librarysync.ManualSync().sync('boxsets') else: library_sync.fullSync(repair=True) else: diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index 4ab2fe0b..5510dfaf 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -356,4 +356,5 @@ <string id="33095">Failed to retrieve latest updates using fast sync, using full sync.</string> <string id="33096">Limit video resolution to screen resolution</string> <string id="33097">Important, cleanonupdate was removed in your advanced settings to prevent conflict with Emby for Kodi. Kodi will restart now.</string> + <string id="33098">Refresh boxsets</string> </strings> \ No newline at end of file diff --git a/resources/lib/entrypoint.py b/resources/lib/entrypoint.py index 5f8e5ee8..3675f718 100644 --- a/resources/lib/entrypoint.py +++ b/resources/lib/entrypoint.py @@ -111,6 +111,7 @@ def doMainListing(): addDirectoryItem(lang(33053), "plugin://plugin.video.emby/?mode=settings") addDirectoryItem(lang(33054), "plugin://plugin.video.emby/?mode=adduser") addDirectoryItem(lang(33055), "plugin://plugin.video.emby/?mode=refreshplaylist") + addDirectoryItem(lang(33098), "plugin://plugin.video.emby/?mode=refreshboxsets") addDirectoryItem(lang(33056), "plugin://plugin.video.emby/?mode=manualsync") addDirectoryItem(lang(33057), "plugin://plugin.video.emby/?mode=repair") addDirectoryItem(lang(33058), "plugin://plugin.video.emby/?mode=reset") @@ -1215,4 +1216,4 @@ def getExtraFanArt(embyId,embyPath): log.error("Error getting extrafanart: %s" % e) # Always do endofdirectory to prevent errors in the logs - xbmcplugin.endOfDirectory(int(sys.argv[1])) \ No newline at end of file + xbmcplugin.endOfDirectory(int(sys.argv[1])) diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index 97470035..8f6d92ff 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -288,6 +288,7 @@ class LibrarySync(threading.Thread): process = { 'movies': self.movies, + 'boxsets': self.boxsets, 'musicvideos': self.musicvideos, 'tvshows': self.tvshows } @@ -404,15 +405,19 @@ class LibrarySync(threading.Thread): movies.add_all("Movie", all_movies, view) log.debug("Movies finished.") + return True + + def boxsets(self, embycursor, kodicursor, pdialog): + + movies = Movies(embycursor, kodicursor, pdialog) - ##### PROCESS BOXSETS ##### if pdialog: pdialog.update(heading=lang(29999), message=lang(33018)) boxsets = self.emby.getBoxset(dialog=pdialog) movies.add_all("BoxSet", boxsets) - log.debug("Boxsets finished.") + log.debug("Boxsets finished.") return True def musicvideos(self, embycursor, kodicursor, pdialog): @@ -775,12 +780,35 @@ class ManualSync(LibrarySync): def __init__(self): LibrarySync.__init__(self) - def sync(self): - return self.fullSync(manualrun=True) + def sync(self, mediatype=None): + + if mediatype in ('movies', 'boxsets', 'musicvideos', 'tvshows'): + with database.DatabaseConn('emby') as cursor_emby: + with database.DatabaseConn('video') as cursor_video: + pDialog = self.progressDialog("Manual Sync: %s" % mediatype) + if mediatype == 'movies': + return self.movies(cursor_emby, cursor_video, pDialog) + elif mediatype == "boxsets": + return self.boxsets(cursor_emby, cursor_video, pDialog) + elif mediatype =='musicvideos': + return self.musicvideos(cursor_emby, cursor_video, pDialog) + elif mediatype == 'tvshows': + return self.tvshows(cursor_emby, cursor_video, pDialog) + + elif mediatype == 'music': + with database.DatabaseConn('emby') as cursor_emby: + with database.DatabaseConn('music') as cursor_music: + pDialog = self.progressDialog("Manual Sync: %s" % mediatype) + return self.music(cursor_emby, cursor_music, pDialog) + else: + return self.fullSync(manualrun=True) def movies(self, embycursor, kodicursor, pdialog): return Movies(embycursor, kodicursor, pdialog).compare_all() + def boxsets(self, embycursor, kodicursor, pdialog): + return Movies(embycursor, kodicursor, pdialog).force_refresh_boxsets() + def musicvideos(self, embycursor, kodicursor, pdialog): return MusicVideos(embycursor, kodicursor, pdialog).compare_all() diff --git a/resources/lib/objects/movies.py b/resources/lib/objects/movies.py index 3be163f0..a469a103 100644 --- a/resources/lib/objects/movies.py +++ b/resources/lib/objects/movies.py @@ -54,6 +54,17 @@ class Movies(Items): return actions.get(action) + def force_refresh_boxsets(self): + + if self.pdialog: + self.pdialog.update(heading=lang(29999), message=lang(33018)) + + boxsets = self.emby.getBoxset(dialog=self.pdialog) + self.add_all("BoxSet", boxsets) + + log.debug("Boxsets finished.") + return True + def compare_all(self): # Pull the list of movies and boxsets in Kodi views = self.emby_db.getView_byType('movies')