Esempio n. 1
0
 def alarmActive(self, camera_number):
     if Window(10000).getProperty('SR_alarmActive_%s' %
                                  camera_number) == '1':
         return True
     return False
Esempio n. 2
0
def get_property(key, window_id=10000):
    """Get a Window property"""
    return to_unicode(Window(window_id).getProperty(key))
Esempio n. 3
0
def clear_property(key, window_id=10000):
    """Clear a Window property"""
    return Window(window_id).clearProperty(key)
Esempio n. 4
0
 def openRequested_manual(self, camera_number):
     if Window(10000).getProperty('SR_openRequest_manual_%s' %
                                  camera_number) == '1':
         return True
     return False
Esempio n. 5
0
def play_video(video_id,
               client_data,
               stream_type,
               season_id=None,
               compilation_id=None):

    from .mpd_parser import mpd_parser as mpd_parser
    from xbmc import getCondVisibility
    xbmc_helper().log_debug('play_video: video_id {}', video_id)
    succeeded = False
    list_item = ListItem()

    try:
        from .submodules.libjoyn_video import get_video_data
        video_data = get_video_data(video_id, loads(client_data), stream_type,
                                    season_id, compilation_id)

        xbmc_helper().log_debug('Got video data: {}',
                                video_data.get('licenseUrl'))

        parser = video_data.get('parser', None)
        if parser is not None:
            list_item.setProperty('inputstreamaddon',
                                  CONST['INPUTSTREAM_ADDON'])
            # DASH
            if isinstance(parser, mpd_parser):
                list_item.setMimeType('application/dash+xml')
                list_item.setProperty(
                    compat._format('{}.manifest_type',
                                   CONST['INPUTSTREAM_ADDON']), 'mpd')
                if parser.mpd_filepath is not None:
                    list_item.setPath(
                        parser.mpd_filepath
                        if not getCondVisibility('System.Platform.Windows')
                        and not getCondVisibility('System.Platform.UWP') else
                        parser.mpd_filepath.replace('\\', '/'))
                elif parser.mpd_url is not None:
                    list_item.setPath(lib_joyn().add_user_agent_http_header(
                        parser.mpd_url))
                else:
                    raise ValueError(
                        compat._format(
                            'Could not find a valid DASH Manifest - parser: {}',
                            vars(mpd_parser)))

                drm = video_data.get('drm', '')
                license_key = video_data.get('licenseUrl', None)
                license_cert = video_data.get('certificateUrl', None)
                xbmc_helper().log_debug('drm: {} key: {} cert: {}', drm,
                                        license_key, license_cert)

                if license_key is not None:
                    if drm.lower() == 'widevine':
                        xbmc_helper().log_notice('Using Widevine as DRM')
                        list_item.setProperty(
                            compat._format('{}.license_type',
                                           CONST['INPUTSTREAM_ADDON']),
                            'com.widevine.alpha')
                        list_item.setProperty(
                            compat._format('{}.license_key',
                                           CONST['INPUTSTREAM_ADDON']),
                            compat._format(
                                '{}|{}|R{{SSM}}|', license_key,
                                request_helper.get_header_string({
                                    'User-Agent':
                                    lib_joyn().config.get('USER_AGENT'),
                                    'Content-Type':
                                    'application/octet-stream'
                                })))
                        list_item.setProperty(
                            compat._format('{}.stream_headers',
                                           CONST['INPUTSTREAM_ADDON']),
                            request_helper.get_header_string({
                                'User-Agent':
                                lib_joyn().config['USER_AGENT']
                            }))

                        if license_cert is not None and xbmc_helper(
                        ).get_bool_setting('checkdrmcert') is True:
                            xbmc_helper().log_debug('Set DRM cert: {}',
                                                    license_cert)
                            list_item.setProperty(
                                compat._format('{}.server_certificate',
                                               CONST['INPUTSTREAM_ADDON']),
                                lib_joyn().add_user_agent_http_header(
                                    license_cert))

                    elif drm.lower() == 'playready':
                        xbmc_helper().log_notice('Using PlayReady as DRM')
                        list_item.setProperty(
                            compat._format('{}.license_type',
                                           CONST['INPUTSTREAM_ADDON']),
                            'com.microsoft.playready')
                        list_item.setProperty(
                            compat._format('{}.license_key',
                                           CONST['INPUTSTREAM_ADDON']),
                            compat._format(
                                '{}|{}|R{{SSM}}|', license_key,
                                request_helper.get_header_string({
                                    'User-Agent':
                                    CONST['EDGE_UA'],
                                    'Content-Type':
                                    'text/xml',
                                    'SOAPAction':
                                    'http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense'
                                })))

                        list_item.setProperty(
                            compat._format('{}.stream_headers',
                                           CONST['INPUTSTREAM_ADDON']),
                            request_helper.get_header_string(
                                {'User-Agent': CONST['EDGE_UA']}))
                    else:
                        raise ValueError(
                            compat._format('Unsupported DRM {}', drm))

            if stream_type == 'LIVE':
                list_item.setProperty(
                    compat._format('{}.manifest_update_parameter',
                                   CONST['INPUTSTREAM_ADDON']), 'full')

                if xbmc_helper().get_bool_setting(
                        'fix_livestream_audio_sync') is True:
                    mpd_timeshift_buffer = parser.get_timeshift_buffer_secs()
                    if mpd_timeshift_buffer is not None:
                        xbmc_helper().log_debug(
                            'Got timeshiftbuffer from mpd: {}',
                            mpd_timeshift_buffer)
                        live_stream_length = mpd_timeshift_buffer
                    else:
                        live_stream_length = xbmc_helper().get_int_setting(
                            'livestream_total_length')

                    live_stream_resume_pos = live_stream_length - xbmc_helper(
                    ).get_int_setting('livestream_offset')

                    list_item.setProperty('TotalTime',
                                          str(float(live_stream_length)))
                    list_item.setProperty('ResumeTime',
                                          str(float(live_stream_resume_pos)))
                    xbmc_helper().log_debug(
                        'Tried fixing livestream audio sync issue - total time: {} - resume pos {}',
                        live_stream_length, live_stream_resume_pos)

            succeeded = True

            from .submodules.plugin_lastseen import add_lastseen
            if 'season_id' in video_data.keys(
            ) and video_data['season_id'] is not None:
                add_lastseen(season_id=video_data['season_id'],
                             max_lastseen=CONST['LASTSEEN_ITEM_COUNT'])
            elif 'compilation_id' in video_data.keys(
            ) and video_data['compilation_id'] is not None:
                add_lastseen(compilation_id=video_data['compilation_id'],
                             max_lastseen=CONST['LASTSEEN_ITEM_COUNT'])

        else:
            raise ValueError(compat._format('Could not get parser: {}',
                                            parser))

    except Exception as e:
        xbmc_helper().log_error(
            'Getting videostream / manifest failed with Exception: {}', e)
        xbmc_helper().notification(
            compat._format(xbmc_helper().translation('ERROR'), 'Video-Stream'),
            xbmc_helper().translation('MSG_ERROR_NO_VIDEOSTEAM'))
        pass

    if succeeded is True and stream_type == 'VOD':
        from xbmcgui import Window, getCurrentWindowId
        Window(getCurrentWindowId()).setProperty('joyn_video_id', video_id)

    setResolvedUrl(pluginhandle, succeeded, list_item)
