Change logging to use function args and render the log line only if debug logging is enabled

This commit is contained in:
Shaun
2017-12-30 19:13:31 +11:00
parent a8d3f21482
commit c61a76ba1e
20 changed files with 217 additions and 230 deletions

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.embycon"
name="EmbyCon"
version="1.4.14"
version="1.4.15"
provider-name="Team B">
<requires>
<import addon="xbmc.python" version="2.24.0"/>

View File

@@ -35,7 +35,7 @@ class ActionMenu(xbmcgui.WindowXMLDialog):
def onClick(self, controlID):
if (controlID == 3000):
self.selected_action = self.listControl.getSelectedItem()
log.debug("ActionMenu: Selected Item:" + str(self.selected_action))
log.debug("ActionMenu: Selected Item: {0}", self.selected_action)
self.close()
def setActionItems(self, action_items):

View File

@@ -21,20 +21,20 @@ class ClientInformation():
return client_id
emby_guid_path = xbmc.translatePath("special://temp/embycon_guid").decode('utf-8')
log.debug("emby_guid_path: " + emby_guid_path)
log.debug("emby_guid_path: {0}", emby_guid_path)
guid = xbmcvfs.File(emby_guid_path)
client_id = guid.read()
guid.close()
if not client_id:
client_id = str("%012X" % uuid4())
log.debug("Generating a new guid: " + client_id)
log.debug("Generating a new guid: {0}", client_id)
guid = xbmcvfs.File(emby_guid_path, 'w')
guid.write(client_id)
guid.close()
log.debug("emby_client_id (NEW): " + client_id)
log.debug("emby_client_id (NEW): {0}", client_id)
else:
log.debug("emby_client_id: " + client_id)
log.debug("emby_client_id: {0}", client_id)
WINDOW.setProperty("client_id", client_id)
return client_id

View File

@@ -1,19 +1,10 @@
# Gnu General Public License - see LICENSE.TXT
import hashlib
import os
import threading
import json
import encodings
from collections import defaultdict
import xbmcaddon
import xbmc
from downloadutils import DownloadUtils
from simple_logging import SimpleLogging
from utils import getChecksum
from kodi_utils import HomeWindow
log = SimpleLogging(__name__)

View File

