--- a
+++ b/src/cdplugins/qobuz/debug.py
@@ -0,0 +1,90 @@
+from __future__ import print_function
+'''
+ qobuz.debug
+ ~~~~~~~~~~~
+
+ :part_of: xbmc-qobuz
+ :copyright: (c) 2012 by Joachim Basmaison, Cyril Leclerc
+ :license: GPLv3, see LICENSE for more details.
+'''
+import sys
+
+__debugging__ = True
+ourlog = None
+LOGDEBUG = None
+LOGNOTICE = None
+LOGERROR = None
+LOGSEVERE = None
+
+try:
+ import xbmc # @UnresolvedImport
+ import xbmcaddon # @UnresolvedImport
+ ourlog = xbmc.log
+ LOGDEBUG = xbmc.LOGDEBUG
+ LOGNOTICE = xbmc.LOGNOTICE
+ LOGERROR = xbmc.LOGERROR
+ LOGSEVERE = xbmc.LOGSEVERE
+ __debugging__ = False
+ if xbmcaddon.Addon(id='plugin.audio.qobuz').getSetting('debug') == 'true':
+ __debugging__ = True
+except Exception as e:
+ LOGDEBUG = '[DEBUG]'
+ LOGNOTICE = '[NOTICE]'
+ LOGERROR = '[ERROR]'
+ LOGSEVERE = '[SEVERE]'
+
+ def logfunc(msg):
+ print('%s' % msg, file=sys.stderr)
+ ourlog = logfunc
+
+
+def log(obj, *a, **ka):
+ '''Base for all logging function, run in/out Xbmc
+ Inside Xbmc loggin functions use xbmc.log else they just print
+ message to STDOUT
+ '''
+ lvl = LOGNOTICE
+ if 'lvl' in ka:
+ lvl = ka['lvl']
+ del ka['lvl']
+ if not __debugging__:
+ return
+ name = None
+ if isinstance(obj, basestring):
+ name = obj
+ else:
+ try:
+ name = obj.__class__.__name__
+ except:
+ name = type(obj)
+ msg = None
+ num_argument = len(a)
+ if num_argument == 1:
+ msg = a[0].format(**ka)
+ elif num_argument > 1:
+ msg = a[0].format(*a[1:], **ka)
+ ourlog('[Qobuz/{name}][{level}] {msg}'
+ .format(name=str(name), msg=msg, level=lvl))
+
+
+def warn(obj, *a, **ka):
+ '''facility: LOGERROR'''
+ ka['lvl']= LOGERROR
+ log(obj, *a, **ka)
+
+
+def info(obj, *a, **ka):
+ '''facility: LOGNOTICE'''
+ ka['lvl'] = LOGNOTICE
+ log(obj, *a, **ka)
+
+
+def debug(obj, *a, **ka):
+ '''facility: LOGDEBUG'''
+ ka['lvl'] = LOGDEBUG
+ log(obj, *a, **ka)
+
+
+def error(obj, *a, **ka):
+ '''facility: LOGSEVERE'''
+ log(obj, *a, **ka)