Beispiel #1
0
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
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
 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)    
Beispiel #7
0
 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)    
Beispiel #8
0
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))))
Beispiel #9
0
 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)
Beispiel #10
0
    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)
Beispiel #11
0
 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)))
Beispiel #12
0
 def test_getPlatform(self):
     platform = util.getPlatform()
     self.assertTrue(platform is not None)
Beispiel #13
0
    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:
Beispiel #14
0
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