def startDownload(self): self.cleanDownloader() self["console"].setText(_("Downloading file:\n%r.") % self.uri) self.downloader = DownloaderCreator(self.uri) if self.downloader: self.downloader.isWorkingCorrectly(self._startDownloader) else: self["console"].setText(_("Download can not be started.\nIncorrect address \"%r\".") % self.uri)
def _doStart(self, force=False): if self.autoRefresh or force: self.refreshing = True self.downloader = DownloaderCreator(self.url) url,downloaderParams = DMHelper.getDownloaderParamFromUrl(self.url) self.downloader.subscribeFor_Finish(self.downloaderEnd) self.downloader.start(url, self._getDownloadFilePath(), downloaderParams) self.setMainTimerSts(True) else: self.refreshing = False
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 onStart(self): ''' this method is called once like __init__ but in __init__ we cannot display MessageBox ''' # create downloader self.downloader = DownloaderCreator(self.url) self._cleanedUp() if self.downloader: self.downloader.isWorkingCorrectly(self._startDownloader) else: self.session.openWithCallback(self.iptvDoClose, MessageBox, _("Downloading can not be started.\n The address ('%r') is incorrect.") % self.url, type = MessageBox.TYPE_ERROR, timeout = 10)
def startDownload(self, item): self.setListMode(False) self.cleanDownloader() self.currItem = item self["console"].setText(_("Downloading subtitles.\n ('%r').") % self.currItem.get('url', '')) # create downloader self.downloader = DownloaderCreator(self.currItem.get('url', '')) if self.downloader: self.downloader.isWorkingCorrectly(self._startDownloader) else: self["console"].setText(_("Download can not be started.\n Incorrect address ('%r')."))
def runCMD(self, item): printDBG("runCMD for downloadIdx[%d]" % item.downloadIdx) if DMHelper.DOWNLOAD_TYPE.INITIAL == item.tries: item.fileName = DMHelper.makeUnikalFileName(item.fileName, False, False) printDBG("Downloading started downloadIdx[%s] File[%s] URL[%s]" % (item.downloadIdx, item.fileName, item.url) ) listUDIdx = self.findIdxInQueueUD(item.downloadIdx) self.queueUD[listUDIdx].status = DMHelper.STS.DOWNLOADING self.queueUD[listUDIdx].fileName = item.fileName url, downloaderParams = DMHelper.getDownloaderParamFromUrl(item.url) self.queueUD[listUDIdx].downloader = DownloaderCreator(url) self.queueUD[listUDIdx].callback = boundFunction(self.cmdFinished, item.downloadIdx) self.queueUD[listUDIdx].downloader.subscribeFor_Finish( self.queueUD[listUDIdx].callback ) self.queueUD[listUDIdx].downloader.start(url, item.fileName, downloaderParams)
def DownloadMovieLink(self, url): from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdownloadercreator import IsUrlDownloadable, DownloaderCreator if IsUrlDownloadable(url): from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdh import DMHelper url, downloaderParams = DMHelper.getDownloaderParamFromUrl(url) currentDownloader = DownloaderCreator( url) #correct downloader is assigned (eg wget MovieRecordFileName = config.plugins.iptvplayer.NaszaSciezka.value + self.movieTitle.replace( '/', '-').replace(':', '-').replace('*', '-').replace( '?', '-').replace('"', '-').replace('<', '-').replace( '>', '-').replace('|', '-') MovieRecordFileNameExt = MovieRecordFileName[-4:] if not MovieRecordFileNameExt in ('.mpg', '.flv', '.mp4'): MovieRecordFileName += ".mp4" currentDownloader.start(url, MovieRecordFileName, downloaderParams) print "Downloading in background...\n %s\n" % MovieRecordFileName time.sleep(5) else: print "\n" + _("No valid links available.") time.sleep(10) time.sleep(20) return
def run(self): ret=None _temp = __import__('hosts.' + self.hostName, globals(), locals(), ['IPTVHost'], -1) self.title = _temp.gettytul() logState("Host title: %s\n" % self.title) self.host = _temp.IPTVHost() self.SelectedLink = '' try: if not isinstance(self.host, IHost): logState("Host [%r] inherits from IHost :)\n" % (self.hostName)) except: logState( 'Cannot import class IPTVHost for host [%r]\n' % self.hostName) self.stop() return hostconfig = __import__('hosts.' + self.hostName, globals(), locals(), ['GetConfigList'], -1) ConfList = hostconfig.GetConfigList() configureHOST(self.hostName) monitor = xbmc.Monitor() while not monitor.abortRequested() or xbmcgui.Window(10000).getProperty('plugin.video.IPTVplayer.HOST') == self.hostName: #logState("plugin.video.IPTVplayer.HOST=%s self.hostName=%s\n" %(xbmcgui.Window(10000).getProperty('plugin.video.IPTVplayer.HOST'),self.hostName)) timestamp = long(myTime()) xbmcgui.Window(10000).setProperty("kodiIPTVserviceHeartBeat", str(timestamp)) # Sleep/wait for abort for 10 seconds if monitor.waitForAbort(1): break # Abort was requested while waiting. We should exit self.myCommand = getCMD() if self.myCommand == '': continue elif self.myCommand == 'STOPservice': self.stop() return elif self.myCommand == 'Title': myAnswer(self.title) continue elif self.myCommand == 'LogoPath': myAnswer(self.host.getLogoPath().value) continue elif self.myCommand == 'SupportedTypes': myAnswer(self.host.getSupportedFavoritesTypes().value) continue elif self.myCommand == 'InitList': ret = self.host.getInitList() if len(ConfList) > 0: #### TBC myAnswer(ToItemsListTable(ret.value, self.clientType) + ToConfigTable(ConfList, clientType)) #if host hasconfig, return it too myAnswer(ToItemsListTable(ret.value, self.clientType)) #if host hasconfig, return it too else: myAnswer(ToItemsListTable(ret.value, self.clientType)) continue elif self.myCommand == 'RefreshList': ret = self.host.getCurrentList() myAnswer(ToItemsListTable(ret.value, self.clientType)) continue elif self.myCommand == 'PreviousList': ret= self.host.getPrevList() myAnswer(ToItemsListTable(ret.value, self.clientType)) continue elif self.myCommand.startswith('ListForItem='): #Param: item ID myID = self.myCommand.split('=')[1] if myID.isdigit(): myID = int(myID) ret= self.host.getListForItem(myID,0,ret.value[myID]) myAnswer(ToItemsListTable(ret.value, self.clientType)) else: myAnswer('ERROR: wrong index') continue elif self.myCommand.startswith('getVideoLinks='): #Param: link ID myID = self.myCommand.split('=')[1] daemonLog("daemon:getVideoLinks=%s" % myID) if myID.isdigit(): myID = int(myID) self.movieTitle = ret.value[myID].name.replace('"', "'") try: links = ret.value[myID].urlItems except: links='NOVALIDURLS' try: retUrl= self.host.getLinksForVideo(myID,ret.value[myID]) #returns "NOT_IMPLEMENTED" when host is using curlitem myAnswer(ToUrlsTable(retUrl.value, self.clientType)) daemonLog("retUrl found") except: daemonLog("Exception running getLinksForVideo (means not implemented), using CUrlItem") retUrl = RetHost(RetHost.NOT_IMPLEMENTED, value = []) if retUrl.status == "NOT_IMPLEMENTED" and links != 'NOVALIDURLS': daemonLog("getLinksForVideo not implemented, using CUrlItem") tempUrls=[] daemonLog("Iterating links...") iindex=1 for link in links: if link.name == '': tempUrls.append(CUrlItem('link %d' % iindex, link.url, link.urlNeedsResolve)) else: tempUrls.append(CUrlItem(link.name, link.url, link.urlNeedsResolve)) iindex += 1 retUrl = RetHost(RetHost.OK, value = tempUrls) myAnswer(ToUrlsTable(tempUrls, self.clientType)) else: myAnswer('ERROR: wrong index') continue #### ResolveURL #### elif self.myCommand.startswith('ResolveURL='): #Param: selected quality link ID myParm = self.myCommand.split('=')[1] url = "NOVALIDURLS" linksList = [] if myParm.isdigit(): myID = int(myParm) #czasami jest zwracana lista linkow wiec trzeba ja sparsowac linksList = self.host.getResolvedURL(retUrl.value[myID].url).value daemonLog("myParm.isdigit and points to:%s" % retUrl.value[myID].url) else: linksList = self.host.getResolvedURL(myParm).value if len(linksList) == 0: #There is no free links for current video daemonLog("linksList has no items :(") elif len(linksList) >1: daemonLog('WARNING: more than one link returned, selecting first') if isinstance(linksList[0], CUrlItem): if int(linksList[0].urlNeedsResolve) == 1: daemonLog('ERROR: url should be already resolved. :(') else: url = linksList[0].url daemonLog("CUrlItem url:%s" %url) elif isinstance(linksList[0], basestring): url = linksList[0] daemonLog("basestring url:%s" %url) elif isinstance(linksList, (list, tuple)): url = linksList[0] daemonLog("list/tuple url:%s" %url) myAnswer( url ) #### Download movie #### elif self.myCommand.startswith('DownloadURL='): #Param: full download url url = self.myCommand[len('DownloadURL='):] #using split results in wrong links from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdownloadercreator import IsUrlDownloadable, DownloaderCreator if IsUrlDownloadable(url): from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdh import DMHelper url, downloaderParams = DMHelper.getDownloaderParamFromUrl(url) currentDownloader = DownloaderCreator(url) #correct downloader is assigned e.g. wget MovieRecordFileName = os.path.join(config.plugins.iptvplayer.NaszaSciezka.value , getValidFileName(self.movieTitle)) MovieRecordFileNameExt = MovieRecordFileName[-4:] if not MovieRecordFileNameExt in ('.mpg', '.flv', '.mp4'): MovieRecordFileName += ".mp4" currentDownloader.start(url, MovieRecordFileName, downloaderParams) myAnswer(MovieRecordFileName) else: myAnswer( 'ERROR:wrong url' ) #### buffer movie #### elif self.myCommand.startswith('BufferURL='): #Param: full download url url = self.myCommand[len('BufferURL='):] #using split results in wrong links from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdownloadercreator import IsUrlDownloadable, DownloaderCreator if IsUrlDownloadable(url): from Plugins.Extensions.IPTVPlayer.iptvdm.iptvdh import DMHelper url, downloaderParams = DMHelper.getDownloaderParamFromUrl(url) currentDownloader = DownloaderCreator(url) #correct downloader is assigned e.g. wget MovieRecordFileName = config.plugins.iptvplayer.NaszaSciezka.value + "iptv_buffering.mp4" currentDownloader.start(url, MovieRecordFileName, downloaderParams) myAnswer(MovieRecordFileName) else: myAnswer( 'ERROR:wrong url' ) #### Search items #### elif self.myCommand.startswith('Search='): #Param: search pattern self.searchPattern = self.myCommand[len('Search='):] #param can contain '='. Using split function would brake everything ;) ret = self.host.getSearchResults(self.searchPattern) myAnswer(ToItemsListTable(ret.value, self.clientType)) #### doCommand - not finished#### elif self.myCommand.startswith('doCommand='): #Param: selected quality link ID execCMD = self.myCommand.replace('doCommand=','') try: exec(execCMD) myAnswer( 'OK' ) except Exception: myAnswer( 'ERROR executing command.') elif self.myCommand.startswith('doUnsafeCommand='): #Param: selected quality link ID execCMD = self.myCommand.replace('doUnsafeCommand=','') exec(execCMD) myAnswer( 'OK' ) else: daemonLog("Unknown command:'%s'\n" % self.myCommand) myAnswer("ERROR: Unknown command:'%s'\n" % self.myCommand) self.stop() return