Skip to content

Commit

Permalink
Issue 10 popup bug fixed
Browse files Browse the repository at this point in the history
New screen handling implemented
  • Loading branch information
betonme committed Nov 12, 2012
1 parent 38bbbcf commit 553fc5d
Show file tree
Hide file tree
Showing 8 changed files with 415 additions and 418 deletions.
131 changes: 61 additions & 70 deletions src/EMCMediaCenter.py
Expand Up @@ -54,8 +54,10 @@
from Components.Pixmap import Pixmap
from enigma import ePicLoad

from MovieCenter import sidDVD, sidDVB
from MovieCenter import sidDVD, sidDVB, toggleProgressService

from RecordingsControl import getRecording
import NavigationInstance

dvdPlayerPlg = "%s%s"%(resolveFilename(SCOPE_PLUGINS), "Extensions/DVDPlayer/plugin.pyo")

Expand All @@ -72,7 +74,7 @@ class EMCMediaCenter( CutList, Screen, HelpableScreen, InfoBarSupport ):
ENABLE_RESUME_SUPPORT = True
ALLOW_SUSPEND = True

def __init__(self, session, playlist, recordings, playall=None, lastservice=None):
def __init__(self, session, playlist, playall=None, lastservice=None):

# The CutList must be initialized very first
CutList.__init__(self)
Expand Down Expand Up @@ -206,20 +208,23 @@ def __init__(self, session, playlist, recordings, playall=None, lastservice=None
self.firstStart = True
self.stopped = False
self.closedByDelete = False
self.playerOpenedList = False
self.closeAll = False

self.lastservice = lastservice or self.session.nav.getCurrentlyPlayingServiceReference()
self.playlist = playlist
self.playall = playall
self.playcount = -1
self.recordings = recordings
self.service = None
self.recordings.setPlayerInstance(self)

self.picload = ePicLoad()
self.picload.PictureData.get().append(self.showCoverCallback)

# Record events
try:
NavigationInstance.instance.RecordTimer.on_state_change.append(self.recEvent)
except Exception, e:
emcDebugOut("[EMCMediaCenter] Record observer add exception:\n" + str(e))

# Dialog Events
self.onShown.append(self.__onShow) # Don't use onFirstExecBegin() it will crash
self.onClose.append(self.__onClose)
Expand Down Expand Up @@ -287,14 +292,14 @@ def evEOF(self, needToClose=False):
#except:
# pass
# Workaround for E2 dvb player bug in combination with running recordings and existings cutlists
record = self.recordings.getRecording(path)
record = getRecording(path)
if record:
try:
os.remove(cutspath)
except:
pass
# Further cutlist handling
self.recordings.toggleProgress(service, True)
toggleProgressService(service, True)
self.service = service

if service and service.type == sidDVD:
Expand Down Expand Up @@ -323,16 +328,16 @@ def evEOF(self, needToClose=False):
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
# 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
Expand Down Expand Up @@ -367,14 +372,6 @@ def evEOF(self, needToClose=False):
def leavePlayer(self, stopped=True):
#TEST is stopped really necessary
self.stopped = stopped
if self.playerOpenedList:
print "leavePlayer self.recordings.close"
self.recordings.close()
#self.session.close(self.recordings)
#self.session.execEnd(self.recordings)
self.playerOpenedList = False
#self.recordings.hide()
return

self.setSubtitleState(False)
if self.dvdScreen:
Expand All @@ -387,50 +384,65 @@ def leavePlayer(self, stopped=True):
if self.service and self.service.type != sidDVB:
self.updateCutList( self.getSeekPlayPosition(), self.getSeekLength() )

self.recordings.setPlayerInstance(None)

reopen = False
try:
#from MovieSelection import gMS
self.recordings.returnService = self.service
# self.recordings.returnService = self.service
if self.stopped:
emcDebugOut("[EMCPlayer] Player closed by user")
if config.EMC.movie_reopen.value:
#DelayedFunction(80, gMS.session.execDialog, gMS) # doesn't crash Enigma2 subtitle functionality
#self.recordings.show()
reopen = True
elif self.closedByDelete:
emcDebugOut("[EMCPlayer] closed due to file delete")
#DelayedFunction(80, gMS.session.execDialog, gMS) # doesn't crash Enigma2 subtitle functionality
#self.recordings.show()
reopen = True
else:
emcDebugOut("[EMCPlayer] closed due to playlist EOF")
if self.closeAll:
AddPopup(
_("EMC\nZap to Live TV of record"),
MessageBox.TYPE_INFO,
3,
"EMCCloseAllAndZap"
)
_("EMC\nZap to Live TV of record"),
MessageBox.TYPE_INFO,
3,
"EMCCloseAllAndZap"
)
else:
if self.playerOpenedList or config.EMC.movie_reopenEOF.value: # did the player close while movie list was open?
#DelayedFunction(80, gMS.session.execDialog, gMS) # doesn't crash Enigma2 subtitle functionality
if config.EMC.movie_reopenEOF.value: # did the player close while movie list was open?
#self.recordings.show()
reopen = True
self.playerOpenedList = False
self.service = None
except Exception, e:
emcDebugOut("[EMCPlayer] leave exception:\n" + str(e))

