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