def __init__(self):
        printDBG('M3U8Downloader.__init__ ----------------------------------')
        BaseDownloader.__init__(self)

        self.wgetStatus = self.WGET_STS.NONE
        # instance of E2 console
        self.console = eConsoleAppContainer()
        self.iptv_sys = None

        # M3U8 list updater
        self.M3U8Updater = eConsoleAppContainer()
        self.M3U8Updater_appClosed_conn = eConnectCallback(
            self.M3U8Updater.appClosed, self._updateM3U8Finished)
        self.M3U8Updater_stdoutAvail_conn = eConnectCallback(
            self.M3U8Updater.stdoutAvail, self._updateM3U8DataAvail)

        self.M3U8ListData = ''
        self.M3U8UpdaterRefreshDelay = 0
        self.refreshDelay = M3U8Downloader.MIN_REFRESH_DELAY

        # get only last fragments from first list, to satisfy specified duration in seconds
        # -1 means, starts from beginning
        self.startLiveDuration = M3U8Downloader.LIVE_START_OFFSET

        # 0 means, starts from beginning
        self.skipFirstSegFromList = 0

        self.addStampToUrl = False
        self.totalDuration = -1
        self.downloadDuration = 0
        self.fragmentDurationList = []

        self.maxTriesAtStart = 0
 def __init__(self, session, currDir, title="Directory browser"):
     printDBG("IPTVDirectorySelectorWidget.__init__ -------------------------------")
     Screen.__init__(self, session)
     self["key_red"]    = Label(_("Cancel"))
     #self["key_yellow"] = Label(_("Odśwież"))
     self["key_blue"]   = Label(_("New dir"))
     self["key_green"]  = Label(_("Apply"))
     self["curr_dir"]   = Label(_(" "))
     self["list"]   = IPTVDirBrowserList()
     self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"],
         {
             "green" : self.requestApply,
             "red"   : self.requestCancel,
             "yellow": self.requestRefresh,
             "blue"  : self.requestNewDir,
             "ok"    : self.requestOk,
             "cancel": self.requestBack
         })
     self.title = title
     self.onLayoutFinish.append(self.layoutFinished)
     self.onClose.append(self.__onClose)
     
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn   = eConnectCallback(self.console.appClosed, self.refreshFinished)
     self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.refreshNewData)
     self.underRefreshing  = False
     self.underClosing     = False
     self.deferredAction   = None
     
     self.currDir   = currDir
     self.currList  = []
     
     self.tmpData = ''
     self.tmpList = []
    def _startFragment(self, tryAgain=False):
        printDBG("_startFragment tryAgain[%r]" % tryAgain)
        self.outData = ''
        self.remoteFragmentSize = -1
        self.remoteFragmentType = 'unknown'
                            
        if 0 > self.localFileSize:
            self.m3u8_prevLocalFileSize = 0
        else:
            self.m3u8_prevLocalFileSize = self.localFileSize
        ##############################################################################
        # frist download nextFragment conntent
        ##############################################################################
        self.downloadType = self.DOWNLOAD_TYPE.SEGMENT
 
        if None != self.console:
            self.console_appClosed_conn = None
            self.console_stderrAvail_conn = None
        #self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,  self._cmdFinished )
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail )
        
        if tryAgain and self.tries >= self.MAX_RETRIES:
            if not self.liveStream:
                return DMHelper.STS.INTERRUPTED
            else:
                # even if fragment is lost this is not big problem, download next one, 
                # this is a live stream this can happen :)
                tryAgain = False
            
        currentFragment = None
        if False == tryAgain:
            self.tries = 0
            if (self.currentFragment + 1) < len(self.fragmentList):
                self.currentFragment += 1
                currentFragment = self.fragmentList[self.currentFragment]  
        else:
            self.tries += 1
            currentFragment = self.fragmentList[self.currentFragment]        
        
        if None != currentFragment:
            self.wgetStatus = self.WGET_STS.CONNECTING
            cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=1 --timeout=%d ' % self._getTimeout()) + '"' + currentFragment + '" -O - >> "' + self.filePath + '"'
            printDBG("Download cmd[%s]" % cmd)
            self.console.execute( E2PrioFix( cmd ) )
            
            #with open("/home/sulge/tmp/m3u8.txt", "a") as myfile:
            #with open("/hdd/dbg_m3u8.txt", "a") as myfile:
            #    myfile.write(currentFragment+"\n")
                
            return DMHelper.STS.DOWNLOADING
        else:
            if self.liveStream:
                # we are in live so wait for new fragments
                printDBG("m3u8 downloader - wait for new fragments ----------------------------------------------------------------")
                self.downloadType = self.DOWNLOAD_TYPE.WAITTING
                self.console.execute( E2PrioFix( "sleep 2" ) )
                return DMHelper.STS.DOWNLOADING 
            else:
                return DMHelper.STS.DOWNLOADED
    def start(self, url, filePath, params = {}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        if 'ustream.tv' in url:
            self.streamSelector = strwithmeta(url).meta.get('iptv_chank_url', '')
        else:
            self.streamSelector = strwithmeta(url).meta.get('iptv_bitrate', 0)
        
        self.outData = ''
        self.contentType = 'unknown'
        
        baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) 
        
        cmd = DMHelper.GET_F4M_PATH() + (" '%s'" % baseWgetCmd) + (' "%s"' % self.url) + (' "%s"' % self.filePath) + (' %s' % self.streamSelector) + ' > /dev/null'

        printDBG("F4mDownloader::start cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)
        self.console.execute( cmd )
        
        self.status     = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
Exemple #5
0
    def startExecution(self):
        login = config.plugins.iptvplayer.myjd_login.value
        password = config.plugins.iptvplayer.myjd_password.value
        jdname = config.plugins.iptvplayer.myjd_jdname.value

        captcha = {
            'siteKey': self.sitekey,
            'sameOrigin': True,
            'siteUrl': self.referer,
            'contextUrl': '/'.join(self.referer.split('/')[:3]),
            'boundToDomain': True,
            'stoken': None
        }
        try:
            captcha = base64.b64encode(json.dumps(captcha))
        except Exception:
            printExc()
        if getDebugMode() == '': debug = 0
        else: debug = 1

        cmd = GetPyScriptCmd('fakejd') + ' "%s" "%s" "%s" "%s" "%s" %d' % (
            GetPluginDir('libs/'), login, password, jdname, captcha, debug)

        self["console"].setText(_('JDownloader script execution'))

        self.workconsole['console'] = eConsoleAppContainer()
        self.workconsole['close_conn'] = eConnectCallback(
            self.workconsole['console'].appClosed, self._scriptClosed)
        self.workconsole['stderr_conn'] = eConnectCallback(
            self.workconsole['console'].stderrAvail, self._scriptStderrAvail)
        self.workconsole['stdout_conn'] = eConnectCallback(
            self.workconsole['console'].stdoutAvail, self._scriptStdoutAvail)
        self.workconsole["console"].execute(E2PrioFix(cmd, 0))
        printDBG(">>> EXEC CMD [%s]" % cmd)
    def start(self, url, filePath, params={}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future

        self.outData = ''
        self.contentType = 'unknown'

        cmd = "python " + DMHelper.GET_PWGET_PATH(
        ) + ' "' + self.url + '" "' + self.filePath + '" > /dev/null'
        printDBG("Download cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)

        self.console.execute(E2PrioFix(cmd))

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
 def __init__(self):
     printDBG('M3U8Downloader.__init__ ----------------------------------')
     BaseDownloader.__init__(self)
     
     self.wgetStatus   = self.WGET_STS.NONE
     # instance of E2 console
     self.console = eConsoleAppContainer()
     self.iptv_sys = None
     
     # M3U8 list updater
     self.M3U8Updater = eConsoleAppContainer()
     self.M3U8Updater_appClosed_conn   = eConnectCallback(self.M3U8Updater.appClosed, self._updateM3U8Finished)
     self.M3U8Updater_stdoutAvail_conn = eConnectCallback(self.M3U8Updater.stdoutAvail, self._updateM3U8DataAvail)
     
     self.M3U8ListData = ''
     self.M3U8UpdaterRefreshDelay = 0
     self.refreshDelay = M3U8Downloader.MIN_REFRESH_DELAY
     
     # get only last fragments from first list, to satisfy specified duration in seconds
     # -1 means, starts from beginning
     self.startLiveDuration = M3U8Downloader.LIVE_START_OFFSET 
     
     # 0 means, starts from beginning
     self.skipFirstSegFromList = 0
     
     self.addStampToUrl = False
     self.totalDuration = -1
     self.downloadDuration = 0
     self.fragmentDurationList = []
    def start(self, url, filePath, params={}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future

        self.outData = ''
        self.contentType = 'unknown'
        if None == info_from:
            info_from = WgetDownloader.INFO.FROM_FILE
        self.infoFrom = info_from

        cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (
            ' --progress=dot:default -t %d ' % retries
        ) + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null'
        printDBG("Download cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)
        self.console.execute(cmd)

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
    def start(self, url, filePath, params={}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = '' # should be implemented in future
        if 'ustream.tv' in url:
            self.streamSelector = strwithmeta(url).meta.get('iptv_chank_url', '')
        else:
            self.streamSelector = strwithmeta(url).meta.get('iptv_bitrate', 0)

        self.outData = ''
        self.contentType = 'unknown'

        baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams)

        cmd = DMHelper.GET_F4M_PATH() + (" '%s'" % baseWgetCmd) + (' "%s"' % self.url) + (' "%s"' % self.filePath) + (' %s' % self.streamSelector) + ' > /dev/null'

        printDBG("F4mDownloader::start cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)
        self.console.execute(E2PrioFix(cmd))

        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
 def onStart(self):
     self.onLayoutFinish.remove(self.onStart)
     self['progressBar'].value = 0
     self['bufferingBar'].range = (0, 100000)
     self['bufferingBar'].value = 0
     self.initGuiComponentsPos()
     if 'gstplayer' == self.player:
         gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value
         #'export GST_DEBUG="*:6" &&' + 
         cmd = gstplayerPath  + ' "%s"' % self.fileSRC
         if "://" in self.fileSRC: 
             cmd += ' "%s" "%s"  "%s"  "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size'])
             tmp = strwithmeta(self.fileSRC)
             url,httpParams = DMHelper.getDownloaderParamFromUrl(tmp)
             for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key]) )
             if 'http_proxy' in tmp.meta:
                 tmp = tmp.meta['http_proxy']
                 if '://' in tmp:
                     if '@' in tmp:
                         tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp)
                         if tmp: cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1)+tmp.group(4), tmp.group(2), tmp.group(3)) )
                     else: cmd += (' "proxy=%s" ' % tmp)
     else:
         cmd = 'exteplayer3 "%s"' % self.fileSRC + " > /dev/null"
     
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.eplayer3Finished)
     self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.eplayer3DataAvailable)
     #if 'gstplayer' == self.player: 
     #    self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self.eplayer3DataAvailable2 ) # work around to catch EOF event after seeking, pause .etc
     printDBG("onStart cmd[%s]" % cmd)
     self.console.execute( cmd )
     self['statusIcon'].setPixmap( self.playback['statusIcons']['Play'] ) # sulge for test
    def start(self, url, filePath, params = {}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        
        self.outData = ''
        self.contentType = 'unknown'
        
        cmd = "python " + DMHelper.GET_PWGET_PATH() + ' "' + self.url + '" "' + self.filePath + '" > /dev/null'
        printDBG("Download cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)

        self.console.execute( cmd )

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status     = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
    def start(self, url, filePath, params = {}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        
        self.outData = ''
        self.contentType = 'unknown'
        if None == info_from:
            info_from = WgetDownloader.INFO.FROM_FILE
        self.infoFrom    = info_from
        
        if self.infoFrom == WgetDownloader.INFO.FROM_DOTS:
            info = "--progress=dot:default"
        else: info = ""
        
        cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' %s -t %d ' % (info, retries)) + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null'
        printDBG("Download cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn  = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)
        self.console.execute( E2PrioFix( cmd ) )

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status     = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
    def start(self, url, filePath, params = {}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        self.outData = ''
        self.contentType = 'unknown'
        
        # baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) 
        # TODO: add all HTTP parameters
        addParams = ''
        meta = strwithmeta(url).meta
        if 'iptv_m3u8_key_uri_replace_old' in meta and 'iptv_m3u8_key_uri_replace_new' in meta:
            addParams = ' -k "%s" -n "%s" ' % (meta['iptv_m3u8_key_uri_replace_old'], meta['iptv_m3u8_key_uri_replace_new'])
        
        cmd = DMHelper.getBaseHLSDLCmd(self.downloaderParams) + (' "%s"' % self.url) + addParams + (' -o "%s"' % self.filePath) + ' > /dev/null'

        printDBG("HLSDownloader::start cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)
        self.console.execute( E2PrioFix( cmd ) )
        
        self.status = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
    def doStartDownload(self):
        self.outData = ''
        self.contentType = 'unknown'
        filePath = self.multi['files'][self.currIdx]
        url = self.multi['urls'][self.currIdx]

        info = ""
        retries = 0

        cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (
            ' %s -t %d ' % (info, retries)
        ) + '"' + url + '" -O "' + filePath + '" > /dev/null'
        printDBG("doStartDownload cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)
        self.console.execute(E2PrioFix(cmd))

        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
    def _startFragment(self, tryAgain=False):
        printDBG("_startFragment tryAgain[%r]" % tryAgain)
        self.outData = ''
        self.remoteFragmentSize = -1
        self.remoteFragmentType = 'unknown'
                            
        if 0 > self.localFileSize:
            self.m3u8_prevLocalFileSize = 0
        else:
            self.m3u8_prevLocalFileSize = self.localFileSize
        ##############################################################################
        # frist download nextFragment conntent
        ##############################################################################
        self.downloadType = self.DOWNLOAD_TYPE.SEGMENT
 
        if None != self.console:
            self.console_appClosed_conn = None
            self.console_stderrAvail_conn = None
        #self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,  self._cmdFinished )
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail )
        
        if tryAgain and self.tries >= self.MAX_RETRIES:
            if not self.liveStream:
                return DMHelper.STS.INTERRUPTED
            else:
                # even if fragment is lost this is not big problem, download next one, 
                # this is a live stream this can happen :)
                tryAgain = False
            
        currentFragment = None
        if False == tryAgain:
            self.tries = 0
            if (self.currentFragment + 1) < len(self.fragmentList):
                self.currentFragment += 1
                currentFragment = self.fragmentList[self.currentFragment]  
        else:
            self.tries += 1
            currentFragment = self.fragmentList[self.currentFragment]        
        
        if None != currentFragment:
            self.wgetStatus = self.WGET_STS.CONNECTING
            cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=1 --timeout=%d ' % self._getTimeout()) + '"' + currentFragment + '" -O - >> "' + self.filePath + '"'
            printDBG("Download cmd[%s]" % cmd)
            self.console.execute( cmd )
            
            #with open("/home/sulge/tmp/m3u8.txt", "a") as myfile:
            #    myfile.write(currentFragment+"\n")
                
            return DMHelper.STS.DOWNLOADING
        else:
            if self.liveStream:
                # we are in live so wait for new fragments
                printDBG("m3u8 downloader - wait for new fragments ----------------------------------------------------------------")
                self.downloadType = self.DOWNLOAD_TYPE.WAITTING
                self.console.execute( "sleep 2" )
                return DMHelper.STS.DOWNLOADING 
            else:
                return DMHelper.STS.DOWNLOADED
Exemple #16
0
    def __init__(self, session, downloadmanager):
        self.session = session
        Screen.__init__(self, session)

        self.currentService = self.session.nav.getCurrentlyPlayingServiceReference(
        )
        self.session.nav.event.append(self.__event)

        self["key_red"] = StaticText(_("Stop"))
        self["key_green"] = StaticText(_("Start"))
        self["key_yellow"] = StaticText(_("Archive"))
        self["key_blue"] = StaticText(_("Downloads"))

        self["list"] = IPTVDownloadManagerList()
        self["list"].connectSelChanged(self.onSelectionChanged)
        self["actions"] = ActionMap(
            ["WizardActions", "DirectionActions", "ColorActions"], {
                "ok": self.ok_pressed,
                "back": self.back_pressed,
                "red": self.red_pressed,
                "green": self.green_pressed,
                "yellow": self.yellow_pressed,
                "blue": self.blue_pressed,
            }, -1)

        self["titel"] = Label()

        self.DM = downloadmanager
        self.DM.connectListChanged(self.onListChanged)
        self.DM.setUpdateProgress(True)
        self.setManagerStatus()

        self.started = 0
        global gIPTVDM_listChanged
        gIPTVDM_listChanged = True

        self.onClose.append(self.__onClose)
        self.onShow.append(self.onStart)

        #main Timer to refresh liar
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout,
                                               self.reloadList)
        # every 500ms Proxy Queue will be checked
        self.mainTimer.start(500)

        self.localMode = False
        self.localFiles = []
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self.refreshFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self.refreshNewData)
        self.underRefreshing = False

        self.iptvclosing = False
        self.currList = []
Exemple #17
0
    def __init__(self, session, downloadmanager):
        self.session = session
        Screen.__init__(self, session)

        self.currentService = self.session.nav.getCurrentlyPlayingServiceReference()
        self.session.nav.event.append(self.__event)

        self["key_red"] = StaticText(_("Stop"))
        self["key_green"] = StaticText(_("Start"))
        self["key_yellow"] = StaticText(_("Archive"))
        self["key_blue"] = StaticText(_("Downloads"))

        self["list"] = IPTVDownloadManagerList()
        self["list"].connectSelChanged(self.onSelectionChanged)
        self["actions"] = ActionMap(
            ["WizardActions", "DirectionActions", "ColorActions"],
            {
                "ok": self.ok_pressed,
                "back": self.back_pressed,
                "red": self.red_pressed,
                "green": self.green_pressed,
                "yellow": self.yellow_pressed,
                "blue": self.blue_pressed,
            },
            -1,
        )

        self["titel"] = Label()

        self.DM = downloadmanager
        self.DM.connectListChanged(self.onListChanged)
        self.DM.setUpdateProgress(True)
        self.setManagerStatus()

        self.started = 0
        global gIPTVDM_listChanged
        gIPTVDM_listChanged = True

        self.onClose.append(self.__onClose)
        self.onShow.append(self.onStart)

        # main Timer to refresh liar
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.reloadList)
        # every 500ms Proxy Queue will be checked
        self.mainTimer.start(500)

        self.localMode = False
        self.localFiles = []
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.refreshFinished)
        self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.refreshNewData)
        self.underRefreshing = False

        self.iptvclosing = False
        self.currList = []
 def _startM3U8(self, m3u8Url):
     self.m3u8Url = m3u8Url
     self.outData = ''
     ##############################################################################
     # frist download m3u8 conntent
     ##############################################################################
     self.downloadType = self.DOWNLOAD_TYPE.M3U8
     m3u8Url = self._addTimeStampToUrl( self.m3u8Url )
     cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O - 2> /dev/null'
     printDBG("Download cmd[%s]" % cmd)
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed,  self._cmdFinished )
     self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail )
     self.console.execute( E2PrioFix( cmd ) )
