diff --git a/README.md b/README.md index 82916dc..3994b4c 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,29 @@ -script.tvtime -================= +# Notice ⚠️ +TV Time has officially stopped its API and this addon for Kodi is based on it. Therefore this addon is not work anymore until further notice. +Please see #5 for more details and alternatives + +# script.tvtime Kodi plugin for [TV Time](http://www.tvtime.com) This plugin will set TV shows episodes you've seen as watched on TV Time. It will also add the new TV show to your account if it was not already there. -install -======= - -This plugin has been submitted to the [official Kodi repository](http://addons.xbmc.org/show/script.tvtime/). -To install it, just follow this [HOW-TO](http://kodi.wiki/view/HOW-TO:Install_add-ons). -After that, launch the add-on to login. - -build -===== - -If you want to build it manually, here is a simple script to do so: -```sh -#!/bin/bash - -dest=script.tvtime -version=$(grep -E "^\s+version" addon.xml | cut -f2 -d'"') +This fork has been created to be able to apply some fixes on the initial repository (hibernating/dead) but it will never be submitted to the official Kodi repository. +Please follow Build or Download steps below to install this version. -if [ -d $dest ]; then - rm -r $dest -fi +## Build -mkdir $dest -cp addon.xml $dest/ -cp *.txt $dest/ -cp icon.png $dest/ -cp *.py $dest/ -cp -r resources $dest/ +If you want to build it manually, please follow the steps below: -if [ -f $dest-$version.zip ]; then - rm $dest-$version.zip -fi +1. Clone this repository `sudo git clone https://github.com/the-lazy-fox/script.tvtime.git` +2. Enter in script.tvtime `cd script.tvtime` +3. Make the compile script executable `sudo chmod +x compile.sh` +4. Launch the compile script `./compile.sh` -zip -r $dest-$version.zip $dest -rm -r $dest -```` -It will create a zip file that you can install directly within Kodi. -Using the GUI of Kodi, choose to install your plugin as a zip file, find your zip file and it's done ! +It will create a zip file which can be installed directly within Kodi by following this [HOW-TO](https://kodi.wiki/view/Add-on_manager#How_to_install_from_a_ZIP_file). -download -======== +## Download -If you want to download the release package because you can't or don't want to build it, you can do it on this link: -http://addons.xbmc.org/show/script.tvtime/ -or -[download](here) the latests version. +You can down the [last release](https://github.com/alxlaxv/script.tvtime/releases/latest) directly. +It will download a zip file which can be installed directly within Kodi by following this [HOW-TO](https://kodi.wiki/view/Add-on_manager#How_to_install_from_a_ZIP_file). diff --git a/addon.xml b/addon.xml index 9088bfb..951d149 100644 --- a/addon.xml +++ b/addon.xml @@ -1,10 +1,10 @@ + version="2.0.2" + provider-name="the-lazy-fox"> - + executable @@ -19,9 +19,9 @@ en fr it GNU GENERAL PUBLIC LICENSE. Version 2, June 1991 http://forum.kodi.tv/showthread.php?tid=199604 - https://github.com/cxii-dev/script.tvtime - https://github.com/cxii-dev/script.tvtime.git - cxii-dev[AT]users[DOT]noreply[DOT]github[DOT]com + https://github.com/alxlaxv/script.tvtime + https://github.com/alxlaxv/script.tvtime.git + alxlaxv[AT]users[DOT]noreply[DOT]github[DOT]com diff --git a/default.py b/default.py index e05523a..c02cbfd 100644 --- a/default.py +++ b/default.py @@ -19,11 +19,12 @@ __version__ = __addon__.getAddonInfo('version') __language__ = __addon__.getLocalizedString __resource_path__ = os.path.join(__cwd__, 'resources', 'lib') -__resource__ = xbmc.translatePath(__resource_path__).decode('utf-8') +__resource__ = xbmcvfs.translatePath(__resource_path__) __notifications__ = __addon__.getSetting('notifications') from resources.lib.tvtime import FindEpisode from resources.lib.tvtime import MarkAsWatched +from resources.lib.tvtime import Follow from resources.lib.tvtime import MarkAsUnWatched from resources.lib.tvtime import GetUserInformations from resources.lib.tvtime import SaveProgress @@ -39,7 +40,8 @@ def __init__( self, *args, **kwargs ): self._playback_lock = threading.Event() def _trackPosition(self): - while self._playback_lock.isSet() and not xbmc.abortRequested: + monit = xbmc.Monitor() + while self._playback_lock.isSet() and not monit.abortRequested: try: self._last_pos = player.getTime() except: @@ -71,214 +73,289 @@ def onSettingsChanged( self ): def onNotification(self, sender, method, data): log('onNotification') log('method=%s' % method) + log('sender=%s' % sender) + log('data=%s' % data) if (method == 'Player.OnPlay'): - self._setUp() - self._total_time = player.getTotalTime() - self._tracker.start() - log('Player.OnPlay') - if player.http == 'true' and player.getPlayingFile()[:4] == 'http' and re.search(r'[sS][0-9]*[eE][0-9]*', os.path.basename(player.getPlayingFile()), flags=0) : - player.http_playing = True - player.filename = os.path.basename(player.getPlayingFile()) - self.startcut = player.filename.find("%5B") - self.endcut = player.filename.find("%5D") - self.tocut = player.filename[self.startcut:self.endcut] - player.filename = player.filename.replace(self.tocut, "") - player.filename = player.filename.replace("%5B", "") - player.filename = player.filename.replace("%5D", "") - player.filename = player.filename.replace("%20", ".") + self._player_onplay(data) + if (method == 'Player.OnStop'): + self._player_onstop(data) + if (method == 'VideoLibrary.OnUpdate'): + self._video_onupdate(data) + + def _player_onplay(self, data): + self._setUp() + self._total_time = player.getTotalTime() + self._tracker.start() + log('Player.OnPlay') + if player.http == 'true' and player.getPlayingFile()[:4] == 'http' and re.search(r'[sS][0-9]*[eE][0-9]*', os.path.basename(player.getPlayingFile()), flags=0) : + player.http_playing = True + player.filename = os.path.basename(player.getPlayingFile()) + log('rawname=%s' % player.filename) + startcut = player.filename.find("%5B") + endcut = player.filename.find("%5D") + tocut = player.filename[startcut:endcut] + player.filename = player.filename.replace(tocut, "") + player.filename = player.filename.replace("%5B", "") + player.filename = player.filename.replace("%5D", "") + player.filename = player.filename.replace("%20", ".") + log('tvshowtitle=%s' % player.filename) + + player.episode = FindEpisode(player.token, 0, player.filename) + log('episode.is_found=%s' % player.episode.is_found) + + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + + if player.episode.is_found: + if player.notif_scrobbling == 'false': + return + notif('%s %s %sx%s' % (__language__(32904), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) + else: + notif(__language__(32905), time=2500) + else: + player.http_playing = False + response = json.loads(data) + log('%s' % response) + if response.get('item') is None or response.get('item').get('type') != 'episode': + return + + xbmc_id = response.get('item').get('id') + item = self.getEpisodeTVDB(xbmc_id) + log('showtitle=%s' % item['showtitle']) + log('season=%s' % item['season']) + log('episode=%s' % item['episode']) + log('episode_id=%s' % item['episode_id']) + if len(item['showtitle']) > 0 and item['season'] > 0 and item['episode'] > 0 and len(str(item['episode_id'])) > 0: + player.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) log('tvshowtitle=%s' % player.filename) - player.episode = FindEpisode(player.token, 0, player.filename) + + player.episode = FindEpisode(player.token, item['episode_id'], player.filename) log('episode.is_found=%s' % player.episode.is_found) + + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + if player.episode.is_found: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - if player.notif_scrobbling == 'false': - return - notif('%s %s %sx%s' % (__language__(32904), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) + notif('%s %s %sx%s' % (__language__(32904), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) else: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - notif(__language__(32905), time=2500) + notif(__language__(32905), time=2500) else: - player.http_playing = False - response = json.loads(data) - log('%s' % response) - if response.get('item').get('type') == 'episode': - xbmc_id = response.get('item').get('id') - item = self.getEpisodeTVDB(xbmc_id) - log('showtitle=%s' % item['showtitle']) - log('season=%s' % item['season']) - log('episode=%s' % item['episode']) - log('episode_id=%s' % item['episode_id']) - if len(item['showtitle']) > 0 and item['season'] > 0 and item['episode'] > 0 and item['episode_id'] > 0: - player.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) - log('tvshowtitle=%s' % player.filename) - player.episode = FindEpisode(player.token, item['episode_id']) - log('episode.is_found=%s' % player.episode.is_found) - if player.episode.is_found: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - if player.notif_scrobbling == 'false': - return - notif('%s %s %sx%s' % (__language__(32904), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) - else: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - notif(__language__(32905), time=2500) - else: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - notif(__language__(32905), time=2500) - if (method == 'Player.OnStop'): - self._tearDown() - actual_percent = (self._last_pos/self._total_time)*100 - log('last_pos / total_time : %s / %s = %s %%' % (self._last_pos, self._total_time, actual_percent)) - log('Player.OnStop') - if player.http == 'true' and player.http_playing == True : - if player.progress == 'true': - player.episode = FindEpisode(player.token, 0, player.filename) - log('episode.is_found=%s' % player.episode.is_found) - if player.episode.is_found: - log('progress=%s' % self._last_pos) - self.progress = SaveProgress(player.token, player.episode.id, self._last_pos) - log('progress.is_set:=%s' % self.progress.is_set) - if actual_percent > 90: - log('MarkAsWatched(*, %s, %s, %s)' % (player.filename, player.facebook, player.twitter)) - checkin = MarkAsWatched(player.token, player.episode.id, player.facebook, player.twitter) - log('checkin.is_marked:=%s' % checkin.is_marked) - if checkin.is_marked: - if player.emotion == 'true': - self.emotion = xbmcgui.Dialog().select('%s: %s %sx%s' % (__language__(33909), player.episode.showname, player.episode.season_number, player.episode.number), [__language__(35311), __language__(35312), __language__(35313), __language__(35314), __language__(35316), __language__(35317)]) - if self.emotion < 0: return - if self.emotion == 0: - self.emotion = 1 - elif self.emotion == 1: - self.emotion = 2 - elif self.emotion == 2: - self.emotion = 3 - elif self.emotion == 3: - self.emotion = 4 - elif self.emotion == 4: - self.emotion = 6 - elif self.emotion == 5: - self.emotion = 7 - SetEmotion(player.token, player.episode.id, self.emotion) - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - if player.notif_scrobbling == 'false': - return - notif('%s %s %sx%s' % (__language__(32906), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) - else: - response = json.loads(data) - log('%s' % response) - if player.progress == 'true': - if response.get('item').get('type') == 'episode': - xbmc_id = response.get('item').get('id') - item = self.getEpisodeTVDB(xbmc_id) - log('showtitle=%s' % item['showtitle']) - log('season=%s' % item['season']) - log('episode=%s' % item['episode']) - log('episode_id=%s' % item['episode_id']) - if len(item['showtitle']) > 0 and item['season'] > 0 and item['episode'] > 0 and item['episode_id'] > 0: - player.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) - log('tvshowtitle=%s' % player.filename) - log('progress=%s' % self._last_pos) - self.progress = SaveProgress(player.token, item['episode_id'], self._last_pos) - log('progress.is_set:=%s' % self.progress.is_set) - if (method == 'VideoLibrary.OnUpdate'): - log('VideoLibrary.OnUpdate') - response = json.loads(data) + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + + notif(__language__(32905), time=2500) + + + def _player_onstop(self, data): + self._tearDown() + actual_percent = (self._last_pos/self._total_time)*100 + log('last_pos / total_time : %s / %s = %s %%' % (self._last_pos, self._total_time, actual_percent)) + log('Player.OnStop') + if player.http == 'true' and player.http_playing == True: + if player.progress != 'true': + return + + player.episode = FindEpisode(player.token, 0, player.filename) + log('episode.is_found=%s' % player.episode.is_found) + + if not player.episode.is_found: + return + + log('progress=%s' % self._last_pos) + progress = SaveProgress(player.token, player.episode.id, self._last_pos) + log('progress.is_set:=%s' % progress.is_set) + + if actual_percent <= 90: + return + + log('MarkAsWatched(*, %s, %s, %s, %s)' % (player.filename, player.facebook, player.twitter, player.autofollow)) + checkin = MarkAsWatched(player.token, player.episode.id, player.facebook, player.twitter, player.autofollow) + log('checkin.is_marked:=%s' % checkin.is_marked) + if not checkin.is_marked: + return + + # this is just temporary fix because TVTime's Checkin API is not working correctly + # auto_follow parameter is not working, if tvtime fixes this issue we can remove this piece of code + try: + if player.autofollow: + log("following tvshow manually=%s" % player.episode.showid) + Follow(player.token, player.episode.showid) + except: + pass + + if player.emotion == 'true': + msg = '%s: %s %sx%s' % (__language__(33909), player.episode.showname, player.episode.season_number, player.episode.number) + emotion = xbmcgui.Dialog().select(msg, [__language__(35311), __language__(35312), __language__(35313), __language__(35314), __language__(35316), __language__(35317)]) + if emotion < 0: return + if emotion == 0: + emotion = 1 + elif emotion == 1: + emotion = 2 + elif emotion == 2: + emotion = 3 + elif emotion == 3: + emotion = 4 + elif emotion == 4: + emotion = 6 + elif emotion == 5: + emotion = 7 + SetEmotion(player.token, player.episode.id, emotion) + + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + notif('%s %s %sx%s' % (__language__(32906), player.episode.showname, player.episode.season_number, player.episode.number), time=2500) + else: + response = json.loads(data) log('%s' % response) - if response.get('item').get('type') == 'episode': - xbmc_id = response.get('item').get('id') - playcount = response.get('playcount') - log('playcount=%s' % playcount) - item = self.getEpisodeTVDB(xbmc_id) - log('showtitle=%s' % item['showtitle']) - log('season=%s' % item['season']) - log('episode=%s' % item['episode']) - log('episode_id=%s' % item['episode_id']) - log('playcount=%s' % playcount) - if len(item['showtitle']) > 0 and item['season'] > 0 and item['episode'] > 0 and item['episode_id'] > 0: - self.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) - log('tvshowtitle=%s' % self.filename) - self.episode = FindEpisode(player.token, item['episode_id']) - log('episode.is_found=%s' % self.episode.is_found) - if self.episode.is_found: - if playcount is 1: - log('MarkAsWatched(*, %s, %s, %s)' % (self.filename, player.facebook, player.twitter)) - checkin = MarkAsWatched(player.token, item['episode_id'], player.facebook, player.twitter) - log('checkin.is_marked:=%s' % checkin.is_marked) - if checkin.is_marked: - if player.emotion == 'true': - self.emotion = xbmcgui.Dialog().select('%s: %s' % (__language__(33909), self.filename), [__language__(35311), __language__(35312), __language__(35313), __language__(35314), __language__(35316), __language__(35317)]) - if self.emotion < 0: return - if self.emotion == 0: - self.emotion = 1 - elif self.emotion == 1: - self.emotion = 2 - elif self.emotion == 2: - self.emotion = 3 - elif self.emotion == 3: - self.emotion = 4 - elif self.emotion == 4: - self.emotion = 6 - elif self.emotion == 5: - self.emotion = 7 - SetEmotion(player.token, item['episode_id'], self.emotion) - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - if player.notif_scrobbling == 'false': - return - notif('%s %s %sx%s' % (__language__(32906), self.episode.showname, self.episode.season_number, self.episode.number), time=2500) - else: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - notif(__language__(32907), time=2500) - if playcount is 0: - log('MarkAsUnWatched(*, %s)' % (self.filename)) - checkin = MarkAsUnWatched(player.token, item['episode_id']) - log('checkin.is_unmarked:=%s' % checkin.is_unmarked) - if checkin.is_unmarked: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - if player.notif_scrobbling == 'false': - return - notif('%s %s %sx%s' % (__language__(32908), self.episode.showname, self.episode.season_number, self.episode.number), time=2500) - else: - if player.notifications == 'true': - if player.notif_during_playback == 'false' and player.isPlaying() == 1: - return - notif(__language__(32907), time=2500) + + if player.progress != 'true': + return + + if response.get('item').get('type') != 'episode': + return + + xbmc_id = response.get('item').get('id') + item = self.getEpisodeTVDB(xbmc_id) + log('showtitle=%s' % item['showtitle']) + log('season=%s' % item['season']) + log('episode=%s' % item['episode']) + log('episode_id=%s' % item['episode_id']) + + if len(item['showtitle']) > 0 and item['season'] > 0 and item['episode'] > 0 and len(str(item['episode_id'])) > 0: + player.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) + log('tvshowtitle=%s' % player.filename) + + log('progress=%s' % self._last_pos) + progress = SaveProgress(player.token, item['episode_id'], self._last_pos) + log('progress.is_set:=%s' % progress.is_set) + + def _video_onupdate(self, data): + log('VideoLibrary.OnUpdate') + response = json.loads(data) + log('%s' % response) + if response.get('item') is None or response.get('item').get('type') != 'episode': + return + + xbmc_id = response.get('item').get('id') + playcount = response.get('playcount') + log('playcount=%s' % playcount) + + item = self.getEpisodeTVDB(xbmc_id) + log('showtitle=%s' % item['showtitle']) + log('season=%s' % item['season']) + log('episode=%s' % item['episode']) + log('episode_id=%s' % item['episode_id']) + log('playcount=%s' % playcount) + + if item.get('showtitle') is None or item.get('season') is None or item.get('episode') is None or item.get('episode_id') is None: + return + + self.filename = '%s.S%.2dE%.2d' % (formatName(item['showtitle']), float(item['season']), float(item['episode'])) + log('tvshowtitle=%s' % self.filename) + self.episode = FindEpisode(player.token, item['episode_id'], self.filename) + log('episode.is_found=%s' % self.episode.is_found) + + if not self.episode.is_found: + return + + if playcount == 1: + log('MarkAsWatched(*, %s, %s, %s, %s)' % (self.filename, player.facebook, player.twitter, player.autofollow)) + checkin = MarkAsWatched(player.token, self.episode.id, player.facebook, player.twitter, player.autofollow) + log('checkin.is_marked:=%s' % checkin.is_marked) + + # this is just temporary fix because TVTime's Checkin API is not working correctly + # auto_follow parameter is not working, if tvtime fixes this issue we can remove this piece of code + try: + if player.autofollow: + log("following tvshow manually=%s" % self.episode.showid) + Follow(player.token, self.episode.showid) + except: + pass + + if checkin.is_marked: + if player.emotion == 'true': + emotion = xbmcgui.Dialog().select('%s: %s' % (__language__(33909), self.filename), [__language__(35311), __language__(35312), __language__(35313), __language__(35314), __language__(35316), __language__(35317)]) + if emotion < 0: return + if emotion == 0: + emotion = 1 + elif emotion == 1: + emotion = 2 + elif emotion == 2: + emotion = 3 + elif emotion == 3: + emotion = 4 + elif emotion == 4: + emotion = 6 + elif emotion == 5: + emotion = 7 + SetEmotion(player.token, self.episode.id, emotion) + + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + if player.notif_scrobbling == 'false': + return + notif('%s %s %sx%s' % (__language__(32906), self.episode.showname, self.episode.season_number, self.episode.number), time=2500) + else: + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + notif(__language__(32907), time=2500) + elif playcount == 0: + log('MarkAsUnWatched(*, %s)' % (self.filename)) + checkin = MarkAsUnWatched(player.token, self.episode.id) + log('checkin.is_unmarked:=%s' % checkin.is_unmarked) + + if player.notifications != 'true': + return + if player.notif_during_playback == 'false' and player.isPlaying() == 1: + return + + if checkin.is_unmarked: + if player.notif_scrobbling == 'false': + return + notif('%s %s %sx%s' % (__language__(32908), self.episode.showname, self.episode.season_number, self.episode.number), time=2500) + else: + notif(__language__(32907), time=2500) def getEpisodeTVDB(self, xbmc_id): rpccmd = {'jsonrpc': '2.0', 'method': 'VideoLibrary.GetEpisodeDetails', 'params': {"episodeid": int(xbmc_id), 'properties': ['season', 'episode', 'tvshowid', 'showtitle', 'uniqueid']}, 'id': 1} rpccmd = json.dumps(rpccmd) result = xbmc.executeJSONRPC(rpccmd) - result = json.loads(result) - log('result=%s' % result) - log('episode_id=%s' % result['result']['episodedetails']['uniqueid']['unknown']) - + result = json.loads(result) + log('result=%s' % result) + + if 'unknown' in result['result']['episodedetails']['uniqueid']: + episode_id = result['result']['episodedetails']['uniqueid']['unknown'] + elif 'tvdb' in result['result']['episodedetails']['uniqueid']: + episode_id = result['result']['episodedetails']['uniqueid']['tvdb'] + elif 'tmdb' in result['result']['episodedetails']['uniqueid']: + episode_id = result['result']['episodedetails']['uniqueid']['tmdb'] + else: + return {} + log('episode_id=%s' % episode_id) + try: item = {} item['season'] = result['result']['episodedetails']['season'] item['tvshowid'] = result['result']['episodedetails']['tvshowid'] item['episode'] = result['result']['episodedetails']['episode'] item['showtitle'] = result['result']['episodedetails']['showtitle'] - item['episode_id'] = result['result']['episodedetails']['uniqueid']['unknown'] + item['episode_id'] = episode_id return item except: - return False - + return {} + def getAllEpisodes(self, xbmc_id): rpccmd = {'jsonrpc': '2.0', 'method': 'VideoLibrary.GetEpisodes', 'params': {"tvshowid": int(xbmc_id), 'properties': ['season', 'episode', 'showtitle', 'playcount']}, 'id': 1} rpccmd = json.dumps(rpccmd) @@ -287,7 +364,6 @@ def getAllEpisodes(self, xbmc_id): return result class Player(xbmc.Player): - def __init__ (self): xbmc.Player.__init__(self) log('Player - init') @@ -297,13 +373,14 @@ def __init__ (self): self.welcome = __addon__.getSetting('welcome') self.notifications = __addon__.getSetting('notifications') self.notif_during_playback = __addon__.getSetting('notif_during_playback') + self.autofollow = __addon__.getSetting('autofollow') self.notif_scrobbling = __addon__.getSetting('notif_scrobbling') self.progress = __addon__.getSetting('progress') self.http = __addon__.getSetting('http') self.http_playing = False self.emotion = __addon__.getSetting('emotion') self.defaultemotion = __addon__.getSetting('defaultemotion') - if self.token is '': + if self.token == '': log(__language__(32901)) if self.notifications == 'true': notif(__language__(32901), time=2500) @@ -313,10 +390,10 @@ def __init__ (self): return self._monitor = Monitor(action = self._reset) log('Player - monitor') - + def _reset(self): self.__init__() - + def _GetUser(self): log('_GetUser') user = GetUserInformations(self.token) @@ -335,18 +412,18 @@ def formatNumber(number): if len(number) < 2: number = '0%s' % number return number - + def formatName(filename): filename = filename.strip() filename = filename.replace(' ', '.') return normalizeString(filename) - + def notif(msg, time=5000): xbmcgui.Dialog().notification(encode(__scriptname__), encode(msg), time=time, icon=__icon__) def log(msg): xbmc.log("### [%s] - %s" % (__scriptname__, encode(msg), ), - level=xbmc.LOGDEBUG) #100 #xbmc.LOGDEBUG + level=xbmc.LOGINFO) #100 #xbmc.LOGDEBUG def encode(string): result = '' @@ -357,14 +434,15 @@ def encode(string): return result def normalizeString(str): - return unicodedata.normalize('NFKD', str).encode('ascii','ignore').encode('UTF-8','replace') + return unicodedata.normalize('NFKD', str).encode('ascii','ignore').decode('UTF-8','replace') if ( __name__ == "__main__" ): player = Player() log("[%s] - Version: %s Started" % (__scriptname__, __version__)) - while not xbmc.abortRequested: - xbmc.sleep(100) + monit = xbmc.Monitor() + while not monit.abortRequested(): + if monit.waitForAbort(100): + break player._monitor = None log("sys.exit(0)") sys.exit(0) - diff --git a/program.py b/program.py index 3902afc..65c9f87 100644 --- a/program.py +++ b/program.py @@ -6,6 +6,7 @@ import sys import threading import xbmc +import xbmcvfs import xbmcgui import xbmcaddon import unicodedata @@ -32,7 +33,7 @@ __version__ = __addon__.getAddonInfo('version') __language__ = __addon__.getLocalizedString __resource_path__ = os.path.join(__cwd__, 'resources', 'lib') -__resource__ = xbmc.translatePath(__resource_path__).decode('utf-8') +__resource__ = xbmcvfs.translatePath(__resource_path__) __token__ = __addon__.getSetting('token') __facebook__ = __addon__.getSetting('facebook') @@ -42,14 +43,14 @@ def start(): menuitems = [] - if __token__ is '': + if __token__ == '': menuitems.append(__language__(33801)) else: menuitems.append(__language__(33803)) menuitems.append(__language__(33802)) startmenu = xbmcgui.Dialog().select(__scriptname__, menuitems) if startmenu < 0: return - elif startmenu == 0 and __token__ is '': + elif startmenu == 0 and __token__ == '': _login = GetCode() if _login.is_code: Authorization(_login.verification_url, _login.user_code, _login.device_code) @@ -67,7 +68,7 @@ def start(): def Authorization(verification_url, user_code, device_code): pDialog = xbmcgui.DialogProgress() - pDialog.create(__scriptname__, "%s: %s" % (__language__(33806), verification_url), "%s: %s" % (__language__(33807), user_code)) + pDialog.create(__scriptname__, "%s: %s\n%s: %s" % (__language__(33806), verification_url, __language__(33807), user_code)) for i in range(0, 100): pDialog.update(i) xbmc.sleep(5000) @@ -78,7 +79,7 @@ def Authorization(verification_url, user_code, device_code): user = GetUserInformations(_authorize.access_token) if user.is_authenticated: if __welcome__ == 'true': - xbmcgui.Dialog().ok(__scriptname__, '%s %s' % (__language__(32902), user.username), __language__(33808)) + xbmcgui.Dialog().ok(__scriptname__, '%s %s\n%s' % (__language__(32902), user.username, __language__(33808))) __addon__.setSetting('user', user.username) return pDialog.close() @@ -141,7 +142,7 @@ def scan(way): total = len(tvshowsList) for tvshowList in tvshowsList: cpt = cpt + 1 - pc = (cpt*100)/total + pc = int((cpt*100)/total) pDialog.update(pc, message=tvshowList['title']) xbmc.sleep(100) if tvshowList['seen'] == 1: @@ -164,7 +165,7 @@ def scan(way): pDialog.update(0, message=__language__(33908)) for showSeen in showsSeen: cpt = cpt + 1 - pc = (cpt*100)/total + pc = int((cpt*100)/total) tempShowsSeen.append({ 'show_id': int(showSeen['show_id']), 'season': showSeen['season'], @@ -188,7 +189,7 @@ def scan(way): pDialog.update(0, message=__language__(33908)) for showNotSeen in showsNotSeen: cpt = cpt + 1 - pc = (cpt*100)/total + pc = int((cpt*100)/total) tempShowsNotSeen.append({ 'show_id': int(showNotSeen['show_id']) }) @@ -221,7 +222,7 @@ def scan(way): for i in range(0, total): for tvshowTime in tvshowTimeList: if int(tvshowList[i]['show_id']) == int(tvshowTime['show_id']): - pDialog.update(((100/total)*(i+1)), message=tvshowTime['title']) + pDialog.update(int((100/total)*(i+1)), message=tvshowTime['title']) log('setTvshowProgress(%s, %s, %s)' % (tvshowTime['show_id'], tvshowTime['season'], tvshowTime['episode'])) tvshowProgress = setTvshowProgress(tvshowTime['show_id'], tvshowTime['season'], tvshowTime['episode']) pDialog.update(100, message=__language__(33907)) @@ -236,7 +237,7 @@ def getTvshowList(): tvshows = json.loads(result) log('tvshows=%s' % tvshows) tvshowList = [] - if tvshows.has_key('result') and tvshows['result'] != None and tvshows['result'].has_key('tvshows'): + if 'result' in tvshows and tvshows['result'] != None and 'tvshows' in tvshows['result']: tvshows = tvshows['result']['tvshows'] for tvshow in tvshows: rpccmd = {'jsonrpc': '2.0', 'method': 'VideoLibrary.GetEpisodes', 'params': {'tvshowid': tvshow['tvshowid'], 'properties': ['season', 'episode', 'playcount']}, 'id': 1} @@ -245,7 +246,7 @@ def getTvshowList(): episodes = json.loads(result) log('tvshow=%s [%s]' % (tvshow['title'], tvshow['imdbnumber'])) log('episodes[%s]=%s' % (tvshow['imdbnumber'], episodes)) - if episodes.has_key('result') and episodes['result'] != None and episodes['result'].has_key('episodes'): + if 'result' in episodes and episodes['result'] != None and 'episodes' in episodes['result']: episodes = episodes['result']['episodes'] lastEpisode = None lastSeasonNr = 0 @@ -321,7 +322,7 @@ def setTvshowProgress(show_id, last_season_seen, last_episode_seen): rpccmd = json.dumps(rpccmd) result = xbmc.executeJSONRPC(rpccmd) episodes = json.loads(result) - log('episodes=%s' % episodes) + log('episodes=%s' % episodes) if episodes['result']['limits']['total'] > 0: episodes = episodes['result']['episodes'] for episode in episodes: diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index d612b77..77fcba9 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -41,6 +41,10 @@ msgctxt "#32303" msgid "Mark the http streams" msgstr "" +msgctxt "#32304" +msgid "Auto-follow the show if not already followed" +msgstr "" + msgctxt "#33001" msgid "Notifications" msgstr "" diff --git a/resources/language/French/strings.po b/resources/language/French/strings.po index 812d687..c9ecc71 100644 --- a/resources/language/French/strings.po +++ b/resources/language/French/strings.po @@ -41,6 +41,10 @@ msgctxt "#32303" msgid "Mark the http streams" msgstr "Marquer les flux http" +msgctxt "#32304" +msgid "Auto-follow the show if not already followed" +msgstr "Suivre automatiquement le spectacle s'il n'est pas déjà suivi" + msgctxt "#33001" msgid "Notifications" msgstr "Notifications" @@ -91,7 +95,7 @@ msgstr "Bien" msgctxt "#35312" msgid "Funk" -msgstr "Fun" +msgstr "Drole" msgctxt "#35313" msgid "Wow" @@ -99,15 +103,15 @@ msgstr "Wow" msgctxt "#35314" msgid "Sad" -msgstr "triste" +msgstr "Triste" msgctxt "#35316" msgid "Soso" -msgstr "Mitigé" +msgstr "Bof" msgctxt "#35317" msgid "Bad" -msgstr "Mauvais" +msgstr "Nul" msgctxt "#32901" msgid "Please login" diff --git a/resources/language/Italian/strings.po b/resources/language/Italian/strings.po index e464264..99d5dc4 100644 --- a/resources/language/Italian/strings.po +++ b/resources/language/Italian/strings.po @@ -41,6 +41,10 @@ msgctxt "#32303" msgid "Mark the http streams" msgstr "Segna i flussi http" +msgctxt "#32304" +msgid "Auto-follow the show if not already followed" +msgstr "Segui automaticamente lo show se non è già seguito" + msgctxt "#33001" msgid "Notifications" msgstr "Notifiche" diff --git a/resources/lib/tvtime.py b/resources/lib/tvtime.py index cd902d9..5d2f74f 100644 --- a/resources/lib/tvtime.py +++ b/resources/lib/tvtime.py @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import cookielib +import http.cookiejar import re -import urllib, urllib2 +import urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse import json request_uri = "https://api.tvtime.com/v1/" @@ -19,12 +19,12 @@ def __init__(self, token, episode_id, filename=''): self.action = 'episode?access_token=%s&episode_id=%s' % (self.token, self.episode_id) - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -36,7 +36,7 @@ def __init__(self, token, episode_id, filename=''): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, None) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -45,6 +45,7 @@ def __init__(self, token, episode_id, filename=''): else: self.is_found = True self.resultdata = data['result'] + self.showid = data['episode']['show']['id'] self.showname = data['episode']['show']['name'] self.episodename = data['episode']['name'] self.season_number = data['episode']['season_number'] @@ -57,12 +58,12 @@ def __init__(self, token, show_id): self.show_id = show_id self.action = 'show?access_token=%s&show_id=%s' % (self.token, self.show_id) - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -74,7 +75,7 @@ def __init__(self, token, show_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, None) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -95,12 +96,12 @@ def __init__(self, token, page, limit): self.limit = limit self.action = 'library?access_token=%s&page=%s&limit=%s' % (self.token, self.page, self.limit) - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -112,7 +113,7 @@ def __init__(self, token, page, limit): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, None) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -129,12 +130,12 @@ def __init__(self, token, episode_id): self.episode_id = episode_id self.action = 'checkin?access_token=%s&episode_id=%s' % (self.token, self.episode_id) - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -146,7 +147,7 @@ def __init__(self, token, episode_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, None) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -157,29 +158,35 @@ def __init__(self, token, episode_id): self.is_watched = data['code'] class MarkAsWatched(object): - def __init__(self, token, episode_id, facebook=0, twitter=0): + def __init__(self, token, episode_id, facebook=0, twitter=0, autofollow=1): self.token = token self.episode_id = episode_id + self.facebook = facebook if self.facebook == True: self.facebook = 1 else: self.facebook = 0 + self.twitter = twitter if self.twitter == True: self.twitter = 1 else: self.twitter = 0 + + self.autofollow = autofollow self.action = 'checkin' - request_data = urllib.urlencode({ + + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'episode_id' : self.episode_id, 'publish_on_ticker' : self.facebook, - 'publish_on_twitter' : self.twitter - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + 'publish_on_twitter' : self.twitter, + 'auto_follow': self.autofollow + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -190,7 +197,7 @@ def __init__(self, token, episode_id, facebook=0, twitter=0): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -198,23 +205,23 @@ def __init__(self, token, episode_id, facebook=0, twitter=0): self.is_marked = False else: self.is_marked = True - + class MarkAsUnWatched(object): def __init__(self, token, episode_id): self.token = token self.episode_id = episode_id self.action = 'checkout' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'episode_id' : self.episode_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -225,7 +232,7 @@ def __init__(self, token, episode_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -240,18 +247,18 @@ def __init__(self, token, episode_id, progress): self.episode_id = episode_id self.progress = progress self.action = 'progress' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'episode_id' : self.episode_id, 'progress' : self.progress - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -262,7 +269,7 @@ def __init__(self, token, episode_id, progress): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -276,17 +283,17 @@ def __init__(self, token, show_id): self.token = token self.show_id = show_id self.action = 'follow' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'show_id' : self.show_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -297,7 +304,7 @@ def __init__(self, token, show_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -311,17 +318,17 @@ def __init__(self, token, show_id): self.token = token self.show_id = show_id self.action = 'follow' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'show_id' : self.show_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -332,7 +339,7 @@ def __init__(self, token, show_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -348,19 +355,19 @@ def __init__(self, token, show_id, season, episode): self.season = season self.episode = episode self.action = 'show_progress' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'show_id' : self.show_id, 'season' : self.season, 'episode' : self.episode - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -371,7 +378,7 @@ def __init__(self, token, show_id, season, episode): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -385,17 +392,17 @@ def __init__(self, token, shows): self.token = token self.shows = shows self.action = 'show_progress' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'shows' : self.shows - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -406,7 +413,7 @@ def __init__(self, token, shows): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -420,17 +427,17 @@ def __init__(self, token, show_id): self.token = token self.show_id = show_id self.action = 'delete_show_progress' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'show_id' : self.show_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -442,7 +449,7 @@ def __init__(self, token, show_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -457,17 +464,17 @@ def __init__(self, token, shows): self.token = token self.shows = shows self.action = 'delete_show_progress' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'shows' : self.shows - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ @@ -479,7 +486,7 @@ def __init__(self, token, shows): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -495,18 +502,18 @@ def __init__(self, token, episode_id, emotion_id): self.episode_id = episode_id self.emotion_id = emotion_id self.action = 'emotion' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'access_token' : self.token, 'episode_id' : self.episode_id, 'emotion_id' : self.emotion_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -517,7 +524,7 @@ def __init__(self, token, episode_id, emotion_id): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -531,12 +538,12 @@ def __init__(self, token): self.token = token self.action = 'user?access_token=%s' % self.token - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -547,7 +554,7 @@ def __init__(self, token): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, None) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -561,16 +568,16 @@ class GetCode(object): def __init__(self): self.client_id = '845mHJx5-CxI8dSlStHB' self.action = 'oauth/device/code' - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'client_id' : self.client_id - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -581,7 +588,7 @@ def __init__(self): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None @@ -601,18 +608,18 @@ def __init__(self, code): self.client_secret = 'lvN6LZOZkUAH8aa_WAbvAJ4AXGcSo7irZyAPdRQj' self.action = 'oauth/access_token' self.code = code - request_data = urllib.urlencode({ + request_data = urllib.parse.urlencode({ 'client_id' : self.client_id, 'client_secret' : self.client_secret, 'code' : self.code - }) - - self.cj = cookielib.CookieJar() - self.opener = urllib2.build_opener( - urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(debuglevel=0), - urllib2.HTTPSHandler(debuglevel=0), - urllib2.HTTPCookieProcessor(self.cj) + }).encode("utf-8") + + self.cj = http.cookiejar.CookieJar() + self.opener = urllib.request.build_opener( + urllib.request.HTTPRedirectHandler(), + urllib.request.HTTPHandler(debuglevel=0), + urllib.request.HTTPSHandler(debuglevel=0), + urllib.request.HTTPCookieProcessor(self.cj) ) self.opener.addheaders = [ ('User-agent', 'Lynx/2.8.1pre.9 libwww-FM/2.14') @@ -623,7 +630,7 @@ def __init__(self, code): request_url = "%s%s" % (request_uri, self.action) try: response = self.opener.open(request_url, request_data) - data = json.loads(''.join(response.readlines())) + data = json.loads(response.read()) except: data = None diff --git a/resources/settings.xml b/resources/settings.xml index 9452c15..1c65674 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -5,6 +5,7 @@ +