Softwaremanager: *add missing define. refs #503
[enigma2.git] / lib / python / Plugins / SystemPlugins / SoftwareManager / SoftwareTools.py
index 4e7591ef9fd9fabbd9086f865d0c2ee8c2549fd1..d4653cca5c8333493490b52ef81c79bee36b4819 100755 (executable)
@@ -7,6 +7,7 @@ from Components.Sources.List import List
 from Components.Ipkg import IpkgComponent
 from Components.Network import iNetwork
 from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_METADIR
+from Tools.HardwareInfo import HardwareInfo
 
 from time import time
 
@@ -29,6 +30,7 @@ class SoftwareTools(DreamInfoHandler):
                self.language = language.getLanguage()[:2] # getLanguage returns e.g. "fi_FI" for "language_country"
                DreamInfoHandler.__init__(self, self.statusCallback, blocking = False, neededTag = 'ALL_TAGS', neededFlag = self.ImageVersion, language = self.language)
                self.directory = resolveFilename(SCOPE_METADIR)
+               self.hardware_info = HardwareInfo()
                self.list = List([])
                self.NotifierCallback = None
                self.Console = Console()
@@ -78,9 +80,12 @@ class SoftwareTools(DreamInfoHandler):
        def ipkgCallback(self, event, param):
                if event == IpkgComponent.EVENT_ERROR:
                        SoftwareTools.list_updating = False
+                       if self.NotifierCallback is not None:
+                               self.NotifierCallback(False)
                elif event == IpkgComponent.EVENT_DONE:
                        if SoftwareTools.list_updating:
                                self.startIpkgListAvailable()
+               #print event, "-", param                
                pass
 
        def startIpkgListAvailable(self, callback = None):
@@ -94,14 +99,17 @@ class SoftwareTools(DreamInfoHandler):
 
        def IpkgListAvailableCB(self, result, retval, extra_args = None):
                (callback) = extra_args
-               if len(result):
+               if result:
                        if SoftwareTools.list_updating:
                                SoftwareTools.available_packetlist = []
                                for x in result.splitlines():
-                                       split = x.split(' - ')
-                                       name = split[0].strip()
+                                       tokens = x.split(' - ')
+                                       name = tokens[0].strip()
                                        if not any(name.endswith(x) for x in self.unwanted_extensions):
-                                               SoftwareTools.available_packetlist.append([name, split[1].strip(), split[2].strip()])
+                                               l = len(tokens)
+                                               version = l > 1 and tokens[1].strip() or ""
+                                               descr = l > 2 and tokens[2].strip() or ""
+                                               SoftwareTools.available_packetlist.append([name, version, descr])
                                if callback is None:
                                        self.startInstallMetaPackage()
                                else:
@@ -126,7 +134,7 @@ class SoftwareTools(DreamInfoHandler):
 
        def InstallMetaPackageCB(self, result, retval, extra_args = None):
                (callback) = extra_args
-               if len(result):
+               if result:
                        self.fillPackagesIndexList()
                        if callback is None:
                                self.startIpkgListInstalled()
@@ -152,13 +160,23 @@ class SoftwareTools(DreamInfoHandler):
 
        def IpkgListInstalledCB(self, result, retval, extra_args = None):
                (callback) = extra_args
-               if len(result):
+               if result:
                        SoftwareTools.installed_packetlist = {}
                        for x in result.splitlines():
-                               split = x.split(' - ')
-                               name = split[0].strip()
+                               tokens = x.split(' - ')
+                               name = tokens[0].strip()
                                if not any(name.endswith(x) for x in self.unwanted_extensions):
-                                       SoftwareTools.installed_packetlist[name] = split[1].strip()
+                                       l = len(tokens)
+                                       version = l > 1 and tokens[1].strip() or ""
+                                       SoftwareTools.installed_packetlist[name] = version
+                       for package in self.packagesIndexlist[:]:
+                               if not self.verifyPrerequisites(package[0]["prerequisites"]):
+                                       self.packagesIndexlist.remove(package)
+                       for package in self.packagesIndexlist[:]:
+                               attributes = package[0]["attributes"]
+                               if attributes.has_key("packagetype"):
+                                       if attributes["packagetype"] == "internal":
+                                               self.packagesIndexlist.remove(package)
                        if callback is None:
                                self.countUpdates()
                        else:
@@ -203,7 +221,7 @@ class SoftwareTools(DreamInfoHandler):
 
        def IpkgUpdateCB(self, result, retval, extra_args = None):
                (callback) = extra_args
-               if len(result):
+               if result:
                        if self.Console:
                                if len(self.Console.appContainers) == 0:
                                        if callback is not None:
@@ -223,4 +241,14 @@ class SoftwareTools(DreamInfoHandler):
                                for name in self.UpdateConsole.appContainers.keys():
                                        self.UpdateConsole.kill(name)
 
+       def verifyPrerequisites(self, prerequisites):
+               if prerequisites.has_key("hardware"):
+                       hardware_found = False
+                       for hardware in prerequisites["hardware"]:
+                               if hardware == self.hardware_info.device_name:
+                                       hardware_found = True
+                       if not hardware_found:
+                               return False
+               return True
+
 iSoftwareTools = SoftwareTools()
\ No newline at end of file