valisEPG Timer auswahl

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • valisEPG Timer auswahl

      kann mir jemand weiterhelfen?
      und zwar möchte ich wenn ich im Valis Programmliste auf Grün neuer Timer klicke. eine auswahl zwischen standart Timer und auto Timer angezeigt bekommen. wie im screenshot.
      weiß jemand wie ich das hinbekomme?

      beim vali Merlin Guide ist dies bereits eingebaut.
      bei der Vali Kanalliste wird man direkt zum Manuellen Timer geleitet.
      hab schon versucht das aus dem anderen plugin rauszukopieren was leider zur LS Dauerschleife führt..

      plugin.py (Programmliste hier soll es rein)
      Spoiler anzeigen

      from Plugins.Plugin import PluginDescriptor
      from Screens.Screen import Screen
      from Screens.ChannelSelection import ChannelSelection
      from Screens.EventView import EventViewEPGSelect
      from Screens.ChoiceBox import ChoiceBox
      from Screens.MessageBox import MessageBox
      from Screens.TimerEntry import TimerEntry
      from Screens.TimerEdit import TimerSanityConflict
      from Screens.EpgSelection import EPGSelection as impotedEPGSelection
      from Screens.InfoBar import InfoBar
      from Components.EpgList import EPG_TYPE_SINGLE, EPGList, EPG_TYPE_MULTI
      from Components.Button import Button
      from Components.Label import Label
      from Components.Sources.Event import Event
      from Components.ActionMap import NumberActionMap
      from Components.Pixmap import MultiPixmap
      from Components.config import config, ConfigSubsection, getConfigListEntry, ConfigInteger
      from Components.ConfigList import ConfigListScreen
      from Tools.Directories import fileExists
      from Tools.LoadPixmap import LoadPixmap
      from ServiceReference import ServiceReference
      from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
      from enigma import eEPGCache, eServiceReference, eServiceCenter, eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, RT_WRAP, getDesktop, eTimer, ePoint
      from time import localtime, mktime, time
      from datetime import datetime




      config.valisepg = ConfigSubsection()
      config.valisepg.ptH = ConfigInteger(default=20, limits=(0, 23))
      config.valisepg.ptM = ConfigInteger(default=15, limits=(0, 56))
      config.valisepg.autozap = ConfigInteger(default=10, limits=(3, 20))




      class newEPGlist(EPGList):
      def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer = None):
      EPGList.__init__(self, type, selChangedCB, timer)
      self.factor = 1
      if getDesktop(0).size().width() == 1920:
      self.factor = 1.5
      fontsize0 = int(20*self.factor)
      fontsize1 = int(14*self.factor)
      self.l.setFont(0, gFont("Regular", fontsize0))
      self.l.setFont(1, gFont("Regular", fontsize1))
      self.l.setItemHeight(int(60*self.factor))
      self.l.setBuildFunc(self.buildSingleEntry)
      self.breite = 200
      self.primetime_pixmap = LoadPixmap(cached=True, path='/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/primetime.png')
      self.search_pixmap = LoadPixmap(cached=True, path='/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/search.png')
      try:
      self.searchtext = config.plugins.epgsearch.history.value[0].lower()
      except:
      self.searchtext = None


      def buildSingleEntry(self, service, eventId, beginTime, duration, EventName):
      (clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
      t = localtime(beginTime)
      evCHT = float(str(t[3])+"."+str(t[4]))
      # self.factor = 1
      res = [
      None,
      (eListboxPythonMultiContent.TYPE_TEXT, int(115*self.factor), int(6*self.factor), int(40*self.factor), int(24*self.factor), 0, RT_HALIGN_LEFT, self.days[t[6]]),
      (eListboxPythonMultiContent.TYPE_TEXT, int(155*self.factor), int(6*self.factor), int(135*self.factor), int(24*self.factor), 0, RT_HALIGN_LEFT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))
      # (eListboxPythonMultiContent.TYPE_TEXT, 115, 6, 40, 24, 0, RT_HALIGN_LEFT, self.days[t[6]]),
      # (eListboxPythonMultiContent.TYPE_TEXT, 155, 6, 135, 24, 0, RT_HALIGN_LEFT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))
      ]
      if rec:
      res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, int(290*self.factor), int(6*self.factor), 21, 21, clock_pic))
      if (evCHT >= 20.1) and (evCHT <= 20.2):
      res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, int(321*self.factor), int(6*self.factor), 21, 21, self.primetime_pixmap))
      elif self.searchtext and (self.searchtext in EventName.lower()):
      res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, int(321*self.factor), int(6*self.factor), 21, 21, self.search_pixmap))
      res.append((eListboxPythonMultiContent.TYPE_TEXT, int(15*self.factor), int(3*self.factor), int(80*self.factor), int(18*self.factor), 1, RT_HALIGN_LEFT, "______________________________"))
      res.append((eListboxPythonMultiContent.TYPE_TEXT, int(15*self.factor), int(28*self.factor), int(900*self.factor), int(26*self.factor), 0, RT_HALIGN_LEFT, EventName))
      return res




      class ValisEPG(ChannelSelection):
      if getDesktop(0).size().width() == 1280:
      skin = """
      <screen backgroundColor="#240e1014" flags="wfNoBorder" position="0,0" size="1280,720" title="Channels">
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/bg.png" position="0,0" size="1280,720" zPosition="-1" />
      <widget backgroundColor="#16454C5B" font="Regular;22" position="70,35" size="650,50" render="EpgShortTitle" source="Title" transparent="1" valign="center" zPosition="1" />
      <widget backgroundColor="#16454C5B" font="Regular;20" halign="right" position="940,35" render="Label" size="270,50" source="global.CurrentTime" transparent="1" valign="center" zPosition="1">
      <convert type="ClockToText">Format:%a %d. %b %H:%M</convert>
      </widget>
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/red.png" position="100,643" size="30,30" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/green.png" position="390,643" size="30,30" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/yellow.png" position="680,643" size="30,30" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/blue.png" position="970,643" size="30,30" />
      <widget backgroundColor="#16454C5B" font="Regular;20" halign="left" name="key_red" position="145,645" size="220,26" transparent="1" zPosition="1" />
      <widget backgroundColor="#16454C5B" font="Regular;20" halign="left" name="key_green" position="435,645" size="220,26" transparent="1" zPosition="1" />
      <widget backgroundColor="#16454C5B" font="Regular;20" halign="left" name="key_yellow" position="725,645" size="220,26" transparent="1" zPosition="1" />
      <widget backgroundColor="#16454C5B" font="Regular;20" halign="left" name="key_blue" position="1015,645" size="220,26" transparent="1" zPosition="1" />
      <widget itemHeight="60" name="epglist" position="793,105" scrollbarMode="showOnDemand" size="430,420" transparent="1" />
      <widget position="57,105" size="730,420" backgroundColor="#240e1014" colorEventProgressbarBorder="#555555" colorEventProgressbarBorderSelected="#00aaaaaa" colorServiceDescription="#DBB96E" foregroundColorServiceNotAvail="#00656565" itemHeight="30" name="list" picServiceEventProgressbar="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/minibar.png" scrollbarMode="showOnDemand" serviceInfoFont="Regular;21" serviceItemHeight="30" serviceNameFont="Regular;23" serviceNumberFont="Regular;23" />
      <eLabel backgroundColor="#00555556" position="70,542" size="1140,2" />
      <widget backgroundColor="#240e1014" font="Regular;20" halign="left" name="NewDescription" position="200,556" size="1020,72" transparent="1" zPosition="1" />
      <widget alphatest="blend" position="793,29" render="Picon" size="100,60" source="ServiceEvent" transparent="1" zPosition="1">
      <convert type="piconRefString">ServicelistRef</convert>
      </widget>
      <widget alphatest="on" name="slider1" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/1.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/1a.png" position="765,95" size="22,440" />
      <widget alphatest="on" name="slider2" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/2.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/2a.png" position="1201,95" size="22,440" />
      </screen>
      """
      elif getDesktop(0).size().width() == 1024:
      skin = """
      <screen backgroundColor="#120e1014" flags="wfNoBorder" position="0,0" size="1024,576" title="Channels">
      <eLabel backgroundColor="#10454C5B" position="0,0" size="1024,90" />
      <eLabel backgroundColor="#10454C5B" position="0,511" size="1024,70" />
      <eLabel backgroundColor="#00555556" position="50,317" size="643,2" />
      <widget backgroundColor="#10454C5B" font="Regular;20" position="50,35" size="630,50" render="EpgShortTitle" source="Title" transparent="1" valign="center" zPosition="1" />
      <widget backgroundColor="#10454C5B" font="Regular;20" halign="left" position="800,35" render="Label" size="200,50" source="global.CurrentTime" transparent="1" valign="center" zPosition="1">
      <convert type="ClockToText">Format:%a %d. %H:%M</convert>
      </widget>
      <widget backgroundColor="#084c0000" font="Regular;18" halign="center" name="key_red" position="72,515" size="220,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#08004c00" font="Regular;18" halign="center" name="key_green" position="292,515" size="220,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#084b4b00" font="Regular;18" halign="center" name="key_yellow" position="512,515" size="220,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#08001e4b" font="Regular;18" halign="center" name="key_blue" position="730,515" size="220,26" transparent="0" zPosition="1" />
      <widget itemHeight="60" name="epglist" position="50,325" scrollbarMode="showOnDemand" size="670,180" transparent="1" />
      <widget position="50,97" size="670,212" backgroundColor="#100e1014" colorEventProgressbarBorder="#555555" colorEventProgressbarBorderSelected="#00aaaaaa" colorServiceDescription="#DBB96E" foregroundColorServiceNotAvail="#00656565" itemHeight="30" name="list" picServiceEventProgressbar="Vali.HD.flex/minibar.png" scrollbarMode="showOnDemand" serviceInfoFont="Regular;19" serviceItemHeight="30" serviceNameFont="Regular;21" serviceNumberFont="Regular;21" />
      <widget font="Regular;18" position="730,100" render="Label" size="250,400" source="Event" transparent="1" zPosition="1">
      <convert type="EventName">ExtendedDescription</convert>
      </widget>
      <widget alphatest="blend" position="680,29" render="Picon" size="100,60" source="ServiceEvent" transparent="1" zPosition="1">
      <convert type="piconRefString">ServicelistRef</convert>
      </widget>
      <widget alphatest="on" name="slider1" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd1.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd1a.png" position="698,97" size="22,440" />
      <widget alphatest="on" name="slider2" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd2.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd2a.png" position="698,325" size="22,440" />
      </screen>
      """
      else:
      skin = """
      <screen backgroundColor="#120e1014" flags="wfNoBorder" position="0,0" size="720,576" title="Channels">
      <eLabel backgroundColor="#10454C5B" position="0,0" size="720,90" />
      <eLabel backgroundColor="#10454C5B" position="0,511" size="720,70" />
      <eLabel backgroundColor="#00555556" position="50,317" size="592,2" />
      <widget backgroundColor="#10454C5B" font="Regular;20" position="50,35" size="467,50" render="EpgShortTitle" source="Title" transparent="1" valign="center" zPosition="1" />
      <widget backgroundColor="#10454C5B" font="Regular;18" halign="right" position="517,35" render="Label" size="152,50" source="global.CurrentTime" transparent="1" valign="center" zPosition="1">
      <convert type="ClockToText">Format:%a %d. %H:%M</convert>
      </widget>
      <widget backgroundColor="#064c0000" font="Regular;18" halign="center" name="key_red" position="50,515" size="155,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#06004c00" font="Regular;18" halign="center" name="key_green" position="205,515" size="155,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#064b4b00" font="Regular;18" halign="center" name="key_yellow" position="360,515" size="155,26" transparent="0" zPosition="1" />
      <widget backgroundColor="#06001e4b" font="Regular;18" halign="center" name="key_blue" position="515,515" size="155,26" transparent="0" zPosition="1" />
      <widget itemHeight="60" name="epglist" position="50,325" scrollbarMode="showOnDemand" size="620,180" transparent="1" />
      <widget position="50,97" size="620,212" backgroundColor="#160e1014" colorEventProgressbarBorder="#555555" colorEventProgressbarBorderSelected="#00aaaaaa" colorServiceDescription="#DBB96E" foregroundColorServiceNotAvail="#00656565" itemHeight="30" name="list" picServiceEventProgressbar="Vali.HD.flex/minibar.png" scrollbarMode="showOnDemand" serviceInfoFont="Regular;21" serviceItemHeight="30" serviceNameFont="Regular;23" serviceNumberFont="Regular;23" />
      <widget alphatest="on" name="slider1" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd1.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd1a.png" position="648,97" size="22,440" />
      <widget alphatest="on" name="slider2" pixmaps="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd2.png,/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/xd2a.png" position="648,325" size="22,440" />
      </screen>
      """
      def __init__(self, session):
      ChannelSelection.__init__(self, session)
      self["epglist"] = newEPGlist(type = EPG_TYPE_SINGLE, selChangedCB = self.onEPGLSelectionChanged, timer = session.nav.RecordTimer)
      self.aktCurrentService = ServiceReference(self.getCurrentSelection())
      self.aktListBox = 1
      self.RedBtnMode = "FAVO"
      self["key_red"] = Button(_("Similar"))
      self["key_green"] = Button(_("Add timer"))
      self["key_yellow"] = Button(_("Today")+" "+str(config.valisepg.ptH.value)+":"+str(config.valisepg.ptM.value))
      self["key_blue"] = Button(_("Favourites"))
      self["Event"] = Event()
      self["NewDescription"] = Label(" ")
      self["slider1"] = MultiPixmap()
      self["slider2"] = MultiPixmap()
      self.AutoZap = eTimer()
      self.AutoZap.callback.append(self.zapForRefresh)
      self.AZpos = 1
      self.updateEPGlist = True
      #self.onShown.append(self.onVEPGshow)
      self.onHide.append(self.onVEPGhide)
      self["actions"] = NumberActionMap(["ChannelSelectBaseActions", "OkCancelActions", "DirectionActions", "InfobarActions", "InfobarTeletextActions"],
      {
      "showFavourites": self.keyRedAction,
      "showAllServices": self.runEPGsearch,
      "showProviders": self.goPT,
      "showSatellites": self.AddConfirmedTimer,
      "nextBouquet": self.nextBouquet,
      "prevBouquet": self.prevBouquet,
      "nextMarker": self.rightList,
      "prevMarker": self.leftList,
      "cancel": self.cancel,
      "ok": self.pressOK,
      "right": self.pageDown0,
      "rightRepeated": self.pageDown0,
      "left": self.pageUp0,
      "leftRepeated": self.pageUp0,
      "up": self.moveUp0,
      "upRepeated": self.moveUp0,
      "down": self.moveDown0,
      "downRepeated": self.moveDown0,
      "showMovies": self.OptionsMenu,
      "gotAsciiCode": self.keyAsciiCode,
      "1": self.keyNumberGlobal,
      "2": self.keyNumberGlobal,
      "3": self.keyNumberGlobal,
      "4": self.keyNumberGlobal,
      "5": self.keyNumberGlobal,
      "6": self.keyNumberGlobal,
      "7": self.keyNumberGlobal,
      "8": self.keyNumberGlobal,
      "9": self.keyNumberGlobal,
      "0": self.keyNumber0,
      "startTeletext": self.showSinEPG
      }, -1)
      self.onLayoutFinish.append(self.AfterCreate)


      def leftList(self):
      self.aktListBox = 1
      self["slider1"].setPixmapNum(1)
      self["slider2"].setPixmapNum(0)


      def rightList(self):
      self.aktListBox = 2
      self["slider1"].setPixmapNum(0)
      self["slider2"].setPixmapNum(1)


      def moveUp0(self):
      if self.aktListBox==1:
      self["list"].moveUp()
      else:
      self["epglist"].moveUp()


      def moveDown0(self):
      if self.aktListBox==1:
      self["list"].moveDown()
      else:
      self["epglist"].moveDown()


      def pageUp0(self):
      if self.aktListBox==1:
      self["list"].instance.moveSelection(self["list"].instance.pageUp)
      else:
      self["epglist"].instance.moveSelection(self["list"].instance.pageUp)


      def pageDown0(self):
      if self.aktListBox==1:
      self["list"].instance.moveSelection(self["list"].instance.pageDown)
      else:
      self["epglist"].instance.moveSelection(self["list"].instance.pageDown)


      def nextBouquet(self):
      self.leftList()
      self.changeBouquet(+1)


      def prevBouquet(self):
      self.leftList()
      self.changeBouquet(-1)

      def AfterCreate(self):
      InfoBar.openEventView = self.IBshowEventInfo
      self["slider1"].setPixmapNum(1)
      self["slider2"].setPixmapNum(0)
      self.setModeTv()
      self.UpdateInfos()


      def onVEPGshow(self):
      pass


      def onVEPGhide(self):
      if self.updateEPGlist:
      self.leftList()
      else:
      self.updateEPGlist = True
      if self.movemode:
      self.toggleMoveMode()


      def UpdateInfos(self):
      l = self["epglist"]
      l.recalcEntrySize()
      aktRef=self.getCurrentSelection()
      self.aktCurrentService=ServiceReference(aktRef)
      l.fillSingleEPG(self.aktCurrentService)
      self["epglist"].instance.moveSelectionTo(0)


      def onEPGLSelectionChanged(self):
      self["NewDescription"].setText(" ")
      cur = self["epglist"].getCurrent()
      event = cur[0]
      self["Event"].newEvent(event)
      if cur is None:
      self["key_green"].setText(" ")
      return
      else:
      event = cur[0]
      if event is None:
      self["key_green"].setText(" ")
      return
      else:
      if cur[1] is None or cur[1].getServiceName() == "":
      self["key_green"].setText(" ")
      return
      serviceref = cur[1]
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      isRecordEvent = False
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      isRecordEvent = True
      break
      if isRecordEvent:
      self["key_green"].setText(_("Remove timer"))
      elif not isRecordEvent:
      self["key_green"].setText(_("Add timer"))
      if event is None:
      return
      text = ""
      short = event.getShortDescription()
      ext = event.getExtendedDescription()
      if short and short != text:
      text += short
      if ext:
      if text:
      text += ' -> '
      text += ext
      self["NewDescription"].setText(text)


      def updateEventInfo(self):
      if self.aktListBox==1:
      cur = self.getCurrentSelection()
      self["ServiceEvent"].newService(cur)
      self.UpdateInfos()


      def pressOK(self):
      if self.aktListBox==1:
      self.channelSelected()
      else:
      self.showEPGList()


      def showEPGList(self):
      self.updateEPGlist = False
      cur = self["epglist"].getCurrent()
      event = cur[0]
      service = cur[1]
      if event is not None:
      self.session.open(EventViewEPGSelect, event, service, self.eventViewCallback, InfoBar.instance.openSingleServiceEPG, InfoBar.instance.openMultiServiceEPG, InfoBar.instance.openSimilarList)


      def IBshowEventInfo(self, dummy=None):
      self.UpdateInfos()
      cur = self["epglist"].getCurrent()
      event = cur[0]
      service = cur[1]
      if event is not None:
      self.session.open(EventViewEPGSelect, event, service, self.eventViewCallback, InfoBar.instance.openSingleServiceEPG, InfoBar.instance.openMultiServiceEPG, InfoBar.instance.openSimilarList)


      def OpenSimiList(self, eventid, refstr):
      self.session.open(impotedEPGSelection, refstr, None, eventid)


      def eventViewCallback(self, setEvent, setService, val):
      l = self["epglist"]
      old = l.getCurrent()
      if val == -1:
      self["epglist"].moveUp()
      elif val == +1:
      self["epglist"].moveDown()
      cur = l.getCurrent()
      setService(cur[1])
      setEvent(cur[0])


      def OptionsMenu(self):
      cur_service = ServiceReference(self.getCurrentSelection())
      name = cur_service.getServiceName()
      askList = []
      askList.append((_("Channel Selection")+" - "+_("Favourites"), "FAVO"))
      askList.append((_("Channel Selection")+" - "+_("Providers"), "PROV"))
      askList.append((_("Channel Selection")+" - "+_("Satellites"), "SAT"))
      askList.append((_("Channel Selection")+" - "+_("All") +" "+_("Services"), "ALL"))
      askList.append((_("Single EPG")+": "+name, "SINGLE"))
      askList.append((_("Timer selection"), "TIMER"))
      askList.append((_("Automatically refresh EPG"), "REFRESH"))
      self.session.openWithCallback(self.OptionsCallback, ChoiceBox, title=("Vali's EPG "+_("Advanced Options")), list = askList)


      def OptionsCallback(self, choice):
      choice = choice and choice[1]
      if choice:
      if choice=="PROV":
      self["key_blue"].setText(_("Providers"))
      self.RedBtnMode = choice
      self.showProviders()
      elif choice=="SAT":
      self["key_blue"].setText(_("Satellites"))
      self.RedBtnMode = choice
      self.showSatellites()
      elif choice=="ALL":
      self["key_blue"].setText(_("All"))
      self.RedBtnMode = choice
      self.showAllServices()
      elif choice=="FAVO":
      self["key_blue"].setText(_("Favourites"))
      self.RedBtnMode = choice
      self.showFavourites()
      elif choice=="TIMER":
      from Screens.TimerEdit import TimerEditList
      self.session.open(TimerEditList)
      elif choice=="SINGLE":
      ref=self.getCurrentSelection()
      if ref:
      self.savedService = ref
      # self.zapped = False
      self.savedRoot = self.servicelist.getRoot()
      self.session.openWithCallback(self.SingleServiceEPGClosed, impotedEPGSelection, ref, zapFunc = None, serviceChangeCB = self.changeServiceCB)
      elif choice=="REFRESH":
      az = self.session.openWithCallback(self.clbAutoZap, ChoiceBox, title=(_("Automatically refresh EPG")), list = [(_("Cancel"), "DUMMY")])
      az.setTitle("Vali's EPG - AutoZap")
      if az.instance.size().width()<1000:
      az.instance.move(ePoint(50,70))
      self.AZpos = self["list"].getCurrentIndex()
      self.AutoZap.start(config.valisepg.autozap.value*1000)


      def clbAutoZap(self, dummy):
      self["list"].moveToIndex(self.AZpos)
      self.zap()
      self.AutoZap.stop()


      def zapForRefresh(self):
      self["list"].moveDown()
      NewService = self.getCurrentSelection()
      if (NewService.flags & 7) == 7:
      self.enterPath(NewService)
      elif not (NewService.flags & eServiceReference.isMarker):
      self.zap()


      def keyRedAction(self):
      if self.RedBtnMode=="PROV":
      self.showProviders()
      elif self.RedBtnMode=="SAT":
      self.showSatellites()
      elif self.RedBtnMode=="ALL":
      self.showAllServices()
      elif self.RedBtnMode=="FAVO":
      self.showFavourites()


      def runEPGsearch(self):
      if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/EPGSearch/plugin.pyo"):
      self.updateEPGlist = False
      from Plugins.Extensions.EPGSearch.EPGSearch import EPGSearch
      service = self.getCurrentSelection()
      epg_cur = self["epglist"].getCurrent()
      epg_event = epg_cur[0]
      if epg_event:
      epg_name = epg_event and epg_event.getEventName() or ''
      self.session.open(EPGSearch, epg_name, False)
      else:
      self.session.open(MessageBox, _("A required tool (%s) was not found.") % ("EPFSearch"), MessageBox.TYPE_INFO)


      def AddConfirmedTimer(self):
      self.updateEPGlist = False
      ref=self.getCurrentSelection()
      cur = self["epglist"].getCurrent()
      event = cur[0]
      if event is None:
      return
      serviceref = cur[1]
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      cb_func = lambda ret : not ret or self.removeTimer(timer)
      self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
      break
      else:
      newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
      self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)


      def removeTimer(self, timer):
      timer.afterEvent = AFTEREVENT.NONE
      self.session.nav.RecordTimer.removeEntry(timer)
      self["key_green"].setText(_("Add timer"))


      def finishedAdd(self, answer):
      if answer[0]:
      entry = answer[1]
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      for x in simulTimerList:
      if x.setAutoincreaseEnd(entry):
      self.session.nav.RecordTimer.timeChanged(x)
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
      self["key_green"].setText(_("Remove timer"))


      def finishSanityCorrection(self, answer):
      self.finishedAdd(answer)


      def getBqtServices(self, bouquet):
      services = [ ]
      servicelist = eServiceCenter.getInstance().list(bouquet)
      if not servicelist is None:
      while True:
      service = servicelist.getNext()
      if not service.valid():
      break
      if service.flags & (eServiceReference.isDirectory | eServiceReference.isMarker): #ignore non playable services
      continue
      services.append(ServiceReference(service))
      return services


      def showSinEPG(self):
      ref=self.getCurrentSelection()
      if ref:
      self.savedService = ref
      self.zapped = False
      self.savedRoot = self.servicelist.getRoot()
      self.session.openWithCallback(self.SingleServiceEPGClosed, impotedEPGSelection, ref, zapFunc = None, serviceChangeCB = self.changeServiceCB)


      def goPT(self):
      self.updateEPGlist = False
      bouquets = self.servicelist.getRoot()
      newservices = self.getBqtServices(bouquets)
      class EPGSelection(impotedEPGSelection):
      def __init__(self, session, service=None, zapFunc=None, eventid=None, bouquetChangeCB=None, serviceChangeCB=None):
      impotedEPGSelection.__init__(self, session, newservices, zapFunc, eventid, bouquetChangeCB, serviceChangeCB)
      def onCreate(self):
      if self.type == EPG_TYPE_MULTI:
      heute = localtime(time())
      ptheute = datetime(heute[0],heute[1],heute[2],heute[3],heute[4])
      heute_time = int(mktime(ptheute.timetuple()))
      pt = datetime(heute[0],heute[1],heute[2],config.valisepg.ptH.value,config.valisepg.ptM.value)
      pt_ask_time = int(mktime(pt.timetuple()))
      if pt_ask_time<heute_time:
      pt_ask_time = pt_ask_time + 86400
      self["key_red"].hide()
      self["key_yellow"].hide()
      self["key_blue"].hide()
      self["now_text"].hide()
      self["next_text"].hide()
      self["more_text"].hide()
      l = self["list"]
      l.recalcEntrySize()
      l.fillMultiEPG(self.services, pt_ask_time)
      l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
      def zapTo(self):
      pass
      def yellowButtonPressed(self):
      pass
      def blueButtonPressed(self):
      pass
      def enterDateTime(self):
      pass
      #def prevBouquet(self):
      #pass
      #def nextService(self):
      #pass
      self.session.open(EPGSelection, newservices)




      class ValisEPGconfig(ConfigListScreen, Screen):
      skin = """
      <screen name="ValisEPGconfig" position="center,center" size="600,476" title="%s">
      <widget itemHeight="28" name="config" position="10,50" scrollbarMode="showOnDemand" size="580,280" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/red.png" position="30,350" size="30,30" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/green.png" position="30,390" size="30,30" />
      <ePixmap alphatest="blend" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG//blue.png" position="30,430" size="30,30" />
      <eLabel font="Regular;20" halign="left" text="Cancel" position="70,352" size="220,26" transparent="1" zPosition="1" />
      <eLabel font="Regular;20" halign="left" text="Save" position="70,392" size="220,26" transparent="1" zPosition="1" />
      <widget font="Regular;20" halign="left" name="aktText" position="70,432" size="350,26" transparent="1" zPosition="1" />
      </screen>""" % ("Vali's EPG: "+_("Setup"))
      def __init__(self, session):
      self.session = session
      Screen.__init__(self, session)
      self["aktText"] = Label("Vali's EPG: "+(_("enable")).upper()+" !!!")
      self.isVEPGactive = False
      list = []
      list.append(getConfigListEntry("Primetime, "+_("hour"), config.valisepg.ptH))
      list.append(getConfigListEntry("Primetime, "+_("minutes"), config.valisepg.ptM))
      list.append(getConfigListEntry("AutoZap-"+_("Time")+" ("+_("seconds")+")", config.valisepg.autozap))
      ConfigListScreen.__init__(self, list)
      self["actions"] = NumberActionMap(["OkCancelActions", "ColorActions"],
      {
      "red": self.exit,
      "green": self.save,
      "blue" : self.blueAct,
      "cancel": self.exit
      }, -1)
      self.onLayoutFinish.append(self.CheckActivVEPG)


      def save(self):
      for x in self["config"].list:
      x[1].save()
      self.close()


      def exit(self):
      for x in self["config"].list:
      x[1].cancel()
      self.close()


      def CheckActivVEPG(self):
      self.isVEPGactive = False
      CSfName = "/usr/lib/enigma2/python/Screens/InfoBarGenerics.py"
      CSfile = open(CSfName, "r")
      CSfLines = CSfile.readlines()
      CSfile.close()
      for x in CSfLines:
      if x[:-1]=='\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.pyo"):':
      self.isVEPGactive = True
      if self.isVEPGactive:
      self["aktText"].setText((_("disable")).upper()+" Vali's EPG")
      else:
      self["aktText"].setText((_("enable")).upper()+" Vali's EPG")


      def blueAct(self):
      #if self.isVEPGactive:
      #return
      CSfName = "/usr/lib/enigma2/python/Screens/InfoBarGenerics.py"
      CSfile = open(CSfName, "r")
      CSfLines = CSfile.readlines()
      CSfile.close()
      NEWfLines = []
      for x in CSfLines:
      if x[:-1]=="\t\tself.servicelist = self.session.instantiateDialog(ChannelSelection)":
      NEWfLines.append('\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.pyo"):\n')
      NEWfLines.append("\t\t\tfrom Plugins.Extensions.ValisEPG.plugin import ValisEPG\n")
      NEWfLines.append("\t\t\tself.servicelist = self.session.instantiateDialog(ValisEPG)\n")
      NEWfLines.append("\t\telse:\n")
      NEWfLines.append("\t\t\tself.servicelist = self.session.instantiateDialog(ChannelSelection)\n")
      elif x[:-1]=='\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.pyo"):':
      NEWfLines.append('\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.NO"):\n')
      elif x[:-1]=='\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.NO"):':
      NEWfLines.append('\t\tif fileExists("/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/plugin.pyo"):\n')
      else:
      NEWfLines.append(x)
      try:
      NEWfile = open(CSfName, "w")
      for xx in NEWfLines:
      NEWfile.writelines(xx)
      NEWfile.close()
      self.session.open(MessageBox, "Vali's EPG: "+_("enabled")+".\n"+_("Restart GUI")+" !", MessageBox.TYPE_INFO)
      except:
      self.session.open(MessageBox, " I/O ERROR !!!", MessageBox.TYPE_ERROR)
      self.close()




      def Plugins(**kwargs):
      return [PluginDescriptor(name="ValisEPGsetup", where=PluginDescriptor.WHERE_MENU, fnc=main)]


      def main(menuid):
      if menuid != "setup":
      return [ ]
      return [(("Vali's EPG: "+_("Setup")), VEPGhandle, "valisepg", None)]


      def VEPGhandle(session, **kwargs):
      session.open(ValisEPGconfig)


      und die plugin.py vom Merlin Guide, wo es eingebaut ist.
      Spoiler anzeigen

      #######################################################################
      #
      # Vali's Programm Guide for Dreambox-Enigma2
      # Coded by Vali (c)2010-2011
      #
      # This plugin is licensed under the Creative Commons
      # Attribution-NonCommercial-ShareAlike 3.0 Unported License.
      # To view a copy of this license, visit Creative Commons — Attribution-NonCommercial-ShareAlike 3.0 Unported
      — CC BY-NC-SA 3.0
      # or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
      #
      # Alternatively, this plugin may be distributed and executed on hardware which
      # is licensed by Dream Multimedia GmbH.
      #
      # This plugin is NOT free software. It is open source, you are allowed to
      # modify it (if you keep the license), but it may not be commercially
      # distributed other than under the conditions noted above.
      #
      #######################################################################




      from Plugins.Plugin import PluginDescriptor
      from Screens.Screen import Screen
      from Screens.EventView import EventViewSimple
      from Screens.MessageBox import MessageBox
      from Screens.ChoiceBox import ChoiceBox
      from Screens.TimerEntry import TimerEntry
      from Screens.TimerEdit import TimerSanityConflict
      from Components.ConfigList import ConfigListScreen
      from Components.ActionMap import ActionMap
      from Components.MenuList import MenuList
      from Components.Label import Label
      from Components.EpgList import EPGList, EPG_TYPE_SINGLE, Rect
      from Components.config import config, ConfigSubsection, ConfigYesNo, ConfigInteger, getConfigListEntry
      from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN, fileExists
      from Tools.LoadPixmap import LoadPixmap
      from enigma import eServiceReference, eServiceCenter, getDesktop, eTimer, gFont, eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_WRAP, eEPGCache
      from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
      from ServiceReference import ServiceReference
      from ShowMe import ShowMe
      from time import localtime
      import skin


      if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/AutoTimer/AutoTimerEditor.pyo"):
      from Plugins.Extensions.AutoTimer.AutoTimerEditor import addAutotimerFromEvent
      from Plugins.Extensions.AutoTimer.plugin import main as AutoTimerView
      AutoTimerPresent=True
      else:
      AutoTimerPresent=False
      if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/IMDb/plugin.pyo"):
      from Plugins.Extensions.IMDb.plugin import IMDB
      IMDbPresent=True
      else:
      IMDbPresent=False
      if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/EPGSearch/EPGSearch.pyo"):
      from Plugins.Extensions.EPGSearch.EPGSearch import EPGSearchList, EPGSearch
      epgSpresent=True
      else:
      epgSpresent=False


      in_factor = int(skin.parameters.get("ValiEPGfactor",(10,))[0])
      factor = float(in_factor)/10


      config.plugins.MerlinEPG = ConfigSubsection()
      config.plugins.MerlinEPG.Columns = ConfigYesNo(default=True)
      config.plugins.MerlinEPG.StartFirst = ConfigYesNo(default=False)
      config.plugins.MerlinEPG.Primetime = ConfigInteger(default=20, limits=(0, 23))
      config.plugins.MerlinEPG.PTlow = ConfigInteger(default=10, limits=(0, 59))
      config.plugins.MerlinEPG.PThi = ConfigInteger(default=20, limits=(0, 59))
      config.plugins.MerlinEPG.AutoPT = ConfigYesNo(default=False)
      config.plugins.MerlinEPG.ZapOnOK = ConfigYesNo(default=False)
      config.plugins.MerlinEPG.PageUDonBouquets = ConfigYesNo(default=True)




      def Plugins(**kwargs):
      list = [(PluginDescriptor(name="Vali Programm Guide", description="Vali Programm Guide", where = PluginDescriptor.WHERE_EVENTINFO, fnc=startMerlinPG))]
      list.append(PluginDescriptor(name="Vali Programm Guide", where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=startMerlinPGnew))
      return list




      def startMerlinPG(session, servicelist, **kwargs):
      if config.plugins.MerlinEPG.Columns.value:
      session.open(Merlin_PGII, servicelist)
      else:
      session.open(Merlin_PGd, servicelist)




      def startMerlinPGnew(session, **kwargs):
      if "servicelist" in kwargs:
      if config.plugins.MerlinEPG.Columns.value:
      session.open(Merlin_PGII, kwargs["servicelist"])
      else:
      session.open(Merlin_PGd, kwargs["servicelist"])
      else:
      if config.plugins.MerlinEPG.Columns.value:
      session.open(Merlin_PGII)
      else:
      session.open(Merlin_PGd)




      class MerlinPGsetup(ConfigListScreen, Screen):
      skin = """
      <screen position="center,center" size="600,300" title="Vali Programm Guide">
      <widget name="config" position="10,10" size="580,280" scrollbarMode="showOnDemand" />
      </screen>"""


      def __init__(self, session):
      Screen.__init__(self, session)
      clist = []
      clist.append(getConfigListEntry(_("Show EPG in columns:"), config.plugins.MerlinEPG.Columns))
      clist.append(getConfigListEntry(_("Start allways on channel 1:"), config.plugins.MerlinEPG.StartFirst))
      clist.append(getConfigListEntry(_("Primetime (h):"), config.plugins.MerlinEPG.Primetime))
      clist.append(getConfigListEntry(_("Primetime from (m):"), config.plugins.MerlinEPG.PTlow))
      clist.append(getConfigListEntry(_("Primetime to (m):"), config.plugins.MerlinEPG.PThi))
      clist.append(getConfigListEntry(_("Auto-Primetime:"), config.plugins.MerlinEPG.AutoPT))
      clist.append(getConfigListEntry(_("Zap with OK button (false=EventInfo):"), config.plugins.MerlinEPG.ZapOnOK))
      clist.append(getConfigListEntry(_("Page-up/down with bouquet+/- :"), config.plugins.MerlinEPG.PageUDonBouquets))
      ConfigListScreen.__init__(self, clist)
      self["actions"] = ActionMap(["OkCancelActions"], {"ok": self.set, "cancel": self.exit}, -2)


      def set(self):
      if not config.plugins.MerlinEPG.PThi.value > config.plugins.MerlinEPG.PTlow.value:
      return
      for x in self["config"].list:
      x[1].save()
      self.close()


      def exit(self):
      for x in self["config"].list:
      x[1].cancel()
      self.close()




      class MerlinEPGList(EPGList):
      def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer = None):
      global factor
      EPGList.__init__(self, type, selChangedCB, timer)
      fontsize0 = int(18 * factor)
      self.l.setFont(0, gFont("Regular", fontsize0))
      self.PTpicture = LoadPixmap(cached=True, path="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/primetime.png")
      self.evCnt = 0


      def recalcEntrySize(self):
      global factor
      esize = self.l.getItemSize()
      width = esize.width()
      height = esize.height()
      self.weekday_rect = Rect(120*factor, -10*factor, 200*factor, 20*factor)
      self.datetime_rect = Rect(0, 0, 120*factor, 20*factor)
      self.descr_rect = Rect(0, 22*factor, width, height-23*factor)
      self.evCnt = 0


      def buildSingleEntry(self, service, eventId, beginTime, duration, EventName):
      global factor
      (clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
      r1=self.weekday_rect
      r2=self.datetime_rect
      r3=self.descr_rect
      t = localtime(beginTime)
      self.evCnt = self.evCnt + 1
      if (t[3]==config.plugins.MerlinEPG.Primetime.value) and (t[4]>=config.plugins.MerlinEPG.PTlow.value) and (t[4]<config.plugins.MerlinEPG.PThi.value):
      res = [
      None,
      (eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, " _________________"),
      (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 100*factor, 1*factor, 21*factor, 21*factor, self.PTpicture),
      (eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_LEFT, (("%02d:%02d"%(t[3],t[4]))+" - "+self.days[t[6]]))
      ]
      else:
      res = [
      None,
      (eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, "___________________"),
      (eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_LEFT, (("%02d:%02d"%(t[3],t[4]))+" - "+self.days[t[6]]))
      ]
      if rec:
      res.extend((
      (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21*factor, 21*factor, clock_pic),
      (eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25*factor, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT|RT_WRAP, EventName)
      ))
      else:
      res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT|RT_WRAP, EventName))
      return res


      def getBgTime(self):
      tmp = self.l.getCurrentSelection()
      if tmp is None:
      return ( None )
      bt = localtime(tmp[2])
      return ( bt[3], bt[4] )


      def foudPrimetime(self):
      for OneLine in range(0,self.evCnt):
      evBgTime, evBgMin = self.getBgTime()
      if evBgTime is not None:
      if (evBgTime==config.plugins.MerlinEPG.Primetime.value) and (evBgMin>=config.plugins.MerlinEPG.PTlow.value) and (evBgMin<config.plugins.MerlinEPG.PThi.value):
      break
      self.moveDown()
      else:
      break




      class Merlin_PGII(Screen):
      sz_w = getDesktop(0).size().width()
      if sz_w == 1280:
      skin = """
      <screen flags="wfNoBorder" name="Merlin_PG" position="0,0" size="1280,720" title="Vali Program Guide">
      <!-- DO NOT CHANGE THIS LINE !!!!!!!!!!!!!!! --><widget enableWrapAround="0" itemHeight="25" name="prg_list" position="-200,-200" size="50,125"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh1" position="60,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh2" position="291,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh3" position="522,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh4" position="753,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh5" position="984,40" size="231,24" transparent="1" zPosition="2"/>
      <widget backgroundColor="#10444649" name="Active1" position="60,80" size="225,560" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active2" position="291,80" size="225,560" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active3" position="522,80" size="225,560" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active4" position="753,80" size="225,560" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active5" position="984,80" size="225,560" transparent="0" zPosition="3"/>
      <widget itemHeight="70" name="epg_list1" position="60,80" scrollbarMode="showOnDemand" size="225,560" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list2" position="291,80" scrollbarMode="showOnDemand" size="225,560" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list3" position="522,80" scrollbarMode="showOnDemand" size="225,560" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list4" position="753,80" scrollbarMode="showOnDemand" size="225,560" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list5" position="984,80" scrollbarMode="showOnDemand" size="225,560" transparent="1" zPosition="4"/>
      <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/buttons.png" position="60,655" size="430,24"/>
      <widget backgroundColor="background" font="Regular;18" foregroundColor="#ffc000" position="500,655" render="Label" size="200,24" source="global.CurrentTime" transparent="1" valign="center" zPosition="3">
      <convert type="ClockToText">Format:%H:%M %a %d. %b</convert>
      </widget>
      </screen>"""
      elif sz_w == 1024:
      skin = """
      <screen flags="wfNoBorder" name="Merlin_PG" position="0,0" size="1024,576" title="Vali Program Guide">
      <!-- DO NOT CHANGE THIS LINE !!!!!!!!!!!!!!! --><widget enableWrapAround="0" itemHeight="25" name="prg_list" position="-200,-200" size="50,100"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh1" position="50,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh2" position="281,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh3" position="512,40" size="231,24" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh4" position="743,40" size="231,24" transparent="1" zPosition="2"/>
      <widget backgroundColor="#10444649" name="Active1" position="50,80" size="225,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active2" position="281,80" size="225,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active3" position="512,80" size="225,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active4" position="743,80" size="225,420" transparent="0" zPosition="3"/>
      <widget itemHeight="70" name="epg_list1" position="50,80" scrollbarMode="showOnDemand" size="225,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list2" position="281,80" scrollbarMode="showOnDemand" size="225,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list3" position="512,80" scrollbarMode="showOnDemand" size="225,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list4" position="743,80" scrollbarMode="showOnDemand" size="225,420" transparent="1" zPosition="4"/>
      <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/buttons.png" position="50,518" size="430,24"/>
      <widget backgroundColor="background" font="Regular;18" foregroundColor="#ffc000" position="490,518" render="Label" size="200,24" source="global.CurrentTime" transparent="1" valign="center" zPosition="3">
      <convert type="ClockToText">Format:%H:%M %a %d. %b</convert>
      </widget>
      <!-- <widget font="Regular;18" name="fullEventInfo" position="300,200" size="300,200" transparent="0" zPosition="12"/> -->
      </screen>"""
      else:
      skin = """
      <screen flags="wfNoBorder" name="Merlin_PG" position="0,0" size="720,576" title="Vali Program Guide">
      <!-- DO NOT CHANGE THIS LINE !!!!!!!!!!!!!!! --><widget enableWrapAround="0" itemHeight="25" name="prg_list" position="-200,-200" size="50,100"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh1" position="50,35" size="155,36" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh2" position="205,35" size="155,36" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh3" position="360,35" size="155,36" transparent="1" zPosition="2"/>
      <widget font="Regular;18" halign="center" valign="center" name="currCh4" position="515,35" size="155,36" transparent="1" zPosition="2"/>
      <widget backgroundColor="#10444649" name="Active1" position="50,90" size="155,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active2" position="205,90" size="155,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active3" position="360,90" size="155,420" transparent="0" zPosition="3"/>
      <widget backgroundColor="#10444649" name="Active4" position="515,90" size="155,420" transparent="0" zPosition="3"/>
      <widget itemHeight="70" name="epg_list1" position="50,90" scrollbarMode="showOnDemand" size="155,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list2" position="205,90" scrollbarMode="showOnDemand" size="155,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list3" position="360,90" scrollbarMode="showOnDemand" size="155,420" transparent="1" zPosition="4"/>
      <widget itemHeight="70" name="epg_list4" position="515,90" scrollbarMode="showOnDemand" size="155,420" transparent="1" zPosition="4"/>
      <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/buttons.png" position="50,518" size="430,24"/>
      <widget backgroundColor="background" font="Regular;18" foregroundColor="#ffc000" position="490,518" render="Label" size="200,24" source="global.CurrentTime" transparent="1" valign="center" zPosition="3">
      <convert type="ClockToText">Format:%H:%M %a %d. %b</convert>
      </widget>
      </screen>"""


      def __init__(self, session, servicelist=None):
      Screen.__init__(self, session)
      self.session = session
      self.srvList = servicelist
      self.myServices = []
      self.myBqts = []
      self.list = []
      self.chCount = 0
      self.ActiveEPG = 1
      if getDesktop(0).size().width() >= 1280:
      self.Fields = 6
      self["currCh5"] = Label(" ")
      self["Active5"] = Label(" ")
      self["epg_list5"] = MerlinEPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      else:
      self.Fields = 5
      self.CheckForEPG = eTimer()
      self.CheckForEPG.callback.append(self.CheckItNow)
      self.AutoPrime = eTimer()
      self.AutoPrime.callback.append(self.go2Primetime)
      self["prg_list"] = MenuList(self.getChannels())
      self["fullEventInfo"] = Label(" ")
      self["currCh1"] = Label(" ")
      self["currCh2"] = Label(" ")
      self["currCh3"] = Label(" ")
      self["currCh4"] = Label(" ")
      self["Active1"] = Label(" ")
      self["Active2"] = Label(" ")
      self["Active3"] = Label(" ")
      self["Active4"] = Label(" ")
      self["epg_list1"] = MerlinEPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self["epg_list2"] = MerlinEPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self["epg_list3"] = MerlinEPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self["epg_list4"] = MerlinEPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self["actions"] = ActionMap(["OkCancelActions", "EPGSelectActions", "DirectionActions", "ColorActions", "MenuActions", "NumberActions", "HelpActions", "InfobarActions"], {
      "ok": self.UserOK,
      "cancel": self.close,
      "nextBouquet": self.AllUp,
      "prevBouquet": self.AllDown,
      "nextService": self.NextPage,
      "prevService": self.PrevPage,
      "right": self.right,
      "rightRepeated": self.right,
      "left": self.left,
      "leftRepeated": self.left,
      "up": self.up,
      "upRepeated": self.up,
      "down": self.down,
      "downRepeated": self.down,
      "info": self.showEventInfo,
      "red": self.ZapTo,
      "green": self.timerAdd,
      "blue": self.ZapForRefresh,
      "yellow": self.go2Primetime,
      "menu": self.menuClicked,
      "displayHelp": self.myhelp,
      "0": self.go2now,
      "1": self.go2first,
      "7": self.findPrvBqt,
      "9": self.findNextBqt,
      "showMovies": self.editCurTimer,
      "showTv": self.fullEPGlist,
      "showRadio": self.runEpgSeartch
      },-2)
      self.onLayoutFinish.append(self.onLayoutReady)


      def getChannels(self):
      indx = 0
      serviceHandler = eServiceCenter.getInstance()
      services = serviceHandler.list(eServiceReference('1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM BOUQUET "bouquets.tv" ORDER BY bouquet'))
      bouquets = services and services.getContent("SN", True)
      for bouquet in bouquets:
      services = serviceHandler.list(eServiceReference(bouquet[0]))
      channels = services and services.getContent("SN", True)
      for channel in channels:
      if not channel[0].startswith("1:64:"):
      indx = indx + 1
      self.list.append(str(indx) + ". " + channel[1].replace('\xc2\x86', '').replace('\xc2\x87', ''))
      self.myServices.append(channel)
      self.myBqts.append(bouquet)
      self.chCount = indx - 1
      return self.list


      def onLayoutReady(self):
      #service = self.session.nav.getCurrentService()
      #info = service and service.info()
      #if (info is not None) and not(config.plugins.MerlinEPG.StartFirst.value):
      #nameROH = info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
      if self.srvList:
      service = ServiceReference(self.srvList.getCurrentSelection())
      info = service and service.info()
      nameROH = info and info.getName(service.ref).replace('\xc2\x86', '').replace('\xc2\x87', '')
      else:
      service = self.session.nav.getCurrentService()
      info = service and service.info()
      nameROH = info and info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
      if (nameROH is not None) and not(config.plugins.MerlinEPG.StartFirst.value):
      #
      for idx in range(1, len(self.list)):
      name = str(idx) + ". " + nameROH
      if name == self.list[idx-1]:
      break
      self["prg_list"].moveToIndex(idx-1)
      else:
      self["prg_list"].moveToIndex(0)
      self.updateInfos()


      def updateInfos(self):
      if self.AutoPrime.isActive():
      self.AutoPrime.stop()
      self.displayActiveEPG()
      prgIndex = self["prg_list"].getSelectionIndex()
      CurrentPrg = self.myServices[prgIndex]
      self["currCh1"].setText(str(CurrentPrg[1]))
      l = self["epg_list1"]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)
      prgIndex = prgIndex + 1
      if prgIndex < (self.chCount+1):
      self["epg_list2"].show()
      CurrentPrg = self.myServices[prgIndex]
      self["currCh2"].setText(str(CurrentPrg[1]))
      l = self["epg_list2"]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)
      else:
      self["currCh2"].setText(str(" "))
      self["epg_list2"].hide()
      prgIndex = prgIndex + 1
      if prgIndex < (self.chCount+1):
      self["epg_list3"].show()
      CurrentPrg = self.myServices[prgIndex]
      self["currCh3"].setText(str(CurrentPrg[1]))
      l = self["epg_list3"]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)
      else:
      self["currCh3"].setText(str(" "))
      self["epg_list3"].hide()
      prgIndex = prgIndex + 1
      if prgIndex < (self.chCount+1):
      self["epg_list4"].show()
      CurrentPrg = self.myServices[prgIndex]
      self["currCh4"].setText(str(CurrentPrg[1]))
      CurrentPrg = self.myServices[prgIndex]
      self["currCh4"].setText(str(CurrentPrg[1]))
      l = self["epg_list4"]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)
      else:
      self["currCh4"].setText(str(" "))
      self["epg_list4"].hide()
      if self.Fields == 6:
      prgIndex = prgIndex + 1
      if prgIndex < (self.chCount+1):
      self["epg_list5"].show()
      CurrentPrg = self.myServices[prgIndex]
      self["currCh5"].setText(str(CurrentPrg[1]))
      l = self["epg_list5"]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)
      else:
      self["currCh5"].setText(str(" "))
      self["epg_list5"].hide()
      if config.plugins.MerlinEPG.AutoPT.value:
      self.AutoPrime.start(500)


      def onSelectionChanged(self):
      curEV = self["epg_list"+str(self.ActiveEPG)].getCurrent()
      event = curEV[0]
      ext = event and event.getExtendedDescription() or ""
      self["fullEventInfo"].setText(str(ext))


      def NextPage(self):
      self["prg_list"].pageDown()
      self.ActiveEPG = 1
      self.updateInfos()


      def PrevPage(self):
      self["prg_list"].pageUp()
      self.ActiveEPG = 1
      self.updateInfos()


      def displayActiveEPG(self):
      for xA in range(1,self.Fields):
      if xA == self.ActiveEPG:
      self["Active"+str(xA)].show()
      else:
      self["Active"+str(xA)].hide()


      def getActivePrg(self):
      return self["prg_list"].getSelectionIndex()+(self.ActiveEPG-1)


      def ZapTo(self):
      if (self.getActivePrg() > self.chCount) or (self.srvList==None):
      return
      CurrentPrg = self.myServices[self.getActivePrg()]
      CurrentBqt = self.myBqts[self.getActivePrg()]
      myService = ServiceReference(CurrentPrg[0])
      myB = ServiceReference(CurrentBqt[0])
      self.srvList.clearPath()
      if self.srvList.bouquet_root != myB.ref:
      self.srvList.enterPath(self.srvList.bouquet_root)
      self.srvList.enterPath(myB.ref)
      self.srvList.setCurrentSelection(myService.ref)
      self.srvList.zap()
      self.close()


      def ZapForRefresh(self):
      if (self.getActivePrg() > self.chCount) or (self.srvList==None):
      return
      CurrentPrg = self.myServices[self.getActivePrg()]
      myService = ServiceReference(CurrentPrg[0])
      self.session.nav.playService(myService.ref)
      self.CheckForEPG.start(4000, True)


      def CheckItNow(self):
      self.CheckForEPG.stop()
      CurrentPrg = self.myServices[self.getActivePrg()]
      l = self["epg_list"+str(self.ActiveEPG)]
      l.recalcEntrySize()
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)


      def up(self):
      self["epg_list"+str(self.ActiveEPG)].moveUp()


      def down(self):
      self["epg_list"+str(self.ActiveEPG)].moveDown()


      def AllUp(self):
      if config.plugins.MerlinEPG.PageUDonBouquets.value:
      for xU in range(1,self.Fields):
      self["epg_list"+str(xU)].instance.moveSelection(self["epg_list"+str(xU)].instance.pageUp)
      else:
      for xU in range(1,self.Fields):
      self["epg_list"+str(xU)].moveUp()


      def AllDown(self):
      if config.plugins.MerlinEPG.PageUDonBouquets.value:
      for xU in range(1,self.Fields):
      self["epg_list"+str(xU)].instance.moveSelection(self["epg_list"+str(xU)].instance.pageDown)
      else:
      for xD in range(1,self.Fields):
      self["epg_list"+str(xD)].moveDown()


      def go2now(self):
      for xD in range(1,self.Fields):
      self["epg_list"+str(xD)].instance.moveSelection(self["epg_list"+str(xD)].instance.moveTop)


      def go2first(self):
      self["prg_list"].moveToIndex(0)
      self.ActiveEPG = 1
      self.updateInfos()


      def left(self):
      if self.ActiveEPG > 1:
      self.ActiveEPG = self.ActiveEPG - 1
      self.displayActiveEPG()
      else:
      self["prg_list"].pageUp()
      self.ActiveEPG = (self.Fields-1)
      self.updateInfos()
      self.onSelectionChanged()


      def right(self):
      if self.ActiveEPG < (self.Fields-1):
      self.ActiveEPG = self.ActiveEPG + 1
      self.displayActiveEPG()
      else:
      self.NextPage()
      self.onSelectionChanged()

      def showEventInfo(self):
      if not IMDbPresent:
      self.showConfirmedInfo([None,"Ei"])
      else:
      self.session.openWithCallback(self.showConfirmedInfo, ChoiceBox, title=_("Select Info type..."), list=[(_("Standard EPG info"), "Ei"),(_("IMDb info"), "Ii")])


      def showConfirmedInfo(self,answer):
      curEV = self["epg_list"+str(self.ActiveEPG)].getCurrent()
      event = curEV[0]
      service = curEV[1]
      answer = answer and answer[1]
      if answer == "Ei":
      if event is not None:
      self.session.open(EventViewSimple, event, service)
      if answer == "Ii":
      if event is not None:
      IeventName=event.getEventName()
      self.session.open(IMDB, IeventName)


      def timerAdd(self):
      if not AutoTimerPresent:
      self.AddConfirmedTimer([None,"NT"])
      else:
      self.session.openWithCallback(self.AddConfirmedTimer, ChoiceBox, title=_("Select timer type..."), list=[(_("Standard timer"), "NT"),(_("AutoTimer"), "AT"),(_("View AutoTimers"), "ATV")])


      def AddConfirmedTimer(self, answer):
      cur = self["epg_list"+str(self.ActiveEPG)].getCurrent()
      event = cur[0]
      serviceref = cur[1]
      if event is None:
      return
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      answer = answer and answer[1]
      if answer == "AT":
      addAutotimerFromEvent(self.session,evt=event,service=serviceref)
      elif answer == "NT":
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      cb_func = lambda ret : not ret or self.removeTimer(timer)
      self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
      break
      else:
      newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
      self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
      elif answer == "ATV":
      AutoTimerView(self.session)


      def removeTimer(self, timer):
      timer.afterEvent = AFTEREVENT.NONE
      self.session.nav.RecordTimer.removeEntry(timer)


      def finishedAdd(self, answer):
      if answer[0]:
      entry = answer[1]
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      for x in simulTimerList:
      if x.setAutoincreaseEnd(entry):
      self.session.nav.RecordTimer.timeChanged(x)
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)

      def finishSanityCorrection(self, answer):
      self.finishedAdd(answer)


      def menuClicked(self):
      self.session.open(MerlinPGsetup)


      def findNextBqt(self):
      CurrIdx = 0
      CurrBqt = self.myBqts[self.getActivePrg()]
      self.ActiveEPG = 1
      for CurrIdx in range(self.getActivePrg(),self.chCount):
      NewBqt = self.myBqts[CurrIdx]
      if NewBqt != CurrBqt:
      break
      self["prg_list"].moveToIndex(CurrIdx)
      self.updateInfos()


      def findPrvBqt(self):
      CurrIdx = 0
      CurrBqt = self.myBqts[self.getActivePrg()]
      self.ActiveEPG = 1
      for CurrIdx in range(self.getActivePrg(),-1,-1):
      NewBqt = self.myBqts[CurrIdx]
      if NewBqt != CurrBqt:
      break
      self["prg_list"].moveToIndex(CurrIdx)
      self.updateInfos()


      def go2Primetime(self):
      if self.AutoPrime.isActive():
      self.AutoPrime.stop()
      for xFL in range(1, self.Fields):
      self["epg_list"+str(xFL)].instance.moveSelection(self["epg_list"+str(xFL)].instance.moveTop)
      for i in range(0,(self.Fields*3)):
      self["epg_list"+str(xFL)].foudPrimetime()


      def myhelp(self):
      self.session.open(ShowMe, "/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/help.jpg")


      def UserOK(self):
      if config.plugins.MerlinEPG.ZapOnOK.value:
      self.ZapTo()
      else:
      self.showConfirmedInfo([None,"Ei"])


      def editCurTimer(self):
      cur = self["epg_list"+str(self.ActiveEPG)].getCurrent()
      event = cur[0]
      serviceref = cur[1]
      if event is None:
      return
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      self.session.open(TimerEntry, timer)


      def fullEPGlist(self):
      if epgSpresent:
      self.session.open(myEPGSearch)
      else:
      self.session.open(MessageBox, text = _('EPGsearch is not installed!'), type = MessageBox.TYPE_ERROR)


      def runEpgSeartch(self):
      if epgSpresent:
      cur = self["epg_list"+str(self.ActiveEPG)].getCurrent()
      epg_event = cur[0]
      epg_name = epg_event and epg_event.getEventName() or ''
      self.session.open(EPGSearch, epg_name, False)
      else:
      self.session.open(MessageBox, text = _('EPGsearch is not installed!'), type = MessageBox.TYPE_ERROR)




      class Merlin_PGd(Screen):
      try:
      sz_w = getDesktop(0).size().width()
      except:
      sz_w = 720
      if sz_w == 1280:
      skin = """
      <screen backgroundColor="#ffffffff" flags="wfNoBorder" name="Merlin_PG" position="0,0" size="1280,720" title="Vali Program Guide">
      <widget backgroundColor="#ffffffff" position="0,0" render="Pig" size="520,292" source="session.VideoPicture" zPosition="-1"/>
      <eLabel backgroundColor="#00111112" position="0,292" size="520,450" zPosition="1"/>
      <eLabel backgroundColor="#00111112" position="520,0" size="760,720" zPosition="1"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/epg.png" position="1136,105" size="85,77" zPosition="5"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/channels.png" position="395,306" size="80,80" zPosition="5"/>
      <ePixmap alphatest="on" name="red" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/red.png" position="70,635" size="35,25" zPosition="2"/>
      <ePixmap alphatest="on" name="green" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/green.png" position="275,635" size="35,25" zPosition="2"/>
      <eLabel backgroundColor="#00111112" font="Regular;18" position="110,635" size="131,24" text="ZAP" transparent="1" zPosition="2"/>
      <eLabel backgroundColor="#00111112" font="Regular;18" position="315,635" size="191,24" text="TIMERS" transparent="1" zPosition="2"/>
      <widget itemHeight="25" name="prg_list" position="75,306" scrollbarMode="showNever" size="400,300" transparent="1" zPosition="4"/>
      <widget itemHeight="27" name="epg_list" position="570,105" scrollbarMode="showNever" size="651,540" transparent="1" zPosition="4"/>
      <widget backgroundColor="#00111112" font="Regular;22" foregroundColor="#fcc000" halign="center" name="currCh" position="555,55" size="651,24" transparent="1" valign="center" zPosition="2"/>
      </screen>"""
      elif sz_w == 1024:
      skin = """
      <screen backgroundColor="#ffffffff" flags="wfNoBorder" name="Merlin_PG" position="0,0" size="1024,576" title="Vali Program Guide">
      <widget backgroundColor="#ffffffff" position="0,0" render="Pig" size="384,216" source="session.VideoPicture" zPosition="-1"/>
      <eLabel backgroundColor="#00111112" position="0,216" size="384,366" zPosition="1"/>
      <eLabel backgroundColor="#00111112" position="384,0" size="720,576" zPosition="1"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/epg.png" position="900,80" size="85,77" zPosition="5"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/channels.png" position="292,228" size="80,80" zPosition="5"/>
      <ePixmap alphatest="on" name="red" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/red.png" position="40,520" size="35,25" zPosition="3"/>
      <ePixmap alphatest="on" name="green" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/green.png" position="185,520" size="35,25" zPosition="3"/>
      <eLabel backgroundColor="#00111112" font="Regular;18" position="80,520" size="92,24" text="ZAP" transparent="1" zPosition="2"/>
      <eLabel backgroundColor="#00111112" font="Regular;18" position="230,520" size="141,24" text="TIMERS" transparent="1" zPosition="2"/>
      <widget itemHeight="25" name="prg_list" position="40,228" scrollbarMode="showNever" size="332,275" transparent="1" zPosition="4"/>
      <widget itemHeight="28" name="epg_list" position="395,80" scrollbarMode="showNever" size="590,448" transparent="1" zPosition="4"/>
      <widget backgroundColor="#00111112" font="Regular;21" foregroundColor="#fcc000" halign="center" name="currCh" position="395,40" size="590,24" transparent="1" valign="center" zPosition="4"/>
      </screen>"""
      else:
      skin = """
      <screen flags="wfNoBorder" name="Merlin_PG" position="0,0" size="720,576" title="Vali Program Guide">
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/mpgbgSD-fs8.png" position="0,0" size="720,576" zPosition="1"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/red.png" position="165,90" size="35,25" zPosition="2"/>
      <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/green.png" position="165,110" size="35,25" zPosition="2"/>
      <eLabel backgroundColor="#1f1f1f" font="Regular;15" foregroundColor="#f0f0f0" position="205,93" size="70,20" text="ZAP" transparent="1" zPosition="2"/>
      <eLabel backgroundColor="#1f1f1f" font="Regular;15" foregroundColor="#f0f0f0" position="205,113" size="70,20" text="TIMERS" transparent="1" zPosition="2"/>
      <widget name="prg_list" position="342,63" scrollbarMode="showOnDemand" size="327,150" zPosition="2" itemHeight="25"/>
      <widget name="epg_list" position="57,238" scrollbarMode="showOnDemand" size="612,270" zPosition="2" itemHeight="27"/>
      <widget font="Regular;22" foregroundColor="#ffc000" halign="center" name="currCh" position="57,133" size="252,66" transparent="1" valign="center" zPosition="2"/>
      <widget font="LCD;28" halign="left" position="60,95" render="Label" size="91,32" source="global.CurrentTime" transparent="1" zPosition="3">
      <convert type="ClockToText">Default</convert>
      </widget>
      <widget font="Regular;16" position="60,65" render="Label" size="276,26" source="global.CurrentTime" transparent="1" zPosition="3">
      <convert type="ClockToText">Date</convert>
      </widget>
      </screen>"""


      def __init__(self, session, servicelist=None):
      Screen.__init__(self, session)
      self.session = session
      self.myServices = []
      self.myBqts = []
      self.list = []
      self.srvList = servicelist
      self.CheckForEPG = eTimer()
      self.CheckForEPG.callback.append(self.CheckItNow)
      self["currCh"] = Label(_("Channel"))
      self["fullEventInfo"] = Label(" ")
      self["prg_list"] = MenuList(self.getChannels())
      self["epg_list"] = EPGList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self["actions"] = ActionMap(["OkCancelActions", "EPGSelectActions", "ColorActions", "DirectionActions", "MenuActions", "HelpActions", "InfobarActions"], {
      "ok": self.ok,
      "cancel": self.close,
      "nextBouquet": self.prgDown,
      "prevBouquet": self.prgUp,
      "nextService": self.prgPlus,
      "prevService": self.prgMinus,
      "red": self.ZapTo,
      "green": self.timerAdd,
      "blue": self.ZapForRefresh,
      "yellow": self.go2now,
      "info": self.ok,
      "menu": self.menuClicked,
      "displayHelp": self.myhelp,
      "right": self.right,
      "rightRepeated": self.right,
      "left": self.left,
      "leftRepeated": self.left,
      "up": self.up,
      "upRepeated": self.up,
      "down": self.down,
      "downRepeated": self.down,
      "showMovies": self.editCurTimer,
      "showTv": self.fullEPGlist,
      "showRadio": self.runEpgSeartch
      },-2)
      self.onLayoutFinish.append(self.onLayoutReady)


      def onLayoutReady(self):
      #service = self.session.nav.getCurrentService()
      #info = service and service.info()
      #if (info is not None) and not(config.plugins.MerlinEPG.StartFirst.value):
      #nameROH = info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
      if self.srvList:
      service = ServiceReference(self.srvList.getCurrentSelection())
      info = service and service.info()
      nameROH = info and info.getName(service.ref).replace('\xc2\x86', '').replace('\xc2\x87', '')
      else:
      service = self.session.nav.getCurrentService()
      info = service and service.info()
      nameROH = info and info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
      if (nameROH is not None) and not(config.plugins.MerlinEPG.StartFirst.value):
      #
      for idx in range(1, len(self.list)):
      name = str(idx) + ". " + nameROH
      if name == self.list[idx-1]:
      break
      self["prg_list"].moveToIndex(idx-1)
      else:
      self["prg_list"].moveToIndex(0)
      self.updateInfos()


      def onSelectionChanged(self):
      curEV = self["epg_list"].getCurrent()
      event = curEV[0]
      ext = event and event.getExtendedDescription() or ""
      self["fullEventInfo"].setText(str(ext))


      def prgUp(self):
      self["prg_list"].down()
      self.updateInfos()

      def prgDown(self):
      self["prg_list"].up()
      self.updateInfos()


      def prgPlus(self):
      self["prg_list"].pageDown()
      self.updateInfos()


      def prgMinus(self):
      self["prg_list"].pageUp()
      self.updateInfos()


      def getChannels(self):
      indx = 0
      serviceHandler = eServiceCenter.getInstance()
      services = serviceHandler.list(eServiceReference('1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM BOUQUET "bouquets.tv" ORDER BY bouquet'))
      bouquets = services and services.getContent("SN", True)
      for bouquet in bouquets:
      services = serviceHandler.list(eServiceReference(bouquet[0]))
      channels = services and services.getContent("SN", True)
      for channel in channels:
      if not channel[0].startswith("1:64:"):
      indx = indx + 1
      self.list.append(str(indx) + ". " + channel[1].replace('\xc2\x86', '').replace('\xc2\x87', ''))
      self.myServices.append(channel)
      self.myBqts.append(bouquet)
      return self.list


      def updateInfos(self):
      l = self["epg_list"]
      l.recalcEntrySize()
      CurrentPrg = self.myServices[self["prg_list"].getSelectionIndex()]
      self["currCh"].setText(str(CurrentPrg[1]))
      myService = ServiceReference(CurrentPrg[0])
      l.fillSingleEPG(myService)


      def ok(self):
      curEV = self["epg_list"].getCurrent()
      event = curEV[0]
      service = curEV[1]
      if event is not None:
      self.session.open(EventViewSimple, event, service)

      def ZapTo(self):
      if self.srvList==None:
      return
      CurrentPrg = self.myServices[self["prg_list"].getSelectionIndex()]
      CurrentBqt = self.myBqts[self["prg_list"].getSelectionIndex()]
      myService = ServiceReference(CurrentPrg[0])
      myB = ServiceReference(CurrentBqt[0])
      self.srvList.clearPath()
      if self.srvList.bouquet_root != myB.ref:
      self.srvList.enterPath(self.srvList.bouquet_root)
      self.srvList.enterPath(myB.ref)
      self.srvList.setCurrentSelection(myService.ref)
      self.srvList.zap()
      self.close()


      def ZapForRefresh(self):
      if self.srvList==None:
      return
      CurrentPrg = self.myServices[self["prg_list"].getSelectionIndex()]
      myService = ServiceReference(CurrentPrg[0])
      self.session.nav.playService(myService.ref)
      self.CheckForEPG.start(4000, True)


      def CheckItNow(self):
      self.CheckForEPG.stop()
      self.updateInfos()

      def timerAdd(self):
      if not AutoTimerPresent:
      self.AddConfirmedTimer([None,"NT"])
      else:
      self.session.openWithCallback(self.AddConfirmedTimer, ChoiceBox, title=_("Select timer type..."), list=[(_("Standard timer"), "NT"),(_("AutoTimer"), "AT"),(_("View AutoTimers"), "ATV")])


      def AddConfirmedTimer(self, answer):
      cur = self["epg_list"].getCurrent()
      event = cur[0]
      serviceref = cur[1]
      if event is None:
      return
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      answer = answer and answer[1]
      if answer == "AT":
      addAutotimerFromEvent(self.session,evt=event,service=serviceref)
      elif answer == "NT":
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      cb_func = lambda ret : not ret or self.removeTimer(timer)
      self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
      break
      else:
      newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
      self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
      elif answer == "ATV":
      AutoTimerView(self.session)


      def removeTimer(self, timer):
      timer.afterEvent = AFTEREVENT.NONE
      self.session.nav.RecordTimer.removeEntry(timer)


      def finishedAdd(self, answer):
      if answer[0]:
      entry = answer[1]
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      for x in simulTimerList:
      if x.setAutoincreaseEnd(entry):
      self.session.nav.RecordTimer.timeChanged(x)
      simulTimerList = self.session.nav.RecordTimer.record(entry)
      if simulTimerList is not None:
      self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)


      def finishSanityCorrection(self, answer):
      self.finishedAdd(answer)


      def menuClicked(self):
      self.session.open(MerlinPGsetup)


      def go2now(self):
      self["epg_list"].instance.moveSelection(self["epg_list"].instance.moveTop)


      def myhelp(self):
      self.session.open(ShowMe, "/usr/lib/enigma2/python/Plugins/Extensions/ValiEPG/help.jpg")


      def up(self):
      self["epg_list"].moveUp()


      def down(self):
      self["epg_list"].moveDown()


      def left(self):
      self["epg_list"].instance.moveSelection(self["epg_list"].instance.pageUp)


      def right(self):
      self["epg_list"].instance.moveSelection(self["epg_list"].instance.pageDown)


      def editCurTimer(self):
      cur = self["epg_list"].getCurrent()
      event = cur[0]
      serviceref = cur[1]
      if event is None:
      return
      eventid = event.getEventId()
      refstr = serviceref.ref.toString()
      for timer in self.session.nav.RecordTimer.timer_list:
      if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
      self.session.open(TimerEntry, timer)


      def fullEPGlist(self):
      if epgSpresent:
      self.session.open(myEPGSearch)
      else:
      self.session.open(MessageBox, text = _('EPGsearch is not installed!'), type = MessageBox.TYPE_ERROR)


      def runEpgSeartch(self):
      if epgSpresent:
      cur = self["epg_list"].getCurrent()
      epg_event = cur[0]
      epg_name = epg_event and epg_event.getEventName() or ''
      self.session.open(EPGSearch, epg_name, False)
      else:
      self.session.open(MessageBox, text = _('EPGsearch is not installed!'), type = MessageBox.TYPE_ERROR)




      if epgSpresent:
      class myEPGSearchList(EPGSearchList):
      def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer=None):
      EPGSearchList.__init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer=None)
      EPGList.__init__(self, type, selChangedCB, timer)
      self.l.setBuildFunc(self.buildEPGSearchEntry)


      def buildEPGSearchEntry(self, service, eventId, beginTime, duration, EventName):
      r1 = self.weekday_rect
      r2 = self.datetime_rect
      r3 = self.descr_rect
      t = localtime(beginTime)
      serviceref = ServiceReference(service)
      res = [
      None,
      (eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, self.days[t[6]]),
      (eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width()-20, r1.height(), 0, RT_HALIGN_LEFT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))
      ]
      res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName + " <" + serviceref.getServiceName()))
      return res




      if epgSpresent:
      class myEPGSearch(EPGSearch):
      def __init__(self, session, *args):
      EPGSearch.__init__(self, session)
      Screen.__init__(self, session)
      self.skinName = ["EPGSearch", "EPGSelection"]
      self["list"] = myEPGSearchList(type = EPG_TYPE_SINGLE, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
      self.onLayoutFinish.append(self.fillMe)


      def fillMe(self):
      self["key_yellow"].hide()
      self["key_green"].hide()
      self["key_blue"].hide()
      self.searchEPG("")


      def searchEPG(self, searchString = None, searchSave = True):
      self.currSearch = ""
      encoding = config.plugins.epgsearch.encoding.value
      epgcache = eEPGCache.getInstance()
      ret = epgcache.search(('RIBDT', 2000, eEPGCache.PARTIAL_TITLE_SEARCH, "", eEPGCache.NO_CASE_CHECK)) or []
      ret.sort(key = lambda x: x[4])
      l = self["list"]
      l.recalcEntrySize()
      l.list = ret
      l.l.setList(ret)


      def blueButtonPressed(self):
      pass


      def yellowButtonPressed(self):
      pass


      def timerAdd(self):
      pass


      def menu(self):
      pass


      def zapTo(self):
      pass


      def timerAdd(self):
      pass
      Dateien
      • 1.jpg

        (11,46 kB, 18 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von dazlak ()