def __new__(cls): if xbmc.getFreeMem() == long(): KodiLogger.kodirunning = False if KodiLogger._instance is None: with KodiLogger._lock: if KodiLogger._instance is None: KodiLogger._instance = super(KodiLogger, cls).__new__(cls) return KodiLogger._instance
def LOG( status, format, *args ): try: dwAvailPhys = str( long( xbmc.getFreeMem() * 1024.0 * 1024.0 ) ) except: dwAvailPhys = "?" status = ( "ERROR", "INFO", "NOTICE", "DEBUG", "WARNING", )[ status - 1 ] _pre_line_ = "%s M: %s %s: " % ( time.strftime( "%X" ), dwAvailPhys, status.rjust( 7 ), ) _write_line_ = "%s\n" % ( format % args, ) file( LOG_SCRIPT, "a" ).write( _pre_line_ + _write_line_ ) if ( DEBUG_MODE >= status ): xbmc.output( _write_line_.strip( "\n" ) )
def run(self): ''' Prepare the request. Request removes the urlencode which is required in this case. Use a session allows to use a pool of connections. ''' monitor = xbmc.Monitor() with requests.Session() as s: while True: memory_available = xbmc.getFreeMem() if memory_available < 650: # seems going lower causes instabilities in Kodi if monitor.waitForAbort(2): LOG.info("[ exited artwork/%s ]", id(self)) break continue try: url = self.queue.get(timeout=2) except Queue.Empty: self.threads.remove(self) LOG.info("--<[ q:artwork/%s ]", id(self)) return try: req = requests.Request( method='HEAD', url="http://%s:%s/image/image://%s" % (self.kodi['host'], self.kodi['port'], url), auth=(self.kodi['username'], self.kodi['password'])) prep = req.prepare() prep.url = "http://%s:%s/image/image://%s" % ( self.kodi['host'], self.kodi['port'], url) s.send(prep, timeout=(0.01, 0.01)) s.content # release the connection except Exception: pass self.queue.task_done() if window('emby_should_stop.bool'): LOG.info("[ exited artwork/%s ]", id(self)) break
def LOG(status, format, *args): try: dwAvailPhys = str(long(xbmc.getFreeMem() * 1024.0 * 1024.0)) except: dwAvailPhys = "?" status = ( "ERROR", "INFO", "NOTICE", "DEBUG", "WARNING", )[status - 1] _pre_line_ = "%s M: %s %s: " % ( time.strftime("%X"), dwAvailPhys, status.rjust(7), ) _write_line_ = "%s\n" % (format % args, ) file(LOG_SCRIPT, "a").write(_pre_line_ + _write_line_) if (DEBUG_MODE >= status): xbmc.output(_write_line_.strip("\n"))
def _get(self, key): if key == 'lang': return xbmc.getLanguage() elif key == 'langname': langname = xbmc.getLanguage() if langname.find('Oromo') != -1: langname = 'Oromo' else: for tag in (' (', ';', ','): i = langname.find(tag) if i != -1: langname = langname[0:i] break try: LANGCODE[langname] except KeyError: return 'English' else: return langname elif key == 'langcode': return LANGCODE[self._get('langname')] elif key == 'dvd': state = {0: 'open', 1: 'notready', 2: 'ready', 3: 'empty', 4: 'present', 5: None} return state[xbmc.getDVDState()] elif key == 'mem': return xbmc.getFreeMem() # MB elif key == 'time': return xbmc.getGlobalIdleTime() elif key == 'skin': return xbmc.getSkinDir() elif key == 'ip': return xbmc.getIPAddress() elif key == 'platform': if self._platform == -1: for platform in ('linux', 'windows', 'android', 'atv2', 'ios', 'osx'): if xbmc.getCondVisibility('system.platform.' + platform): self._platform = platform break else: self._platform = None return self._platform elif key == 'is_64bits': return sys.maxsize > 2**32 elif key == 'support': if not self._support['all']: for src, dst in (('video', 'video'), ('music', 'audio'), ('picture', 'picture')): self._support[dst] = [x[1:] for x in xbmc.getSupportedMedia(src).split('|')] self._support['all'].extend(self._support[dst]) return self._support elif key == 'region': if not self._region: for tag in ('dateshort', 'datelong', 'time', 'meridiem', 'tempunit', 'speedunit'): self._region[tag] = xbmc.getRegion(tag) return self._region else: raise AttributeError, key
except ImportError: import xml.etree.ElementTree as ET def logprint(msg='', level=0): if msg != '' and level > -1: print msg try: import xbmc import xbmcaddon except ImportError: NOXBMC = True else: if xbmc.getFreeMem() == long(0): NOXBMC = True else: NOXBMC = False if NOXBMC: log = logprint else: log = xbmc.log class KodiPo(object): """ Main class for retrieving localized strings. Implemented as singleton """ _instance = None
except ImportError: import xml.etree.ElementTree as ET def logprint(msg='', level=0): if msg != '' and level > -1: print(msg) try: import xbmc import xbmcaddon except ImportError: NOXBMC = True else: if xbmc.getFreeMem() == int(0): NOXBMC = True else: NOXBMC = False if NOXBMC: log = logprint else: log = xbmc.log class KodiPo(object): """ Main class for retrieving localized strings. Implemented as singleton """ _instance = None
def _get(self, key): if key == 'lang': return xbmc.getLanguage() elif key == 'langname': langname = xbmc.getLanguage() if langname.find('Oromo') != -1: langname = 'Oromo' else: for tag in (' (', ';', ','): i = langname.find(tag) if i != -1: langname = langname[0:i] break try: LANGCODE[langname] except KeyError: return 'English' else: return langname elif key == 'langcode': return LANGCODE[self._get('langname')] elif key == 'dvd': state = { 0: 'open', 1: 'notready', 2: 'ready', 3: 'empty', 4: 'present', 5: None } return state[xbmc.getDVDState()] elif key == 'mem': return xbmc.getFreeMem() # MB elif key == 'time': return xbmc.getGlobalIdleTime() elif key == 'skin': return xbmc.getSkinDir() elif key == 'ip': return xbmc.getIPAddress() elif key == 'platform': if self._platform == -1: for platform in ('linux', 'windows', 'android', 'atv2', 'ios', 'osx'): if xbmc.getCondVisibility('system.platform.' + platform): self._platform = platform break else: self._platform = None return self._platform elif key == 'is_64bits': return sys.maxsize > 2**32 elif key == 'support': if not self._support['all']: for src, dst in (('video', 'video'), ('music', 'audio'), ('picture', 'picture')): self._support[dst] = [ x[1:] for x in xbmc.getSupportedMedia(src).split('|') ] self._support['all'].extend(self._support[dst]) return self._support elif key == 'region': if not self._region: for tag in ('dateshort', 'datelong', 'time', 'meridiem', 'tempunit', 'speedunit'): self._region[tag] = xbmc.getRegion(tag) return self._region else: raise AttributeError, key