def getLength(self, service=None): #TODO read from meta eit #E2 will read / calculate it directly from ts file # Should stay dynamic if it is a copy or move #self.newService(service) # If it is a record we will force to use the timer duration length = 0 if config.EMC.record_show_real_length.value: record = getRecording(self.path) if record: begin, end, service = record length = end - begin # times = (begin, end) : end - begin if length: return length service = service or self.__reference if self.isfile: #TODO isfile and isdvd esc = eServiceCenter.getInstance() info = esc and esc.info(service) length = info and info.getLength(service) or 0 if length <= 0: length = self.__cutlist and self.__cutlist.getCutListLength() if length > 86400: length = 0 return length or 0
def getPosition(self): if config.EMC.record_show_real_length.value: service = self.service path = service and service.getPath() if path: record = getRecording(path) if record: begin, end, s = record return int((time() - begin) * 90000) # Fallback seek = self.getSeek() if seek is None: return None pos = seek.getPlayPosition() if pos[0]: return 0 return pos[1]
def getLength(self): if config.EMC.record_show_real_length.value: service = self.service path = service and service.getPath() if path: record = getRecording(path) if record: #TODO There is still a problem with split records with cut numbers begin, end, s = record return int((end - begin) * 90000) # Fallback seek = self.getSeek() if seek is None: return None length = seek.getLength() if length[0]: return 0 return length[1]
def doEofInternal(self, playing): print "EMC PLAYER doEofInternal" if not self.execing: return if not playing: return if self.in_menu: self.hide() val = config.EMC.record_eof_zap.value if val == "0" or val == "1" and self.service: #TEST # get path from iPlayableService #ref = self.session.nav.getCurrentlyPlayingServiceReference() #if ref and self.service and ref.getPath() == self.service.getPath(): record = getRecording(self.service.getPath()) if record: begin, end, service = record # Seek play position and record length differ about one second #last = ( time() - begin ) * 90000 #if last < (self.getSeekPlayPosition() + 1*90000): # Zap to new channel self.lastservice = service self.service = None self.closeAll = True self.leavePlayer(False) return #TEST just return and ignore if there is more to play #else: ##if self.seekstate == self.SEEK_STATE_EOF: ## self.setSeekState(self.SEEK_STATE_PLAY) # return if self.service.type != sidDVB: self.makeUpdateCutList() self.evEOF()
def doEofInternal(self, playing): print "EMC PLAYER doEofInternal" if not self.execing: return if not playing: return if self.in_menu: self.hide() if config.EMC.record_eof_zap.value and self.service: #TEST # get path from iPlayableService #ref = self.session.nav.getCurrentlyPlayingServiceReference() #if ref and self.service and ref.getPath() == self.service.getPath(): record = getRecording(self.service.getPath()) if record: begin, end, service = record # Seek play position and record length differ about one second #last = ( time() - begin ) * 90000 #if last < (self.getSeekPlayPosition() + 1*90000): # Zap to new channel self.lastservice = service self.service = None self.closeAll = True self.leavePlayer(False) return #TEST just return and ignore if there is more to play #else: ##if self.seekstate == self.SEEK_STATE_EOF: ## self.setSeekState(self.SEEK_STATE_PLAY) # return if self.service.type != sidDVB: self.updateCutList(self.getSeekPlayPosition(), self.getSeekLength()) self.evEOF()
f = None try: f = open(path, 'wb') if data: f.write(data) except Exception, e: emcDebugOut("[CUTS] Exception in __writeCutFile: " + str(e)) finally: if f is not None: f.close() # [Cutlist.Workaround] # Always make a backup-copy when recording, it will be merged with enigma-cutfile after recording if DO_CUTLIST_WORKAROUND: recFileName=self.cut_file[:-5] record = getRecording(recFileName) if record: savepath = self.cut_file + ".save" fsave = None try: emcDebugOut("[Cutlist.Workaround] Creating backupfile: " + str(savepath)) fsave = open(savepath, 'wb') if data: fsave.write(data) except Exception, e: emcDebugOut("[Cutlist.Workaround] Exception in __writeCutFile: " + str(e)) finally: if fsave is not None: fsave.close() # Save file timestamp
def evEOF(self, needToClose=False): # see if there are more to play print "EMC PLAYER evEOF", self.playall, self.playcount, self.playlist if self.playall: # Play All try: self.playcount = -1 self.playlist = [self.playall.next()] except StopIteration: self.playall = None self.playlist = [] if (self.playcount + 1) < len(self.playlist): self.playcount += 1 service = self.playlist[self.playcount] #TODO Problem with VLC path = service and service.getPath() if os.path.exists( path): #TODO use ext != vlc but must be prepared first cutspath = path + ".cuts" if os.path.exists(cutspath): # prepare cut list #try: # # Workaround for not working E2 cue.setCutListEnable not working :-( # # We always have to set this permission, we can not detect all stop preview events # os.chmod(cutspath, 755) # print "EMC set chmod read and write" #except: # pass # Workaround for E2 dvb player bug in combination with running recordings and existings cutlists record = getRecording(path) if record: try: os.remove(cutspath) except: pass # Further cutlist handling toggleProgressService(service, True) self.service = service if service and service.type == sidDVD: # Only import DVDPlayer, if we want to play a DVDPlayer format if fileExists("%so" % dvdPlayerPlg) or fileExists( "%sc" % dvdPlayerPlg): try: from Plugins.Extensions.DVDPlayer import servicedvd # load c++ part of dvd player plugin except: pass from Plugins.Extensions.DVDPlayer.plugin import DVDOverlay if not self.dvdScreen: self.dvdScreen = self.session.instantiateDialog( DVDOverlay) else: self.session.open(MessageBox, _("No DVD-Player found!"), MessageBox.TYPE_ERROR, 10) self.leavePlayer(True) return self["TeletextActions"].setEnabled(False) self["DVDPlayerPlaybackActions"].setEnabled(True) else: if self.dvdScreen: self.dvdScreen.close() self.dvdScreen = None else: self.dvdScreen = None self["TeletextActions"].setEnabled(True) self["DVDPlayerPlaybackActions"].setEnabled(False) # Check if the video preview is active and already running # if config.EMC.movie_preview.value: # ref = self.session.nav.getCurrentlyPlayingServiceReference() # if ref and service and ref.getPath() == service.getPath(): # #s = self.session.nav.getCurrentService() # #cue = s and s.cueSheet() # #if cue is not None: # #cue.setCutListEnable(1) # self.downloadCuesheet() # #print "EMC cue.setCutListEnable(1)" # #return # Is this really necessary # TEST for M2TS Audio problem #self.session.nav.stopService() # Start playing movie self.session.nav.playService(service) if service and service.type == sidDVD: # Seek will cause problems with DVDPlayer! # ServiceDVD needs this to start subs = self.getServiceInterface("subtitle") if subs and self.dvdScreen: subs.enableSubtitles(self.dvdScreen.instance, None) else: # TEST for M2TS Audio problem #self.setSeekState(InfoBarSeek.SEEK_STATE_PLAY) #TODO Do we need this #self.doSeek(0) #TODO AutoSelect subtitle for DVD Player is not implemented yet DelayedFunction(200, self.setAudioTrack) DelayedFunction(400, self.setSubtitleState, True) else: self.session.open( MessageBox, _("Skipping movie, the file does not exist.\n\n") + service.getPath(), MessageBox.TYPE_ERROR, 10) self.evEOF(needToClose) else: if needToClose or config.usage.on_movie_eof.value != "pause": self.closedByDelete = needToClose self.leavePlayer(False)
def evEOF(self, needToClose=False): # see if there are more to play print "EMC PLAYER evEOF", self.playall, self.playcount, self.playlist if self.playall: # Play All try: self.playcount = -1 self.playlist = [ self.playall.next() ] except StopIteration: self.playall = None self.playlist = [] if (self.playcount + 1) < len(self.playlist): self.playcount += 1 service = self.playlist[self.playcount] #TODO Problem with VLC path = service and service.getPath() if os.path.exists(path): #TODO use ext != vlc but must be prepared first cutspath = path + ".cuts" if os.path.exists(cutspath): # prepare cut list #try: # # Workaround for not working E2 cue.setCutListEnable not working :-( # # We always have to set this permission, we can not detect all stop preview events # os.chmod(cutspath, 755) # print "EMC set chmod read and write" #except: # pass # Workaround for E2 dvb player bug in combination with running recordings and existings cutlists record = getRecording(path) if record: try: os.remove(cutspath) except: pass # Further cutlist handling toggleProgressService(service, True) self.service = service if service and service.type == sidDVD: # Only import DVDPlayer, if we want to play a DVDPlayer format if fileExists("%so"%dvdPlayerPlg) or fileExists("%sc"%dvdPlayerPlg): try: from Plugins.Extensions.DVDPlayer import servicedvd # load c++ part of dvd player plugin except: pass from Plugins.Extensions.DVDPlayer.plugin import DVDOverlay if not self.dvdScreen: self.dvdScreen = self.session.instantiateDialog(DVDOverlay) else: self.session.open(MessageBox, _("No DVD-Player found!"), MessageBox.TYPE_ERROR, 10) self.leavePlayer(True) return self["TeletextActions"].setEnabled(False) self["DVDPlayerPlaybackActions"].setEnabled(True) else: if self.dvdScreen: self.dvdScreen.close() self.dvdScreen = None else: self.dvdScreen = None self["TeletextActions"].setEnabled(True) self["DVDPlayerPlaybackActions"].setEnabled(False) # Check if the video preview is active and already running # if config.EMC.movie_preview.value: # ref = self.session.nav.getCurrentlyPlayingServiceReference() # if ref and service and ref.getPath() == service.getPath(): # #s = self.session.nav.getCurrentService() # #cue = s and s.cueSheet() # #if cue is not None: # #cue.setCutListEnable(1) # self.downloadCuesheet() # #print "EMC cue.setCutListEnable(1)" # #return # Is this really necessary # TEST for M2TS Audio problem #self.session.nav.stopService() # Start playing movie self.session.nav.playService(service) if service and service.type == sidDVD: # Seek will cause problems with DVDPlayer! # ServiceDVD needs this to start subs = self.getServiceInterface("subtitle") if subs and self.dvdScreen: subs.enableSubtitles(self.dvdScreen.instance, None) else: # TEST for M2TS Audio problem #self.setSeekState(InfoBarSeek.SEEK_STATE_PLAY) #TODO Do we need this #self.doSeek(0) #TODO AutoSelect subtitle for DVD Player is not implemented yet DelayedFunction(200, self.setAudioTrack) DelayedFunction(400, self.setSubtitleState, True) else: self.session.open(MessageBox, _("Skipping movie, the file does not exist.\n\n") + service.getPath(), MessageBox.TYPE_ERROR, 10) self.evEOF(needToClose) else: if needToClose or config.usage.on_movie_eof.value != "pause": self.closedByDelete = needToClose self.leavePlayer(False)