3 from urllib import urlretrieve
6 from Screens.Screen import Screen
7 from Screens.MessageBox import MessageBox
9 from Plugins.Plugin import PluginDescriptor
11 from Components.PluginComponent import plugins
12 from Components.Pixmap import Pixmap
13 from Components.ActionMap import ActionMap
14 from Components.Sources.StaticText import StaticText
15 from Components.FileList import FileList
16 from Tools.Directories import fileExists
18 class FPGAUpgrade(Screen):
20 <screen position="center,center" size="560,440" title="FPGA Upgrade" >
21 <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,7" size="140,40" alphatest="blend" />
22 <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,7" size="140,40" alphatest="blend" />
23 <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,7" size="140,40" alphatest="blend" />
24 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,7" size="140,40" alphatest="blend" />
26 <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
27 <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
28 <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
29 <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
31 <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
32 <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
35 def __init__(self, session):
36 Screen.__init__(self, session)
37 self.session = session
39 self["key_red"] = StaticText(_("Close"))
40 self["key_green"] = StaticText(_("Ugrade"))
41 self["key_yellow"] = StaticText(_(" "))
42 self["key_blue"] = StaticText(_("Download"))
43 #self["key_blue"] = StaticText(_(" "))
44 self["status"] = StaticText(_(" "))
45 self["file_list"] = FileList("/", matchingPattern = "^.*")
47 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
49 "red": self.onClickRed,
50 "green": self.onClickGreen,
51 "blue": self.onClickBlue,
52 "back": self.onClickRed,
55 "down": self.onClickDown,
56 "left": self.onClickLeft,
57 "right": self.onClickRight,
59 self.onLayoutFinish.append(self.doLayoutFinish)
63 self.SOURCELIST = self["file_list"]
64 self.STATUS_BAR = self["status"]
65 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
67 self.DEVICE_PATH = '/dev/misc/dp'
68 self.DOWNLOAD_TAR_PATH = '/tmp/'
69 self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
70 self.DOWNLOAD_URL = ''
73 print self.DEVICE_PATH
74 print self.DOWNLOAD_TAR_PATH
75 print self.DOWNLOAD_FILE_NAME
76 print self.DOWNLOAD_URL
78 def doLayoutFinish(self):
82 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
83 os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
87 if fileExists("/proc/stb/info/vumodel"):
88 model = open("/proc/stb/info/vumodel").read().strip()
89 download_uri_header = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf').readline().strip()
90 self.DOWNLOAD_URL = str(download_uri_header) + "vu" + str(model) + "/" + self.DOWNLOAD_FILE_NAME
92 def doHook(self, blockNumber, blockSize, totalSize) :
93 if blockNumber*blockSize > totalSize :
94 self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
96 self.STATUS_BAR.setText(_("Downloading..."))
98 def onCallbackHandler(self, confirmed):
102 def doUpgradeHandler(self, confirmed):
103 if confirmed == False:
110 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
112 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
115 self.ERROR_CODE = FPGA.fpga_upgrade(path, self.DEVICE_PATH)
116 if self.ERROR_CODE > 0:
117 self.ERROR_MSG = FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
118 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _("Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"), MessageBox.TYPE_YESNO, timeout = 10, default = True)
120 print "DEVICE_PATH : ", self.DEVICE_PATH
121 print "FILE_PATH : ", path
123 self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
125 def onClickRed(self):
129 def onClickGreen(self):
130 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
131 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _("Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"), MessageBox.TYPE_YESNO, timeout = 10, default = True)
133 def onClickBlue(self):
136 test_opener = urllib.URLopener()
138 test_opener.open(self.DOWNLOAD_URL)
140 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
144 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
146 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
152 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
153 self.SOURCELIST.moveToIndex(0)
154 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
155 self.SOURCELIST.down()
156 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
158 before_name = self.SOURCELIST.getFilename()
161 if self.SOURCELIST.canDescent() : # isDir
162 self.SOURCELIST.descent()
163 if self.SOURCELIST.getCurrentDirectory():
164 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
170 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
172 def onClickDown(self):
173 self.SOURCELIST.down()
174 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
176 def onClickLeft(self):
177 self.SOURCELIST.pageUp()
178 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
180 def onClickRight(self):
181 self.SOURCELIST.pageDown()
182 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
184 def main(session, **kwargs):
185 session.open(FPGAUpgrade)
187 def Plugins(**kwargs):
188 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)