def __syncShowsRatings(self, traktShows, kodiShows, fromPercent, toPercent): if kodiUtilities.getSettingAsBool('trakt_sync_ratings') and traktShows and not self.sync.IsCanceled(): updateKodiTraktShows = copy.deepcopy(traktShows) updateKodiKodiShows = copy.deepcopy(kodiShows) traktShowsToUpdate = utilities.compareShows( updateKodiKodiShows, updateKodiTraktShows, kodiUtilities.getSettingAsBool("scrobble_fallback"), rating=True) if len(traktShowsToUpdate['shows']) == 0: self.sync.UpdateProgress( toPercent, line1='', line2=kodiUtilities.getString(32181)) logger.debug( "[Episodes Sync] Trakt show ratings are up to date.") else: logger.debug("[Episodes Sync] %i show(s) will have show ratings added on Trakt" % len( traktShowsToUpdate['shows'])) self.sync.UpdateProgress(fromPercent, line1='', line2=kodiUtilities.getString( 32182) % len(traktShowsToUpdate['shows'])) self.sync.traktapi.addRating(traktShowsToUpdate) # needs to be restricted, because we can't add a rating to an episode which is not in our Kodi collection kodiShowsUpdate = utilities.compareShows(updateKodiTraktShows, updateKodiKodiShows, kodiUtilities.getSettingAsBool( "scrobble_fallback"), rating=True, restrict=True) if len(kodiShowsUpdate['shows']) == 0: self.sync.UpdateProgress( toPercent, line1='', line2=kodiUtilities.getString(32176)) logger.debug( "[Episodes Sync] Kodi show ratings are up to date.") else: logger.debug("[Episodes Sync] %i show(s) will have show ratings added in Kodi" % len( kodiShowsUpdate['shows'])) shows = [] for show in kodiShowsUpdate['shows']: shows.append( {'tvshowid': show['tvshowid'], 'rating': show['rating']}) # split episode list into chunks of 50 chunksize = 50 chunked_episodes = utilities.chunks([{"jsonrpc": "2.0", "id": i, "method": "VideoLibrary.SetTVShowDetails", "params": {"tvshowid": shows[i]['tvshowid'], "userrating": shows[i]['rating']}} for i in range(len(shows))], chunksize) i = 0 x = float(len(shows)) for chunk in chunked_episodes: if self.sync.IsCanceled(): return i += 1 y = ((i / x) * (toPercent-fromPercent)) + fromPercent self.sync.UpdateProgress(int(y), line1='', line2=kodiUtilities.getString( 32177) % ((i) * chunksize if (i) * chunksize < x else x, x)) kodiUtilities.kodiJsonRequest(chunk) self.sync.UpdateProgress( toPercent, line2=kodiUtilities.getString(32178) % len(shows))
def test_compareShows_no_rating(): data1 = load_params_from_json( 'tests/fixtures/compare_shows_local_batman.json') data2 = load_params_from_json( 'tests/fixtures/compare_shows_remote_batman.json') assert utilities.compareShows(data1, data2, rating=True) == {"shows": []}
def __syncShowsRatings(self, traktShows, kodiShows, fromPercent, toPercent): if kodiUtilities.getSettingAsBool('trakt_sync_ratings') and traktShows and not self.sync.IsCanceled(): updateKodiTraktShows = copy.deepcopy(traktShows) updateKodiKodiShows = copy.deepcopy(kodiShows) traktShowsToUpdate = utilities.compareShows(updateKodiKodiShows, updateKodiTraktShows, kodiUtilities.getSettingAsBool("scrobble_fallback"), rating=True) if len(traktShowsToUpdate['shows']) == 0: self.sync.UpdateProgress(toPercent, line1='', line2=kodiUtilities.getString(32181)) logger.debug("[Episodes Sync] Trakt show ratings are up to date.") else: logger.debug("[Episodes Sync] %i show(s) will have show ratings added on Trakt" % len(traktShowsToUpdate['shows'])) self.sync.UpdateProgress(fromPercent, line1='', line2=kodiUtilities.getString(32182) % len(traktShowsToUpdate['shows'])) self.sync.traktapi.addRating(traktShowsToUpdate) # needs to be restricted, because we can't add a rating to an episode which is not in our Kodi collection kodiShowsUpdate = utilities.compareShows(updateKodiTraktShows, updateKodiKodiShows, kodiUtilities.getSettingAsBool("scrobble_fallback"), rating=True, restrict=True) if len(kodiShowsUpdate['shows']) == 0: self.sync.UpdateProgress(toPercent, line1='', line2=kodiUtilities.getString(32176)) logger.debug("[Episodes Sync] Kodi show ratings are up to date.") else: logger.debug("[Episodes Sync] %i show(s) will have show ratings added in Kodi" % len(kodiShowsUpdate['shows'])) shows = [] for show in kodiShowsUpdate['shows']: shows.append({'tvshowid': show['tvshowid'], 'rating': show['rating']}) # split episode list into chunks of 50 chunksize = 50 chunked_episodes = utilities.chunks([{"jsonrpc": "2.0", "id": i, "method": "VideoLibrary.SetTVShowDetails", "params": {"tvshowid": shows[i]['tvshowid'], "userrating": shows[i]['rating']}} for i in range(len(shows))], chunksize) i = 0 x = float(len(shows)) for chunk in chunked_episodes: if self.sync.IsCanceled(): return i += 1 y = ((i / x) * (toPercent-fromPercent)) + fromPercent self.sync.UpdateProgress(int(y), line1='', line2=kodiUtilities.getString(32177) % ((i) * chunksize if (i) * chunksize < x else x, x)) kodiUtilities.kodiJsonRequest(chunk) self.sync.UpdateProgress(toPercent, line2=kodiUtilities.getString(32178) % len(shows))
def test_compareShows_not_matchByTitleAndYear_rating_changed(): data1 = load_params_from_json( 'tests/fixtures/compare_shows_local_batman_rating.json') data2 = load_params_from_json( 'tests/fixtures/compare_shows_remote_batman.json') fixture = load_params_from_json( 'tests/fixtures/compare_shows_compared_batman.json') assert utilities.compareShows(data1, data2, False, rating=True) == fixture