mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-10-08 18:02:03 +00:00
Most flake8 warnings corrected
This commit is contained in:
parent
e92d60f7c7
commit
00765c0a12
58 changed files with 1144 additions and 1262 deletions
|
@ -17,7 +17,7 @@ from objects import Actions
|
|||
|
||||
#################################################################################################
|
||||
|
||||
LOG = logging.getLogger("JELLYFIN."+__name__)
|
||||
LOG = logging.getLogger("JELLYFIN." + __name__)
|
||||
XML_PATH = (xbmcaddon.Addon('plugin.video.jellyfin').getAddonInfo('path'), "default", "1080i")
|
||||
OPTIONS = {
|
||||
'Refresh': _(30410),
|
||||
|
|
|
@ -8,7 +8,6 @@ import sys
|
|||
import urlparse
|
||||
import urllib
|
||||
import os
|
||||
import sys
|
||||
|
||||
import xbmc
|
||||
import xbmcvfs
|
||||
|
@ -24,14 +23,13 @@ from helper import _, event, settings, window, dialog, api, JSONRPC
|
|||
|
||||
#################################################################################################
|
||||
|
||||
LOG = logging.getLogger("JELLYFIN."+__name__)
|
||||
LOG = logging.getLogger("JELLYFIN." + __name__)
|
||||
|
||||
#################################################################################################
|
||||
|
||||
|
||||
class Events(object):
|
||||
|
||||
|
||||
def __init__(self):
|
||||
|
||||
''' Parse the parameters. Reroute to our service.py
|
||||
|
@ -65,7 +63,7 @@ class Events(object):
|
|||
jellyfin_id = params.get('id')
|
||||
get_video_extras(jellyfin_id, jellyfin_path, server)
|
||||
|
||||
elif mode =='play':
|
||||
elif mode == 'play':
|
||||
|
||||
item = TheVoid('GetItem', {'Id': params['id'], 'ServerId': server}).get()
|
||||
Actions(server).play(item, params.get('dbid'), params.get('transcode') == 'true', playlist=params.get('playlist') == 'true')
|
||||
|
@ -180,7 +178,6 @@ def listing():
|
|||
else:
|
||||
directory(server['Name'], "plugin://plugin.video.jellyfin/?mode=browse&server=%s" % server['Id'], context=context)
|
||||
|
||||
|
||||
directory(_(33194), "plugin://plugin.video.jellyfin/?mode=managelibs", True)
|
||||
directory(_(33134), "plugin://plugin.video.jellyfin/?mode=addserver", False)
|
||||
directory(_(33054), "plugin://plugin.video.jellyfin/?mode=adduser", False)
|
||||
|
@ -194,6 +191,7 @@ def listing():
|
|||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def directory(label, path, folder=True, artwork=None, fanart=None, context=None):
|
||||
|
||||
''' Add directory listitem. context should be a list of tuples [(label, action)*]
|
||||
|
@ -207,6 +205,7 @@ def directory(label, path, folder=True, artwork=None, fanart=None, context=None)
|
|||
|
||||
return li
|
||||
|
||||
|
||||
def dir_listitem(label, path, artwork=None, fanart=None):
|
||||
|
||||
''' Gets the icon paths for default node listings
|
||||
|
@ -218,6 +217,7 @@ def dir_listitem(label, path, artwork=None, fanart=None):
|
|||
|
||||
return li
|
||||
|
||||
|
||||
def manage_libraries():
|
||||
|
||||
directory(_(33098), "plugin://plugin.video.jellyfin/?mode=refreshboxsets", False)
|
||||
|
@ -230,6 +230,7 @@ def manage_libraries():
|
|||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def browse(media, view_id=None, folder=None, server_id=None):
|
||||
|
||||
''' Browse content dynamically.
|
||||
|
@ -274,7 +275,6 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
|||
elif media == 'music':
|
||||
content_type = "artists"
|
||||
|
||||
|
||||
if folder == 'recentlyadded':
|
||||
listing = TheVoid('RecentlyAdded', {'Id': view_id, 'ServerId': server_id}).get()
|
||||
elif folder == 'genres':
|
||||
|
@ -316,7 +316,6 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
|||
else:
|
||||
listing = TheVoid('Browse', {'Id': folder or view_id, 'ServerId': server_id, 'Recursive': False}).get()
|
||||
|
||||
|
||||
if listing:
|
||||
|
||||
actions = Actions(server_id)
|
||||
|
@ -339,7 +338,7 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
|||
'folder': item['Id'],
|
||||
'server': server_id
|
||||
}
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
context = []
|
||||
|
||||
if item['Type'] in ('Series', 'Season', 'Playlist'):
|
||||
|
@ -362,7 +361,7 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
|||
'folder': 'genres-%s' % item['Id'],
|
||||
'server': server_id
|
||||
}
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
list_li.append((path, li, True))
|
||||
|
||||
else:
|
||||
|
@ -396,6 +395,7 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
|||
xbmcplugin.setContent(int(sys.argv[1]), content_type)
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def browse_subfolders(media, view_id, server_id=None):
|
||||
|
||||
''' Display submenus for jellyfin views.
|
||||
|
@ -415,12 +415,13 @@ def browse_subfolders(media, view_id, server_id=None):
|
|||
'folder': view_id if node[0] == 'all' else node[0],
|
||||
'server': server_id
|
||||
}
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
directory(node[1] or view['Name'], path)
|
||||
|
||||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def browse_letters(media, view_id, server_id=None):
|
||||
|
||||
''' Display letters as options.
|
||||
|
@ -439,12 +440,13 @@ def browse_letters(media, view_id, server_id=None):
|
|||
'folder': 'firstletter-%s' % node,
|
||||
'server': server_id
|
||||
}
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params))
|
||||
directory(node, path)
|
||||
|
||||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def get_folder_type(item, content_type=None):
|
||||
|
||||
media = item['Type']
|
||||
|
@ -480,6 +482,7 @@ def get_media_type(media):
|
|||
elif media == 'music':
|
||||
return "MusicArtist,MusicAlbum,Audio"
|
||||
|
||||
|
||||
def get_fanart(item_id, path, server_id=None):
|
||||
|
||||
''' Get extra fanart for listitems. This is called by skinhelper.
|
||||
|
@ -524,6 +527,7 @@ def get_fanart(item_id, path, server_id=None):
|
|||
xbmcplugin.addDirectoryItems(int(sys.argv[1]), list_li, len(list_li))
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def get_video_extras(item_id, path, server_id=None):
|
||||
|
||||
''' Returns the video files for the item as plugin listing, can be used
|
||||
|
@ -565,6 +569,7 @@ def get_video_extras(item_id, path, server_id=None):
|
|||
#xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
"""
|
||||
|
||||
|
||||
def get_next_episodes(item_id, limit):
|
||||
|
||||
''' Only for synced content.
|
||||
|
@ -578,14 +583,14 @@ def get_next_episodes(item_id, limit):
|
|||
return
|
||||
|
||||
result = JSONRPC('VideoLibrary.GetTVShows').execute({
|
||||
'sort': {'order': "descending", 'method': "lastplayed"},
|
||||
'filter': {
|
||||
'and': [
|
||||
{'operator': "true", 'field': "inprogress", 'value': ""},
|
||||
{'operator': "is", 'field': "tag", 'value': "%s" % library}
|
||||
]},
|
||||
'properties': ['title', 'studio', 'mpaa', 'file', 'art']
|
||||
})
|
||||
'sort': {'order': "descending", 'method': "lastplayed"},
|
||||
'filter': {
|
||||
'and': [
|
||||
{'operator': "true", 'field': "inprogress", 'value': ""},
|
||||
{'operator': "is", 'field': "tag", 'value': "%s" % library}
|
||||
]},
|
||||
'properties': ['title', 'studio', 'mpaa', 'file', 'art']
|
||||
})
|
||||
|
||||
try:
|
||||
items = result['result']['tvshows']
|
||||
|
@ -603,7 +608,7 @@ def get_next_episodes(item_id, limit):
|
|||
'and': [
|
||||
{'operator': "lessthan", 'field': "playcount", 'value': "1"},
|
||||
{'operator': "greaterthan", 'field': "season", 'value': "0"}
|
||||
]},
|
||||
]},
|
||||
'properties': [
|
||||
"title", "playcount", "season", "episode", "showtitle",
|
||||
"plot", "file", "rating", "resume", "tvshowid", "art",
|
||||
|
@ -645,6 +650,7 @@ def get_next_episodes(item_id, limit):
|
|||
xbmcplugin.setContent(int(sys.argv[1]), 'episodes')
|
||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||
|
||||
|
||||
def create_listitem(item):
|
||||
|
||||
''' Listitem based on jsonrpc items.
|
||||
|
@ -656,7 +662,7 @@ def create_listitem(item):
|
|||
|
||||
metadata = {
|
||||
'Title': title,
|
||||
'duration': str(item['runtime']/60),
|
||||
'duration': str(item['runtime'] / 60),
|
||||
'Plot': item['plot'],
|
||||
'Playcount': item['playcount']
|
||||
}
|
||||
|
@ -688,7 +694,7 @@ def create_listitem(item):
|
|||
metadata['Premiered'] = item['firstaired']
|
||||
|
||||
if "rating" in item:
|
||||
metadata['Rating'] = str(round(float(item['rating']),1))
|
||||
metadata['Rating'] = str(round(float(item['rating']), 1))
|
||||
|
||||
if "director" in item:
|
||||
metadata['Director'] = " / ".join(item['director'])
|
||||
|
@ -711,10 +717,10 @@ def create_listitem(item):
|
|||
li.setProperty('resumetime', str(item['resume']['position']))
|
||||
li.setProperty('totaltime', str(item['resume']['total']))
|
||||
li.setArt(item['art'])
|
||||
li.setThumbnailImage(item['art'].get('thumb',''))
|
||||
li.setThumbnailImage(item['art'].get('thumb', ''))
|
||||
li.setIconImage('DefaultTVShows.png')
|
||||
li.setProperty('dbid', str(item['episodeid']))
|
||||
li.setProperty('fanart_image', item['art'].get('tvshow.fanart',''))
|
||||
li.setProperty('fanart_image', item['art'].get('tvshow.fanart', ''))
|
||||
|
||||
for key, value in item['streamdetails'].iteritems():
|
||||
for stream in value:
|
||||
|
@ -722,6 +728,7 @@ def create_listitem(item):
|
|||
|
||||
return li
|
||||
|
||||
|
||||
def add_user():
|
||||
|
||||
''' Add or remove users from the default server session.
|
||||
|
@ -738,7 +745,7 @@ def add_user():
|
|||
if result < 0:
|
||||
return
|
||||
|
||||
if not result: # Add user
|
||||
if not result: # Add user
|
||||
eligible = [x for x in users if x['Id'] not in [current_user['UserId'] for current_user in current]]
|
||||
resp = dialog("select", _(33064), [x['Name'] for x in eligible])
|
||||
|
||||
|
@ -747,7 +754,7 @@ def add_user():
|
|||
|
||||
user = eligible[resp]
|
||||
event('AddUser', {'Id': user['Id'], 'Add': True})
|
||||
else: # Remove user
|
||||
else: # Remove user
|
||||
resp = dialog("select", _(33064), [x['UserName'] for x in current])
|
||||
|
||||
if resp < 0:
|
||||
|
@ -756,6 +763,7 @@ def add_user():
|
|||
user = current[resp]
|
||||
event('AddUser', {'Id': user['UserId'], 'Add': False})
|
||||
|
||||
|
||||
def get_themes():
|
||||
|
||||
''' Add theme media locally, via strm. This is only for tv tunes.
|
||||
|
@ -786,7 +794,6 @@ def get_themes():
|
|||
all_views = jellyfin_db.JellyfinDatabase(jellyfindb.cursor).get_views()
|
||||
views = [x[0] for x in all_views if x[2] in ('movies', 'tvshows', 'mixed')]
|
||||
|
||||
|
||||
items = {}
|
||||
server = TheVoid('GetServerAddress', {'ServerId': None}).get()
|
||||
token = TheVoid('GetToken', {'ServerId': None}).get()
|
||||
|
@ -829,6 +836,7 @@ def get_themes():
|
|||
|
||||
dialog("notification", heading="{jellyfin}", message=_(33153), icon="{jellyfin}", time=1000, sound=False)
|
||||
|
||||
|
||||
def delete_item():
|
||||
|
||||
''' Delete keymap action.
|
||||
|
@ -837,6 +845,7 @@ def delete_item():
|
|||
|
||||
context.Context(delete=True)
|
||||
|
||||
|
||||
def backup():
|
||||
|
||||
''' Jellyfin backup.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#################################################################################################
|
||||
|
||||
import _strptime # Workaround for threads using datetime: _striptime is locked
|
||||
import _strptime # Workaround for threads using datetime: _striptime is locked
|
||||
import json
|
||||
import logging
|
||||
import sys
|
||||
|
@ -24,7 +24,7 @@ from database import Database, jellyfin_db, reset
|
|||
|
||||
#################################################################################################
|
||||
|
||||
LOG = logging.getLogger("JELLYFIN."+__name__)
|
||||
LOG = logging.getLogger("JELLYFIN." + __name__)
|
||||
|
||||
#################################################################################################
|
||||
|
||||
|
@ -38,7 +38,6 @@ class Service(xbmc.Monitor):
|
|||
warn = True
|
||||
settings = {'last_progress': datetime.today(), 'last_progress_report': datetime.today()}
|
||||
|
||||
|
||||
def __init__(self):
|
||||
|
||||
window('jellyfin_should_stop', clear=True)
|
||||
|
@ -209,7 +208,7 @@ class Service(xbmc.Monitor):
|
|||
users = [user for user in (settings('additionalUsers') or "").decode('utf-8').split(',') if user]
|
||||
users.insert(0, settings('username').decode('utf-8'))
|
||||
dialog("notification", heading="{jellyfin}", message="%s %s" % (_(33000), ", ".join(users)),
|
||||
icon="{jellyfin}", time=1500, sound=False)
|
||||
icon="{jellyfin}", time=1500, sound=False)
|
||||
|
||||
if self.library_thread is None:
|
||||
|
||||
|
@ -352,7 +351,7 @@ class Service(xbmc.Monitor):
|
|||
return
|
||||
|
||||
LOG.info("--<[ sleep ]")
|
||||
xbmc.sleep(10000)# Allow network to wake up
|
||||
xbmc.sleep(10000) # Allow network to wake up
|
||||
self.monitor.sleep = False
|
||||
window('jellyfin_should_stop', clear=True)
|
||||
|
||||
|
@ -444,7 +443,7 @@ class Service(xbmc.Monitor):
|
|||
LOG.info("---<[ EXITING ]")
|
||||
window('jellyfin_should_stop.bool', True)
|
||||
|
||||
properties = [ # TODO: review
|
||||
properties = [ # TODO: review
|
||||
"jellyfin_state", "jellyfin_serverStatus", "jellyfin_currUser",
|
||||
|
||||
"jellyfin_play", "jellyfin_online", "jellyfin.connected", "jellyfin.resume", "jellyfin_startup",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue