add support for channellogos (picons)
[enigma2.git] / lib / python / Components / Renderer / Picon.py
diff --git a/lib/python/Components/Renderer/Picon.py b/lib/python/Components/Renderer/Picon.py
new file mode 100644 (file)
index 0000000..117e08d
--- /dev/null
@@ -0,0 +1,71 @@
+##
+## Picon renderer by Gruffy .. some speedups by Ghost
+##
+from Renderer import Renderer
+from enigma import ePixmap
+from Tools.Directories import pathExists, fileExists, SCOPE_SKIN_IMAGE, resolveFilename
+
+from time import time
+
+class Picon(Renderer):
+       visible = True
+       pngname = ""
+       nameCache = { }
+       searchPaths = ['/etc/picon/',
+                               '/media/cf/picon/',
+                               '/media/usb/picon/',
+                               '/media/hdd/picon/']
+
+       def __init__(self):
+               Renderer.__init__(self)
+
+       GUI_WIDGET = ePixmap
+
+       def changed(self, what):
+               if self.instance:
+                       pngname = ""
+                       if what[0] != self.CHANGED_CLEAR:
+                               sname = self.source.text
+                               pngname = self.nameCache.get(sname, "")
+                               if pngname == "":
+                                       pngname = self.findPicon(self.source.text)
+                                       if pngname == "":
+                                               self.nameCache[sname] = pngname
+                                       else:
+                                               self.nameCache[sname] = pngname
+                       if pngname == "": # no picon for service found
+                               pngname = self.nameCache.get("default", "")
+                               if pngname == "": # no default yet in cache..
+                                       pngname = self.findPicon("picon_default")
+                                       self.nameCache[sname] = pngname
+                                       if pngname == "": # Fallback to enigma2 logo
+                                               pngname = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/enigma2.png")
+                                       self.nameCache["default"] = pngname
+                       if pngname != "":
+                               if self.pngname != pngname:
+                                       self.instance.setPixmapFromFile(pngname)
+                                       if not self.visible:
+                                               self.instance.show()
+                                               self.visible=True
+                       elif self.visible:
+                               self.instance.hide()
+                               self.visible = False
+                       self.pngname = pngname
+
+       def findPicon(self, serviceName):
+               for path in self.searchPaths:
+                       if pathExists(path):
+                               png = self.findFile(path, serviceName)
+                               if png != "":
+                                       return png
+               return ""
+
+       def findFile(self, path, serviceName):
+               pngname = path + serviceName + ".png"
+               if fileExists(pngname):
+                       return pngname
+               else:
+                       for i in range(len(serviceName), 1, -1):
+                               if fileExists(path + serviceName[0:i] + ".png"):
+                                       return path + serviceName[0:i] + ".png"
+                       return ""