Exemple #19
0
    def __init__(self, session, currDir, title="Directory browser"):
        printDBG(
            "IPTVDirectorySelectorWidget.__init__ -------------------------------"
        )
        Screen.__init__(self, session)
        if isinstance(self, IPTVDirectorySelectorWidget):
            self["key_red"] = Label(_("Cancel"))
            #self["key_yellow"] = Label(_("Odśwież"))
            self["key_blue"] = Label(_("New dir"))
            self["key_green"] = Label(_("Apply"))
            self["curr_dir"] = Label(_(" "))
            self["list"] = IPTVDirBrowserList()
            self["FilelistActions"] = ActionMap(
                ["ColorActions", "SetupActions"], {
                    "red": self.requestCancel,
                    "green": self.requestApply,
                    "yellow": self.requestRefresh,
                    "blue": self.requestNewDir,
                    "ok": self.requestOk,
                    "cancel": self.requestBack
                })

        self.title = title
        self.onLayoutFinish.append(self.layoutFinished)
        self.onClose.append(self.__onClose)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self.refreshFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self.refreshNewData)
        self.underRefreshing = False
        self.underClosing = False
        self.deferredAction = None

        try:
            while not os_path.isdir(currDir):
                tmp = os_path.dirname(currDir)
                if tmp == currDir:
                    break
                currDir = tmp
        except Exception:
            currDir = ''
            printExc()

        self.currDir = currDir
        self.currList = []

        self.tmpData = ''
        self.tmpList = []
Exemple #20
0
 def _startM3U8(self, wait=0):
     self.outData = ''
     ##############################################################################
     # frist download m3u8 conntent
     ##############################################################################
     self.downloadType = self.DOWNLOAD_TYPE.M3U8
     m3u8Url = self._addTimeStampToUrl( self.m3u8Url )
     cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O '
     if wait > 0:
         cmd = (' sleep %s && ' % wait) + cmd
     printDBG("Download cmd[%s]" % cmd)
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed,  self._cmdFinished )
     self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail )
     self.console.execute( E2PrioFix( cmd ) )
Exemple #21
0
    def start(self, url, filePath, params={}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future
        self.outData = ''
        self.contentType = 'unknown'

        # baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams)
        # TODO: add all HTTP parameters
        addParams = ''
        meta = strwithmeta(url).meta
        if 'iptv_m3u8_key_uri_replace_old' in meta and 'iptv_m3u8_key_uri_replace_new' in meta:
            addParams = ' -k "%s" -n "%s" ' % (
                meta['iptv_m3u8_key_uri_replace_old'],
                meta['iptv_m3u8_key_uri_replace_new'])

        if 'iptv_m3u8_seg_download_retry' in meta:
            addParams += ' -w %s ' % meta['iptv_m3u8_seg_download_retry']

        if self.url.startswith("merge://"):
            try:
                urlsKeys = self.url.split('merge://', 1)[1].split('|')
                url = meta[urlsKeys[-1]]
                addParams += ' -a "%s" ' % meta[urlsKeys[0]]
            except Exception:
                printExc()
        else:
            url = self.url

        cmd = DMHelper.getBaseHLSDLCmd(self.downloaderParams) + (
            ' "%s"' % url) + addParams + (' -o "%s"' % self.filePath)

        printDBG("HLSDownloader::start cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)
        self.console.execute(E2PrioFix(cmd))

        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
    def __init__(self):
        printDBG('EM3U8Downloader.__init__ ----------------------------------')
        HLSDownloader.__init__(self)

        # M3U8list link provider
        self.EM3U8linkProv = eConsoleAppContainer()
        self.EM3U8linkProv_appClosed_conn = eConnectCallback(self.EM3U8linkProv.appClosed, self._updateEM3U8Finished)
        #self.EM3U8linkProv_stdoutAvail_conn = eConnectCallback(self.EM3U8linkProv.stdoutAvail, self._updateEM3U8DataAvail)
        self.EM3U8linkProv_stderrAvail_conn = eConnectCallback(self.EM3U8linkProv.stderrAvail, self._updateEM3U8DataAvail)

        self.EM3U8ListData = ''
        self.em3u8Started = False

        self.em3u8_url = ''
        self.em3u8_filePath = ''
        self.em3i8_params = {}
 def _startM3U8(self, m3u8Url):
     self.m3u8Url = m3u8Url
     self.outData = ''
     ##############################################################################
     # frist download m3u8 conntent
     ##############################################################################
     self.downloadType = self.DOWNLOAD_TYPE.M3U8
     m3u8Url = self.m3u8Url
     if '?' in m3u8Url: m3u8Url += '&iptv_stamp='
     else: m3u8Url += '?iptv_stamp='
     m3u8Url += ('%s' % time())
     cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O - 2> /dev/null'
     printDBG("Download cmd[%s]" % cmd)
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed,  self._cmdFinished )
     self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail )
     self.console.execute( cmd )
Exemple #24
0
 def start(self, callback):
     if self.workThread == None:
         self.workThread = AsyncMethod(self._process)(self.provider)
         self.callback = callback
         self.timer_conn = eConnectCallback(self.timer.timeout, self._poll)
         return True
     return False