@@ -37,7 +37,7 @@ class DownloadUtils():
# if user entered a full path i.e. http://some_host:port
if host.lower().strip().startswith("http://") or host.lower().strip().startswith("https://"):
log.debug("Extracting host info from url: " + host)
log.debug("Extracting host info from url: {0}", host)
url_bits = urlparse(host.strip())
if url_bits.hostname is not None and len(url_bits.hostname) > 0:
host = url_bits.hostname
@@ -82,14 +82,14 @@ class DownloadUtils():
BGTags = data["BackdropImageTags"]
if BGTags is not None and len(BGTags) > index:
imageTag = BGTags[index]
log.debug("Background Image Tag:" + imageTag)
log.debug("Background Image Tag: {0}", imageTag)
elif parent is False:
image_tags = data["ImageTags"]
if image_tags is not None:
image_tag_type = image_tags[art_type]
if image_tag_type is not None:
imageTag = image_tag_type
log.debug("Image Tag:" + imageTag)
log.debug("Image Tag: {0}", imageTag)
elif parent is True:
if (item_type == "Episode" or item_type == "Season") and art_type == 'Primary':
tagName = 'SeriesPrimaryImageTag'
@@ -102,17 +102,17 @@ class DownloadUtils():
if parent_image_id is not None and parent_image_tag is not None:
id = parent_image_id
imageTag = parent_image_tag
log.debug("Parent Image Tag:" + imageTag)
log.debug("Parent Image Tag: {0}", imageTag)
if (imageTag == "" or imageTag == None) and (art_type != 'Banner'): # ParentTag not passed for Banner
log.debug("No Image Tag for request:" + art_type + " item:" + item_type + " parent:" + str(parent))
log.debug("No Image Tag for request:{0} item:{1} parent:{2}", art_type, item_type, parent)
return ""
query = ""
artwork = "%s/emby/Items/%s/Images/%s/%s?MaxWidth=%s&MaxHeight=%s&Format=original&Tag=%s%s" % (server, id, art_type, index, width, height, imageTag, query)
log.debug("getArtwork : " + artwork)
log.debug("getArtwork: {0}", artwork)
'''
# do not return non-existing images
@@ -141,7 +141,7 @@ class DownloadUtils():
userid = WINDOW.getProperty("userid")
if (userid != None and userid != ""):
log.debug("EmbyCon DownloadUtils -> Returning saved UserID : " + userid)
log.debug("EmbyCon DownloadUtils -> Returning saved UserID: {0}", userid)
return userid
settings = xbmcaddon.Addon('plugin.video.embycon')
@@ -149,37 +149,36 @@ class DownloadUtils():
if not userName:
return ""
log.debug("Looking for user name: " + userName)
log.debug("Looking for user name: {0}", userName)
jsonData = None
try:
jsonData = self.downloadUrl("{server}/emby/Users/Public?format=json", suppress=True, authenticate=False)
except Exception, msg:
error = "Get User unable to connect: " + str(msg)
log.error(error)
log.error("Get User unable to connect: {0}", msg)
return ""
log.debug("GETUSER_JSONDATA_01:" + str(jsonData))
log.debug("GETUSER_JSONDATA_01: {0}", jsonData)
result = []
try:
result = json.loads(jsonData)
except Exception, e:
log.debug("jsonload : " + str(e) + " (" + jsonData + ")")
log.debug("Could not load user data: {0}", e)
return ""
if result is None:
return ""
log.debug("GETUSER_JSONDATA_02:" + str(result))
log.debug("GETUSER_JSONDATA_02: {0}", result)
userid = ""
secure = False
for user in result:
if (user.get("Name") == userName):
userid = user.get("Id")
log.debug("Username Found: " + user.get("Name"))
log.debug("Username Found: {0}", user.get("Name"))
if (user.get("HasPassword") == True):
secure = True
log.debug("Username Is Secure (HasPassword=True)")
@@ -200,7 +199,7 @@ class DownloadUtils():
i18n('username_not_found'),
icon="special://home/addons/plugin.video.embycon/icon.png")
log.debug("userid : " + userid)
log.debug("userid: {0}", userid)
WINDOW.setProperty("userid", userid)
@@ -212,7 +211,7 @@ class DownloadUtils():
token = WINDOW.getProperty("AccessToken")
if token is not None and token != "":
log.debug("EmbyCon DownloadUtils -> Returning saved AccessToken : " + token)
log.debug("EmbyCon DownloadUtils -> Returning saved AccessToken: {0}", token)
return token
settings = xbmcaddon.Addon('plugin.video.embycon')
@@ -239,7 +238,7 @@ class DownloadUtils():
pass
if accessToken is not None:
log.debug("User Authenticated : " + accessToken)
log.debug("User Authenticated: {0}", accessToken)
WINDOW.setProperty("AccessToken", accessToken)
WINDOW.setProperty("userid", userid)
return accessToken
@@ -278,7 +277,7 @@ class DownloadUtils():
if (authToken != ""):
headers["X-MediaBrowser-Token"] = authToken
log.debug("EmbyCon Authentication Header : " + str(headers))
log.debug("EmbyCon Authentication Header: {0}", headers)
return headers
def downloadUrl(self, url, suppress=False, postBody=None, method="GET", authenticate=True, headers=None):
@@ -290,7 +289,7 @@ class DownloadUtils():
if settings.getSetting("suppressErrors") == "true":
suppress = True
log.debug(url)
log.debug("Before: {0}", url)
if url.find("{server}") != -1:
server = self.getServer()
if server is None:
@@ -318,7 +317,7 @@ class DownloadUtils():
url = url.replace("{IsUnplayed,}", "IsUnplayed,")
elif url.find("{,IsUnplayed,}") != -1:
url = url.replace("{,IsUnplayed,}", ",IsUnplayed,")
log.debug(url)
log.debug("After: {0}", url)
try:
if url.startswith('http'):
@@ -331,9 +330,9 @@ class DownloadUtils():
server = url.split('/')[serversplit]
urlPath = "/" + "/".join(url.split('/')[urlsplit:])
log.debug("DOWNLOAD_URL = " + url)
log.debug("server = " + str(server))
log.debug("urlPath = " + str(urlPath))
log.debug("DOWNLOAD_URL: {0}", url)
log.debug("server: {0}", server)
log.debug("urlPath: {0}", urlPath)
# check the server details
tokens = server.split(':')
@@ -356,7 +355,7 @@ class DownloadUtils():
conn = httplib.HTTPConnection(server, timeout=40)
head = self.getAuthHeader(authenticate)
log.debug("HEADERS : " + str(head))
log.debug("HEADERS: {0}", head)
if (postBody != None):
if isinstance(postBody, dict):
@@ -366,20 +365,20 @@ class DownloadUtils():
content_type = "application/x-www-form-urlencoded"
head["Content-Type"] = content_type
log.debug("Content-Type : " + content_type)
log.debug("Content-Type: {0}", content_type)
log.debug("POST DATA : " + postBody)
log.debug("POST DATA: {0}", postBody)
conn.request(method=method, url=urlPath, body=postBody, headers=head)
else:
conn.request(method=method, url=urlPath, headers=head)
data = conn.getresponse()
log.debug("GET URL HEADERS : " + str(data.getheaders()))
log.debug("GET URL HEADERS: {0}", data.getheaders())
if int(data.status) == 200:
retData = data.read()
contentType = data.getheader('content-encoding')
log.debug("Data Len Before : " + str(len(retData)))
log.debug("Data Len Before: {0}", len(retData))
if (contentType == "gzip"):
retData = StringIO.StringIO(retData)
gzipper = gzip.GzipFile(fileobj=retData)
@@ -388,24 +387,21 @@ class DownloadUtils():
return_data = retData
if headers is not None and isinstance(headers, dict):
headers.update(data.getheaders())
log.debug("Data Len After : " + str(len(return_data)))
log.debug("Data Len After: {0}", len(return_data))
log.debug("====== 200 returned =======")
log.debug("Content-Type : " + str(contentType))
log.debug(return_data)
log.debug("Content-Type: {0}", contentType)
log.debug("{0}", return_data)
log.debug("====== 200 finished ======")
elif int(data.status) >= 400:
error = "HTTP response error: " + str(data.status) + " " + str(data.reason)
log.error(error)
log.error("HTTP response error: {0} {1}", data.status, data.reason)
if suppress is False:
xbmcgui.Dialog().notification(i18n("connection_error"),
i18n('url_error_') % str(data.reason),
icon="special://home/addons/plugin.video.embycon/icon.png")
log.error(error)
except Exception, msg:
error = "Unable to connect to " + str(server) + " : " + str(msg)
log.error(error)
log.error("Unable to connect to {0} : {1}", server, msg)
if suppress is False:
xbmcgui.Dialog().notification(i18n("connection_error"),
str(msg),
@@ -413,7 +409,7 @@ class DownloadUtils():
finally:
try:
log.debug("Closing HTTP connection: " + str(conn))
log.debug("Closing HTTP connection: {0}", conn)
conn.close()
except:
pass

View File

@@ -28,7 +28,7 @@ def catch_except(errors=(Exception, ), default_value=False):
try:
submit_error_data()
except Exception as error:
log.debug("Sending Error Data Failed: " + str(error))
log.debug("Sending Error Data Failed: {0}", error)
raise
return default_value
return wrapper
@@ -56,7 +56,7 @@ def submit_error_data():
data["report_error"] = str(error)
post_data = json.dumps(data)
log.debug("ERROR_DATA: " + post_data)
log.debug("ERROR_DATA: {0}", post_data)
server = "allthedata.pythonanywhere.com"
url_path = "/submit"
@@ -65,7 +65,7 @@ def submit_error_data():
head["Content-Type"] = "application/json"
conn.request(method="POST", url=url_path, body=post_data, headers=head)
data = conn.getresponse()
log.debug("Submit Responce Code: " + str(data.status))
log.debug("Submit Responce Code: {0}", data.status)
def format_exception():
@@ -126,7 +126,7 @@ def format_exception():
# log.error(str(fileStackTrace))
except Exception as e:
fileStackTrace = None
log.error(e)
log.error("{0}", e)
errorType = "NA"
errorFile = "NA"

View File

@@ -59,11 +59,11 @@ def mainEntryPoint():
pr.enable()
ADDON_VERSION = ClientInformation().getVersion()
log.debug("Running Python: " + str(sys.version_info))
log.debug("Running EmbyCon: " + str(ADDON_VERSION))
log.debug("Kodi BuildVersion: " + xbmc.getInfoLabel("System.BuildVersion"))
log.debug("Kodi Version: " + str(kodi_version))
log.debug("Script argument data: " + str(sys.argv))
log.debug("Running Python: {0}", sys.version_info)
log.debug("Running EmbyCon: {0}", ADDON_VERSION)
log.debug("Kodi BuildVersion: {0}", xbmc.getInfoLabel("System.BuildVersion"))
log.debug("Kodi Version: {0}", kodi_version)
log.debug("Script argument data: {0}", sys.argv)
try:
params = get_params(sys.argv[2])
@@ -74,7 +74,7 @@ def mainEntryPoint():
if (len(params) == 0):
windowParams = home_window.getProperty("Params")
log.debug("windowParams : " + windowParams)
log.debug("windowParams: {0}", windowParams)
# home_window.clearProperty("Params")
if (windowParams):
try:
@@ -82,7 +82,7 @@ def mainEntryPoint():
except:
params = {}
log.debug("Script params = " + str(params))
log.debug("Script params: {0}", params)
param_url = params.get('url', None)
@@ -173,8 +173,8 @@ def mainEntryPoint():
trakttokodi.entry_point(params)
else:
checkServer(notify=False)
log.debug("EmbyCon -> Mode: " + str(mode))
log.debug("EmbyCon -> URL: " + str(param_url))
log.debug("EmbyCon -> Mode: {0}", mode)
log.debug("EmbyCon -> URL: {0}", param_url)
if mode == "GET_CONTENT":
getContent(param_url, params)
@@ -204,7 +204,7 @@ def mainEntryPoint():
def markWatched(item_id):
log.debug("Mark Item Watched : " + item_id)
log.debug("Mark Item Watched: {0}", item_id)
url = "{server}/emby/Users/{userid}/PlayedItems/" + item_id
downloadUtils.downloadUrl(url, postBody="", method="POST")
home_window = HomeWindow()
@@ -214,7 +214,7 @@ def markWatched(item_id):
def markUnwatched(item_id):
log.debug("Mark Item UnWatched : " + item_id)
log.debug("Mark Item UnWatched: {0}", item_id)
url = "{server}/emby/Users/{userid}/PlayedItems/" + item_id
downloadUtils.downloadUrl(url, method="DELETE")
home_window = HomeWindow()
@@ -224,7 +224,7 @@ def markUnwatched(item_id):
def markFavorite(item_id):
log.debug("Add item to favourites : " + item_id)
log.debug("Add item to favourites: {0}", item_id)
url = "{server}/emby/Users/{userid}/FavoriteItems/" + item_id
downloadUtils.downloadUrl(url, postBody="", method="POST")
home_window = HomeWindow()
@@ -234,7 +234,7 @@ def markFavorite(item_id):
def unmarkFavorite(item_id):
log.debug("Remove item from favourites : " + item_id)
log.debug("Remove item from favourites: {0}", item_id)
url = "{server}/emby/Users/{userid}/FavoriteItems/" + item_id
downloadUtils.downloadUrl(url, method="DELETE")
home_window = HomeWindow()
@@ -246,7 +246,7 @@ def unmarkFavorite(item_id):
def delete(item_id):
return_value = xbmcgui.Dialog().yesno(i18n('confirm_file_delete'), i18n('file_delete_confirm'))
if return_value:
log.debug('Deleting Item : ' + item_id)
log.debug('Deleting Item: {0}', item_id)
url = '{server}/emby/Items/' + item_id
progress = xbmcgui.DialogProgress()
progress.create(i18n('deleting'), i18n('waiting_server_delete'))
@@ -258,7 +258,7 @@ def delete(item_id):
def get_params(paramstring):
log.debug("Parameter string: " + paramstring)
log.debug("Parameter string: {0}", paramstring)
param = {}
if len(paramstring) >= 2:
params = paramstring
@@ -280,12 +280,12 @@ def get_params(paramstring):
elif (len(splitparams)) == 3:
param[splitparams[0]] = splitparams[1] + "=" + splitparams[2]
log.debug("EmbyCon -> Detected parameters: " + str(param))
log.debug("EmbyCon -> Detected parameters: {0}", param)
return param
def setSort(pluginhandle, viewType):
log.debug("SETTING_SORT for media type: " + str(viewType))
log.debug("SETTING_SORT for media type: {0}", viewType)
if viewType == "BoxSets":
xbmcplugin.addSortMethod(pluginhandle, xbmcplugin.SORT_METHOD_VIDEO_YEAR)
xbmcplugin.addSortMethod(pluginhandle, xbmcplugin.SORT_METHOD_VIDEO_SORT_TITLE_IGNORE_THE)
@@ -307,8 +307,8 @@ def getContent(url, params):
if not media_type:
xbmcgui.Dialog().ok(i18n('error'), i18n('no_media_type'))
log.debug("URL: " + str(url))
log.debug("MediaType: " + str(media_type))
log.debug("URL: {0}", url)
log.debug("MediaType: {0}", media_type)
pluginhandle = int(sys.argv[1])
settings = xbmcaddon.Addon(id='plugin.video.embycon')
@@ -330,7 +330,7 @@ def getContent(url, params):
elif media_type == "season" or media_type == "episodes":
viewType = "Episodes"
xbmcplugin.setContent(pluginhandle, 'episodes')
log.debug("ViewType: " + viewType)
log.debug("ViewType: {0}", viewType)
setSort(pluginhandle, viewType)
@@ -512,7 +512,7 @@ def processDirectory(results, progress, params):
return dirItems
def showMenu(params):
log.debug("showMenu(): " + str(params))
log.debug("showMenu(): {0}", params)
action_items = []
li = xbmcgui.ListItem("Play")
@@ -540,14 +540,14 @@ def showMenu(params):
selected_action = ""
if selected_action_item is not None:
selected_action = selected_action_item.getProperty('menu_id')
log.debug("Menu Action Selected: " + str(selected_action_item))
log.debug("Menu Action Selected: {0}", selected_action_item)
del action_menu
if selected_action == "play":
log.debug("Play Item")
#list_item = populate_listitem(params["item_id"])
#result = xbmcgui.Dialog().info(list_item)
#log.debug("xbmcgui.Dialog().info: " + str(result))
#log.debug("xbmcgui.Dialog().info: {0}", result)
PLAY(params)
elif selected_action == "transcode":
params['force_transcode'] = 'true'
@@ -564,12 +564,12 @@ def showMenu(params):
def populate_listitem(item_id):
log.debug("populate_listitem: " + item_id)
log.debug("populate_listitem: {0}", item_id)
url = "{server}/emby/Users/{userid}/Items/" + item_id + "?format=json"
jsonData = downloadUtils.downloadUrl(url)
result = json.loads(jsonData)
log.debug("populate_listitem item info: " + str(result))
log.debug("populate_listitem item info: {0}", result)
'''
server = downloadUtils.getServer()
@@ -584,7 +584,7 @@ def populate_listitem(item_id):
details, extraData = extract_item_info(result,gui_options )
u, list_item, folder = add_gui_item(result["Id"], details, extraData, {}, folder=False)
log.debug("list_item path: " + u)
log.debug("list_item path: {0}", u)
#list_item.setProperty('IsPlayable', 'false')
#list_item.setPath(u)
@@ -618,7 +618,7 @@ def populate_listitem(item_id):
def showContent(pluginName, handle, params):
log.debug("showContent Called: " + str(params))
log.debug("showContent Called: {0}", params)
item_type = params.get("item_type")
@@ -632,11 +632,11 @@ def showContent(pluginName, handle, params):
"&IsMissing=False"
"&IncludeItemTypes=" + item_type)
log.debug("showContent Content Url : " + str(contentUrl))
log.debug("showContent Content Url: {0}", contentUrl)
getContent(contentUrl, params)
def showParentContent(pluginName, handle, params):
log.debug("showParentContent Called: " + str(params))
log.debug("showParentContent Called: {0}", params)
settings = xbmcaddon.Addon(id='plugin.video.embycon')
@@ -651,7 +651,7 @@ def showParentContent(pluginName, handle, params):
"&Fields=" + detailsString +
"&format=json")
log.debug("showParentContent Content Url : " + str(contentUrl))
log.debug("showParentContent Content Url: {0}", contentUrl)
getContent(contentUrl, params)
@@ -683,7 +683,7 @@ def searchResults(params):
home_window.setProperty("last_search", user_input)
log.debug('searchResults Called: ' + str(params))
log.debug('searchResults Called: {0}', params)
handle = int(sys.argv[1])
query = user_input
@@ -732,7 +732,7 @@ def searchResults(params):
progress.update(0, i18n('retrieving_data'))
result = dataManager.GetContent(content_url)
log.debug('SearchHints jsonData: ' + str(result))
log.debug('SearchHints jsonData: {0}', result)
results = result.get('SearchHints')
if results is None:
@@ -740,13 +740,13 @@ def searchResults(params):
item_count = 1
total_results = int(result.get('TotalRecordCount', 0))
log.debug('SEARCH_TOTAL_RESULTS: ' + str(total_results))
log.debug('SEARCH_TOTAL_RESULTS: {0}', total_results)
list_items = []
for item in results:
item_id = item.get('ItemId')
name = title = item.get('Name')
log.debug('SEARCH_RESULT_NAME: ' + name)
log.debug('SEARCH_RESULT_NAME: {0}', name)
if progress is not None:
percent_complete = (float(item_count) / float(total_results)) * 100
@@ -805,7 +805,7 @@ def searchResults(params):
list_item = xbmcgui.ListItem(label=name, iconImage=art['thumb'])
info = {'title': title, 'tvshowtitle': tvshowtitle, 'mediatype': media_type}
log.debug('SEARCH_RESULT_ART: ' + str(art))
log.debug('SEARCH_RESULT_ART: {0}', art)
list_item.setProperty('fanart_image', art['fanart'])
list_item.setProperty('discart', art['discart'])
list_item.setArt(art)
@@ -843,7 +843,7 @@ def searchResults(params):
info['year'] = item.get('ProductionYear', '')
log.debug('SEARCH_RESULT_INFO: ' + str(info))
log.debug('SEARCH_RESULT_INFO: {0}', info)
list_item.setInfo('Video', infoLabels=info)
item_tuple = (list_item_url, list_item, is_folder)
@@ -860,20 +860,20 @@ def searchResults(params):
def PLAY(params):
log.debug("== ENTER: PLAY ==")
log.debug("PLAY ACTION PARAMS: " + str(params))
log.debug("PLAY ACTION PARAMS: {0}", params)
item_id = params.get("item_id")
auto_resume = int(params.get("auto_resume", "-1"))
log.debug("AUTO_RESUME: " + str(auto_resume))
log.debug("AUTO_RESUME: {0}", auto_resume)
forceTranscode = params.get("force_transcode", None) is not None
log.debug("FORCE_TRANSCODE: " + str(forceTranscode))
log.debug("FORCE_TRANSCODE: {0}", forceTranscode)
media_source_id = params.get("media_source_id", "")
log.debug("media_source_id: " + str(media_source_id))
log.debug("media_source_id: {0}", media_source_id)
use_default = params.get("use_default", "false") == "true"
log.debug("use_default: " + str(use_default))
log.debug("use_default: {0}", use_default)
# set the current playing item id
# set all the playback info, this will be picked up by the service
@@ -902,7 +902,7 @@ def playTrailer(id):
jsonData = downloadUtils.downloadUrl(url)
result = json.loads(jsonData)
log.debug("LocalTrailers" + str(result))
log.debug("LocalTrailers {0}", result)
trailer_list = []
for trailer in result:
@@ -915,7 +915,7 @@ def playTrailer(id):
url = ("{server}/emby/Users/{userid}/Items/%s?format=json&Fields=RemoteTrailers" % id)
jsonData = downloadUtils.downloadUrl(url)
result = json.loads(jsonData)
log.debug("RemoteTrailers" + str(result))
log.debug("RemoteTrailers: {0}", result)
remote_trailers = result.get("RemoteTrailers", [])
for trailer in remote_trailers:
@@ -927,7 +927,7 @@ def playTrailer(id):
info["url"] = url
trailer_list.append(info)
log.debug("TrailerList: " + str(trailer_list))
log.debug("TrailerList: {0}", trailer_list)
trailer_text = []
for trailer in trailer_list:
@@ -938,7 +938,7 @@ def playTrailer(id):
resp = dialog.select(i18n('select_trailer'), trailer_text)
if resp > -1:
trailer = trailer_list[resp]
log.debug("SelectedTrailer: " + str(trailer))
log.debug("SelectedTrailer: {0}", trailer)
if trailer.get("type") == "local":
params = {}
@@ -947,7 +947,7 @@ def playTrailer(id):
elif trailer.get("type") == "remote":
youtube_id = trailer.get("url").rsplit('=', 1)[1]
log.debug("YoutubeID: " + str(youtube_id))
log.debug("YoutubeID: {0}", youtube_id)
youtube_plugin = "PlayMedia(plugin://plugin.video.youtube/?action=play_video&videoid=%s)" % youtube_id
xbmc.executebuiltin(youtube_plugin)