self.close(reopen)

def recEvent(self, timer):
try:
# Check if record is currently played
path = timer.Filename + ".ts"
if path == self.service.getPath():
# WORKAROUND Player is running during a record ends
# We should find a more flexible universal solution
DelayedFunction(3000, self.updatePlayer)
# ATTENTION thist won't fix the other situation
# If a running record will be played and the player is stopped before the record ends
# -> Then E2 will overwrite the existing cuts.
except Exception, e:
emcDebugOut("[spRO] recEvent exception:\n" + str(e))

def updatePlayer(self):
self.updateFromCuesheet()

def __onClose(self):
if self.picload:
del self.picload
if self.lastservice:
self.session.nav.playService(self.lastservice)
self.lastservice = None
# Record events
try:
NavigationInstance.instance.RecordTimer.on_state_change.remove(self.recEvent)
except Exception, e:
emcDebugOut("[EMCMediaCenter] Record observer remove exception:\n" + str(e))

##############################################################################
## Recordings relevant function
Expand All @@ -439,7 +451,7 @@ def getLength(self):
service = self.service
path = service and service.getPath()
if path:
record = self.recordings.getRecording(path)
record = getRecording(path)
if record:
#TODO There is still a problem with split records with cut numbers
begin, end, s = record
Expand All @@ -458,7 +470,7 @@ def getPosition(self):
service = self.service
path = service and service.getPath()
if path:
record = self.recordings.getRecording(path)
record = getRecording(path)
if record:
begin, end, s = record
return int((time() - begin) * 90000)
Expand Down Expand Up @@ -492,7 +504,6 @@ def currentlyPlayedMovie(self):

def movieSelected(self, playlist, playall=None):
print "movieSelected"
self.playerOpenedList = False

if playlist is not None and len(playlist) > 0:
self.playcount = -1
Expand Down Expand Up @@ -778,9 +789,9 @@ def setChapterLabel(self):
# InfoBarShowMovies
def showMovies(self):
try:
self.playerOpenedList = True
self.session.execDialog(self.recordings)
#self.recordings.show()
from MovieSelection import EMCSelection
#self.session.openWithCallback(showMoviesCallback, EMCSelection)
self.session.open(EMCSelection, playerInstance=self, returnService=self.service )
except Exception, e:
emcDebugOut("[EMCPlayer] showMovies exception:\n" + str(e))

Expand Down Expand Up @@ -811,34 +822,13 @@ def doShow(self):
# self.dvdScreen.hide()
InfoBarShowHide.doShow(self)

# InfoBarCueSheetSupport
def playLastCB(self, answer):
if answer == True:
self.doSeek(self.resume_point)
# From Merlin2
elif config.EMC.movie_jump_first_mark.value == True:
self.jumpToFirstMark()
elif self.service and self.service.type == sidDVD:
DelayedFunction(50, boundFunction(self.dvdPlayerWorkaround))
self.showAfterSeek()

# InfoBarNumberZap
def keyNumberGlobal(self, number):
if self.service and self.service.type == sidDVD:
if fileExists(dvdPlayerPlg) or fileExists("%sc"%dvdPlayerPlg):
from Plugins.Extensions.DVDPlayer.plugin import ChapterZap
self.session.openWithCallback(self.numberEntered, ChapterZap, "0")

