bug fix for FPGAUpgrade.
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / FPGAUpgrade / plugin.py
1 from urllib import urlretrieve
2 import urllib
3
4 from Screens.Screen import Screen
5 from Screens.MessageBox import MessageBox
6
7 from Plugins.Plugin import PluginDescriptor
8
9 from Components.PluginComponent import plugins
10 from Components.Pixmap import Pixmap
11 from Components.ActionMap import ActionMap
12 from Components.Sources.StaticText import StaticText
13 from Components.FileList import FileList 
14
15 class FPGAUpgrade(Screen):
16         skin = """
17                 <screen position="center,center" size="560,440" title="FPGA Upgrade" >
18                         <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,7" size="140,40" alphatest="blend" />
19                         <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,7" size="140,40" alphatest="blend" />
20                         <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,7" size="140,40" alphatest="blend" />
21                         <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,7" size="140,40" alphatest="blend" />
22
23                         <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
24                         <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
25                         <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
26                         <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
27
28                         <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
29                         <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
30                 </screen>"""
31
32         def __init__(self, session): 
33                 Screen.__init__(self, session)
34                 self.session = session 
35
36                 self["key_red"] = StaticText(_("Close"))
37                 self["key_green"] = StaticText(_("Ugrade"))
38                 self["key_yellow"] = StaticText(_(" "))
39                 self["key_blue"] = StaticText(_("Download"))
40                 #self["key_blue"] = StaticText(_(" "))
41                 self["status"] = StaticText(_(" "))
42                 self["file_list"] = FileList("/", matchingPattern = "^.*")
43
44                 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
45                 {
46                         "red": self.onClickRed,
47                         "green": self.onClickGreen,
48                         "blue": self.onClickBlue,
49                         "back": self.onClickRed,
50                         "ok": self.onClickOk,
51                         "up": self.onClickUp,
52                         "down": self.onClickDown,
53                         "left": self.onClickLeft,
54                         "right": self.onClickRight,
55                 }, -1) 
56                 self.onLayoutFinish.append(self.doLayoutFinish)
57         
58                 self.ERROR_MSG = ''                                                                                          
59                 self.ERROR_CODE = 0                                                                                          
60                 self.SOURCELIST = self["file_list"]                                                                          
61                 self.STATUS_BAR = self["status"]                                                                             
62                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
63
64                 self.DEVICE_PATH = '/dev/misc/dp'                                                                                       
65                 self.DOWNLOAD_TAR_PATH = '/tmp/'                                                                             
66                 self.DOWNLOAD_FILE_NAME = 'fpga.vuplus'                                                                       
67                 self.DOWNLOAD_URL = ''
68                 self.doLoadConf()
69
70                 print self.DEVICE_PATH
71                 print self.DOWNLOAD_TAR_PATH
72                 print self.DOWNLOAD_FILE_NAME
73                 print self.DOWNLOAD_URL
74
75         def doLayoutFinish(self):
76                 return  
77
78         def doExit(self):
79                 self.close()
80
81         def doLoadConf(self):
82                 import os
83                 f = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf')
84                 self.DOWNLOAD_URL = str(f.readline())
85
86         def doHook(self, blockNumber, blockSize, totalSize) :
87                 if blockNumber*blockSize > totalSize :
88                         self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
89                 else :
90                         self.STATUS_BAR.setText(_("Downloading..."))
91                 
92         def onCallbackHandler(self, confirmed):                                                                                                                
93                 if confirmed:                                                                                                                    
94                         self.doExit()   
95
96         def onClickRed(self):
97                 self.doExit()
98
99         # run upgrade!!
100         def onClickGreen(self):
101                 import fpga
102
103                 FPGA = fpga.Fpga()
104                 
105                 path = ''
106                 try:
107                         path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename() 
108                 except:
109                         #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
110                         return
111
112                 self.ERROR_CODE = FPGA.fpga_upgrade(path, self.DEVICE_PATH)
113                 if self.ERROR_CODE > 0:
114                         self.ERROR_MSG = FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
115                         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)
116
117                         print "DEVICE_PATH : ", self.DEVICE_PATH
118                         print "FILE_PATH : ", path
119                 else:
120                         self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
121
122         def onClickBlue(self):
123                 fname = ''
124                 header = ''
125                 test_opener = urllib.URLopener()
126                 try:
127                         test_opener.open(self.DOWNLOAD_URL)
128                 except:
129                         self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
130                         del test_opener
131                         return
132                 try :
133                         fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
134                 except IOError, msg:
135                         self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
136                         del test_opener
137                         return
138                 del test_opener
139
140                 before_name = ''
141                 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
142                 self.SOURCELIST.moveToIndex(0)
143                 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
144                         self.SOURCELIST.down()
145                         if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
146                                 break
147                         before_name = self.SOURCELIST.getFilename()
148
149         def onClickOk(self):
150                 if self.SOURCELIST.canDescent() : # isDir                                                                   
151                         self.SOURCELIST.descent()                                                                              
152                         if self.SOURCELIST.getCurrentDirectory():
153                                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
154                 else:                                                                                                      
155                         self.onClickGreen()
156
157         def onClickUp(self):
158                 self.SOURCELIST.up()
159                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
160
161         def onClickDown(self):
162                 self.SOURCELIST.down()
163                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
164
165         def onClickLeft(self):
166                 self.SOURCELIST.pageUp()
167                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
168
169         def onClickRight(self):
170                 self.SOURCELIST.pageDown()
171                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
172
173 def main(session, **kwargs):
174         session.open(FPGAUpgrade)
175                                                            
176 def Plugins(**kwargs):            
177         return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
178