iFlatFHD Anpassungen / modifications (colors, fonts, skinparts)

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

    • Die Fehlermeldung durch CoolRec.png ist durch richtiges Kopieren jetzt weg .
      CoolTVGuide hab ich auch installiert.

      Hab jetzt nur noch eine Fehlermeldung wenn ich das EMC wieder verlasse.
      Anbei Bilder von der EMC Version und die Fehlermeldung.

      Hab jetzt die EMC vom Feed installiert. Läuft jetzt einwandfrei.
      :) :) :)
      Gruß von nubert123

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von nubert123 ()

    • Guten Morgen :)

      Ich habe soeben eine weitere Infobar zur Classic-Serie 4.3 hinzugefügt. Bitte die Beschreibung dazu beachten. Viel Spaß damit! :)

      iFlatFHD Anpassungen / modifications (colors, fonts, skinparts)
    • Hallo.

      Kann mir jemand sagen ob es ein Channellist Skinpart gibt, der mehr als 22 Sender anzeigt?
      Habe irgendwie nichts dazu gefunden

      Un gibt es Skinparts die für 65 Zoll Fernseher gedacht sind.. Also das ganze dann kleiner, damit man mehr Inhalt auf dem Bildschirm bekommt.
    • Hi @Frau Plön ,
      habe Version skin_IB_TIB_Classic_Ver_4_3_a_Olli.xml installiert, ebenfalls skin_SIB_TIB_Classic_Ver_4_3_Olli.xml , dazu die auch die Converter, iFlatFHD 4.3 ist drauf, leider kommt es zum Bootloop, Box war noch per FTP erreichbar, deinstalliert wieder, alles okay.
      Kann ich irgendetwas falsch gemacht haben? Wahrscheinlich wohl, aber was? :)
    • Gibt es einen Crashlog, den du hochladen kannst? Ich habe die Skinparts vorher bei mir getestet, funktionieren einwandfrei.
    • Hi Olli,
      habe es gerade nochmals versucht, leider wieder Bootloop, den letzten Teil des Crashlogs packe ich mal in den Spoiler, vielleicht kannst ja Du da etwas erkennen, ich nicht, mir fehlt leider das Fachwissen... :)

      Spoiler anzeigen

      <RemoteControlCode> Write Remote Control Code : 2
      [DeviceManager2] Loading skin /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager2/skin.xml
      [MP EPGImport] autostart (0) occured at 1485089271.7
      [MP EPGImport] WakeUpTime now set to -1 (now=1485089271)
      starting hotplug handler
      add device sdb to bdpoll current state: medium inserted
      add device sde to bdpoll current state: medium inserted
      [CI_Assignment] activating ci configs:
      resolve: resolve ${sysconfdir}/enigma2/ci
      resolve: -> /etc/enigma2/ci
      [browser] browser start
      Looking for embedded skin
      Setvolume: 100 100 (raw)
      Setvolume: 0 0 (-1db)
      [MP EPGImport] autostart (0) occured at 1485089272.04
      EMC: +++ EMC git20160416 startup
      [EMC] checkImg is Vti
      [EMC] checkImg is not newPiconRenderer cannot import name getPiconName
      resolve: resolve ${libdir}/enigma2/python/Plugins/Extensions/WebAdmin/web-data
      resolve: -> /usr/lib/enigma2/python/Plugins/Extensions/WebAdmin/web-data
      [MediaInfo] READ OLD JOBS !!!
      Repeated: 1
      Repeated: 3
      Repeated: 7
      Repeated: 15
      Repeated: 31
      Repeated: 63
      Repeated: 127
      ProcessRepeated
      localrepeatedbegindate: Sun Jan 22 17:30:00 2017
      localbegin: Sun Jan 22 17:30:00 2017
      localend: Sun Jan 22 17:30:00 2017
      localnow: Sun Jan 22 13:47:53 2017
      Day: 0
      Day: 1
      Day: 2
      Day: 3
      Day: 4
      Day: 5
      Day: 6
      ProcessRepeated result
      Sun Jan 22 17:30:00 2017
      Sun Jan 22 17:30:01 2017
      next real activation is Sun Jan 22 17:30:01 2017
      [AutoShutDown] start....
      Looking for embedded skin
      port changed to DVI
      mode changed to 1080p
      default ('1080p', 'Standard')
      preferedmodes ['720p', '1080i', '576p', '480p', '576i', '480i', ('1080p', 'Standard')]
      [Toplevel.importExternalModules] Imported external module: Example
      [Toplevel.importExternalModules] Imported external module: EPGRefresh
      [HTTPRootResource}.__init__
      [Webinterface] started on 0.0.0.0:80 auth=False ssl=False
      [WebInterface.registerBonjourService] No module named Bonjour.Bonjour
      [WebInterface.unregisterBonjourService] No module named Bonjour.Bonjour
      [eEPGCache] disable Vu+ DVB EPG blacklist mode
      [eEPGCache] set Vu+ in EPG-server (default) mode
      [eEPGCache] setCacheFile read/write epg data from/to '/media/epg.dat'
      [eEPGCache] time updated.. start EPG Mainloop
      before: 1
      after: 1
      [eEPGCache] create epg.dat backup
      not showing fine-tuning wizard, config variable doesn't exist
      showtestcard is false
      Looking for embedded skin
      setValue 100
      Setvolume: 100 100 (raw)
      Setvolume: 0 0 (-1db)
      close frontend 2
      close frontend 3
      close frontend 4
      Screen <class 'Screens.InfoBar.InfoBar'>((), {}): <type 'exceptions.ImportError'>
      Traceback (most recent call last):
      File "/usr/lib/enigma2/python/mytest.py", line 269, in create
      return screen(self, *arguments, **kwargs)
      File "InfoBar.py", line 66, in Screens.InfoBar.InfoBar.__init__ (git/lib/python/Screens/InfoBar.c:2548)
      File "InfoBarGenerics.py", line 160, in Screens.InfoBarGenerics.InfoBarShowHide.__init__ (git/lib/python/Screens/InfoBarGenerics.c:8013)
      File "/usr/lib/enigma2/python/mytest.py", line 277, in instantiateDialog
      return self.doInstantiateDialog(screen, arguments, kwargs, self.desktop)
      File "/usr/lib/enigma2/python/mytest.py", line 302, in doInstantiateDialog
      readSkin(dlg, None, dlg.skinName, desktop)
      File "/media/build/vti-dorie/build/tmp/work/mips32el-oe-linux/enigma2-python/enigma2-python-vti-11.0.1-20170112-r0r2/git/skin.py", line 1270, in readSkin
      File "/media/build/vti-dorie/build/tmp/work/mips32el-oe-linux/enigma2-python/enigma2-python-vti-11.0.1-20170112-r0r2/git/skin.py", line 1223, in process_screen
      File "/media/build/vti-dorie/build/tmp/work/mips32el-oe-linux/enigma2-python/enigma2-python-vti-11.0.1-20170112-r0r2/git/skin.py", line 1157, in process_widget
      File "/media/build/vti-dorie/build/tmp/work/mips32el-oe-linux/enigma2-python/enigma2-python-vti-11.0.1-20170112-r0r2/git/lib/python/Tools/Import.py", line 2, in my_import
      ImportError: No module named VWeather2
      Traceback (most recent call last):
      File "/usr/lib/enigma2/python/mytest.py", line 231, in processDelay
      callback(*retval)
      File "/media/build/vti-dorie/build/tmp/work/mips32el-oe-linux/enigma2-python/enigma2-python-vti-11.0.1-20170112-r0r2/git/lib/python/Tools/BoundFunction.py", line 9, in __call__
      File "/usr/lib/enigma2/python/mytest.py", line 525, in runNextScreen
      session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen, *args)
      File "/usr/lib/enigma2/python/mytest.py", line 332, in openWithCallback
      dlg = self.open(screen, *arguments, **kwargs)
      File "/usr/lib/enigma2/python/mytest.py", line 343, in open
      dlg.isTmp = True
      AttributeError: 'NoneType' object has no attribute 'isTmp'
      (PyObject_CallObject(<bound method Session.processDelay of <__main__.Session instance at 0x61428fa8>>,()) failed)
      ]]>
      </dvbapp2crashlog>
      </crashlogs>
      </stbcrashlog>
    • Ich passe die Converter noch auf die vom iFlatFHD an. Bitte nochmal diesen zu den Convertern packen.


      Die Skinparts habe ich alle nochmal auf den iFlatHDeigenen Converter iFlatVWeather2.py angepasst, dadurch sollte es keine Probleme mehr geben.

      Der angehängte Converter ist nur dann nötig, wenn man den Skinpart nicht neu herunterladen möchte.
      Dateien
      • VWeather2.py

        (39,36 kB, 18 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Frau Plön ()

    • hier: /usr/lib/enigma2/python/Components/Converter
    • iFlatFHD Anpassungen / modifications (colors, fonts, skinparts)

      Hallo an die Skinpart Ersteller.

      Könnte einer von euch ein skinpart erstellen für das AmazonEcho Plugin ?

      Würde mich freuen.

      Big Thx


      Gesendet von iPhone mit Tapatalk Pro
    • VU-ERNO schrieb:

      Kann mir jemand sagen ob es ein Channellist Skinpart gibt, der mehr als 22 Sender anzeigt?
      Habe irgendwie nichts dazu gefunden
      Un gibt es Skinparts die für 65 Zoll Fernseher gedacht sind
      es gibt eine Kanalliste = Channelselection mit 21 Sendern, siehe Post 3.
      soweit ich die Skinparts hier überblicke, wurde nichts speziell für größerer TV gebastelt, kann ja noch werden ;)
      aber generell größer oder kleiner wird wohl nicht gehen, da müsste schon fast jeder screen angepasst werden, was ein neuer Skin wäre :whistling:

      Woopser schrieb:

      Könnte einer von euch ein skinpart erstellen für das AmazonEcho Plugin ?
      ich kenne das Plugin auch nur vom Namen her, gibts nur für 4K-Vu's, gibt es im Plugin Skin-Vorlagen / py-sourcecode ?
    • Hallo,
      teste gerade den Skinpart mit Primetime und hätte da mal ne Frage dazu.
      Lassen sich unten rechts auch noch mehr folgende Sendungen anzeigen? Ist doch sicher nicht damit getan, daß Fenster dafür zu vergrößern?

      MfG
      Dateien
    • gordon55 schrieb:

      ich kenne das Plugin auch nur vom Namen her, gibts nur für 4K-Vu's, gibt es im Plugin Skin-Vorlagen / py-sourcecode ?
      da sind wohl mehrere Skin Beschreibungen drin. Ich pack die plugin.py mal in den Spoiler.

      Spoiler anzeigen


      Quellcode

      1. # -*- coding: utf-8 -*-
      2. import Queue
      3. import json
      4. import os
      5. import requests
      6. import subprocess
      7. import threading
      8. import urllib
      9. from BaseHTTPServer import HTTPServer
      10. from SimpleHTTPServer import SimpleHTTPRequestHandler
      11. from SocketServer import ThreadingMixIn
      12. from Components.ActionMap import ActionMap
      13. from Components.ConfigList import ConfigListScreen
      14. from Components.GUIComponent import GUIComponent
      15. from Components.Label import Label
      16. from Components.MultiContent import MultiContentEntryPixmapAlphaBlend
      17. from Components.PluginComponent import plugins
      18. from Components.config import *
      19. from Components.config import config, getConfigListEntry, ConfigSelection, ConfigText, ConfigIP, ConfigSubsection, \
      20. ConfigYesNo, \
      21. ConfigInteger
      22. from Plugins.Plugin import PluginDescriptor
      23. from Screens.ChannelSelection import service_types_tv
      24. from Screens.Screen import Screen
      25. from Screens.VirtualKeyBoard import VirtualKeyBoard
      26. from Tools.FindPicon import findPicon
      27. from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_CENTER, loadPNG, \
      28. RT_VALIGN_CENTER, BT_SCALE, BT_FIXRATIO
      29. from enigma import eServiceCenter, eServiceReference
      30. mainthread = None
      31. callback_pluginname = None
      32. pluginserver = None
      33. servicepid = None
      34. hasession = None
      35. callback_queue = Queue.Queue()
      36. config.plugins.habridge = ConfigSubsection()
      37. config.plugins.habridge.boxname = ConfigText(default='Receiver')
      38. config.plugins.habridge.serverport = ConfigInteger(96, (1, 65535))
      39. config.plugins.habridge.port = ConfigInteger(89, (1, 65535))
      40. config.plugins.habridge.boxvolume = ConfigYesNo(default=False)
      41. config.plugins.habridge.removehd = ConfigYesNo(default=False)
      42. config.plugins.habridge.bridgemode = ConfigSelection(choices=[("0", "Box"), ("1", "Extern")], default="0")
      43. config.plugins.habridge.bridgeip = ConfigIP(default=[192, 168, 002, 198])
      44. config.plugins.habridge.boxip = ConfigIP(default=[192, 168, 002, 100])
      45. lautschrift = {
      46. "rtl": "ErTee El",
      47. "rtlii": "ErTee El zwei",
      48. "sat.1": "sat eins",
      49. "prosieben": "pro sieben",
      50. "qvc": "kuh vau zeh",
      51. "sixx": "six",
      52. "super rtl": "Super ErTee El",
      53. "rtlnitro": "ErTee El Nitro",
      54. "pro7 maxx": "pro sieben max",
      55. "n24": "en vierundzwanzig",
      56. "kika": "kinderkanal",
      57. "mdr s-anhalt": "EmDee Er",
      58. "zdf": "das zweite",
      59. "br fernsehen nord": "bayrisches fernsehen nord",
      60. "br fernsehen süd": "bayrisches fernsehen süd",
      61. "dmax": "Dee Max",
      62. "3sat": "drei satt"
      63. }
      64. class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
      65. """Handle requests in a separate thread."""
      66. class PluginServer(SimpleHTTPRequestHandler):
      67. def do_GET(self):
      68. global hasession, callback_pluginname, callback_queue, mainthread
      69. if self.path.startswith("/?plugin="):
      70. self.send_response(200)
      71. self.send_header('Content-type', "text/html")
      72. self.end_headers()
      73. self.wfile.write("OK")
      74. callback_pluginname = urllib.unquote_plus(self.path.split("=")[1])
      75. startplugin()
      76. elif self.path.startswith("/api/bridge/lights"):
      77. status = requests.get("http://127.0.0.1:%d/api/statusinfo" % config.OpenWebif.port.value).json()
      78. if status['inStandby'] == "false":
      79. state = "true"
      80. else:
      81. state = "false"
      82. self.send_response(200)
      83. self.send_header('Content-type', "application/json")
      84. self.end_headers()
      85. self.wfile.write(
      86. '''{"state": {"on": %s,"effect": "none","alert": "none","bri": %s,"reachable": true,},"type": "Dimmable light","name": "%s","modelid": "LWB004","swversion": "66012040",}''' % (
      87. state, str(int((254 / 100) * float(status['volume']))), config.plugins.habridge.boxname.value))
      88. return
      89. class SimpleChannelEntry():
      90. selected = False
      91. Name = None
      92. Ref = None
      93. def __init__(self, name, ref):
      94. self.Name = name
      95. self.Ref = ref
      96. class ChannelEntry():
      97. selected = False
      98. sref = None
      99. Name = None
      100. Callname = None
      101. Device = None
      102. def __init__(self, ref, channelname, callname=None, device=None):
      103. self.sref = ref
      104. self.Name = channelname
      105. if not callname:
      106. self.Callname = self.Name
      107. else:
      108. self.Callname = callname
      109. self.Device = device
      110. class PluginEntry():
      111. Name = None
      112. Callname = None
      113. Plugin = None
      114. Device = None
      115. def __init__(self, plugin, pluginname, callname=None, device=None):
      116. self.Plugin = plugin
      117. self.Name = pluginname
      118. if not callname:
      119. self.Callname = self.Name
      120. else:
      121. self.Callname = callname
      122. self.Device = device
      123. def gethaconfig():
      124. if config.plugins.habridge.bridgemode.value == "1":
      125. boxip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.boxip.value)
      126. bridgeip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.bridgeip.value)
      127. else:
      128. boxip = "127.0.0.1"
      129. bridgeip = boxip
      130. channels = []
      131. plugins = []
      132. boxcalls = None
      133. refmap = buildfullchanneldict()
      134. pluginmap = getplugindict()
      135. devices = requests.get("http://%s:%d/api/devices" % (bridgeip, config.plugins.habridge.port.value)).json()
      136. if devices:
      137. for dev in devices:
      138. if dev['deviceType'] == "custom" and dev["targetDevice"] == "Encapsulated":
      139. if str(dev['onUrl']).find("zap?sRef") != -1:
      140. ref = str(dev['onUrl']).split("=")[1].replace("%3A", ":").split("&")[0].split("::")[0]
      141. if not ref.endswith(":"): ref = "%s:" % ref
      142. if ref in refmap:
      143. ch = ChannelEntry(ref, refmap[ref], dev['name'], dev)
      144. channels.append((ch,))
      145. elif str(dev['onUrl']).startswith(
      146. "http://%s:%d/?plugin" % (boxip, config.plugins.habridge.serverport.value)):
      147. pluginname = urllib.unquote_plus(str(dev['onUrl']).split("=")[1])
      148. if pluginname in pluginmap:
      149. pl = PluginEntry(pluginmap[pluginname], pluginname, dev['name'], dev)
      150. plugins.append((pl,))
      151. elif str(dev['onUrl']).find("/api/powerstate") != -1:
      152. boxcalls = dev
      153. return channels, plugins, devices, boxcalls
      154. def getplugins():
      155. ret = []
      156. for plugin in plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU):
      157. ret.append((plugin,))
      158. return ret
      159. def getplugindict():
      160. ret = {}
      161. for plugin in plugins.getPlugins(PluginDescriptor.WHERE_PLUGINMENU):
      162. ret[plugin.name] = plugin
      163. return ret
      164. def getservicelist(ref):
      165. root = eServiceReference(str(ref))
      166. service_handler = eServiceCenter.getInstance()
      167. return service_handler.list(root).getContent("SN", True)
      168. def gettvbouquets():
      169. return getservicelist(service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet')
      170. def getbouquetchannels(bouquet):
      171. allchannels = []
      172. bouquetlist = getservicelist(bouquet)
      173. for (serviceref, servicename) in bouquetlist:
      174. if len(filter(lambda channel: channel[1] == serviceref, allchannels)) == 0:
      175. allchannels.append((servicename, serviceref))
      176. return allchannels
      177. def buildfullchannellist():
      178. allchannels = []
      179. tvbouquets = gettvbouquets()
      180. for bouquet in tvbouquets:
      181. bouquetlist = getservicelist(bouquet[0])
      182. for (serviceref, servicename) in bouquetlist:
      183. if len(filter(lambda channel: channel[1] == serviceref, allchannels)) == 0:
      184. allchannels.append((servicename, serviceref))
      185. return allchannels
      186. def buildfullchanneldict():
      187. allchannels = {}
      188. tvbouquets = gettvbouquets()
      189. for bouquet in tvbouquets:
      190. bouquetlist = getservicelist(bouquet[0])
      191. for (serviceref, servicename) in bouquetlist:
      192. allchannels[serviceref] = servicename
      193. return allchannels
      194. class BouquetList(GUIComponent):
      195. GUI_WIDGET = eListbox
      196. def __init__(self):
      197. GUIComponent.__init__(self)
      198. self.l = eListboxPythonMultiContent()
      199. self.l.setFont(0, gFont('Regular', 20))
      200. self.l.setBuildFunc(self.setentry)
      201. self.l.setItemHeight(60)
      202. self.bouquets = None
      203. def setlist(self, bouquets):
      204. self.instance.setWrapAround(True)
      205. self.instance.setContent(self.l)
      206. self.bouquets = bouquets
      207. self.l.setList(self.bouquets)
      208. def setentry(self, ref, title):
      209. width = self.l.getItemSize().width()
      210. height = self.l.getItemSize().height()
      211. res = [None]
      212. res.append(
      213. (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, height, 0, RT_HALIGN_CENTER | RT_VALIGN_CENTER, title))
      214. return res
      215. def getcurrentselection(self):
      216. cur = self.l.getCurrentSelection()
      217. return cur
      218. def up(self):
      219. if self.instance is not None:
      220. self.instance.moveSelection(self.instance.moveUp)
      221. return
      222. def down(self):
      223. if self.instance is not None:
      224. self.instance.moveSelection(self.instance.moveDown)
      225. return
      226. def pageup(self):
      227. if self.instance is not None:
      228. self.instance.moveSelection(self.instance.pageUp)
      229. return
      230. def pagedown(self):
      231. if self.instance is not None:
      232. self.instance.moveSelection(self.instance.pageDown)
      233. return
      234. class ChannelList(GUIComponent):
      235. GUI_WIDGET = eListbox
      236. def __init__(self):
      237. GUIComponent.__init__(self)
      238. self.ptryes = loadPNG("/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/icon_checked.png")
      239. self.ptrno = loadPNG("/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/icon_unchecked.png")
      240. self.l = eListboxPythonMultiContent()
      241. self.l.setFont(0, gFont('Regular', 20))
      242. self.l.setBuildFunc(self.setentry)
      243. self.l.setItemHeight(60)
      244. self.bouquets = None
      245. def setlist(self, bouquets):
      246. self.instance.setWrapAround(True)
      247. self.instance.setContent(self.l)
      248. self.bouquets = bouquets
      249. self.l.setList(self.bouquets)
      250. def getlist(self):
      251. return self.bouquets
      252. def setentry(self, item):
      253. width = self.l.getItemSize().width()
      254. height = self.l.getItemSize().height()
      255. res = [None]
      256. if item.selected:
      257. res.append(MultiContentEntryPixmapAlphaBlend(pos=(10, 17),
      258. size=(26, 26),
      259. png=self.ptryes,
      260. backcolor=None,
      261. backcolor_sel=None,
      262. options=BT_SCALE | BT_FIXRATIO))
      263. else:
      264. res.append(MultiContentEntryPixmapAlphaBlend(pos=(10, 17),
      265. size=(26, 26),
      266. png=self.ptrno,
      267. backcolor=None,
      268. backcolor_sel=None,
      269. options=BT_SCALE | BT_FIXRATIO))
      270. res.append((eListboxPythonMultiContent.TYPE_TEXT, 50, 0, width - 70, height, 0,
      271. RT_HALIGN_LEFT | RT_VALIGN_CENTER, item.Name))
      272. return res
      273. def getcurrentselection(self):
      274. cur = self.l.getCurrentSelection()
      275. return cur
      276. def up(self):
      277. if self.instance is not None:
      278. self.instance.moveSelection(self.instance.moveUp)
      279. return
      280. def down(self):
      281. if self.instance is not None:
      282. self.instance.moveSelection(self.instance.moveDown)
      283. return
      284. def pageup(self):
      285. if self.instance is not None:
      286. self.instance.moveSelection(self.instance.pageUp)
      287. return
      288. def pagedown(self):
      289. if self.instance is not None:
      290. self.instance.moveSelection(self.instance.pageDown)
      291. return
      292. def getcurrentindex(self):
      293. return self.instance.getCurrentIndex()
      294. def updatelistobject(self, row):
      295. index = self.getcurrentindex()
      296. self.bouquets[index] = (row,)
      297. self.l.invalidateEntry(index)
      298. class MainChannelList(GUIComponent):
      299. GUI_WIDGET = eListbox
      300. def __init__(self):
      301. GUIComponent.__init__(self)
      302. self.l = eListboxPythonMultiContent()
      303. self.l.setFont(0, gFont('Regular', 20))
      304. self.l.setFont(1, gFont('Regular', 18))
      305. self.l.setBuildFunc(self.setentry)
      306. self.l.setItemHeight(80)
      307. self.bouquets = None
      308. def setlist(self, bouquets):
      309. self.instance.setWrapAround(True)
      310. self.instance.setContent(self.l)
      311. self.bouquets = bouquets
      312. self.l.setList(self.bouquets)
      313. def setentry(self, item):
      314. width = self.l.getItemSize().width()
      315. res = [None]
      316. ptr = findPicon(str(item.sref))
      317. if ptr != "":
      318. ptr = loadPNG(ptr)
      319. else:
      320. ptr = None
      321. if item.Device:
      322. callname = str(item.Device['name'])
      323. else:
      324. callname = str(item.Callname)
      325. if ptr:
      326. res.append(MultiContentEntryPixmapAlphaBlend(pos=(10, 10),
      327. size=(100, 60),
      328. png=ptr,
      329. backcolor=None,
      330. backcolor_sel=None,
      331. options=BT_SCALE | BT_FIXRATIO))
      332. res.append(
      333. (eListboxPythonMultiContent.TYPE_TEXT, 120, 0, width - 140, 40, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER,
      334. "Channelname: %s" % item.Name))
      335. res.append(
      336. (eListboxPythonMultiContent.TYPE_TEXT, 120, 40, width - 140, 40, 1, RT_HALIGN_LEFT | RT_VALIGN_CENTER,
      337. "Called as: %s" % callname))
      338. else:
      339. res.append(
      340. (eListboxPythonMultiContent.TYPE_TEXT, 20, 0, width - 40, 40, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER,
      341. "Channelname: %s" % item.Name))
      342. res.append(
      343. (eListboxPythonMultiContent.TYPE_TEXT, 20, 40, width - 40, 40, 1, RT_HALIGN_LEFT | RT_VALIGN_CENTER,
      344. "Called as: %s" % callname))
      345. return res
      346. def enablelistselection(self, enabled):
      347. if self.instance is not None:
      348. self.instance.setSelectionEnable(enabled)
      349. def getcurrentselection(self):
      350. cur = self.l.getCurrentSelection()
      351. return cur
      352. def up(self):
      353. if self.instance is not None:
      354. self.instance.moveSelection(self.instance.moveUp)
      355. return
      356. def down(self):
      357. if self.instance is not None:
      358. self.instance.moveSelection(self.instance.moveDown)
      359. return
      360. def pageup(self):
      361. if self.instance is not None:
      362. self.instance.moveSelection(self.instance.pageUp)
      363. return
      364. def pagedown(self):
      365. if self.instance is not None:
      366. self.instance.moveSelection(self.instance.pageDown)
      367. return
      368. class MainPluginList(GUIComponent):
      369. GUI_WIDGET = eListbox
      370. def __init__(self):
      371. GUIComponent.__init__(self)
      372. self.l = eListboxPythonMultiContent()
      373. self.l.setFont(0, gFont('Regular', 20))
      374. self.l.setFont(1, gFont('Regular', 18))
      375. self.l.setBuildFunc(self.setentry)
      376. self.l.setItemHeight(80)
      377. self.bouquets = None
      378. def setlist(self, bouquets):
      379. self.instance.setWrapAround(True)
      380. self.instance.setContent(self.l)
      381. self.bouquets = bouquets
      382. self.l.setList(self.bouquets)
      383. def setentry(self, plugin):
      384. width = self.l.getItemSize().width()
      385. res = [None]
      386. if plugin.Device:
      387. callname = str(plugin.Device['name'])
      388. else:
      389. callname = str(plugin.Callname)
      390. res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, 40, 0, RT_HALIGN_CENTER | RT_VALIGN_CENTER,
      391. "Pluginname: %s" % plugin.Name))
      392. res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 40, width, 40, 1, RT_HALIGN_CENTER | RT_VALIGN_CENTER,
      393. "Called as: %s" % callname))
      394. return res
      395. def enablelistselection(self, enabled):
      396. if self.instance is not None:
      397. self.instance.setSelectionEnable(enabled)
      398. def getcurrentselection(self):
      399. cur = self.l.getCurrentSelection()
      400. return cur
      401. def up(self):
      402. if self.instance is not None:
      403. self.instance.moveSelection(self.instance.moveUp)
      404. return
      405. def down(self):
      406. if self.instance is not None:
      407. self.instance.moveSelection(self.instance.moveDown)
      408. return
      409. def pageup(self):
      410. if self.instance is not None:
      411. self.instance.moveSelection(self.instance.pageUp)
      412. return
      413. def pagedown(self):
      414. if self.instance is not None:
      415. self.instance.moveSelection(self.instance.pageDown)
      416. return
      417. class PluginList(GUIComponent):
      418. GUI_WIDGET = eListbox
      419. def __init__(self):
      420. GUIComponent.__init__(self)
      421. self.l = eListboxPythonMultiContent()
      422. self.l.setFont(0, gFont('Regular', 20))
      423. self.l.setBuildFunc(self.setentry)
      424. self.l.setItemHeight(60)
      425. self.bouquets = None
      426. def setlist(self, bouquets):
      427. self.instance.setWrapAround(True)
      428. self.instance.setContent(self.l)
      429. self.bouquets = bouquets
      430. self.l.setList(self.bouquets)
      431. def setentry(self, plugin):
      432. width = self.l.getItemSize().width()
      433. height = self.l.getItemSize().height()
      434. res = [None]
      435. res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, height, 0, RT_HALIGN_CENTER | RT_VALIGN_CENTER,
      436. plugin.name))
      437. return res
      438. def getcurrentselection(self):
      439. cur = self.l.getCurrentSelection()
      440. return cur
      441. def up(self):
      442. if self.instance is not None:
      443. self.instance.moveSelection(self.instance.moveUp)
      444. return
      445. def down(self):
      446. if self.instance is not None:
      447. self.instance.moveSelection(self.instance.moveDown)
      448. return
      449. def pageup(self):
      450. if self.instance is not None:
      451. self.instance.moveSelection(self.instance.pageUp)
      452. return
      453. def pagedown(self):
      454. if self.instance is not None:
      455. self.instance.moveSelection(self.instance.pageDown)
      456. return
      457. class HABridgeConfig(Screen):
      458. skin = '''
      459. <screen name="HABridgeConfig" size="1280,720" position="center,center" title="Amazon Echo Config">
      460. <widget name="plugins" itemHeight="60" position="0,0" size="640,640"/>
      461. <widget name="channels" itemHeight="60" position="640,0" size="640,640"/>
      462. <widget name="key_red" position="99,640" size="265,80" zPosition="1" font="Regular;22" halign="center" valign="center" foregroundColor="#00ffffff" transparent="0" />
      463. <widget name="key_green" position="411,640" size="265,80" zPosition="1" font="Regular;22" halign="center" valign="center" foregroundColor="#00ffffff" transparent="0" />
      464. <widget name="key_yellow" position="761,640" size="265,80" zPosition="1" font="Regular;22" halign="center" valign="center" foregroundColor="#00ffffff" transparent="0" />
      465. <widget name="key_blue" position="1073,640" size="200,80" zPosition="1" font="Regular;22" halign="center" valign="center" foregroundColor="#00ffffff" transparent="0" />
      466. <ePixmap position="59,664" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/button_red.png" alphatest="on" />
      467. <ePixmap position="374,664" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/button_green.png" alphatest="on" />
      468. <ePixmap position="726,664" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/button_yellow.png" alphatest="on" />
      469. <ePixmap position="1037,664" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/button_blue.png" alphatest="on" />
      470. </screen>
      471. '''
      472. def __init__(self, session):
      473. self.session = session
      474. Screen.__init__(self, session)
      475. self["actions"] = ActionMap(['habridgeactions'],
      476. {
      477. "ok": self.editcallname,
      478. "cancel": self.keycancel,
      479. "up": self.keyup,
      480. "down": self.keydown,
      481. "left": self.keyleft,
      482. "right": self.keyright,
      483. "green": self.saveconfig,
      484. "previous": self.switchlist,
      485. "next": self.switchlist,
      486. "blue": self.addchannel,
      487. "bluelong": self.addbouquet,
      488. "yellow": self.addplugin,
      489. "keyrecord": self.deleteentry,
      490. "red": self.showconfig
      491. }, -10)
      492. self['key_red'] = Label(_("Einstellungen"))
      493. self['key_green'] = Label(_("Speichern"))
      494. self['key_yellow'] = Label(_("Plugin hinzufügen"))
      495. self['key_blue'] = Label(_("Kanal hinzufügen\nBouquet hinzufügen"))
      496. self.channels, self.plugins, self.devices, self.boxcalls = gethaconfig()
      497. self["plugins"] = MainPluginList()
      498. self["channels"] = MainChannelList()
      499. self.currentbridgemode = config.plugins.habridge.bridgemode.value
      500. self.selectedentry = None
      501. self.onLayoutFinish.append(self.onLayoutFinished)
      502. def saveconfig(self):
      503. if config.plugins.habridge.bridgemode.value == "1":
      504. boxip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.boxip.value)
      505. bridgeip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.bridgeip.value)
      506. else:
      507. boxip = "127.0.0.1"
      508. bridgeip = boxip
      509. for device in self.plugins:
      510. device = device[0]
      511. if device.Device is None:
      512. requests.post("http://%s:%d/api/devices" % (bridgeip, config.plugins.habridge.port.value),
      513. data=json.dumps(
      514. {"deviceType": "custom", "onUrl": "http://%s:%d/?plugin=%s" % (boxip,
      515. config.plugins.habridge.serverport.value,
      516. urllib.quote_plus(
      517. str(device.Name))),
      518. "name": str(device.Callname), "targetDevice": "Encapsulated"}))
      519. else:
      520. device.Device["name"] = str(device.Callname)
      521. device.Device["onUrl"] = "http://%s:%d/?plugin=%s" % (boxip,
      522. config.plugins.habridge.serverport.value,
      523. urllib.quote_plus(str(device.Name)))
      524. requests.put("http://%s:%d/api/devices/%s" % (bridgeip,
      525. config.plugins.habridge.port.value,
      526. str(device.Device["id"])), data=json.dumps(
      527. device.Device))
      528. for device in self.channels:
      529. device = device[0]
      530. if device.Device is None:
      531. requests.post("http://%s:%d/api/devices" % (bridgeip, config.plugins.habridge.port.value),
      532. data=json.dumps(
      533. {"deviceType": "custom",
      534. "onUrl": "http://%s:%d/api/zap?sRef=%s" % (
      535. bridgeip, config.OpenWebif.port.value, urllib.quote_plus(str(device.sref))),
      536. "name": str(device.Callname), "targetDevice": "Encapsulated"}))
      537. else:
      538. device.Device["name"] = str(device.Callname)
      539. device.Device["onUrl"] = "http://%s:%d/api/zap?sRef=%s" % (boxip,
      540. config.OpenWebif.port.value,
      541. urllib.quote_plus(str(device.sref)))
      542. requests.put("http://%s:%d/api/devices/%s" % (bridgeip,
      543. config.plugins.habridge.port.value,
      544. str(device.Device["id"])), data=json.dumps(
      545. device.Device))
      546. if self.boxcalls:
      547. self.boxcalls["name"] = config.plugins.habridge.boxname.value
      548. self.boxcalls["onUrl"] = "http://%s:%d/api/powerstate?newstate=0" % (boxip,
      549. config.OpenWebif.port.value)
      550. self.boxcalls["offUrl"] = "http://%s:%d/api/powerstate?newstate=0" % (boxip,
      551. config.OpenWebif.port.value)
      552. self.boxcalls["dimUrl"] = "http://%s:%d/web/vol?set=set${intensity.percent}" % (boxip,
      553. config.OpenWebif.port.value)
      554. requests.put("http://%s:%d/api/devices/%s" % (bridgeip,
      555. config.plugins.habridge.port.value, str(self.boxcalls["id"])),
      556. data=json.dumps(
      557. self.boxcalls))
      558. else:
      559. requests.post("http://%s:%d/api/devices" % (bridgeip, config.plugins.habridge.port.value), data=json.dumps(
      560. {"deviceType": "custom",
      561. "onUrl": "http://%s:%d/api/powerstate?newstate=0" % (boxip,
      562. config.OpenWebif.port.value),
      563. "offUrl": "http://%s:%d/api/powerstate?newstate=0" % (boxip,
      564. config.OpenWebif.port.value),
      565. "dimUrl": "http://%s:%d/web/vol?set=set${intensity.percent}" % (boxip,
      566. config.OpenWebif.port.value),
      567. "name": str(config.plugins.habridge.boxname.value), "targetDevice": "Encapsulated"}))
      568. self.close()
      569. def deleteentry(self):
      570. if config.plugins.habridge.bridgemode.value == "1":
      571. boxip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.boxip.value)
      572. bridgeip = "%d.%d.%d.%d" % tuple(config.plugins.habridge.bridgeip.value)
      573. else:
      574. boxip = "127.0.0.1"
      575. bridgeip = boxip
      576. entry = self.selectedlist.getcurrentselection()
      577. if self.selectedlist == self["plugins"]:
      578. self.plugins.remove(entry)
      579. self["plugins"].setlist(self.plugins)
      580. else:
      581. self.channels.remove(entry)
      582. self["channels"].setlist(self.channels)
      583. if entry[0].Device:
      584. requests.delete(
      585. "http://%s:%d/api/devices/%s" % (bridgeip, config.plugins.habridge.port.value, entry[0].Device["id"]))
      586. def editcallname(self):
      587. self.selectedentry = self.selectedlist.getcurrentselection()
      588. if self.selectedentry:
      589. if self.selectedlist == self["plugins"]:
      590. title = "Wie soll das Plugin angesprochen werden?"
      591. else:
      592. title = "Wie soll der Sender angesprochen werden?"
      593. self.session.openWithCallback(self.changedcallname, VirtualKeyBoard, title,
      594. str(self.selectedentry[0].Callname))
      595. def changedcallname(self, value):
      596. if value:
      597. if self.selectedlist == self["plugins"]:
      598. self.plugins.remove(self.selectedentry)
      599. entry = self.selectedentry[0]
      600. entry.Callname = str(value)
      601. if entry.Device:
      602. entry.Device['name'] = str(value)
      603. self.plugins.append((entry,))
      604. self.plugins = sorted(self.plugins, key=lambda plugin: plugin[0].Name)
      605. self["plugins"].setlist(self.plugins)
      606. else:
      607. self.channels.remove(self.selectedentry)
      608. entry = self.selectedentry[0]
      609. entry.Callname = str(value)
      610. if entry.Device:
      611. entry.Device['name'] = str(value)
      612. self.channels.append((entry,))
      613. self.channels = sorted(self.channels, key=lambda channel: channel[0].Name)
      614. self["channels"].setlist(self.channels)
      615. def onLayoutFinished(self):
      616. self.onLayoutFinish.remove(self.onLayoutFinished)
      617. self.selectedlist = self["plugins"]
      618. self["channels"].enablelistselection(False)
      619. self.channels = sorted(self.channels, key=lambda channel: channel[0].Name)
      620. self.plugins = sorted(self.plugins, key=lambda plugin: plugin[0].Name)
      621. self["channels"].setlist(self.channels)
      622. self["plugins"].setlist(self.plugins)
      623. def reload(self):
      624. self.channels, self.plugins, self.devices, self.boxcalls = gethaconfig()
      625. self.selectedlist = self["plugins"]
      626. self["channels"].enablelistselection(False)
      627. self.channels = sorted(self.channels, key=lambda channel: channel[0].Name)
      628. self.plugins = sorted(self.plugins, key=lambda plugin: plugin[0].Name)
      629. self["channels"].setlist(self.channels)
      630. self["plugins"].setlist(self.plugins)
      631. def switchlist(self):
      632. if self.selectedlist == self["plugins"]:
      633. self.selectedlist.enablelistselection(False)
      634. self.selectedlist = self["channels"]
      635. self.selectedlist.enablelistselection(True)
      636. else:
      637. self.selectedlist.enablelistselection(False)
      638. self.selectedlist = self["plugins"]
      639. self.selectedlist.enablelistselection(True)
      640. def keyup(self):
      641. self.selectedlist.up()
      642. def keydown(self):
      643. self.selectedlist.down()
      644. def keyleft(self):
      645. self.selectedlist.pageup()
      646. def keyright(self):
      647. self.selectedlist.pagedown()
      648. def keycancel(self):
      649. self.close()
      650. def showconfig(self):
      651. self.session.openWithCallback(self.setupclosed, HABridgePluginConfigScreen)
      652. def setupclosed(self):
      653. if self.currentbridgemode != config.plugins.habridge.bridgemode.value:
      654. self.currentbridgemode = config.plugins.habridge.bridgemode.value
      655. self.reload()
      656. def addchannel(self):
      657. self.session.openWithCallback(self.gotchannel, HABridgeBouquetConfig, False, self.channels)
      658. def addbouquet(self):
      659. self.session.openWithCallback(self.gotchannel, HABridgeBouquetConfig, True, self.channels)
      660. def gotchannel(self, channels):
      661. global lautschrift
      662. if channels:
      663. for channel in channels:
      664. cn = None
      665. if str(channel[0]).lower().replace("hd", "").strip() in lautschrift:
      666. cn = lautschrift[str(channel[0]).lower().replace("hd", "").strip()]
      667. elif not config.plugins.habridge.removehd.value:
      668. cn = str(channel[0]).replace(" HD", " HaDe")
      669. elif config.plugins.habridge.removehd.value:
      670. cn = str(channel[0]).replace(" HD", "")
      671. self.channels.append((ChannelEntry(channel[1], channel[0], cn),))
      672. self.channels = sorted(self.channels, key=lambda channel: channel[0].Name)
      673. self["channels"].setlist(self.channels)
      674. def addplugin(self):
      675. self.session.openWithCallback(self.gotplugin, HABridgePluginConfig)
      676. def gotplugin(self, plugin):
      677. if plugin:
      678. self.plugins.append((PluginEntry(plugin, plugin.name),))
      679. self.plugins = sorted(self.plugins, key=lambda plugin: plugin[0].Name)
      680. self["plugins"].setlist(self.plugins)
      681. class HABridgePluginConfig(Screen):
      682. skin = '''
      683. <screen name="HABridgePluginConfig" size="500,500" position="center,center" title="Wähle Plugin">
      684. <widget name="plugins" itemHeight="60" position="0,0" size="500,500"/>
      685. </screen>'''
      686. def __init__(self, session):
      687. self.session = session
      688. Screen.__init__(self, session)
      689. self["plugins"] = PluginList()
      690. self["actions"] = ActionMap(['habridgeactions'],
      691. {
      692. "ok": self.keyok,
      693. "cancel": self.keycancel,
      694. "up": self.keyup,
      695. "down": self.keydown,
      696. "left": self.keyleft,
      697. "right": self.keyright,
      698. # "green": self.keyGreen,
      699. # "blue": self.keyBlue,
      700. # "bluelong": self.keyBlueLong,
      701. # "yellow": self.keyYellow,
      702. # "red": self.keyRed
      703. }, -10)
      704. self.onLayoutFinish.append(self.onLayoutFinished)
      705. def onLayoutFinished(self):
      706. self.onLayoutFinish.remove(self.onLayoutFinished)
      707. self["plugins"].setlist(getplugins())
      708. def keyok(self):
      709. self.close(self["plugins"].getcurrentselection()[0])
      710. def keycancel(self):
      711. self.close(None)
      712. def keyup(self):
      713. self["plugins"].up()
      714. def keydown(self):
      715. self["plugins"].down()
      716. def keyleft(self):
      717. self["plugins"].pageup()
      718. def keyright(self):
      719. self["plugins"].pagedown()
      720. class HABridgeChannelConfig(Screen, ConfigListScreen):
      721. skin = '''
      722. <screen name="HABridgeChannelConfig" size="500,720" position="center,center" title="Wähle Sender">
      723. <widget name="channels" itemHeight="60" position="0,0" size="500,500"/>
      724. <widget name="key_green" position="99,640" size="265,80" zPosition="1" font="Regular;22" halign="center" valign="center" foregroundColor="#00ffffff" transparent="0" />
      725. <ePixmap position="59,664" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/HABridge/pic/button_green.png" alphatest="on" />
      726. </screen>'''
      727. def __init__(self, session, bouquet, blacklist):
      728. self.session = session
      729. self.bouquet = bouquet
      730. self.blacklist = blacklist
      731. self.selectedchannels = []
      732. Screen.__init__(self, session)
      733. self["channels"] = ChannelList()
      734. self['key_green'] = Label(_("Übernehmen"))
      735. self["actions"] = ActionMap(['habridgeactions'],
      736. {
      737. "ok": self.keyok,
      738. "cancel": self.keycancel,
      739. "up": self.keyup,
      740. "down": self.keydown,
      741. "left": self.keyleft,
      742. "right": self.keyright,
      743. "green": self.keyGreen,
      744. # "blue": self.keyBlue,
      745. # "bluelong": self.keyBlueLong,
      746. # "yellow": self.keyYellow,
      747. # "red": self.keyRed
      748. }, -10)
      749. self.onLayoutFinish.append(self.onLayoutFinished)
      750. def onLayoutFinished(self):
      751. self.onLayoutFinish.remove(self.onLayoutFinished)
      752. channels = filter(lambda channel: channel[1] not in self.blacklist, getbouquetchannels(self.bouquet))
      753. liste = []
      754. for channel in channels:
      755. liste.append((SimpleChannelEntry(channel[0], channel[1]),))
      756. self["channels"].setlist(liste)
      757. def keyok(self):
      758. cur = self["channels"].getcurrentselection()[0]
      759. if cur:
      760. cur.selected = not cur.selected
      761. self["channels"].updatelistobject(cur)
      762. # self.close([self["channels"].getcurrentselection()])
      763. def keycancel(self):
      764. self.close(None)
      765. def keyGreen(self):
      766. liste = []
      767. for channel in self["channels"].getlist():
      768. if channel[0].selected:
      769. liste.append((channel[0].Name, channel[0].Ref))
      770. self.close(liste)
      771. def keyup(self):
      772. self["channels"].up()
      773. def keydown(self):
      774. self["channels"].down()
      775. def keyleft(self):
      776. self["channels"].pageup()
      777. def keyright(self):
      778. self["channels"].pagedown()
      779. class HABridgePluginConfigScreen(Screen, ConfigListScreen):
      780. skin = '''
      781. <screen name="HABridgePluginConfigScreen" size="500,500" position="center,center" title="Amazon Echo Einstellungen">
      782. <widget name="config" itemHeight="60" position="0,0" size="500,500"/>
      783. </screen>'''
      784. def __init__(self, session):
      785. self.session = session
      786. Screen.__init__(self, session)
      787. self.list = []
      788. self.currentbridgemode = config.plugins.habridge.bridgemode.value
      789. ConfigListScreen.__init__(self, self.list, on_change=self.onkeychange)
      790. self["actions"] = ActionMap(['habridgeactions'],
      791. {
      792. "ok": self.keyok,
      793. "cancel": self.keycancel,
      794. }, -10)
      795. self.onLayoutFinish.append(self.onLayoutFinished)
      796. def onLayoutFinished(self):
      797. self.onLayoutFinish.remove(self.onLayoutFinished)
      798. self.createlist()
      799. def createlist(self):
      800. self.list = []
      801. self.list.append(getConfigListEntry(_("Boxname"), config.plugins.habridge.boxname, False))
      802. self.list.append(getConfigListEntry(_("Pluginstarter HTTP port"), config.plugins.habridge.serverport, False))
      803. self.list.append(
      804. getConfigListEntry(_("HD im Sendernamen beim Aufruf entfernen"), config.plugins.habridge.removehd, False))
      805. self.list.append(getConfigListEntry(_("HA Bridge Mode"), config.plugins.habridge.bridgemode, True))
      806. if config.plugins.habridge.bridgemode.value == "1":
      807. self.list.append(getConfigListEntry(_("HA Bridge IP"), config.plugins.habridge.bridgeip, False))
      808. else:
      809. self.list.append(getConfigListEntry(_("Box IP"), config.plugins.habridge.bridgeip, False))
      810. self.list.append(getConfigListEntry(_("HA Bridge HTTP port"), config.plugins.habridge.port, False))
      811. self["config"].list = self.list
      812. self["config"].l.setList(self.list)
      813. def onkeychange(self):
      814. cur = self["config"].getCurrent()
      815. if cur:
      816. if cur[2]:
      817. self.createlist()
      818. def keyok(self):
      819. for x in self["config"].list:
      820. x[1].save()
      821. if self.currentbridgemode != config.plugins.habridge.bridgemode.value:
      822. restartserver()
      823. self.close()
      824. def keycancel(self):
      825. for x in self["config"].list:
      826. x[1].cancel()
      827. self.close()
      828. def keyup(self):
      829. self["channels"].up()
      830. def keydown(self):
      831. self["channels"].down()
      832. def keyleft(self):
      833. self["channels"].pageup()
      834. def keyright(self):
      835. self["channels"].pagedown()
      836. class HABridgeBouquetConfig(Screen):
      837. skin = '''
      838. <screen name="HABridgeConfig" size="500,500" position="center,center" title="Wähle Bouquet">
      839. <widget name="bouquets" itemHeight="60" position="0,0" size="500,500"/>
      840. </screen>
      841. '''
      842. def __init__(self, session, fullbouquet=False, channels=None):
      843. self.session = session
      844. Screen.__init__(self, session)
      845. self.fullbouquet = fullbouquet
      846. self.blacklist = {}
      847. if channels:
      848. for channel in channels:
      849. self.blacklist[channel[0].sref] = ""
      850. self["bouquets"] = BouquetList()
      851. self["actions"] = ActionMap(['habridgeactions'],
      852. {
      853. "ok": self.keyok,
      854. "cancel": self.keycancel,
      855. "up": self.keyup,
      856. "down": self.keydown,
      857. "left": self.keyleft,
      858. "right": self.keyright,
      859. # "green": self.keyGreen,
      860. # "blue": self.keyBlue,
      861. # "bluelong": self.keyBlueLong,
      862. # "yellow": self.keyYellow,
      863. # "red": self.keyRed
      864. }, -10)
      865. self.onLayoutFinish.append(self.onLayoutFinished)
      866. def onLayoutFinished(self):
      867. self.onLayoutFinish.remove(self.onLayoutFinished)
      868. self["bouquets"].setlist(gettvbouquets())
      869. def keyok(self):
      870. if self.fullbouquet:
      871. channels = getbouquetchannels(self["bouquets"].getcurrentselection()[0])
      872. self.close(filter(lambda channel: channel[1] not in self.blacklist, channels))
      873. else:
      874. self.session.openWithCallback(self.gotchannel, HABridgeChannelConfig,
      875. self["bouquets"].getcurrentselection()[0], self.blacklist)
      876. def gotchannel(self, channels):
      877. if channels:
      878. self.close(channels)
      879. def keycancel(self):
      880. self.close(None)
      881. def keyup(self):
      882. self["bouquets"].up()
      883. def keydown(self):
      884. self["bouquets"].down()
      885. def keyleft(self):
      886. self["bouquets"].pageup()
      887. def keyright(self):
      888. self["bouquets"].pagedown()
      889. def starthabridge(session, **kwargs):
      890. session.open(HABridgeConfig)
      891. def startplugin():
      892. global hasession, callback_pluginname
      893. plugins = getplugindict()
      894. if callback_pluginname in plugins:
      895. plugins[callback_pluginname](session=hasession)
      896. def restartserver():
      897. global servicepid, pluginserver, hasession
      898. pluginserver = None
      899. if config.plugins.habridge.bridgemode.value == "1":
      900. os.system("kill -9 %s" % str(servicepid))
      901. else:
      902. PlServer = ThreadedHTTPServer(('', config.plugins.habridge.serverport.value), PluginServer)
      903. pluginserver = threading.Thread(target=PlServer.serve_forever)
      904. pluginserver.daemon = True
      905. pluginserver.start()
      906. process = subprocess.Popen(
      907. ["nohup", "java", "-jar", "-Dserver.port=%d" % config.plugins.habridge.port.value,
      908. "-Dconfig.file=/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/data/habridge.config",
      909. "/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/ha-bridge-3.5.1.jar", ">",
      910. "/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/habridge-log.txt", "2>&1", "&"],
      911. shell=False)
      912. servicepid = process.pid
      913. def autostart(reason, **kwargs):
      914. global servicepid, pluginserver, hasession, mainthread
      915. if "session" in kwargs:
      916. mainthread = threading.current_thread()
      917. hasession = kwargs["session"]
      918. PlServer = ThreadedHTTPServer(('', config.plugins.habridge.serverport.value), PluginServer)
      919. pluginserver = threading.Thread(target=PlServer.serve_forever)
      920. pluginserver.daemon = True
      921. pluginserver.start()
      922. if config.plugins.habridge.bridgemode.value == "0":
      923. process = subprocess.Popen(
      924. ["nohup", "java", "-jar", "-Dserver.port=%d" % config.plugins.habridge.port.value,
      925. "-Dconfig.file=/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/data/habridge.config",
      926. "/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/ha-bridge-3.5.1.jar", ">",
      927. "/usr/lib/enigma2/python/Plugins/Extensions/HABridge/habridge/habridge-log.txt", "2>&1", "&"],
      928. shell=False)
      929. servicepid = process.pid
      930. def shutdown():
      931. global servicepid, pluginserver
      932. pluginserver = None
      933. if config.plugins.habridge.bridgemode.value == "0":
      934. os.system("kill -9 %s" % str(servicepid))
      935. def Plugins(**kwargs):
      936. return [
      937. PluginDescriptor(where=[PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc=autostart,
      938. wakeupfnc=shutdown),
      939. PluginDescriptor(name=_('Amazon Echo'), description=_('steuere Deinen VU+ Receiver über Amazon Echo...'),
      940. where=[PluginDescriptor.WHERE_PLUGINMENU],
      941. fnc=starthabridge)]
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Woopser ()

    • @mario6: nee, viel mehr folgende wird nicht gehen mit dem Renderer "NextEvents". da ist ein max=7 drin, also maximal 7, wobei ich immer nur höchstens 6 gesehen hab. Fenster vergrößern bringt also nur bedingt was.

      @Woopser : danke, hast gleich ne PN=Konversation, weil das hier sonst zu unübersichtlich wird.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von gordon55 ()

    • @Woopser
      Bitte erst beim Pluginersteller anfragen ob so etwas erwünscht ist.
      Ansonsten bitte weiter per PN
      Skin: [ linearFHD ] - [ iFlatFHD ] - Anpassungen: [ linearFHD ] - [ iFlatFHD ]
    • gordon55 schrieb:

      @mario6: nee, viel mehr folgende wird nicht gehen mit dem Renderer "NextEvents". da ist ein max=7 drin, also maximal 7, wobei ich immer nur höchstens 6 gesehen hab. Fenster vergrößern bringt also nur bedingt was.
      Danke, ja hab grad gesehen das die Anzahl der "NextEvents" von Sender zu Sender varieirt. Von was ist die Anzahl denn abhängig?