Exemple #25
0
    def start(self, uri, mode='loop'):
        self.uri = uri
        self.playMode = mode

        #'export GST_DEBUG="*:6" &&' +
        cmd = '/usr/bin/gstplayer' + ' "%s"' % self.uri
        if "://" in self.uri:
            cmd += ' "%s" "%s"  "%s"  "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size'])
            tmp = strwithmeta(self.uri)
            url, httpParams = DMHelper.getDownloaderParamFromUrl(tmp)
            for key in httpParams:
                cmd += (' "%s=%s" ' % (key, httpParams[key]))
            if 'http_proxy' in tmp.meta:
                tmp = tmp.meta['http_proxy']
                if '://' in tmp:
                    if '@' in tmp:
                        tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp)
                        if tmp:
                            cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1) + tmp.group(4), tmp.group(2), tmp.group(3)))
                    else:
                        cmd += (' "proxy=%s" ' % tmp)
        else:
            cmd = 'exteplayer3 "%s"' % self.uri + " > /dev/null"
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._playerFinished)
        printDBG("IPTVSimpleAudioPlayer.start cmd[%s]" % cmd)
        self.console.execute(E2PrioFix(cmd))
        self.stopped = False
Exemple #26
0
    def __init__(self, session, title, sitekey, referer):
        self.session = session
        Screen.__init__(self, session)
        self.sitekey = sitekey
        self.referer = referer

        sz_w = 504  #getDesktop(0).size().width() - 190
        sz_h = 300  #getDesktop(0).size().height() - 195
        if sz_h < 500: sz_h += 4
        self.skin = """
            <screen position="center,center" title="%s" size="%d,%d">
             <ePixmap position="5,9"   zPosition="4" size="30,30" pixmap="%s" transparent="1" alphatest="on" />
             
             <widget name="label_red"    position="45,9"  zPosition="5" size="175,27" valign="center" halign="left" backgroundColor="black" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
             <widget name="title"        position="5,47"  zPosition="1" size="%d,23" font="Regular;20"            transparent="1"  backgroundColor="#00000000"/>
             <widget name="console"      position="10,%d" zPosition="2" size="%d,160" valign="center" halign="center"   font="Regular;24" transparent="0" foregroundColor="white" backgroundColor="black"/>
            </screen>""" % (
            title,
            sz_w,
            sz_h,  # size
            GetIconDir('red' + '.png'),
            sz_w - 135,  # size title
            (sz_h - 160) / 2,
            sz_w - 20,  # console
        )

        self.onShown.append(self.onStart)
        self.onClose.append(self.__onClose)

        self["title"] = Label(" ")
        self["console"] = Label(" ")

        self["label_red"] = Label(_("Cancel"))

        self["actions"] = ActionMap(
            [
                "ColorActions", "SetupActions", "WizardActions",
                "ListboxActions"
            ],
            {
                "cancel": self.keyExit,
                #"ok"    : self.keyOK,
                "red": self.keyRed,
            },
            -2)

        self.workconsole = {
            'console': None,
            'close_conn': None,
            'stderr_conn': None,
            'stdout_conn': None,
            'stderr': '',
            'stdout': ''
        }
        self.result = ''

        self.timer = {'timer': eTimer(), 'is_started': False}
        self.timer['callback_conn'] = eConnectCallback(
            self.timer['timer'].timeout, self._timoutCallback)
        self.errorCodeSet = False
 def start(self, uri, mode='loop'):
     self.uri = uri
     self.playMode = mode
     
     gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value
     #'export GST_DEBUG="*:6" &&' + 
     cmd = gstplayerPath  + ' "%s"' % self.uri
     if "://" in self.uri: 
         cmd += ' "%s" "%s"  "%s"  "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size'])
         tmp = strwithmeta(self.uri)
         url,httpParams = DMHelper.getDownloaderParamFromUrl(tmp)
         for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key]) )
         if 'http_proxy' in tmp.meta:
             tmp = tmp.meta['http_proxy']
             if '://' in tmp:
                 if '@' in tmp:
                     tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp)
                     if tmp: cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1)+tmp.group(4), tmp.group(2), tmp.group(3)) )
                 else: cmd += (' "proxy=%s" ' % tmp)
     else:
         cmd = 'exteplayer3 "%s"' % self.uri + " > /dev/null"
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._playerFinished)
     printDBG("IPTVSimpleAudioPlayer.start cmd[%s]" % cmd)
     self.console.execute( cmd )
     self.stopped = False
    def __init__(self,
                 refreshDelay=2,
                 parallelDownloadNum=1,
                 finishNotifyCallback=None):
        self.running = False
        self.downloadIdx = 0
        self.downloading = False

        self.updateProgress = False
        self.sleepDelay = refreshDelay

        #self.currDMItem = None
        # under download queue
        self.queueUD = []
        self.MAX_DOWNLOAD_ITEM = parallelDownloadNum
        # already downloaded
        self.queueAA = []
        # waiting for download queue
        self.queueDQ = []

        self.onlistChanged = []

        #main Queue
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout,
                                               self.processDQ)

        self.finishNotifyCallback = finishNotifyCallback
        return
    def start(self, url, filePath, params = {}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        
        self.outData = ''
        self.contentType = 'unknown'
        if None == info_from:
            info_from = WgetDownloader.INFO.FROM_FILE
        self.infoFrom    = info_from
        
        cmd = 'wget ' + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null'
        printDBG("Download cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        self.console.execute( cmd )

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status     = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
Exemple #30
0
 def decodeCover(self, filename, callBackFun, ident):
     printDBG("_______________decodeCover")
     #checking if decoding is needed
     self.waitIcon = {
         "CallBackFun": callBackFun,
         "FileName": filename,
         "Ident": ident
     }
     if filename != self.currIcon.get('FileName', ''):
         if not self.paramsSet:
             self.picload.setPara((self.instance.size().width(),
                                   self.instance.size().height(), 1, 1,
                                   False, 1, "#00000000"))
             self.paramsSet = True
         if not self.decoding:
             printDBG("_______________start decodeCover")
             self.decoding = True
             prevIcon = self.currIcon
             self.currIcon = self.waitIcon
             self.waitIcon = {}
             self.picload_conn = eConnectCallback(self.picload.PictureData,
                                                  self.decodeCallBack)
             ret = self.picload.startDecode(filename)
             if ret != 0:
                 printDBG("_______________error start decodeCover[%d]" %
                          ret)
                 self.picload_conn = None
                 self.decoding = False
                 self.currIcon = prevIcon
                 return -1
         return True
     else:
         printDBG("___________________________decodeCover not need (%s)" %
                  filename)
         return False
    def onStart(self):
        self.onLayoutFinish.remove(self.onStart)
        self['progressBar'].value = 0
        self['bufferingBar'].range = (0, 100000)
        self['bufferingBar'].value = 0
        self.initGuiComponentsPos()
        if 'gstplayer' == self.player:
            gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value
            #'export GST_DEBUG="*:6" &&' +
            cmd = gstplayerPath + ' "%s"' % self.fileSRC
            if "://" in self.fileSRC:
                cmd += ' "%s" "%s"  "%s"  "%s" ' % (
                    self.gstAdditionalParams['download-buffer-path'],
                    self.gstAdditionalParams['ring-buffer-max-size'],
                    self.gstAdditionalParams['buffer-duration'],
                    self.gstAdditionalParams['buffer-size'])
                tmp = strwithmeta(self.fileSRC)
                url, httpParams = DMHelper.getDownloaderParamFromUrl(tmp)
                for key in httpParams:
                    cmd += (' "%s=%s" ' % (key, httpParams[key]))
                if 'http_proxy' in tmp.meta:
                    tmp = tmp.meta['http_proxy']
                    if '://' in tmp:
                        if '@' in tmp:
                            tmp = re.search(
                                '([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp)
                            if tmp:
                                cmd += (
                                    ' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" '
                                    % (tmp.group(1) + tmp.group(4),
                                       tmp.group(2), tmp.group(3)))
                        else:
                            cmd += (' "proxy=%s" ' % tmp)
        else:
            cmd = 'exteplayer3 "%s"' % self.fileSRC + " > /dev/null"

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self.eplayer3Finished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self.eplayer3DataAvailable)
        #if 'gstplayer' == self.player:
        #    self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self.eplayer3DataAvailable2 ) # work around to catch EOF event after seeking, pause .etc
        printDBG("onStart cmd[%s]" % cmd)
        self.console.execute(cmd)
        self['statusIcon'].setPixmap(
            self.playback['statusIcons']['Play'])  # sulge for test
 def updateIcon(self, filename):
     if not self.paramsSet:
         self.picload.setPara((self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000"))
         self.paramsSet = True
     self.picload_conn = eConnectCallback(self.picload.PictureData, self.paintIconPixmapCB)
     ret = self.picload.startDecode(filename)
     if ret != 0:
         self.picload_conn = None
Exemple #33
0
    def __init__(self,
                 session,
                 url,
                 pathForRecordings,
                 movieTitle,
                 activMoviePlayer,
                 requestedBuffSize,
                 playerAdditionalParams={}):
        self.session = session
        Screen.__init__(self, session)
        self.onStartCalled = False

        self.recordingPath = pathForRecordings
        self.filePath = pathForRecordings + '/.iptv_buffering.flv'
        self.url = url
        self.movieTitle = movieTitle

        self.currentService = self.session.nav.getCurrentlyPlayingServiceReference(
        )
        self.activMoviePlayer = activMoviePlayer

        self.onClose.append(self.__onClose)
        #self.onLayoutFinish.append(self.doStart)
        self.onShow.append(self.onWindowShow)
        #self.onHide.append(self.onWindowHide)

        self["actions"] = ActionMap(
            ["WizardActions", "MoviePlayerActions"], {
                "ok": self.ok_pressed,
                "back": self.back_pressed,
                "leavePlayer": self.back_pressed,
            }, -1)

        self["console"] = Label()
        self["percentage"] = Label()

        self["icon"] = SimpleAnimatedCover()
        # prepare icon frames path
        frames = []
        for idx in range(1, self.NUM_OF_ICON_FRAMES + 1):
            frames.append(
                resolveFilename(
                    SCOPE_PLUGINS,
                    'Extensions/IPTVPlayer/icons/buffering/buffering_%d.png' %
                    idx))
        self["icon"].loadFrames(frames)

        self.inMoviePlayer = False
        self.canRunMoviePlayer = False  # used in function updateDisplay, so must be first initialized
        #main Timer
        self.mainTimer = eTimer()
        self.mainTimerEnabled = False
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout,
                                               self.updateDisplay)
        self.mainTimerInterval = 1000  # by default 1s

        self.requestedBuffSize = requestedBuffSize
        self.playerAdditionalParams = playerAdditionalParams
Exemple #34
0
 def doStartPostProcess(self):
     cmd = DMHelper.GET_FFMPEG_PATH() + ' '
     for item in self.multi['files']:
         cmd += ' -i "{0}" '.format(item)
     cmd += ' -map 0:0 -map 1:0 -vcodec copy -acodec copy "{0}" >/dev/null 2>&1 '.format(self.filePath)
     printDBG("doStartPostProcess cmd[%s]" % cmd)
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
     self.console.execute( E2PrioFix( cmd ) )
 def doStartPostProcess(self):
     cmd = 'ffmpeg '
     for item in self.multi['files']:
         cmd += ' -i "{0}" '.format(item)
     cmd += ' -map 0:0 -map 1:0 -vcodec copy -acodec copy "{0}" >/dev/null 2>&1 '.format(self.filePath)
     printDBG("doStartPostProcess cmd[%s]" % cmd)
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
     self.console.execute( E2PrioFix( cmd ) )
    def __init__(self):
        printDBG('EM3U8Downloader.__init__ ----------------------------------')
        M3U8Downloader.__init__(self)
        
        # M3U8list link provider
        self.EM3U8linkProv = eConsoleAppContainer()
        self.EM3U8linkProv_appClosed_conn   = eConnectCallback(self.EM3U8linkProv.appClosed, self._updateEM3U8Finished)
        #self.EM3U8linkProv_stdoutAvail_conn = eConnectCallback(self.EM3U8linkProv.stdoutAvail, self._updateEM3U8DataAvail)
        self.EM3U8linkProv_stderrAvail_conn = eConnectCallback(self.EM3U8linkProv.stderrAvail, self._updateEM3U8DataAvail )

        self.EM3U8ListData = ''
        self.em3u8Started = False
        
        self.em3u8_url = ''
        self.em3u8_filePath = ''
        self.em3i8_params = {}
        
        self.maxTriesAtStart = 12
Exemple #37
0
    def start(self, url, filePath, params={}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future

        self.outData = ''
        self.contentType = 'unknown'
        if None == info_from:
            info_from = WgetDownloader.INFO.FROM_FILE
        self.infoFrom = info_from

        if self.infoFrom == WgetDownloader.INFO.FROM_DOTS:
            info = "--progress=dot:default"
        else:
            info = ""

        # remove file if exists
        if fileExists(self.filePath):
            rm(self.filePath)

        self.downloadCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (
            ' %s -t %d ' %
            (info, retries)) + '"' + self.url + '" -O "' + self.filePath + '"'
        printDBG("Download cmd[%s]" % self.downloadCmd)

        if self.downloaderParams.get('iptv_wget_continue', False):
            self.maxContinueRetry = 3

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)
        self.console.execute(E2PrioFix(self.downloadCmd))

        self.wgetStatus = self.WGET_STS.CONNECTING
        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
    def __init__(self, session, url, pathForRecordings, pictureTitle):
        self.session = session
        Screen.__init__(self, session)
        self.onStartCalled = False
        
        self.recordingPath = pathForRecordings
        try:
            self.filePath = os.path.join(pathForRecordings, '.iptv_buffering.jpg')
        except:
            self.filePath = ''
            printExc()
            
        self.url           = url
        self.pictureTitle  = pictureTitle
        self.audioUrl      = strwithmeta(url).meta.get("iptv_audio_url", '')
       
        self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'],
        {
            'leavePlayer'  : self.key_exit,
            'play'         : self.key_play,
            'pause'        : self.key_pause,
            'exit'         : self.key_exit,
            'back'         : self.key_exit,
            'ok'           : self.key_ok,
        }, -1)     

        self["status"]  = Label()
        self["console"] = Label()
        self["icon"]    = SimpleAnimatedCover()
        self["picture"] = Cover()

        # prepare icon frames path
        frames = []
        for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( GetIconDir('/buffering/buffering_%d.png' % idx) )
        self["icon"].loadFrames(frames) 
        
        #main Timer
        self.mainTimer = eTimer()
        self.mainTimerEnabled = False
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay)
        self.mainTimerInterval = 100 # by default 0,1s
        # download
        self.downloader = DownloaderCreator(self.url)
        
        self.onClose.append(self.__onClose)
        self.onShow.append(self.doStart)
        #self.onLayoutFinish.append(self.doStart)
        
        self.autoRefresh = False
        self.refreshPostfixes = ['_0', '_1']
        self.refreshCount = 0
        self.refreshing = False
        
        if len(self.audioUrl) and len(config.plugins.iptvplayer.gstplayerpath.value):
            self.audioPlayer = IPTVSimpleAudioPlayer()
        else: self.audioPlayer  = None
Exemple #39
0
    def __init__(self, session, url, pathForRecordings, pictureTitle):
        self.session = session
        Screen.__init__(self, session)
        self.onStartCalled = False
        
        self.recordingPath = pathForRecordings
        try:
            self.filePath = os.path.join(pathForRecordings, '.iptv_buffering.jpg')
        except:
            self.filePath = ''
            printExc()
            
        self.url           = url
        self.pictureTitle  = pictureTitle
        self.audioUrl      = strwithmeta(url).meta.get("iptv_audio_url", '')
       
        self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'],
        {
            'leavePlayer'  : self.key_exit,
            'play'         : self.key_play,
            'pause'        : self.key_pause,
            'exit'         : self.key_exit,
            'back'         : self.key_exit,
            'ok'           : self.key_ok,
        }, -1)     

        self["status"]  = Label()
        self["console"] = Label()
        self["icon"]    = SimpleAnimatedCover()
        self["picture"] = Cover()

        # prepare icon frames path
        frames = []
        for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( GetIconDir('/buffering/buffering_%d.png' % idx) )
        self["icon"].loadFrames(frames) 
        
        #main Timer
        self.mainTimer = eTimer()
        self.mainTimerEnabled = False
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay)
        self.mainTimerInterval = 100 # by default 0,1s
        # download
        self.downloader = DownloaderCreator(self.url)
        
        self.onClose.append(self.__onClose)
        self.onLayoutFinish.append(self.doStart)
        
        self.autoRefresh = False
        self.refreshPostfixes = ['_0', '_1']
        self.refreshCount = 0
        self.refreshing = False
        
        if len(self.audioUrl) and len(config.plugins.iptvplayer.gstplayerpath.value):
            self.audioPlayer = IPTVSimpleAudioPlayer()
        else: self.audioPlayer  = None
    def start(self, url, filePath, params={}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future

        rtmpdump_url = self._getCMD(url)

        if 0:
            #rtmpdump -r rtmp://5.79.71.195/stream/ --playpath=3001_goldvod --swfUrl=http://goldvod.tv:81/j/jwplayer/jwplayer.flash.swf --pageUrl=http://goldvod.tv/tv-online/tvp1.html -o tvp1.flv
            tmpTab = url.split(' ')
            rtmpdump_url = '"' + tmpTab[0].strip() + '"'
            del tmpTab[0]

            prevflashVer = ''
            for item in tmpTab:
                item = item.strip()
                # ignore empty and live params
                if '' != prevflashVer:
                    rtmpdump_url += ' --' + prevflashVer[
                        0:-1] + ' ' + item + '"'
                    prevflashVer = ''
                    continue
                idx = item.find('=')
                if -1 == idx:
                    continue
                argName = item[:idx]
                argValue = item[idx + 1:]
                if 'live' in argName:
                    item = 'live'
                else:
                    item = '%s="%s"' % (argName, argValue)

                if 'flashVer' == argName:
                    prevflashVer = item
                    continue
                rtmpdump_url += ' --' + item
        cmd = DMHelper.GET_RTMPDUMP_PATH(
        ) + " " + rtmpdump_url + ' --realtime -o "' + self.filePath + '" > /dev/null 2>&1'
        printDBG("rtmpdump cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        #self.console.stderrAvail.append( self._dataAvail )
        self.console.execute(E2PrioFix(cmd))

        self.rtmpStatus = self.RTMP_STS.CONNECTING
        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
Exemple #41
0
 def updateIcon(self, filename):
     if not self.paramsSet:
         self.picload.setPara(
             (self.instance.size().width(), self.instance.size().height(),
              1, 1, False, 1, "#00000000"))
         self.paramsSet = True
     self.picload_conn = eConnectCallback(self.picload.PictureData,
                                          self.paintIconPixmapCB)
     ret = self.picload.startDecode(filename)
     if ret != 0:
         self.picload_conn = None
 def doStartDownload(self):
     self.outData = ''
     self.contentType = 'unknown'
     filePath = self.multi['files'][self.currIdx]
     url      = self.multi['urls'][self.currIdx]
     
     info    = ""
     retries = 0
     
     cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' %s -t %d ' % (info, retries)) + '"' + url + '" -O "' + filePath + '" > /dev/null'
     printDBG("doStartDownload cmd[%s]" % cmd)
     
     self.console = eConsoleAppContainer()
     self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
     self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail)
     self.console.execute( E2PrioFix( cmd ) )
     
     self.status = DMHelper.STS.DOWNLOADING
     
     self.onStart()
     return BaseDownloader.CODE_OK
    def start(self, url, filePath, params = {}, info_from=None, retries=0):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url              = url
        self.filePath         = filePath
        self.downloaderParams = params
        self.fileExtension    = '' # should be implemented in future
        
        rtmpdump_url = self._getCMD(url)
        
        if 0:
            #rtmpdump -r rtmp://5.79.71.195/stream/ --playpath=3001_goldvod --swfUrl=http://goldvod.tv:81/j/jwplayer/jwplayer.flash.swf --pageUrl=http://goldvod.tv/tv-online/tvp1.html -o tvp1.flv
            tmpTab = url.split(' ')
            rtmpdump_url = '"' + tmpTab[0].strip() + '"'
            del tmpTab[0]
            
            prevflashVer = ''
            for item in tmpTab:
                item = item.strip()
                # ignore empty and live params
                if '' != prevflashVer:
                    rtmpdump_url += ' --' + prevflashVer[0:-1] + ' ' + item + '"'
                    prevflashVer = ''
                    continue
                idx = item.find('=')
                if -1 == idx: continue
                argName  = item[:idx] 
                argValue = item[idx+1:]
                if 'live' in argName:
                    item = 'live'
                else:
                    item = '%s="%s"' % (argName, argValue)
                    
                if 'flashVer' == argName:
                    prevflashVer = item
                    continue
                rtmpdump_url += ' --' + item
        cmd = DMHelper.GET_RTMPDUMP_PATH() + " " + rtmpdump_url +  ' --realtime -o "' + self.filePath + '" > /dev/null 2>&1'
        printDBG("rtmpdump cmd[%s]" % cmd)
        
        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished)
        #self.console.stderrAvail.append( self._dataAvail )
        self.console.execute( E2PrioFix( cmd ) )

        self.rtmpStatus = self.RTMP_STS.CONNECTING
        self.status     = DMHelper.STS.DOWNLOADING
        
        self.onStart()
        return BaseDownloader.CODE_OK
    def __init__(self,
                 session,
                 service,
                 lastPosition=None,
                 bugEOFworkaround=0):
        Screen.__init__(self, session)
        self.skinName = "MoviePlayer"

        self.__event_tracker = ServiceEventTracker(screen=self,
                                                   eventmap={
                                                       iPlayableService.evEOF:
                                                       self.__evEOF,
                                                       iPlayableService.evSOF:
                                                       self.__evEOF,
                                                   })
        self["actions"] = HelpableActionMap(
            self, "MoviePlayerActions", {
                "leavePlayer": (self.leavePlayer, _("leave movie player...")),
                "leavePlayerOnExit":
                (self.leavePlayer, _("leave movie player...")),
            }, -5)

        for x in HelpableScreen, InfoBarShowHide, InfoBarSeek, InfoBarAudioSelection, InfoBarSubtitleSupport, InfoBarNotifications:
            x.__init__(self)

        # InfoBarServiceNotifications

        self.onClose.append(self.__onClose)
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout,
                                               self.timerCallBack)
        self.mainTimer.start(1000)
        self.bugEOFworkaround = bugEOFworkaround

        self.session.nav.playService(service)
        if lastPosition != None and (lastPosition / 90000) > 10:
            self.position = 0
            self.lastPosition = lastPosition
            self.doSeekToLastPosition = True
        else:
            self.position = 0
            self.lastPosition = 0
            self.doSeekToLastPosition = False
        self.waitForSeekToLastPosition = 0
        self.stopTimeFix = 0

        self.returning = False
        self.aspectratiomode = "1"
        self.isClosing = False
    def __init__(self, session, url, pathForRecordings, movieTitle, activMoviePlayer, requestedBuffSize, playerAdditionalParams={}):
        self.session = session
        Screen.__init__(self, session)
        self.onStartCalled = False
        
        self.recordingPath = pathForRecordings
        self.filePath      = pathForRecordings + '/.iptv_buffering.flv'
        self.url           = url
        self.movieTitle    = movieTitle
        
        self.currentService   = self.session.nav.getCurrentlyPlayingServiceReference()
        self.activMoviePlayer = activMoviePlayer
        
        self.onClose.append(self.__onClose)
        #self.onLayoutFinish.append(self.doStart)
        self.onShow.append(self.onWindowShow)
        #self.onHide.append(self.onWindowHide)
        
        self["actions"] = ActionMap(["WizardActions", "MoviePlayerActions"],
        {
            "ok":          self.ok_pressed,
            "back":        self.back_pressed,
            "leavePlayer": self.back_pressed,
        }, -1)     

        self["console"] = Label()
        self["percentage"] = Label()
             
        self["icon"] = SimpleAnimatedCover()
        # prepare icon frames path
        frames = []
        for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( resolveFilename(SCOPE_PLUGINS, 'Extensions/IPTVPlayer/icons/buffering/buffering_%d.png' % idx) )
        self["icon"].loadFrames(frames) 
        
        self.inMoviePlayer = False
        self.canRunMoviePlayer = False # used in function updateDisplay, so must be first initialized
        #main Timer
        self.mainTimer = eTimer()
        self.mainTimerEnabled = False
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay)
        self.mainTimerInterval = 1000 # by default 1s
        
        self.requestedBuffSize = requestedBuffSize
        self.playerAdditionalParams = playerAdditionalParams
    def __init__(self, session, service, lastPosition=None, bugEOFworkaround=0):
        Screen.__init__(self, session)
        self.skinName = "MoviePlayer"
        
        self.__event_tracker = ServiceEventTracker(screen = self, eventmap =
            {
                iPlayableService.evEOF: self.__evEOF,
                iPlayableService.evSOF: self.__evEOF,
            })
        
        self["actions"] = HelpableActionMap(self, "MoviePlayerActions",
            {
                "leavePlayer": (self.leavePlayer, _("leave movie player...")),
            }, -5)
        
        for x in HelpableScreen, InfoBarShowHide, InfoBarSeek, InfoBarAudioSelection, InfoBarNotifications:
            x.__init__(self)
            
        # InfoBarServiceNotifications
                    
        self.onClose.append(self.__onClose)
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.timerCallBack)
        self.mainTimer.start(1000)
        self.bugEOFworkaround = bugEOFworkaround
        
        self.session.nav.playService(service)
        if lastPosition != None and (lastPosition / 90000) > 10:
            self.position = 0
            self.lastPosition = lastPosition
            self.doSeekToLastPosition = True
        else:
            self.position = 0  
            self.lastPosition = 0
            self.doSeekToLastPosition = False
        self.waitForSeekToLastPosition = 0
        self.stopTimeFix = 0

        self.returning = False
        self.aspectratiomode = "1"
        self.isClosing = False
    def decodedCallBack(self, picInfo=None):
        if self.iptv_images_data != None:
            self.picload_conn = None
            self.iptv_images_data.append(self.picload.getData())
        else:
            self.iptv_images_data = []

        while len(self.iptv_images_data) < len(self.iptv_images):
            idx = len(self.iptv_images_data)
            self.picload_conn = eConnectCallback(self.picload.PictureData,
                                                 self.decodedCallBack)
            ret = self.picload.startDecode(self.iptv_images[idx]['path'])
            if ret != 0:
                printDBG('startDecode failed for "%s"' %
                         self.iptv_images[idx]['path'])
                self.picload_conn = None
                self.iptv_images_data.append(None)
            else:
                return

        i = 0
        for y in range(self.iptv_row_num):
            for x in range(self.iptv_col_num):
                item = {
                    'pixmap': None,
                    'id': None,
                    'width': self.iptv_image_width,
                    'height': self.iptv_image_height,
                    'selected': False
                }
                if i < len(self.iptv_images):
                    item['id'] = self.iptv_images[i]['id']
                    item['pixmap'] = self.iptv_images_data[i]
                self.iptv_grid[x][y] = item
                i += 1

        for i in range(self.iptv_col_num):
            item = self["col_%d" % i]
            item.setList([(x, ) for x in self.iptv_grid[i]])
        self.changeColumnSelection()
 def decodeCover(self, filename, callBackFun, ident):
     printDBG("_______________decodeCover")
     #checking if decoding is needed
     self.waitIcon = {"CallBackFun": callBackFun, "FileName": filename, "Ident": ident}
     if filename != self.currIcon.get('FileName', ''):
         if not self.paramsSet:
             self.picload.setPara((self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000"))
             self.paramsSet = True 
         if not self.decoding:
             printDBG("_______________start decodeCover")
             self.decoding = True
             self.currIcon = self.waitIcon
             self.waitIcon = {}
             self.picload_conn = eConnectCallback(self.picload.PictureData, self.decodeCallBack)
             ret = self.picload.startDecode(filename)
             if ret != 0:
                 printDBG("_______________error start decodeCover[%d]" % ret)
                 self.picload_conn = None
                 self.decoding = False
         return True
     else:
         printDBG("___________________________decodeCover not need (%s)" % filename)
         return False
Exemple #49
0
    def __init__(self, refreshDelay = 2, parallelDownloadNum = 1):
        self.running = False
        self.downloadIdx = 0
        self.downloading = False

        self.updateProgress = False
        self.sleepDelay = refreshDelay
        
        #self.currDMItem = None
        # under download queue
        self.queueUD = []
        self.MAX_DOWNLOAD_ITEM = parallelDownloadNum
        # already downloaded
        self.queueAA = []
        # waiting for download queue
        self.queueDQ = []
        
        self.onlistChanged = []
        
        #main Queue
        self.mainTimer = eTimer()
        self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.processDQ)
        return
    def __init__(self, session, filesrcLocation, FileName, lastPosition=None, player='eplayer', additionalParams={}):
        # 'gstplayer'
        Screen.__init__(self, session)
        self.skinName = "IPTVExtMoviePlayer"
        self.player = player
        if 'gstplayer' == self.player: 
            self.playerName = _("external gstplayer")
            self.gstAdditionalParams = {}
            self.gstAdditionalParams['download-buffer-path'] = additionalParams.get('download-buffer-path', '') # File template to store temporary files in, should contain directory and XXXXXX
            self.gstAdditionalParams['ring-buffer-max-size'] = additionalParams.get('ring-buffer-max-size', 0) # in MB
            self.gstAdditionalParams['buffer-duration']      = additionalParams.get('buffer-duration', -1) # in s
            self.gstAdditionalParams['buffer-size']          = additionalParams.get('buffer-size', 0) # in KB
        else: self.playerName = _("external eplayer3")

        self.session.nav.playService(None) # current service must be None to give free access to DVB Audio and Video Sinks
        self.fileSRC      = filesrcLocation
        self.title        = FileName
        if lastPosition:
            self.lastPosition = lastPosition
        else:
            self.lastPosition = 0 
        self.downloader = additionalParams.get('downloader', None)
        
        printDBG('IPTVExtMoviePlayer.__init__ lastPosition[%r]' % self.lastPosition)
        
        self.extPlayerCmddDispatcher = ExtPlayerCommandsDispatcher(self)
        
        self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'MediaPlayerSeekActions', 'WizardActions'],
            {
                "leavePlayer"  : self.key_stop,
                'play'         : self.key_play,
                'pause'        : self.key_pause,
                'exit'         : self.key_exit,
                'back'         : self.key_exit,
                'info'         : self.key_info,
                'seekdef:1'    : self.key_seek1,
                'seekdef:3'    : self.key_seek3,
                'seekdef:4'    : self.key_seek4,
                'seekdef:6'    : self.key_seek6,
                'seekdef:7'    : self.key_seek7,
                'seekdef:9'    : self.key_seek9,
                'seekFwd'      : self.key_seekFwd,
                'seekBack'     : self.key_seekBack,
                'left_press'   : self.key_left_press,
                'left_repeat'  : self.key_left_repeat,
                'rigth_press'  : self.key_rigth_press,
                'rigth_repeat' : self.key_rigth_repeat,
                'ok'           : self.key_ok,
            }, -1)
        
        self.onClose.append(self.__onClose)
        #self.onShow.append(self.__onShow)
        self.onLayoutFinish.append(self.onStart)
        
        self.console = None
        
        self.isClosing = False
        self.responseData = ""
        
        # playback info
        # GUI
        self.updateInfoTimer = eTimer()
        self.updateInfoTimer_conn = eConnectCallback(self.updateInfoTimer.timeout, self.updateInfo)
        
        # playback info bar gui elements
        self['playbackInfoBaner'] = Cover3()
        self['statusIcon']        = Cover3()
        self['progressBar']       = ProgressBar()
        self['bufferingBar']      = ProgressBar()
        self['goToSeekPointer']   = Cover3() 
        self['infoBarTitle']      = Label(self.title)
        self['goToSeekLabel']     = Label("0:00:00")
        self['currTimeLabel']     = Label("0:00:00")
        self['remainedLabel']     = Label("-0:00:00")
        self['lengthTimeLabel']   = Label("0:00:00")
        
        # goto seek  timer
        self.playback = {}
        self.playback['GoToSeekTimer'] = eTimer()
        self.playback['GoToSeekTimer_conn'] = eConnectCallback(self.playback['GoToSeekTimer'].timeout, self.doGoToSeek)
        
        self.playback.update( {'CurrentTime':    0,
                               'Length':         0,
                               'LengthFromPlayerReceived': False,
                               'GoToSeekTime':   0,
                               'StartGoToSeekTime': 0,
                               'GoToSeeking':    False,
                               'IsLive':         False,
                               'Status':         None
                              } )
        # load pixmaps for statusIcon
        self.playback['statusIcons'] = {'Play':None, 'Pause':None, 'FastForward':None, 'SlowMotion':None}
        try:
            self.playback['statusIcons']['Play']        = LoadPixmap( GetIPTVDMImgDir("playback_a_play.png") )
            self.playback['statusIcons']['Pause']       = LoadPixmap( GetIPTVDMImgDir("playback_a_pause.png") )
            self.playback['statusIcons']['FastForward'] = LoadPixmap( GetIPTVDMImgDir("playback_a_ff.png") )
            self.playback['statusIcons']['SlowMotion']  = self.playback['statusIcons']['FastForward']
        except:
            printExc()
        
        # show hide info bar functionality
        self.goToSeekRepeatCount = 0
        self.goToSeekStep = 0
        self.playbackInfoBar = {'visible':False, 'blocked':False, 'guiElemNames':['playbackInfoBaner', 'progressBar', 'bufferingBar', 'goToSeekPointer', 'goToSeekLabel', 'infoBarTitle', 'currTimeLabel', 'remainedLabel', 'lengthTimeLabel', 'statusIcon'] }
        self.playbackInfoBar['timer'] = eTimer()
        self.playbackInfoBar['timer_conn'] = eConnectCallback(self.playbackInfoBar['timer'].timeout, self.hidePlaybackInfoBar)
        
        self.isStarted = False
        self.hidePlaybackInfoBar()
        
        self.waitEOSAbortedFix = {'EOSaborted_received': False, 'poll_received': False, 'timer': None}
        self.waitEOSAbortedFix['timer'] = eTimer()
        self.waitEOSAbortedFix['timer_conn'] = eConnectCallback(self.waitEOSAbortedFix['timer'].timeout, self.waitEOSAbortedFixTimeoutCallback)
        
        self.waitCloseFix = {'waiting':False}
        self.waitCloseFix['timer'] = eTimer()
        self.waitCloseFix['timer_conn'] = eConnectCallback(self.waitCloseFix['timer'].timeout, self.waitCloseTimeoutCallback)
        
        self.isCloseRequestedByUser = False
        self.playerBinaryInfo = {'version':None, 'data':''}
        self.messageQueue = []
        self.underMessage = False
        
        try: self.autoHideTime = 1000 * int(config.plugins.iptvplayer.extplayer_infobar_timeout.value)
        except: self.autoHideTime = 1000