View File

@@ -116,7 +116,7 @@ def extract_item_info(item, gui_options):
nameInfo["SeriesName"] = ""
nameInfo["SeasonIndex"] = "%02d" % item_details.season_number
nameInfo["EpisodeIndex"] = "%02d" % item_details.episode_number
log.debug("FormatName : %s | %s" % (name_format, nameInfo))
log.debug("FormatName: {0} | {1}", name_format, nameInfo)
item_details.name = name_format.format(**nameInfo).strip()
else:
@@ -188,7 +188,7 @@ def extract_item_info(item, gui_options):
elif person_type == "Writing":
item_details.writer = person["Name"]
elif person_type == "Actor":
log.debug("Person : %s" % person)
log.debug("Person: {0}", person)
person_name = person["Name"]
person_role = person["Role"]
person_id = person["Id"]
@@ -275,8 +275,7 @@ def add_gui_item(url, item_details, display_options, folder=True):
url = url.encode('utf-8')
log.debug("Adding GuiItem for [%s]" % item_details.name)
log.debug("Passed extraData: " + str(item_details.__dict__))
log.debug("Passed item_details: {0}", item_details.__dict__)
if not item_details.name:
return
@@ -335,7 +334,7 @@ def add_gui_item(url, item_details, display_options, folder=True):
else:
list_item = xbmcgui.ListItem(listItemName, iconImage=thumbPath, thumbnailImage=thumbPath)
log.debug("Setting thumbnail as " + thumbPath)
log.debug("Setting thumbnail as: {0}", thumbPath)
# calculate percentage
if (cappedPercentage != 0):

View File

@@ -23,17 +23,17 @@ class HomeWindow():
def getProperty(self, key):
key = self.id_string % key
value = self.window.getProperty(key)
# log.debug('HomeWindow: getProperty |%s| -> |%s|' % (key, value))
# log.debug('HomeWindow: getProperty |{0}| -> |{1}|', key, value)
return value
def setProperty(self, key, value):
key = self.id_string % key
# log.debug('HomeWindow: setProperty |%s| -> |%s|' % (key, value))
# log.debug('HomeWindow: setProperty |{0}| -> |{1}|', key, value)
self.window.setProperty(key, value)
def clearProperty(self, key):
key = self.id_string % key
# log.debug('HomeWindow: clearProperty |%s|' % key)
# log.debug('HomeWindow: clearProperty |{0}|', key)
self.window.clearProperty(key)
@@ -59,9 +59,9 @@ def getKodiVersion():
result = result.get("result")
versionData = result.get("version")
version = float(str(versionData.get("major")) + "." + str(versionData.get("minor")))
log.debug("Version : " + str(version) + " - " + str(versionData))
log.debug("Version: {0} - {1}", version, versionData)
except:
version = 0.0
log.error("Version Error : RAW Version Data : " + str(result))
log.error("Version Error : RAW Version Data: {0}", result)
return version

View File

