small cleanup
[enigma2.git] / lib / python / Components / Renderer / Picon.py
1 ##
2 ## Picon renderer by Gruffy .. some speedups by Ghost
3 ##
4 from Renderer import Renderer
5 from enigma import ePixmap
6 from Tools.Directories import pathExists, fileExists, SCOPE_SKIN_IMAGE, resolveFilename
7
8 class Picon(Renderer):
9         pngname = ""
10         nameCache = { }
11         searchPaths = ['/etc/picon/',
12                                 '/media/cf/picon/',
13                                 '/media/usb/picon/',
14                                 '/media/hdd/picon/']
15
16         def __init__(self):
17                 Renderer.__init__(self)
18
19         GUI_WIDGET = ePixmap
20
21         def changed(self, what):
22                 if self.instance:
23                         pngname = ""
24                         if what[0] != self.CHANGED_CLEAR:
25                                 sname = self.source.text
26                                 pngname = self.nameCache.get(sname, "")
27                                 if pngname == "":
28                                         pngname = self.findPicon(self.source.text)
29                                         if pngname == "":
30                                                 self.nameCache[sname] = pngname
31                                         else:
32                                                 self.nameCache[sname] = pngname
33                         if pngname == "": # no picon for service found
34                                 pngname = self.nameCache.get("default", "")
35                                 if pngname == "": # no default yet in cache..
36                                         pngname = self.findPicon("picon_default")
37                                         self.nameCache[sname] = pngname
38                                         if pngname == "": # Fallback to enigma2 logo
39                                                 pngname = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/enigma2.png")
40                                         self.nameCache["default"] = pngname
41                         if self.pngname != pngname:
42                                 self.instance.setPixmapFromFile(pngname)
43                                 self.pngname = pngname
44
45         def findPicon(self, serviceName):
46                 for path in self.searchPaths:
47                         if pathExists(path):
48                                 png = self.findFile(path, serviceName)
49                                 if png != "":
50                                         return png
51                 return ""
52
53         def findFile(self, path, serviceName):
54                 pngname = path + serviceName + ".png"
55                 if fileExists(pngname):
56                         return pngname
57                 else:
58                         for i in range(len(serviceName), 1, -1):
59                                 if fileExists(path + serviceName[0:i] + ".png"):
60                                         return path + serviceName[0:i] + ".png"
61                         return ""