1 from enigma import eConsoleAppContainer
20 def __init__(self, ipkg = '/usr/bin/ipkg'):
23 self.cmd = eConsoleAppContainer()
24 self.cmd.appClosed.get().append(self.cmdFinished)
25 self.cmd.dataAvail.get().append(self.cmdData)
28 self.callbackList = []
29 self.setCurrentCommand()
31 def setCurrentCommand(self, command = None):
32 self.currentCommand = command
34 def runCmd(self, cmd):
35 print "executing", self.ipkg, cmd
36 self.cmd.execute(self.ipkg + " " + cmd)
38 def cmdFetchList(self, installed_only = False):
41 self.runCmd("list_installed")
44 self.setCurrentCommand(self.CMD_LIST)
46 def cmdUpgrade(self, test_only = False):
50 self.runCmd("upgrade" + append)
51 self.setCurrentCommand(self.CMD_UPGRADE)
55 self.setCurrentCommand(self.CMD_UPDATE)
57 def cmdFinished(self, retval):
58 self.callCallbacks(self.EVENT_DONE)
60 def cmdData(self, data):
62 if self.cache is None:
68 splitcache = self.cache.split('\n')
69 if self.cache[-1] == '\n':
70 iteration = splitcache
73 iteration = splitcache[:-1]
74 self.cache = splitcache[-1]
75 for mydata in iteration:
77 self.parseLine(mydata)
79 def parseLine(self, data):
80 if self.currentCommand == self.CMD_LIST:
81 item = data.split(' - ', 2)
82 self.fetchedList.append(item)
83 self.callCallbacks(self.EVENT_LISTITEM, item)
85 if data.find('Downloading') == 0:
86 self.callCallbacks(self.EVENT_DOWNLOAD, data.split(' ', 5)[1].strip())
87 elif data.find('Upgrading') == 0:
88 self.callCallbacks(self.EVENT_UPGRADE, data.split(' ', 1)[1].split(' ')[0])
89 elif data.find('Installing') == 0:
90 self.callCallbacks(self.EVENT_INSTALL, data.split(' ', 1)[1].split(' ')[0])
91 elif data.find('Configuring') == 0:
92 self.callCallbacks(self.EVENT_CONFIGURING, data.split(' ', 1)[1].split(' ')[0])
93 elif data.find('An error occurred') == 0:
94 self.callCallbacks(self.EVENT_ERROR, None)
95 elif data.find('Failed to download') == 0:
96 self.callCallbacks(self.EVENT_ERROR, None)
97 elif data.find('ipkg_download: ERROR:') == 0:
98 self.callCallbacks(self.EVENT_ERROR, None)
99 def callCallbacks(self, event, param = None):
100 for callback in self.callbackList:
101 callback(event, param)
103 def addCallback(self, callback):
104 self.callbackList.append(callback)
106 def getFetchedList(self):
107 return self.fetchedList