from Components.Pixmap import Pixmap, PixmapConditional
from Components.BlinkingPixmap import BlinkingPixmapConditional
from Components.ServiceName import ServiceName
-from Components.EventInfo import EventInfo
+from Components.EventInfo import EventInfo, EventInfoProgress
from ServiceReference import ServiceReference
from EpgSelection import EPGSelection
from Screens.MessageBox import MessageBox
-from Screens.Volume import Volume
-from Screens.Mute import Mute
from Screens.Dish import Dish
from Screens.Standby import Standby
from Screens.EventView import EventView
import time
import os
+from Components.config import config, currentConfigSelectionElement
+
# hack alert!
from Menu import MainMenu, mdom
-class InfoBarVolumeControl:
- """Volume control, handles volUp, volDown, volMute actions and display
- a corresponding dialog"""
- def __init__(self):
- config.audio = ConfigSubsection()
- config.audio.volume = configElement("config.audio.volume", configSequence, [100], configsequencearg.get("INTEGER", (0, 100)))
-
- self["VolumeActions"] = ActionMap( ["InfobarVolumeActions"] ,
- {
- "volumeUp": self.volUp,
- "volumeDown": self.volDown,
- "volumeMute": self.volMute,
- })
-
- self.volumeDialog = self.session.instantiateDialog(Volume)
- self.muteDialog = self.session.instantiateDialog(Mute)
-
- self.hideVolTimer = eTimer()
- self.hideVolTimer.timeout.get().append(self.volHide)
-
- vol = config.audio.volume.value[0]
- self.volumeDialog.setValue(vol)
- eDVBVolumecontrol.getInstance().setVolume(vol, vol)
-
- def volSave(self):
- config.audio.volume.value = eDVBVolumecontrol.getInstance().getVolume()
- config.audio.volume.save()
-
- def volUp(self):
- if (eDVBVolumecontrol.getInstance().isMuted()):
- self.volMute()
- eDVBVolumecontrol.getInstance().volumeUp()
- self.volumeDialog.instance.show()
- self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
- self.volSave()
- self.hideVolTimer.start(3000, True)
-
- def volDown(self):
- if (eDVBVolumecontrol.getInstance().isMuted()):
- self.volMute()
- eDVBVolumecontrol.getInstance().volumeDown()
- self.volumeDialog.instance.show()
- self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
- self.volSave()
- self.hideVolTimer.start(3000, True)
-
- def volHide(self):
- self.volumeDialog.instance.hide()
-
- def volMute(self):
- eDVBVolumecontrol.getInstance().volumeToggleMute()
- self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
-
- if (eDVBVolumecontrol.getInstance().isMuted()):
- self.muteDialog.instance.show()
- else:
- self.muteDialog.instance.hide()
-
class InfoBarDish:
def __init__(self):
self.dishDialog = self.session.instantiateDialog(Dish)
- self.onShown.append(self.dishDialog.instance.hide)
+ self.onShown.append(self.dishDialog.instance.show)
class InfoBarShowHide:
""" InfoBar show/hide control, accepts toggleShow and hide actions, might start
def keyNumberGlobal(self, number):
# print "You pressed number " + str(number)
if number == 0:
- self.session.nav.zapLast()
+ self.servicelist.recallPrevService()
self.instance.show()
self.show()
else:
bouquetlist = serviceHandler.list(bouquet)
if not bouquetlist is None:
while number:
- bouquet = bouquetlist.getNext()
+ bouquet = self.servicelist.appendDVBTypes(bouquetlist.getNext())
if not bouquet.valid(): #check end of list
break
if ((bouquet.flags & eServiceReference.flagDirectory) != eServiceReference.flagDirectory):
continue
service, number = self.searchNumberHelper(serviceHandler, number, bouquet)
if not service is None:
- self.session.nav.playService(service) #play service
if self.servicelist.getRoot() != bouquet: #already in correct bouquet?
- self.servicelist.setRoot(bouquet)
+ self.servicelist.clearPath()
+ if self.servicelist.bouquet_root != bouquet:
+ self.servicelist.enterPath(self.servicelist.bouquet_root)
+ self.servicelist.enterPath(bouquet)
self.servicelist.setCurrentSelection(service) #select the service in servicelist
+ self.servicelist.zap()
class InfoBarChannelSelection:
""" ChannelSelection - handles the channelSelection dialog and the initial
def __init__(self):
self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
{
- "showEPGList": (self.openSingleServiceEPG, _("show EPG...")),
+ "showEPGList": (self.showEPG, _("show EPG...")),
})
+ def showEPG(self):
+ if currentConfigSelectionElement(config.usage.epgtoggle) == "yes":
+ self.openSingleServiceEPG()
+ else:
+ self.showEPGList()
+
def showEPGList(self):
bouquets = self.servicelist.getBouquetList()
if bouquets is None:
if info:
self.showEPGList()
+ def openEventView(self):
+ try:
+ self.epglist = [ ]
+ service = self.session.nav.getCurrentService()
+ info = service.info()
+ ptr=info.getEvent(0)
+ if ptr:
+ self.epglist.append(ptr)
+ ptr=info.getEvent(1)
+ if ptr:
+ self.epglist.append(ptr)
+ if len(self.epglist) > 0:
+ self.session.open(EventView, self.epglist[0], ServiceReference(ref), self.eventViewCallback)
+ except:
+ pass
+
def openSingleServiceEPG(self):
ref=self.session.nav.getCurrentlyPlayingServiceReference()
ptr=eEPGCache.getInstance()
self.session.openWithCallback(self.singleEPGCallback, EPGSelection, ref)
else: # try to show now/next
print 'no epg for service', ref.toString()
- try:
- self.epglist = [ ]
- service = self.session.nav.getCurrentService()
- info = service.info()
- ptr=info.getEvent(0)
- if ptr:
- self.epglist.append(ptr)
- ptr=info.getEvent(1)
- if ptr:
- self.epglist.append(ptr)
- if len(self.epglist) > 0:
- self.session.open(EventView, self.epglist[0], ServiceReference(ref), self.eventViewCallback)
- except:
- pass
+
def openBouquetEPG(self, bouquet):
ptr=eEPGCache.getInstance()
self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
+ self["Now_ProgressBar"] = EventInfoProgress(self.session.nav, EventInfo.Now)
+
class InfoBarServiceName:
def __init__(self):
self["ServiceName"] = ServiceName(self.session.nav)
-class InfoBarPVR:
-
+class InfoBarSeek:
+ """handles actions like seeking, pause"""
+
# ispause, isff, issm, skip
SEEK_STATE_PLAY = (0, 0, 0, 0)
SEEK_STATE_PAUSE = (1, 0, 0, 0)
SEEK_STATE_SM_QUARTER = (0, 0, 4, 0)
SEEK_STATE_SM_EIGHTH = (0, 0, 8, 0)
- """handles PVR specific actions like seeking, pause"""
def __init__(self):
- self["PVRActions"] = HelpableActionMap(self, "InfobarPVRActions",
+ self["SeekActions"] = HelpableActionMap(self, "InfobarSeekActions",
{
"pauseService": (self.pauseService, "pause"),
"unPauseService": (self.unPauseService, "continue"),
"seekFwdUp": (self.seekFwdUp, "skip forward"),
"seekBack": (self.seekBack, "skip backward"),
"seekBackUp": (self.seekBackUp, "skip backward"),
-
- "up": (self.showMovies, "movie list"),
- "down": (self.showMovies, "movie list")
})
self.seekstate = self.SEEK_STATE_PLAY
def rwdSeekTo(self, minutes):
self.fwdSeekTo(0 - minutes)
+class InfoBarShowMovies:
+
+ # i don't really like this class.
+ # it calls a not further specified "movie list" on up/down/movieList,
+ # so this is not moe than an action map
+ def __init__(self):
+ self["MovieListActions"] = HelpableActionMap(self, "InfobarMovieListActions",
+ {
+ "movieList": (self.showMovies, "movie list"),
+ "up": (self.showMovies, "movie list"),
+ "down": (self.showMovies, "movie list")
+ })
+
+class InfoBarTimeshift:
+ def __init__(self):
+ self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions",
+ {
+ "timeshiftStart": (self.startTimeshift, "start timeshift "),
+ "timeshiftStop": (self.stopTimeshift, "stop timeshift")
+ })
+ self.tshack = 0
+
+ def getTimeshift(self):
+ service = self.session.nav.getCurrentService()
+ return service.timeshift()
+
+ def startTimeshift(self):
+ # TODO: check for harddisk! (or do this in the interface? would make
+ # more sense... for example radio could be timeshifted in memory,
+ # and the decision can't be made here)
+ print "enable timeshift"
+ ts = self.getTimeshift()
+ if ts is None:
+ self.session.open(MessageBox, _("Timeshift not possible!"), MessageBox.TYPE_ERROR)
+ print "no ts interface"
+ return
+ print "ok, timeshift enabled"
+ if self.tshack == 0:
+ ts.startTimeshift()
+ self.tshack = 1
+ else:
+ pauseable = self.session.nav.getCurrentService().pause()
+ pauseable.pause() # switch to record
+
+ def stopTimeshift(self):
+ print "disable timeshift"
+ ts = self.getTimeshift()
+ if ts is None:
+ return
+ ts.stopTimeshift()
+ self.tshack = 0
+
+
from RecordTimer import parseEvent
class InfoBarInstantRecord:
if event is not None:
data = parseEvent(event)
- data = (data[0], data[1] + 3600 * 10, data[2], data[3], data[4])
+ begin = data[0]
+ if begin < time.time():
+ begin = time.time()
+
+ end = data[1]
+ if end < begin:
+ end = begin
+
+ end += 3600 * 10
+
+ data = (begin, end, data[2], data[3], data[4])
else:
data = (time.time(), time.time() + 3600 * 10, "instant record", "", None)
self.hideSubServiceIndication()
def checkDolby(self, service):
+ # FIXME
dolby = False
audio = service.audioTracks()
if audio is not None: