Merge commit 'origin/bug_503_softwaremanager_catch_feederror'
authoracid-burn <acid-burn@opendreambox.org>
Wed, 14 Apr 2010 08:25:47 +0000 (10:25 +0200)
committeracid-burn <acid-burn@opendreambox.org>
Wed, 14 Apr 2010 08:25:47 +0000 (10:25 +0200)
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py

index e8cf6dc2cf82d5b080e9c153e62e255009b42f1b..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):
@@ -164,6 +169,14 @@ class SoftwareTools(DreamInfoHandler):
                                        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:
@@ -228,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
index 4917855f8498b35364047f33198d31200bc363d1..1e0ed4d58f419056652287b4b47de3d3afd8364a 100755 (executable)
@@ -307,8 +307,8 @@ class PluginManager(Screen, DreamInfoHandler):
                                <convert type="TemplatedMultiContent">
                                {"templates":
                                        {"default": (51,[
-                                                       MultiContentEntryText(pos = (30, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
-                                                       MultiContentEntryText(pos = (30, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
+                                                       MultiContentEntryText(pos = (0, 1), size = (470, 24), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the name
+                                                       MultiContentEntryText(pos = (0, 25), size = (470, 24), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is the description
                                                        MultiContentEntryPixmapAlphaTest(pos = (475, 0), size = (48, 48), png = 5), # index 5 is the status pixmap
                                                        MultiContentEntryPixmapAlphaTest(pos = (0, 49), size = (550, 2), png = 6), # index 6 is the div pixmap
                                                ]),
@@ -405,18 +405,15 @@ class PluginManager(Screen, DreamInfoHandler):
                        if status == 'update':
                                statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Updating software catalog"), '', _("Searching for available updates. Please wait..." ),'', '', statuspng, divpng, None, '' ))
-                               self["list"].style = "default"
-                               self['list'].setList(self.statuslist)
                        elif status == 'sync':
                                statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/upgrade.png"))
                                self.statuslist.append(( _("Package list update"), '', _("Searching for new installed or removed packages. Please wait..." ),'', '', statuspng, divpng, None, '' ))
-                               self["list"].style = "default"
-                               self['list'].setList(self.statuslist)
                        elif status == 'error':
                                statuspng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/SoftwareManager/remove.png"))
                                self.statuslist.append(( _("Error"), '', _("There was an error downloading the packetlist. Please try again." ),'', '', statuspng, divpng, None, '' ))
-                               self["list"].style = "default"
-                               self['list'].setList(self.statuslist)
+                       self["list"].style = "default"
+                       self['list'].setList(self.statuslist)
+
 
        def getUpdateInfos(self):
                self.setState('update')
@@ -432,7 +429,10 @@ class PluginManager(Screen, DreamInfoHandler):
                                self.rebuildList()
                        elif retval is False:
                                self.setState('error')
-                               self["status"].setText(_("No network connection available."))
+                               if iSoftwareTools.NetworkConnectionAvailable:
+                                       self["status"].setText(_("Updatefeed not available."))
+                               else:
+                                       self["status"].setText(_("No network connection available."))
 
        def rebuildList(self, retval = None):
                if self.currentSelectedTag is None: