Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions resources/lib/__run__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@


def main(argv=None):
if sys.argv:
if argv is None:
argv = sys.argv
queries = kodi.parse_query(sys.argv[2])
log_utils.log('Version: |%s| Queries: |%s|' % (kodi.get_version(), queries), log_utils.LOGDEBUG)
log_utils.log('Args: |%s|' % argv, log_utils.LOGDEBUG)
queries = kodi.parse_query(argv[2])
log_utils.log(f'Version: |{kodi.get_version()}| Queries: |{queries}|', log_utils.LOGDEBUG)
log_utils.log(f'Args: |{argv}|', log_utils.LOGDEBUG)

mode = queries.get('mode', None)
DISPATCHER.dispatch(mode, queries)
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ def __enum(**enums):
)

DIRECTORIES = __enum(
DATA=kodi.translate_path('special://profile/addon_data/%s/' % kodi.get_id())
DATA=kodi.translate_path(f'special://profile/addon_data/{kodi.get_id()}/')
)

ICONS = __enum(
ADDON=kodi.translate_path('special://home/addons/{0!s}/icon.png'.format(kodi.get_id()))
ADDON=kodi.translate_path(f'special://home/addons/{kodi.get_id()}/icon.png')
)
34 changes: 16 additions & 18 deletions resources/lib/kodi.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@
import xbmcgui
import xbmc
import xbmcvfs
import urllib
import urlparse
import urllib.parse as urlparse
import sys
import os
import re
Expand All @@ -48,7 +47,7 @@


def execute_jsonrpc(command):
if not isinstance(command, basestring):
if not isinstance(command, str):
command = json.dumps(command)
response = xbmc.executeJSONRPC(command)
return json.loads(response)
Expand All @@ -59,19 +58,19 @@ def get_handle():


def get_path():
return addon.getAddonInfo('path').decode('utf-8')
return addon.getAddonInfo('path')


def get_profile():
return addon.getAddonInfo('profile').decode('utf-8')
return addon.getAddonInfo('profile')


def translate_path(path):
return xbmc.translatePath(path).decode('utf-8')
return xbmcvfs.translatePath(path)


def set_setting(id, value):
if not isinstance(value, basestring): value = str(value)
if not isinstance(value, str): value = str(value)
addon.setSetting(id, value)


Expand All @@ -97,12 +96,12 @@ def get_fanart():

def get_plugin_url(queries):
try:
query = urllib.urlencode(queries)
query = urllib.parse.urlencode(queries)
except UnicodeEncodeError:
for k in queries:
if isinstance(queries[k], unicode):
if isinstance(queries[k], str):
queries[k] = queries[k].encode('utf-8')
query = urllib.urlencode(queries)
query = urllib.parse.urlencode(queries)

return sys.argv[0] + '?' + query

Expand Down Expand Up @@ -230,7 +229,7 @@ def get_keyboard(heading, default=''):

def i18n(string_id):
try:
return addon.getLocalizedString(strings.STRINGS[string_id]).encode('utf-8', 'ignore')
return addon.getLocalizedString(strings.STRINGS[string_id])
except Exception as e:
xbmc.log('%s: Failed String Lookup: %s (%s)' % (get_name(), string_id, e), xbmc.LOGWARNING)
return string_id
Expand Down Expand Up @@ -314,9 +313,8 @@ class MetaClass(type):
def __str__(self):
return '|%s| -> |%s|%s|%s|%s|%s|' % (self.version, self.major, self.minor, self.tag, self.tag_version, self.revision)

class KodiVersion(object):
__metaclass__ = MetaClass
version = xbmc.getInfoLabel('System.BuildVersion').decode('utf-8')
class KodiVersion(object, metaclass=MetaClass):
version = xbmc.getInfoLabel('System.BuildVersion')
match = re.search('([0-9]+)\.([0-9]+)', version)
if match: major, minor = match.groups()
match = re.search('-([a-zA-Z]+)([0-9]*)', version)
Expand All @@ -333,13 +331,13 @@ class KodiVersion(object):
except:
minor = 0
try:
revision = revision.decode('utf-8')
revision = revision
except:
revision = u''
revision = ''
try:
tag = tag.decode('utf-8')
tag = tag
except:
tag = u''
tag = ''
try:
tag_version = int(tag_version)
except:
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/log_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