Esempio n. 6
0
 def set_alarmActive(self, camera_number):
     Window(10000).setProperty('SR_alarmActive_%s' % camera_number, '1')
Esempio n. 7
0
 def clear_closeRequest(self, camera_number):
     Window(10000).clearProperty('SR_closeRequest_%s' % camera_number)
Esempio n. 8
0
 def clear_playingCamera(self, camera_number):
     Window(10000).clearProperty('SR_playingCamera_%s' % camera_number)
Esempio n. 9
0
 def overrideURL(self, camera_number, url):
     Window(10000).setProperty('SR_urlOverride_%s' % camera_number, url)
Esempio n. 10
0
 def toggledPreview(self):
     if Window(10000).getProperty('SR_togglePreview') == '1':
         return True
     return False
Esempio n. 11
0
 def set_playingCamera(self, camera_number):
     Window(10000).setProperty('SR_playingCamera_%s' % camera_number, '1')
     self.dismissAllPreviews()
Esempio n. 12
0
 def previewOpened(self, camera_number):
     if Window(10000).getProperty('SR_openPreview_%s' %
                                  camera_number) == '1':
         return True
     return False
Esempio n. 13
0
 def closePreview(self, camera_number):
     self.clear_openRequest(camera_number)
     self.clear_openRequest_manual(camera_number)
     Window(10000).clearProperty('SR_openPreview_%s' % camera_number)
     self.clear_closeRequest(camera_number)
