def cdll_indigo(path): def lib_name(): return "{}{}{}".format(prefix, lib, suffix) prefix = None suffix = None runtimes_folder = None libs = ['indigo', 'indigo-renderer', 'indigo-inchi', 'bingo'] libs_instances = [] if getPlatform() == 'win': prefix = '' suffix = '.dll' # runtimes_folder = 'win-x64' libs += ['vcruntime140', 'vcruntime_140_1', 'msvcp140', 'concrt140'] elif getPlatform() == 'linux': prefix = 'lib' suffix = '.so' # runtimes_folder = 'linux-x64' elif getPlatform() == 'mac': prefix = 'lib' suffix = '.dylib' # runtimes_folder = 'osx-x64' else: raise RuntimeError('Invalid platform: {}'.format(getPlatform())) import ctypes for lib in libs: lib_path = os.path.normpath( os.path.join(path, '..', 'lib', 'netstandard2.0', lib_name())) if file_exists(lib_path): libs_instances.append(ctypes.CDLL(lib_path)) return libs_instances
def test_verifyFFMpeg_ThrowsExceptionOnNonExistentExecutable(self): platform = util.getPlatform() if (type(platform) == util.UnixPlatform): try: mythtv.MythSettings.verifyFFMpeg('/bin/bogus_exe_name', platform) self.fail("expected failure on invalid exe name") except mythtv.SettingsException, ex: log.debug('PASS: %s' % ex)
def test_verifyFFMpeg_OK(self): platform = util.getPlatform() if (type(platform) == util.UnixPlatform): try: mythtv.MythSettings.verifyFFMpeg('/bin/true', platform) except mythtv.SettingsException: self.fail("expected /bin/true to be a valid executable") else: log.warn('Test not supported on this platform: %s' % platform)
def test_which_ExecutableNotFound(self): platform = util.getPlatform() if type(platform) == util.WindowsPlatform: exe = "bogus_executable_name.exe" elif type(platform) == util.UnixPlatform: exe = "bogus_executable_name" else: log.warn("Skipping test. Platform not supported") return exepath = util.which(exe) self.assertTrue(exepath is None)
def test_which_ExecutableFound(self): platform = util.getPlatform() if type(platform) == util.WindowsPlatform: exe = "cmd.exe" elif type(platform) == util.UnixPlatform: exe = "true" else: log.warn("Skipping test. Platform not supported") return exepath = util.which(exe) log.debug('which found %s' % exepath) self.assertFalse(exepath is None)
def getRefFilepath2(filename): """ Returns: reference path for the specified filename in stack 2. Platform specific if necessary """ with inspectStackLock: frm = inspect.stack()[2][1] ref_path = os.path.abspath(os.path.join(os.path.dirname(frm), 'ref')) if file_exists(os.path.join(ref_path, filename)): return os.path.normpath(os.path.abspath(os.path.join(ref_path, filename))) sys_name = getPlatform() if file_exists(os.path.join(ref_path, sys_name, filename)): return os.path.normpath(os.path.abspath(os.path.join(ref_path, sys_name, filename))) raise RuntimeError('Can not find a file "%s" neither at "%s" or "%s"' % (filename, ref_path, os.path.abspath(os.path.join(ref_path, sys_name))))
def setUp(self): self.platform = util.getPlatform() self.translator = Mock() self.settings = mythtv.MythSettings(self.platform, self.translator) privateConfig = util.OnDemandConfig() self.settings.put('mysql_host', privateConfig.get('mysql_host')) self.settings.put('mysql_password', privateConfig.get('mysql_password')) self.settings.put('mysql_port', privateConfig.get('mysql_port')) self.settings.put('mythtv_host', privateConfig.get('mythtv_host')) self.settings.put('mythtv_port', privateConfig.get('mythtv_port')) self.settings.put('paths_recordedprefix', privateConfig.get('paths_recordedprefix')) self.db = mythdb.MythDatabase(self.settings, self.translator) self.conn = mythtv.Connection(self.settings, self.db, self.translator, self.platform)
import clr target_framework = 'netstandard2.0' dll_full_path = os.path.normpath( os.path.abspath( os.path.join( indigo_root, "api/dotnet/bin/Release/{}/Indigo.Net.dll".format( target_framework)))) if not os.path.exists(dll_full_path): for distPath in distPaths: if not dir_exists(distPath): continue dll_full_path_base = None for item in os.listdir(distPath): if item.startswith('indigo-dotnet-') and item.endswith( '.zip') and (getPlatform() in item or 'universal' in item) and ( target_framework in item): curdir = os.path.abspath(os.curdir) os.chdir(distPath) top_file = item.replace('.zip', '') top_file = unzip(item, os.curdir) or top_file os.chdir(curdir) dll_full_path_base = os.path.abspath( os.path.join(cur_path, distPath, top_file)) break if dll_full_path_base: dll_full_path = os.path.abspath( os.path.join( cur_path, "%s/Indigo.Net.dll" % (dll_full_path_base)))
def test_getPlatform(self): platform = util.getPlatform() self.assertTrue(platform is not None)
log.info(">> MythBox Version: %s <<" % __version__) updateProgress("Creating Main Window") import mythtv import mythdb import mythtv import util updateProgress("Checking Settings") # TODO: Springify later... # Injected dependencies that get passed all over the place # 1 platform = util.getPlatform() log.debug(platform) # 2 translator = util.NativeTranslator(platform.getScriptDir()) # 3 settings = mythtv.MythSettings(platform, translator, 'settings.xml') settingsOK = False try: import uisettings settings.verify() settingsOK = True except mythtv.SettingsException: settingsWindow = uisettings.showWindow(myprogress, settings, translator, platform) try:
class PlexInterface(plexapp.AppInterface): _regs = { None: {}, } _globals = { 'platform': 'Kodi', 'appVersionStr': util.ADDON.getAddonInfo('version'), 'clientIdentifier': CLIENT_ID, 'platformVersion': xbmc.getInfoLabel('System.BuildVersion'), 'product': 'Plex for Kodi', 'provides': 'player', 'device': util.getPlatform() or plexapp.PLATFORM, 'model': 'Unknown', 'friendlyName': 'Kodi Add-on iOS', 'supports1080p60': True, 'vp9Support': True, 'transcodeVideoQualities': [ "10", "20", "30", "30", "40", "60", "60", "75", "100", "60", "75", "90", "100", "100" ], 'transcodeVideoResolutions': [ plexapp.Res((220, 180)), plexapp.Res((220, 128)), plexapp.Res((284, 160)), plexapp.Res((420, 240)), plexapp.Res((576, 320)), plexapp.Res((720, 480)), plexapp.Res((1024, 768)), plexapp.Res((1280, 720)), plexapp.Res((1280, 720)), maxVideoRes, maxVideoRes, maxVideoRes, maxVideoRes, maxVideoRes ], 'transcodeVideoBitrates': [ "64", "96", "208", "320", "720", "1500", "2000", "3000", "4000", "8000", "10000", "12000", "20000", "200000" ], 'deviceInfo': plexapp.DeviceInfo() } def getPreference(self, pref, default=None): if pref == 'manual_connections': return self.getManualConnections() else: return util.getSetting(pref, default) def getManualConnections(self): conns = [] for i in range(2): ip = util.getSetting('manual_ip_{0}'.format(i)) if not ip: continue port = util.getSetting('manual_port_{0}'.format(i), 32400) conns.append({'connection': ip, 'port': port}) return json.dumps(conns) def setPreference(self, pref, value): util.setSetting(pref, value) def getRegistry(self, reg, default=None, sec=None): if sec == 'myplex' and reg == 'MyPlexAccount': ret = util.getSetting('{0}.{1}'.format(sec, reg), default) if ret: return ret return json.dumps({'authToken': util.getSetting('auth.token')}) else: return util.getSetting('{0}.{1}'.format(sec, reg), default) def setRegistry(self, reg, value, sec=None): util.setSetting('{0}.{1}'.format(sec, reg), value) def clearRegistry(self, reg, sec=None): util.setSetting('{0}.{1}'.format(sec, reg), '') def addInitializer(self, sec): pass def clearInitializer(self, sec): pass def getGlobal(self, glbl, default=None): if glbl == 'transcodeVideoResolutions': maxres = self.getPreference('allow_4k', True) and plexapp.Res((3840, 2160)) or plexapp.Res((1920, 1080)) self._globals['transcodeVideoResolutions'][-5:] = [maxres] * 5 return self._globals.get(glbl, default) def getCapabilities(self): return '' def LOG(self, msg): util.DEBUG_LOG('API: {0}'.format(msg)) def DEBUG_LOG(self, msg): self.LOG('DEBUG: {0}'.format(msg)) def WARN_LOG(self, msg): self.LOG('WARNING: {0}'.format(msg)) def ERROR_LOG(self, msg): self.LOG('ERROR: {0}'.format(msg)) def ERROR(self, msg=None, err=None): if err: self.LOG('ERROR: {0} - {1}'.format(msg, err.message)) else: util.ERROR() def supportsAudioStream(self, codec, channels): return True # if codec = invalid then return true # canDownmix = (m.globals["audioDownmix"][codec] <> invalid) # supportsSurroundSound = m.SupportsSurroundSound() # if not supportsSurroundSound and canDownmix then # maxChannels = m.globals["audioDownmix"][codec] # else # maxChannels = firstOf(m.globals["audioDecoders"][codec], 0) # end if # if maxChannels > 2 and not canDownmix and not supportsSurroundSound then # ' It's a surround sound codec and we can't do surround sound # supported = false # else if maxChannels = 0 or maxChannels < channels then # ' The codec is either unsupported or can't handle the requested channels # supported = false # else # supported = true # return supported def supportsSurroundSound(self): return True def getQualityIndex(self, qualityType): if qualityType == self.QUALITY_LOCAL: return self.getPreference("local_quality", 13) elif qualityType == self.QUALITY_ONLINE: return self.getPreference("online_quality", 8) else: return self.getPreference("remote_quality", 13) def getMaxResolution(self, quality_type, allow4k=False): qualityIndex = self.getQualityIndex(quality_type) if qualityIndex >= 9: if self.getPreference('allow_4k', True): return allow4k and 2160 or 1088 else: return 1088 elif qualityIndex >= 6: return 720 elif qualityIndex >= 5: return 480 else: return 360