def numberEntered(self, retval):
if retval and retval > 0 and retval != "":
self.zapToNumber(retval)

def zapToNumber(self, number):
if self.service:
seekable = self.getSeek()
if seekable:
seekable.seekChapter(number)

# InfoBarMenu Key_Menu
#def mainMenu(self):
# self.enterDVDMenu()
Expand Down Expand Up @@ -875,25 +865,26 @@ def doEofInternal(self, playing):

if self.in_menu:
self.hide()
if config.EMC.record_eof_zap.value and self.recordings and self.service:
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 = self.recordings.getRecording(self.service.getPath())
record = getRecording(self.service.getPath())
if record:
begin, end, service = record
#last = ( time() - begin ) * 90000

# 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
#DelayedFunction(10, boundFunction(self.leavePlayer, False))
self.leavePlayer(False)
return

#TEST just return and ignore if there is more to play
#else:
##if self.seekstate == self.SEEK_STATE_EOF:
Expand Down
8 changes: 3 additions & 5 deletions src/EnhancedMovieCenter.py
Expand Up @@ -53,7 +53,7 @@
from EMCTasker import emcTasker, emcDebugOut


EMCVersion = "V3.9.2"
EMCVersion = "V4.0.0b4"
EMCAbout = "\n Enhanced Movie Center " +EMCVersion+ "\n\n (C) 2012 by\n Coolman, Betonme & Swiss-MAD \n\n If you like this plugin and you want to support it,\n or if just want to say ''thanks'',\n please donate via PayPal. \n\n Thanks a lot ! \n\n PayPal: enhancedmoviecenter@gmail.com"


Expand Down Expand Up @@ -85,8 +85,6 @@ def setupKeyResponseValues(dummyself=None, dummy=None):

def cleanupSetup(dummy=None):
try:
#from MovieSelection import gMS
from plugin import gRecordings
global trashCleanCall
if trashCleanCall is not None:
if trashCleanCall.exists():
Expand All @@ -109,8 +107,8 @@ def cleanupSetup(dummy=None):
# Recall setup funktion
trashCleanCall = DelayedFunction(1000*seconds, cleanupSetup)
# Execute trash cleaning
#DelayedFunction(2000, gMS.purgeExpired)
DelayedFunction(2000, gRecordings.purgeExpired)
from MovieSelection import purgeExpired
DelayedFunction(2000, purgeExpired)
emcDebugOut("Next trashcan cleanup in " + str(seconds/60) + " minutes")
except Exception, e:
emcDebugOut("[sp] cleanupSetup exception:\n" + str(e))
Expand Down
23 changes: 23 additions & 0 deletions src/InfoBarSupport.py
Expand Up @@ -111,8 +111,11 @@ def __init__(self):
"jumpNextMark": (self.jumpNextMark, _("jump to next marked position")),
"toggleMark": (self.toggleMark, _("toggle a cut mark at the current position"))
}, prio=1)

self.cut_list = [ ]
self.is_closing = False
self.resume_point = 0

self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
{
iPlayableService.evStart: self.__serviceStarted,
Expand Down Expand Up @@ -151,7 +154,27 @@ def __serviceStarted(self):
self.jumpToFirstMark()
elif config.EMC.movie_jump_first_mark.value == True:
self.jumpToFirstMark()

def playLastCB(self, answer):
if answer == True:
self.doSeek(self.resume_point)
# From Merlin2
elif config.EMC.movie_jump_first_mark.value == True:
self.jumpToFirstMark()
elif self.service and self.service.type == sidDVD:
DelayedFunction(50, boundFunction(self.dvdPlayerWorkaround))
self.showAfterSeek()

def numberEntered(self, retval):
if retval and retval > 0 and retval != "":
self.zapToNumber(retval)

def zapToNumber(self, number):
if self.service:
seekable = self.getSeek()
if seekable:
seekable.seekChapter(number)

# From Merlin2
def jumpToFirstMark(self):
firstMark = None
Expand Down

0 comments on commit 553fc5d

Please sign in to comment.