def log(msg, level=LOGDEBUG):
try:
if isinstance(msg, unicode):
if isinstance(msg, str):
msg = '%s (ENCODED)' % msg.encode('utf-8')
kodi.__log('%s: %s' % (name, msg), level)
except Exception as e:
Expand All @@ -43,7 +43,7 @@ def method_trace_on(*args, **kwargs):
result = method(*args, **kwargs)
end = time.time()
log('{name!r} time: {time:2.4f}s args: |{args!r}| kwargs: |{kwargs!r}|'
.format(name=method.__name__,time=end - start, args=args, kwargs=kwargs), LOGDEBUG)
.format(name=method.__name__, time=end - start, args=args, kwargs=kwargs), LOGDEBUG)
return result

def method_trace_off(*args, **kwargs):
Expand Down
15 changes: 7 additions & 8 deletions resources/lib/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import rpc
from constants import DISPATCHER, MODES

from urllib2 import unquote
from urllib.parse import unquote

requests = rpc.Library()
i18n = kodi.i18n
Expand All @@ -47,8 +47,8 @@ def play_route(video_type, title, year, trakt_id=None, episode_id=None, season_i
file_path = requests.find_episode(tvshow_id, season, episode)

if not file_path:
str_season = '0' + str(season) if len(season) == 1 else str(season)
str_episode = '0' + str(episode) if len(episode) == 1 else str(episode)
str_season = '0' + str(season) if len(str(season)) == 1 else str(season)
str_episode = '0' + str(episode) if len(str(episode)) == 1 else str(episode)
label = '%s - S%sE%s' % (title, str_season, str_episode)
kodi.notify(msg=i18n('not_found_') % label)

Expand All @@ -65,10 +65,9 @@ def play_route(video_type, title, year, trakt_id=None, episode_id=None, season_i

@DISPATCHER.register(MODES.OPEN, args=['video_type', 'title', 'year'], kwargs=['trakt_id', 'episode_id', 'season_id', 'season', 'episode', 'ep_title', 'imdb_id', 'tmdb_id', 'tvdb_id'])
def open_route(video_type, title, year, trakt_id=None, episode_id=None, season_id=None, imdb_id=None, tmdb_id=None, tvdb_id=None, season=None, episode=None, ep_title=None):
if (video_type != 'episode') and (video_type != 'movie'):
title = unquote(title)
if ep_title is not None:
ep_title = unquote(ep_title)
title = unquote(title)
if ep_title is not None:
ep_title = unquote(ep_title)

if video_type == 'episode':
play_route(video_type, title, year, trakt_id, episode_id, season_id, imdb_id, tmdb_id, tvdb_id, season, episode, ep_title)
Expand All @@ -86,7 +85,7 @@ def open_route(video_type, title, year, trakt_id=None, episode_id=None, season_i
kodi.execute_builtin('ActivateWindow(Videos,videodb://tvshows/titles/%s/%s/?tvshowid=%s)' % (str(tvshow_id), str(season), str(tvshow_id)))

if not season_exists:
str_season = '0' + str(season) if len(season) == 1 else str(season)
str_season = '0' + str(season) if len(str(season)) == 1 else str(season)
label = '%s - S%s' % (title, str_season)
kodi.notify(msg=i18n('not_found_') % label)

Expand Down
2 changes: 1 addition & 1 deletion resources/lib/url_dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def dispatch(self, mode, queries):

if 'mode' in unused_args: del unused_args['mode'] # delete mode last in case it's used by the target function
log_utils.log('Calling |%s| for mode |%s| with pos args |%s| and kwargs |%s|' % (
self.func_registry[mode].__name__, mode, args, kwargs))
self.func_registry[mode].__name__, mode, args, kwargs))
if unused_args: log_utils.log('Warning: Arguments |%s| were passed but unused by |%s| for mode |%s|' %
(unused_args, self.func_registry[mode].__name__, mode))
self.func_registry[mode](*args, **kwargs)
Expand Down