Esempio n. 14
0
 def openPreview(self, camera_number):
     self.clear_closeRequest(camera_number)
     Window(10000).setProperty('SR_openPreview_%s' % camera_number, '1')
     self.clear_openRequest(camera_number)
Esempio n. 15
0
 def openRequest_manual(self, camera_number):
     Window(10000).setProperty('SR_openRequest_manual_%s' % camera_number,
                               '1')
     self.openRequest(camera_number)
Esempio n. 16
0
 def clear_overrideURL(self, camera_number):
     Window(10000).clearProperty('SR_urlOverride_%s' % camera_number)
Esempio n. 17
0
 def closeRequest(self, camera_number):
     Window(10000).setProperty('SR_closeRequest_%s' % camera_number, '1')
Esempio n. 18
0
 def get_overrideURL(self, camera_number):
     return Window(10000).getProperty('SR_urlOverride_%s' % camera_number)
Esempio n. 19
0
 def clear_openRequest_manual(self, camera_number):
     Window(10000).clearProperty('SR_openRequest_manual_%s' % camera_number)
Esempio n. 20
0
 def resume_previous_file(self):
     if settings.getSetting_bool('resume') and Window(10000).getProperty(
             'SR_previousFile') != '':
         return True
     return False
Esempio n. 21
0
 def clear_alarmActive(self, camera_number):
     Window(10000).clearProperty('SR_alarmActive_%s' % camera_number)
Esempio n. 22
0
 def stop(self):
     Window(10000).clearProperty('SR_monitor')
Esempio n. 23
0
 def closeRequested(self, camera_number):
     if Window(10000).getProperty('SR_closeRequest_%s' %
                                  camera_number) == '1':
         return True
     return False
Esempio n. 24
0
 def stopped(self):
     if Window(10000).getProperty('SR_monitor') == '1':
         return False
     return True
def window():
    id = wid()
    return Window(id) if id else None
Esempio n. 26
0
 def write_testResult(self, camera_number, success_code):
     if success_code == 0:
         Window(10000).setProperty('SR_result_%s' % camera_number, '1')
     else:
         Window(10000).clearProperty('SR_result_%s' % camera_number)
Esempio n. 27
0
def set_property(key, value, window_id=10000):
    """Set a Window property"""
    return Window(window_id).setProperty(key, from_unicode(str(value)))
Esempio n. 28
0
 def testResult(self, camera_number):
     if Window(10000).getProperty('SR_result_%s' % camera_number) == '1':
         return True
     return False
Esempio n. 29
0
from urllib import urlencode

from xbmc import getCondVisibility, sleep
from xbmcgui import Window

###############################################################################


def _get_kodi_type():
    kodi_type = listitem.getVideoInfoTag().getMediaType().decode('utf-8')
    if not kodi_type:
        if getCondVisibility('Container.Content(albums)'):
            kodi_type = "album"
        elif getCondVisibility('Container.Content(artists)'):
            kodi_type = "artist"
        elif getCondVisibility('Container.Content(songs)'):
            kodi_type = "song"
        elif getCondVisibility('Container.Content(pictures)'):
            kodi_type = "picture"
    return kodi_type


if __name__ == "__main__":
    WINDOW = Window(10000)
    KODI_ID = listitem.getVideoInfoTag().getDbId()
    KODI_TYPE = _get_kodi_type()
    ARGS = {'kodi_id': KODI_ID, 'kodi_type': KODI_TYPE}
    while WINDOW.getProperty('plex_command'):
        sleep(20)
    WINDOW.setProperty('plex_command', 'CONTEXT_menu?%s' % urlencode(ARGS))
Esempio n. 30
0
def clear_property(key, window_id=10000):
    ''' Clear a Window property '''
    return Window(window_id).clearProperty(key)