Exemple #51
0
 def postWidgetCreate(self, instance):
     instance.setContent(self.l)
     self.selectionChanged_conn = eConnectCallback(instance.selectionChanged, self.selectionChanged)
     self.onCreate()
 def __init__(self, session, artItem, addParams):
     self.session = session
     self.artItem = artItem
     
     #############################################
     # calculate num of rich desc items and pages
     #############################################
     self.richDesc = {'items_count': 0, 'pages_count': 0, 'page': 0, 'avalable_params':[] }
     for item in ArticleContent.RICH_DESC_PARAMS:
         if item in artItem.richDescParams:
             self.richDesc['items_count'] += 1
             self.richDesc['avalable_params'].append(item)
     # yes I know, len(self.richDesc['avalable_params']) == self.richDesc['items_count']
     
     self.richDesc['pages_count'] = self.richDesc['items_count'] / self.MAX_RICH_DESC_ROW_NUM
     if self.richDesc['items_count'] % self.MAX_RICH_DESC_ROW_NUM > 0:
         self.richDesc['pages_count'] += 1
     if self.richDesc['items_count'] < self.MAX_RICH_DESC_ROW_NUM:
         self.richDesc['rows_count'] = self.richDesc['items_count']
     else: self.richDesc['rows_count'] = self.MAX_RICH_DESC_ROW_NUM
     #############################################
     
     self.__prepareSkin()
     Screen.__init__(self, session)
         
     for idx in range(self.richDesc['rows_count']):
         self["dsc_label_{0}".format(idx+1)] = Label("")
         self["dsc_text_{0}".format(idx+1)]  = Label("")
     
     self["title"] = Label("")
     self["text"] = ScrollLabel(" ")
     self["page_marker"] = Cover3()
     #############################################
     # COVER 
     #############################################
     self["cover"] = Cover()
     self.cover = {'src':'', 'downloader':None, 'files_to_remove':[], 'image_path':''}
     try:
         self.cover['image_path'] = os.path.join(addParams['buffering_path'], '.iptv_buffering.jpg')
     except: printExc()
     #############################################
     
     #############################################
     # SPINER 
     #############################################
     try:
         for idx in range(5):
             spinnerName = "spinner"
             if idx: spinnerName += '_%d' % idx 
             self[spinnerName] = Cover3()
     except: printExc()
     self.spinner = {}
     self.spinner["pixmap"] = [LoadPixmap(GetIconDir('radio_button_on.png')), LoadPixmap(GetIconDir('radio_button_off.png'))]
     # spinner timer
     self.spinner["timer"] = eTimer()
     self.spinner["timer_conn"] = eConnectCallback(self.spinner["timer"].timeout, self.updateSpinner) 
     self.spinner["timer_interval"] = 200
     self.spinner["enabled"] = False
     #############################################
    
     self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'],
     {
         "ok":    self.key_ok,
         "back":  self.key_back,
         "left":  self.key_left,
         "right": self.key_right,
         "up":    self.key_up,
         "down":  self.key_down,
     }, -1)
     
     self.onClose.append(self.__onClose)
     #self.onShow.append(self.onStart)
     self.onLayoutFinish.append(self.onStart)
