diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index aa125c48..b94f8bb8 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -58,6 +58,8 @@ class LibrarySync(threading.Thread): self.emby = embyserver.Read_EmbyServer() self.vnodes = videonodes.VideoNodes() + self.kodi_version = int(xbmc.getInfoLabel('System.BuildVersion')[:2]) + threading.Thread.__init__(self) @@ -241,6 +243,31 @@ class LibrarySync(threading.Thread): message = "Manual sync" elif repair: message = "Repair sync" + repair_list = [] + choices = ['all', 'movies', 'musicvideos', 'tvshows'] + if music_enabled: + choices.append('music') + + if self.kodi_version > 15: + # Jarvis or higher + types = xbmcgui.Dialog().multiselect("Select content type to repair", choices) + if types is None: + pass + elif 0 in types: # all + choices.pop(0) + repair_list.extend(choices) + else: + for index in types: + repair_list.append(choices[index]) + else: + resp = xbmcgui.Dialog().select("Select content type to repair", choices) + if resp == 0: # all + choices.pop(resp) + repair_list.extend(choices) + else: + repair_list.append(choices[resp]) + + log.info("Repair queued for: %s", repair_list) else: message = "Initial sync" window('emby_initialScan', value="true") @@ -260,6 +287,10 @@ class LibrarySync(threading.Thread): 'tvshows': self.tvshows } for itemtype in process: + + if repair and itemtype not in repair_list: + continue + startTime = datetime.now() completed = process[itemtype](embycursor, kodicursor, pDialog) if not completed: @@ -285,28 +316,31 @@ class LibrarySync(threading.Thread): # sync music if music_enabled: - musicconn = utils.kodiSQL('music') - musiccursor = musicconn.cursor() - - startTime = datetime.now() - completed = self.music(embycursor, musiccursor, pDialog) - if not completed: - xbmc.executebuiltin('InhibitIdleShutdown(false)') - utils.setScreensaver(value=screensaver) - window('emby_dbScan', clear=True) - if pDialog: - pDialog.close() - - embycursor.close() - musiccursor.close() - return False + if repair and 'music' not in repair_list: + pass else: - musicconn.commit() - embyconn.commit() - elapsedTime = datetime.now() - startTime - log.info("SyncDatabase (finished music in: %s)" - % (str(elapsedTime).split('.')[0])) - musiccursor.close() + musicconn = utils.kodiSQL('music') + musiccursor = musicconn.cursor() + + startTime = datetime.now() + completed = self.music(embycursor, musiccursor, pDialog) + if not completed: + xbmc.executebuiltin('InhibitIdleShutdown(false)') + utils.setScreensaver(value=screensaver) + window('emby_dbScan', clear=True) + if pDialog: + pDialog.close() + + embycursor.close() + musiccursor.close() + return False + else: + musicconn.commit() + embyconn.commit() + elapsedTime = datetime.now() - startTime + log.info("SyncDatabase (finished music in: %s)" + % (str(elapsedTime).split('.')[0])) + musiccursor.close() if pDialog: pDialog.close()