@@ -69,7 +69,7 @@ def showGenreList(item_type=None):
url = sys.argv[0] + ("?url=" + urllib.quote(collection['path']) +
"&mode=GET_CONTENT" +
"&media_type=" + collection["media_type"])
log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url, thumbnail=collection.get("thumbnail"))
xbmcplugin.endOfDirectory(int(sys.argv[1]))
@@ -115,7 +115,7 @@ def showMovieAlphaList():
for collection in collections:
url = (sys.argv[0] + "?url=" + urllib.quote(collection['path']) +
"&mode=GET_CONTENT&media_type=" + collection["media_type"])
log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url)
xbmcplugin.endOfDirectory(int(sys.argv[1]))
@@ -135,7 +135,7 @@ def showYearsList():
"&Recursive=true" +
"&UserId={userid}" +
"&format=json")
log.debug("YEAR_LIST_DATA : %s" % jsonData)
log.debug("YEAR_LIST_DATA: {0}", jsonData)
result = json.loads(jsonData)
if result is not None:
@@ -163,7 +163,7 @@ def showYearsList():
url = sys.argv[0] + ("?url=" + urllib.quote(collection['path']) +
"&mode=GET_CONTENT" +
"&media_type=" + collection["media_type"])
log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url)#, thumbnail=collection.get("thumbnail"))
xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_LABEL)
@@ -188,7 +188,7 @@ def displaySections():
"&mode=GET_CONTENT&media_type=" + collection["media_type"])
if collection.get("name_format") is not None:
url += "&name_format=" + urllib.quote(collection.get("name_format"))
log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url, thumbnail=collection.get("thumbnail"))
addMenuDirectoryItem(i18n('movies_year'), "plugin://plugin.video.embycon/?mode=MOVIE_YEARS")
@@ -230,7 +230,7 @@ def getCollections(detailsString):
return []
parentid = result.get("Id")
log.debug("parentid : " + parentid)
log.debug("parentid: {0}", parentid)
htmlpath = "{server}/emby/Users/{userid}/items?ParentId=" + parentid + "&Sortby=SortName&format=json"
result = data_manager.GetContent(htmlpath)
@@ -246,8 +246,8 @@ def getCollections(detailsString):
item_name = (item.get("Name")).encode('utf-8')
collection_type = item.get('CollectionType', None)
log.debug("CollectionType: " + str(collection_type))
log.debug("Title: " + item_name)
log.debug("CollectionType: {0}", collection_type)
log.debug("Title: {0}", item_name)
if collection_type in ["tvshows", "movies", "boxsets"]:
collections.append({

View File

@@ -31,7 +31,7 @@ def playFile(play_info):
media_source_id = play_info.get("media_source_id", "")
use_default = play_info.get("use_default", False)
log.debug("playFile id(%s) resume(%s) force_transcode(%s)" % (id, auto_resume, force_transcode))
log.debug("playFile id({0}) resume({1}) force_transcode({2})", id, auto_resume, force_transcode)
settings = xbmcaddon.Addon('plugin.video.embycon')
addon_path = settings.getAddonInfo('path')
@@ -42,7 +42,7 @@ def playFile(play_info):
url = "{server}/emby/Users/{userid}/Items/" + id + "?format=json"
data_manager = DataManager()
result = data_manager.GetContent(url)
log.debug("Playfile item info: " + str(result))
log.debug("Playfile item info: {0}", result)
if result is None:
log.debug("Playfile item was None, so can not play!")
@@ -101,13 +101,13 @@ def playFile(play_info):
resumeDialog.doModal()
resume_result = resumeDialog.getResumeAction()
del resumeDialog
log.debug("Resume Dialog Result: " + str(resume_result))
log.debug("Resume Dialog Result: {0}", resume_result)
# check system settings for play action
# if prompt is set ask to set it to auto resume
params = {"setting": "myvideos.selectaction"}
setting_result = json_rpc('Settings.getSettingValue').execute(params)
log.debug("Current Setting (myvideos.selectaction): %s" % setting_result)
log.debug("Current Setting (myvideos.selectaction): {0}", setting_result)
current_value = setting_result.get("result", None)
if current_value is not None:
current_value = current_value.get("value", -1)
@@ -116,7 +116,7 @@ def playFile(play_info):
if return_value:
params = {"setting": "myvideos.selectaction", "value": 2}
json_rpc_result = json_rpc('Settings.setSettingValue').execute(params)
log.debug("Save Setting (myvideos.selectaction): %s" % json_rpc_result)
log.debug("Save Setting (myvideos.selectaction): {0}", json_rpc_result)
if resume_result == 1:
seekTime = 0
@@ -127,7 +127,7 @@ def playFile(play_info):
playback_type = "0"
playurl = None
play_session_id = id_generator()
log.debug("play_session_id: %s" % play_session_id)
log.debug("play_session_id: {0}", play_session_id)
# check if strm file, path will contain contain strm contents
if selected_media_source.get('Container') == 'strm':
@@ -138,7 +138,7 @@ def playFile(play_info):
if not playurl:
playurl, playback_type = PlayUtils().getPlayUrl(id, selected_media_source, force_transcode, play_session_id)
log.debug("Play URL: " + str(playurl) + " ListItem Properties: " + str(listitem_props))
log.debug("Play URL: {0} ListItem Properties: {1}", playurl, listitem_props)
playback_type_string = "DirectPlay"
if playback_type == "2":
@@ -174,7 +174,7 @@ def playFile(play_info):
if playback_type == "2": # if transcoding then prompt for audio and subtitle
playurl = audioSubsPref(playurl, list_item, selected_media_source, id, use_default)
log.debug("New playurl for transcoding : " + playurl)
log.debug("New playurl for transcoding: {0}", playurl)
elif playback_type == "1": # for direct stream add any streamable subtitles
externalSubs(selected_media_source, list_item, id)
@@ -336,7 +336,7 @@ def audioSubsPref(url, list_item, media_source, item_id, use_default):
if selectSubsIndex in downloadableStreams:
url = [("%s/Videos/%s/%s/Subtitles/%s/Stream.srt"
% (downloadUtils.getServer(), item_id, item_id, selectSubsIndex))]
log.debug("Streaming subtitles url: %s %s" % (selectSubsIndex, url))
log.debug("Streaming subtitles url: {0} {1}", selectSubsIndex, url)
list_item.setSubtitles(url)
else:
# Burn subtitles

View File

@@ -35,8 +35,8 @@ def getServerDetails():
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)
sock.setsockopt(socket.IPPROTO_IP, socket.SO_REUSEADDR, 1)
log.debug("MutliGroup : " + str(MULTI_GROUP))
log.debug("Sending UDP Data : " + MESSAGE)
log.debug("MutliGroup: {0}", MULTI_GROUP)
log.debug("Sending UDP Data: {0}", MESSAGE)
sock.sendto(MESSAGE, MULTI_GROUP)
servers = []
@@ -46,10 +46,10 @@ def getServerDetails():
data, addr = sock.recvfrom(1024) # buffer size
servers.append(json.loads(data))
except Exception as e:
log.error("Read UPD responce: %s" % e)
log.error("Read UPD responce: {0}", e)
# break
log.debug("Found Servers: %s" % servers)
log.debug("Found Servers: {0}", servers)
return servers
@@ -83,14 +83,14 @@ def checkServer(force=False, change_user=False, notify=False):
return
serverUrl = serverInfo[return_index]["Address"]
log.debug("Selected server: " + serverUrl)
log.debug("Selected server: {0}", serverUrl)
# parse the url
url_bits = urlparse(serverUrl)
server_address = url_bits.hostname
server_port = str(url_bits.port)
server_protocol = url_bits.scheme
log.debug("Detected server info " + server_protocol + " - " + server_address + " - " + server_port)
log.debug("Detected server info {0} - {1} - {2}", server_protocol, server_address, server_port)
# save the server info
settings.setSetting("port", server_port)
@@ -114,7 +114,7 @@ def checkServer(force=False, change_user=False, notify=False):
log.debug("Getting user list")
jsonData = downloadUtils.downloadUrl(serverUrl + "/emby/Users/Public?format=json", authenticate=False)
log.debug("jsonData : " + str(jsonData))
log.debug("jsonData: {0}", jsonData)
result = json.loads(jsonData)
if result is None:
xbmcgui.Dialog().ok(i18n('error'),
@@ -145,13 +145,13 @@ def checkServer(force=False, change_user=False, notify=False):
names.insert(0, i18n('username_userinput'))
user_list.insert(0, '')
secured.insert(0, True)
log.debug("User List : " + str(names))
log.debug("User List : " + str(user_list))
log.debug("User List: {0}", names)
log.debug("User List: {0}", user_list)
return_value = xbmcgui.Dialog().select(i18n('select_user'), names)
if (return_value > -1):
log.debug("Selected User Index : " + str(return_value))
log.debug("Selected User Index: {0}", return_value)
if return_value == 0:
kb = xbmc.Keyboard()
kb.setHeading(i18n('username:'))
@@ -163,11 +163,11 @@ def checkServer(force=False, change_user=False, notify=False):
else:
selected_user = user_list[return_value]
log.debug("Selected User Name : " + str(selected_user))
log.debug("Selected User Name: {0}", selected_user)
if selected_user:
# we have a user so save it
log.debug("Saving Username : " + selected_user)
log.debug("Saving Username: {0}", selected_user)
settings.setSetting("username", selected_user)
if secured[return_value] is True:
kb = xbmc.Keyboard()
@@ -175,7 +175,7 @@ def checkServer(force=False, change_user=False, notify=False):
kb.setHiddenInput(True)
kb.doModal()
if kb.isConfirmed():
log.debug("Saving Password for Username : " + selected_user)
log.debug("Saving Password for Username: {0}", selected_user)
settings.setSetting('password', kb.getText())
else:
settings.setSetting('password', '')

View File

@@ -35,27 +35,27 @@ def showServerSessions():
if play_state is not None:
runtime = 0
media_id = play_state.get("MediaSourceId", None)
log.debug("Media ID " + str(media_id))
log.debug("Media ID: {0}", media_id)
if media_id is not None:
url = "{server}/emby/Users/{userid}/Items/" + media_id + "?format=json"
jsonData = downloadUtils.downloadUrl(url)
media_info = json.loads(jsonData)
log.debug("Media Info " + str(media_info))
log.debug("Media Info: {0}", media_info)
runtime = media_info.get("RunTimeTicks", 0)
log.debug("Media Runtime " + str(runtime))
log.debug("Media Runtime: {0}", runtime)
position_ticks = play_state.get("PositionTicks", 0)
log.debug("Media PositionTicks " + str(position_ticks))
log.debug("Media PositionTicks: {0}", position_ticks)
if position_ticks > 0 and runtime > 0:
percenatge_played = (position_ticks / float(runtime)) * 100.0
percenatge_played = int(percenatge_played)
now_playing = session.get("NowPlayingItem", None)
log.debug("NOW_PLAYING: " + str(now_playing))
log.debug("NOW_PLAYING: {0}", now_playing)
if now_playing is not None:
session_info += " (" + now_playing.get("Name", "na") + " " + str(percenatge_played) + "%)"
log.debug(session_info)
log.debug("session_info: {0}", session_info)
list_item = xbmcgui.ListItem(label=session_info)
item_tuple = ("", list_item, False)
list_items.append(item_tuple)

View File

@@ -19,23 +19,22 @@ class SimpleLogging():
current_value = setting_result.get("result", None)
if current_value is not None:
self.enable_logging = current_value.get("value", False)
#xbmc.log("LOGGING_ENABLED %s: %s" % (self.name, str(self.enable_logging)), level=xbmc.LOGDEBUG)
xbmc.log("LOGGING_ENABLED %s : %s" % (self.name, str(self.enable_logging)), level=xbmc.LOGDEBUG)
def __str__(self):
return "LoggingEnabled: " + str(self.enable_logging)
def error(self, msg):
def error(self, fmt, *args, **kwargs):
log_line = self.name + " (ERROR) -> " + fmt.format(*args, **kwargs)
try:
xbmc.log(self.format(msg, "ERROR"), level=xbmc.LOGERROR)
xbmc.log(log_line, level=xbmc.LOGERROR)
except UnicodeEncodeError:
xbmc.log(self.format(msg, "ERROR").encode('utf-8'), level=xbmc.LOGERROR)
xbmc.log(log_line.encode('utf-8'), level=xbmc.LOGERROR)
def debug(self, msg):
if (self.enable_logging):
def debug(self, fmt, *args, **kwargs):
if self.enable_logging:
log_line = self.name + " (DEBUG) -> " + fmt.format(*args, **kwargs)
try:
xbmc.log(self.format(msg, "DEBUG"), level=xbmc.LOGDEBUG)
xbmc.log(log_line, level=xbmc.LOGDEBUG)
except UnicodeEncodeError:
xbmc.log(self.format(msg, "DEBUG").encode('utf-8'), level=xbmc.LOGDEBUG)
def format(self, msg, levelValue):
return self.name + "(" + str(levelValue) + ") -> " + msg
xbmc.log(log_line.encode('utf-8'), level=xbmc.LOGDEBUG)

View File

@@ -111,7 +111,7 @@ def get_match(item_type, title, year, imdb_id):
results = results.get('SearchHints')
if results is None:
results = []
log.debug('SearchHints jsonData: ' + str(results))
log.debug('SearchHints jsonData: {0}', results)
potential_matches = []
@@ -121,12 +121,12 @@ def get_match(item_type, title, year, imdb_id):
if (name == title and int(year) == production_year) or (int(year) == production_year):
potential_matches.append(item)
log.debug('Potential matches: ' + str(potential_matches))
log.debug('Potential matches: {0}', potential_matches)
for item in potential_matches:
item_imdb_id = get_imdb_id(item.get('ItemId'))
if item_imdb_id == imdb_id:
log.debug('Found match: ' + str(item))
log.debug('Found match: {0}', item)
return item
return None

View File

@@ -10,7 +10,7 @@ def i18n(string_id):
try:
return addon.getLocalizedString(STRINGS[string_id]).encode('utf-8', 'ignore')
except Exception as e:
log.error('Failed String Lookup: %s (%s)' % (string_id, e))
log.error('Failed String Lookup: {0} ({1})', string_id, e)
return string_id

View File

@@ -18,6 +18,7 @@ from simple_logging import SimpleLogging
from clientinfo import ClientInformation
from json_rpc import json_rpc
from translation import i18n
from datamanager import DataManager
# define our global download utils
downloadUtils = DownloadUtils()
@@ -31,13 +32,13 @@ class PlayUtils():
addonSettings = xbmcaddon.Addon(id='plugin.video.embycon')
playback_type = addonSettings.getSetting("playback_type")
server = downloadUtils.getServer()
log.debug("playback_type: " + playback_type)
log.debug("playback_type: {0}", playback_type)
if force_transcode:
log.debug("playback_type: FORCED_TRANSCODE")
playurl = None
log.debug("play_session_id: " + play_session_id)
log.debug("play_session_id: {0}", play_session_id)
media_source_id = media_source.get("Id")
log.debug("media_source_id: " + media_source_id)
log.debug("media_source_id: {0}", media_source_id)
is_h265 = False
streams = media_source.get("MediaStreams", [])
@@ -62,7 +63,7 @@ class PlayUtils():
if playback_type == "2":
playback_bitrate = addonSettings.getSetting("playback_bitrate")
log.debug("playback_bitrate: " + playback_bitrate)
log.debug("playback_bitrate: {0}", playback_bitrate)
playback_max_width = addonSettings.getSetting("playback_max_width")
playback_video_force_8 = addonSettings.getSetting("playback_video_force_8") == "true"
@@ -117,7 +118,7 @@ class PlayUtils():
user_token = downloadUtils.authenticate()
playurl = playurl + "&api_key=" + user_token
log.debug("Playback URL: " + playurl)
log.debug("Playback URL: {0}", playurl)
return playurl.encode('utf-8'), playback_type
def getStrmDetails(self, media_source):
@@ -135,12 +136,14 @@ class PlayUtils():
lines = contents.split(line_break)
for line in lines:
line = line.strip()
log.debug("STRM Line: " + line)
log.debug("STRM Line: {0}", line)
if line.startswith('#KODIPROP:'):
match = re.search('#KODIPROP:(?P<item_property>[^=]+?)=(?P<property_value>.+)', line)
if match:
log.debug("STRM property found: " + match.group('item_property') + " Value: " + match.group('property_value'))
listitem_props.append((match.group('item_property'), match.group('property_value')))
item_property = match.group('item_property')
property_value = match.group('property_value')
log.debug("STRM property found: {0} value: {1}", item_property, property_value)
listitem_props.append((item_property, property_value))
else:
log.debug("STRM #KODIPROP incorrect format")
elif line.startswith('#'):
@@ -150,7 +153,7 @@ class PlayUtils():
playurl = line
log.debug("STRM playback url found")
log.debug("Playback URL: " + str(playurl) + " ListItem Properties: " + str(listitem_props))
log.debug("Playback URL: {0} ListItem Properties: {1}", playurl, listitem_props)
return playurl, listitem_props
@@ -276,13 +279,13 @@ def cache_artwork():
web_port = {"setting": "services.webserverport"}
result = json_rpc('Settings.GetSettingValue').execute(web_port)
xbmc_port = result['result']['value']
log.debug("xbmc_port: " + str(xbmc_port))
log.debug("xbmc_port: {0}", xbmc_port)
# get the user
web_user = {"setting": "services.webserverusername"}
result = json_rpc('Settings.GetSettingValue').execute(web_user)
xbmc_username = result['result']['value']
log.debug("xbmc_username: " + str(xbmc_username))
log.debug("xbmc_username: {0}", xbmc_username)
# get the password
web_pass = {"setting": "services.webserverpassword"}
@@ -298,7 +301,7 @@ def cache_artwork():
json_result = json_rpc('Textures.GetTextures').execute()
textures = json_result.get("result", {}).get("textures", [])
log.debug("texture ids: " + str(textures))
log.debug("texture ids: {0}", textures)
total = len(textures)
for texture in textures:
texture_id = texture["textureid"]
@@ -340,11 +343,10 @@ def cache_artwork():
'&ImageTypeLimit=1' +
'&format=json')
results = downloadUtils.downloadUrl(url, method="GET")
data_manager = DataManager()
results = data_manager.GetContent(url)
if results is None:
results = []
else:
results = json.loads(results)
if isinstance(results, dict):
results = results.get("Items")
@@ -360,10 +362,10 @@ def cache_artwork():
if image_url not in texture_urls and not image_url.endswith("&Tag=") and len(image_url) > 0:
missing_texture_urls.add(image_url)
log.debug("texture_urls:" + str(texture_urls))
log.debug("missing_texture_urls: " + str(missing_texture_urls))
log.debug("Number of existing textures: %s" % len(texture_urls))
log.debug("Number of missing textures: %s" % len(missing_texture_urls))
log.debug("texture_urls: {0}", texture_urls)
log.debug("missing_texture_urls: {0}", missing_texture_urls)
log.debug("Number of existing textures: {0}", len(texture_urls))
log.debug("Number of missing textures: {0}", len(missing_texture_urls))
kodi_http_server = "localhost:" + str(xbmc_port)
headers = {}
@@ -378,10 +380,10 @@ def cache_artwork():
count_done = 0
for get_url in missing_texture_urls:
log.debug("texture_url:" + get_url)
log.debug("texture_url: {0}", get_url)
url = double_urlencode(get_url)
kodi_texture_url = ("/image/image://%s" % url)
log.debug("kodi_texture_url: " + kodi_texture_url)
log.debug("kodi_texture_url: {0}", kodi_texture_url)
percentage = int((float(index) / float(total)) * 100)
message = "%s of %s" % (index, total)
@@ -392,7 +394,7 @@ def cache_artwork():
data = conn.getresponse()
if data.status == 200:
count_done += 1
log.debug("Get Image Result: " + str(data.status))
log.debug("Get Image Result: {0}", data.status)
index += 1
if pdialog.iscanceled():

View File

@@ -48,17 +48,17 @@ class WebSocketClient(threading.Thread):
self._playstate(data)
elif message_type == "UserDataChanged":
log.debug("WebSocket Message UserDataChanged: %s" % message)
log.debug("WebSocket Message UserDataChanged: {0}", message)
elif message_type == "LibraryChanged":
log.debug("WebSocket Message LibraryChanged: %s" % message)
log.debug("WebSocket Message LibraryChanged: {0}", message)
elif message_type == "GeneralCommand":
data = result['Data']
self._general_commands(data)
else:
log.debug("WebSocket Message Type: %s" % message)
log.debug("WebSocket Message Type: {0}", message)
def _play(cls, data):
@@ -67,7 +67,7 @@ class WebSocketClient(threading.Thread):
if command == 'PlayNow':
startat = data.get('StartPositionTicks', 0)
log.debug("WebSocket Message PlayNow: %s" % data)
log.debug("WebSocket Message PlayNow: {0}", data)
media_source_id = data.get("MediaSourceId", "")
@@ -99,14 +99,14 @@ class WebSocketClient(threading.Thread):
seek_to = data['SeekPositionTicks']
seek_time = seek_to / 10000000.0
player.seekTime(seek_time)
log.debug("Seek to %s" % seek_time)
log.debug("Seek to {0}", seek_time)
elif command in actions:
actions[command]()
log.debug("Command: %s completed" % command)
log.debug("Command: {0} completed", command)
else:
log.debug("Unknown command: %s" % command)
log.debug("Unknown command: {0}", command)
return
def _general_commands(cls, data):
@@ -146,7 +146,7 @@ class WebSocketClient(threading.Thread):
header = arguments['Header']
text = arguments['Text']
# show notification here
log.debug("WebSocket DisplayMessage: %s" % text)
log.debug("WebSocket DisplayMessage: {0}", text)
xbmcgui.Dialog().notification("EmbyCon", text)
elif command == 'SendString':
@@ -204,7 +204,7 @@ class WebSocketClient(threading.Thread):
self.post_capabilities()
def on_error(self, ws, error):
log.debug("Error: %s" % error)
log.debug("Error: {0}", error)
def run(self):
@@ -225,7 +225,7 @@ class WebSocketClient(threading.Thread):
server = server.replace('http', "ws")
websocket_url = "%s/embywebsocket?api_key=%s&deviceId=%s" % (server, token, self.device_id)
log.debug("websocket url: %s" % websocket_url)
log.debug("websocket url: {0}", websocket_url)
self._client = websocket.WebSocketApp(websocket_url,
on_message=self.on_message,
@@ -298,5 +298,5 @@ class WebSocketClient(threading.Thread):
download_utils = downloadutils.DownloadUtils()
download_utils.downloadUrl(url, postBody=data, method="POST")
log.debug("Posted Capabilities: %s" % data)
log.debug("Posted Capabilities: {0}", data)

View File

@@ -35,7 +35,7 @@ def checkForNewContent():
added_result = downloadUtils.downloadUrl(added_url, suppress=True)
result = json.loads(added_result)
log.debug("LATEST_ADDED_ITEM:" + str(result))
log.debug("LATEST_ADDED_ITEM: {0}", result)
last_added_date = ""
if result is not None:
@@ -43,7 +43,7 @@ def checkForNewContent():
if len(items) > 0:
item = items[0]
last_added_date = item.get("Etag", "")
log.debug("last_added_date: " + last_added_date)
log.debug("last_added_date: {0}", last_added_date)
played_url = ('{server}/emby/Users/{userid}/Items' +
'?Recursive=true' +
@@ -57,7 +57,7 @@ def checkForNewContent():
played_result = downloadUtils.downloadUrl(played_url, suppress=True)
result = json.loads(played_result)
log.debug("LATEST_PLAYED_ITEM:" + str(result))
log.debug("LATEST_PLAYED_ITEM: {0}", result)
last_played_date = ""
if result is not None:
@@ -65,29 +65,29 @@ def checkForNewContent():
if len(items) > 0:
item = items[0]
last_played_date = item.get("Etag", "")
log.debug("last_played_date: " + last_played_date)
log.debug("last_played_date: {0}", last_played_date)
home_window = HomeWindow()
current_widget_hash = home_window.getProperty("embycon_widget_reload")
log.debug("Current Widget Hash: " + str(current_widget_hash))
log.debug("Current Widget Hash: {0}", current_widget_hash)
m = hashlib.md5()
m.update(last_played_date + last_added_date)
new_widget_hash = m.hexdigest()
log.debug("New Widget Hash: " + str(new_widget_hash))
log.debug("New Widget Hash: {0}", new_widget_hash)
if current_widget_hash != new_widget_hash:
home_window.setProperty("embycon_widget_reload", new_widget_hash)
log.debug("Setting New Widget Hash: " + str(new_widget_hash))
log.debug("Setting New Widget Hash: {0}", new_widget_hash)
def getWidgetUrlContent(handle, params):
log.debug("getWidgetUrlContent Called" + str(params))
log.debug("getWidgetUrlContent Called: {0}", params)
request = params["url"]
request = urllib.unquote(request)
request = "{server}/emby/" + request + "&ImageTypeLimit=1&format=json"
log.debug("getWidgetUrlContent URL:" + request)
log.debug("getWidgetUrlContent URL: {0}", request)
select_action = params.get("action", None)
@@ -98,7 +98,7 @@ def getWidgetUrlContent(handle, params):
def getSuggestions(handle, params):
log.debug("getSuggestions Called" + str(params))
log.debug("getSuggestions Called: {0}", params)
itemsUrl = ("{server}/emby/Movies/Recommendations" +
"?userId={userid}" +
@@ -114,7 +114,7 @@ def getSuggestions(handle, params):
xbmcplugin.endOfDirectory(handle, cacheToDisc=False)
def getWidgetContentNextUp(handle, params):
log.debug("getWidgetContentNextUp Called" + str(params))
log.debug("getWidgetContentNextUp Called: {0}", params)
itemsUrl = ("{server}/emby/Shows/NextUp?SeriesId=" + params["id"] +
"&userId={userid}" +
@@ -130,7 +130,7 @@ def getWidgetContentNextUp(handle, params):
def getWidgetContentSimilar(handle, params):
log.debug("getWisgetContentSimilarMovies Called" + str(params))
log.debug("getWisgetContentSimilarMovies Called: {0}", params)
itemsUrl = ("{server}/emby/Items/" + params["id"] + "/Similar"
"?userId={userid}" +
@@ -147,13 +147,13 @@ def getWidgetContentSimilar(handle, params):
def getWidgetContentCast(handle, params):
log.debug("getWigetContentCast Called" + str(params))
log.debug("getWigetContentCast Called: {0}", params)
server = downloadUtils.getServer()
id = params["id"]
data_manager = DataManager()
result = data_manager.GetContent("{server}/emby/Users/{userid}/Items/" + id + "?format=json")
log.debug("ItemInfo: " + str(result))
log.debug("ItemInfo: {0}", result)
listItems = []
people = result.get("People")
@@ -204,7 +204,7 @@ def populateWidgetItems(itemsUrl, override_select_action=None):
if override_select_action is not None:
select_action = str(override_select_action)
log.debug("WIDGET_DATE_URL: " + itemsUrl)
log.debug("WIDGET_DATE_URL: {0}", itemsUrl)
# get the items
data_manager = DataManager()
@@ -225,7 +225,7 @@ def populateWidgetItems(itemsUrl, override_select_action=None):
item_id = item["Id"]
name = item["Name"]
episodeDetails = ""
log.debug("WIDGET_DATE_NAME: " + name)
log.debug("WIDGET_DATE_NAME: {0}", name)
title = name
tvshowtitle = ""
@@ -318,7 +318,7 @@ def populateWidgetItems(itemsUrl, override_select_action=None):
def getWidgetContent(handle, params):
log.debug("getWigetContent Called" + str(params))
log.debug("getWigetContent Called: {0}", params)
type = params.get("type")
if (type == None):

View File

@@ -30,7 +30,7 @@ download_utils = DownloadUtils()
try:
download_utils.authenticate()
except Exception as error:
log.error("Error with initial service auth: " + str(error))
log.error("Error with initial service auth: {0}", error)
def hasData(data):
@@ -73,7 +73,7 @@ def sendProgress():
'PlaySessionId': play_session_id
}
log.debug("Sending POST progress started: %s." % postdata)
log.debug("Sending POST progress started: {0}", postdata)
url = "{server}/emby/Sessions/Playing/Progress"
download_utils.downloadUrl(url, postBody=postdata, method="POST")
@@ -106,7 +106,7 @@ def promptForStopActions(item_id, current_possition):
# item percentage complete
percenatge_complete = int(((current_possition * 10000000) / runtime) * 100)
log.debug("Episode Percentage Complete: %s" % percenatge_complete)
log.debug("Episode Percentage Complete: {0}", percenatge_complete)
if (prompt_delete_episode_percentage < 100 and
result.get("Type", "na") == "Episode" and
@@ -122,7 +122,7 @@ def promptForStopActions(item_id, current_possition):
log.debug("Prompting for delete")
resp = xbmcgui.Dialog().yesno(i18n('confirm_file_delete'), i18n('file_delete_confirm'), autoclose=10000)
if resp:
log.debug("Deleting item: %s" % item_id)
log.debug("Deleting item: {0}", item_id)
url = "{server}/emby/Items/%s?format=json" % item_id
download_utils.downloadUrl(url, method="DELETE")
xbmc.executebuiltin("Container.Refresh")
@@ -155,7 +155,7 @@ def promptForStopActions(item_id, current_possition):
jsonData = download_utils.downloadUrl(url)
items_result = json.loads(jsonData)
log.debug("Prompt Next Item Details: %s" % items_result)
log.debug("Prompt Next Item Details: {0}", items_result)
# find next episode
item_list = items_result.get("Items", [])
for item in item_list:
@@ -169,7 +169,7 @@ def promptForStopActions(item_id, current_possition):
if resp:
next_item_id = item.get("Id")
log.debug("Playing Next Episode: %s" % next_item_id)
log.debug("Playing Next Episode: {0}", next_item_id)
play_info = {}
play_info["item_id"] = next_item_id
@@ -188,19 +188,19 @@ def stopAll(played_information):
if len(played_information) == 0:
return
log.debug("played_information : " + str(played_information))
log.debug("played_information: {0}", played_information)
for item_url in played_information:
data = played_information.get(item_url)
if data is not None:
log.debug("item_url : " + item_url)
log.debug("item_data : " + str(data))
log.debug("item_url: {0}", item_url)
log.debug("item_data: {0}", data)
current_possition = data.get("currentPossition", 0)
emby_item_id = data.get("item_id")
if hasData(emby_item_id):
log.debug("Playback Stopped at: " + str(int(current_possition * 10000000)))
log.debug("Playback Stopped at: {0}", current_possition)
url = "{server}/emby/Sessions/Playing/Stopped"
postdata = {
@@ -219,7 +219,7 @@ class Service(xbmc.Player):
played_information = {}
def __init__(self, *args):
log.debug("Starting monitor service: " + str(args))
log.debug("Starting monitor service: {0}", args)
self.played_information = {}
def onPlayBackStarted(self):
@@ -227,7 +227,7 @@ class Service(xbmc.Player):
stopAll(self.played_information)
current_playing_file = xbmc.Player().getPlayingFile()
log.debug("onPlayBackStarted: " + current_playing_file)
log.debug("onPlayBackStarted: {0}", current_playing_file)
home_window = HomeWindow()
emby_item_id = home_window.getProperty("item_id")
@@ -248,7 +248,7 @@ class Service(xbmc.Player):
'PlaySessionId': play_session_id
}
log.debug("Sending POST play started: %s." % postdata)
log.debug("Sending POST play started: {0}", postdata)
url = "{server}/emby/Sessions/Playing"
download_utils.downloadUrl(url, postBody=postdata, method="POST")
@@ -260,8 +260,8 @@ class Service(xbmc.Player):
data["play_session_id"] = play_session_id
self.played_information[current_playing_file] = data
log.debug("ADDING_FILE : " + current_playing_file)
log.debug("ADDING_FILE : " + str(self.played_information))
log.debug("ADDING_FILE: {0}", current_playing_file)
log.debug("ADDING_FILE: {0}", self.played_information)
def onPlayBackEnded(self):
# Will be called when kodi stops playing a file
@@ -341,8 +341,8 @@ while not xbmc.abortRequested:
checkForNewContent()
except Exception as error:
log.error("Exception in Playback Monitor : " + str(error))
log.error(traceback.format_exc())
log.error("Exception in Playback Monitor: {0}", error)
log.error("{0}", traceback.format_exc())
xbmc.sleep(1000)