Exemple #53
0
    def start(self, url, filePath, params={}):
        '''
            Owervrite start from BaseDownloader
        '''
        self.url = url
        self.filePath = filePath
        self.downloaderParams = params
        self.fileExtension = ''  # should be implemented in future
        self.outData = ''
        self.contentType = 'unknown'

        cmdTab = [DMHelper.GET_FFMPEG_PATH(), '-y']
        tmpUri = strwithmeta(url)

        if 'iptv_video_rep_idx' in tmpUri.meta:
            cmdTab.extend(
                ['-video_rep_index',
                 str(tmpUri.meta['iptv_video_rep_idx'])])

        if 'iptv_audio_rep_idx' in tmpUri.meta:
            cmdTab.extend(
                ['-audio_rep_index',
                 str(tmpUri.meta['iptv_audio_rep_idx'])])

        if 'iptv_m3u8_live_start_index' in tmpUri.meta:
            cmdTab.extend([
                '-live_start_index',
                str(tmpUri.meta['iptv_m3u8_live_start_index'])
            ])

        if 'iptv_m3u8_key_uri_replace_old' in tmpUri.meta and 'iptv_m3u8_key_uri_replace_new' in tmpUri.meta:
            cmdTab.extend([
                '-key_uri_old',
                str(tmpUri.meta['iptv_m3u8_key_uri_replace_old']),
                '-key_uri_new',
                str(tmpUri.meta['iptv_m3u8_key_uri_replace_new'])
            ])

        if "://" in self.url:
            url, httpParams = DMHelper.getDownloaderParamFromUrlWithMeta(
                tmpUri, True)
            headers = []
            for key in httpParams:
                if key == 'Range':  #Range is always used by ffmpeg
                    continue
                elif key == 'User-Agent':
                    cmdTab.extend(['-user-agent', httpParams[key]])
                else:
                    headers.append('%s: %s' % (key, httpParams[key]))

            if len(headers):
                cmdTab.extend(['-headers', '\r\n'.join(headers)])

        if self.url.startswith("merge://"):
            try:
                urlsKeys = self.url.split('merge://', 1)[1].split('|')
                for item in urlsKeys:
                    cmdTab.extend(['-i', self.url.meta[item]])
            except Exception:
                printExc()
        else:
            cmdTab.extend(['-i', url])

        cmdTab.extend([
            '-c:v', 'copy', '-c:a', 'copy', '-f', self.ffmpegOutputContener,
            self.filePath
        ])

        self.fileCmdPath = self.filePath + '.iptv.cmd'
        rm(self.fileCmdPath)
        WriteTextFile(self.fileCmdPath, '|'.join(cmdTab))

        cmd = GetCmdwrapPath() + (' "%s" "|" %s ' %
                                  (self.fileCmdPath, GetNice() + 2))

        printDBG("FFMPEGDownloader::start cmd[%s]" % cmd)

        self.console = eConsoleAppContainer()
        self.console_appClosed_conn = eConnectCallback(self.console.appClosed,
                                                       self._cmdFinished)
        self.console_stderrAvail_conn = eConnectCallback(
            self.console.stderrAvail, self._dataAvail)
        self.console.execute(cmd)

        self.status = DMHelper.STS.DOWNLOADING

        self.onStart()
        return BaseDownloader.CODE_OK
 def postWidgetCreate(self, instance):
     instance.setContent(self.l)
     self.selectionChanged_conn = eConnectCallback(
         instance.selectionChanged, self.selectionChanged)
     self.onCreate()