modify download from network.
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / FPGAUpgrade / plugin.py
1 import os
2
3 from urllib import urlretrieve
4 import urllib
5
6 from Screens.Screen import Screen
7 from Screens.MessageBox import MessageBox
8
9 from Plugins.Plugin import PluginDescriptor
10
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
17
18 class FPGAUpgrade(Screen):
19         skin = """
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" />
25
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" />
30
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" />
33                 </screen>"""
34
35         def __init__(self, session): 
36                 Screen.__init__(self, session)
37                 self.session = session 
38
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 = "^.*")
46
47                 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
48                 {
49                         "red": self.onClickRed,
50                         "green": self.onClickGreen,
51                         "blue": self.onClickBlue,
52                         "back": self.onClickRed,
53                         "ok": self.onClickOk,
54                         "up": self.onClickUp,
55                         "down": self.onClickDown,
56                         "left": self.onClickLeft,
57                         "right": self.onClickRight,
58                 }, -1) 
59                 self.onLayoutFinish.append(self.doLayoutFinish)
60         
61                 self.ERROR_MSG = ''                                                                                          
62                 self.ERROR_CODE = 0                                                                                          
63                 self.SOURCELIST = self["file_list"]                                                                          
64                 self.STATUS_BAR = self["status"]                                                                             
65                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
66
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 = ''
71                 self.doLoadConf()
72
73                 print self.DEVICE_PATH
74                 print self.DOWNLOAD_TAR_PATH
75                 print self.DOWNLOAD_FILE_NAME
76                 print self.DOWNLOAD_URL
77
78         def doLayoutFinish(self):
79                 return  
80
81         def doExit(self):
82                 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
83                         os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
84                 self.close()
85
86         def doLoadConf(self):
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
91
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))
95                 else :
96                         self.STATUS_BAR.setText(_("Downloading..."))
97                 
98         def onCallbackHandler(self, confirmed):                                                                                                                
99                 if confirmed:                                                                                                                    
100                         self.doExit()   
101
102         def doUpgradeHandler(self, confirmed):
103                 if confirmed == False:
104                         return
105
106                 import fpga
107                 FPGA = fpga.Fpga()
108                 path = ''
109                 try:
110                         path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename() 
111                 except:
112                         #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
113                         return
114
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)
119
120                         print "DEVICE_PATH : ", self.DEVICE_PATH
121                         print "FILE_PATH : ", path
122                 else:
123                         self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
124
125         def onClickRed(self):
126                 self.doExit()
127
128         # run upgrade!!
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)
132
133         def onClickBlue(self):
134                 fname = ''
135                 header = ''
136                 test_opener = urllib.URLopener()
137                 try:
138                         test_opener.open(self.DOWNLOAD_URL)
139                 except:
140                         self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
141                         del test_opener
142                         return
143                 try :
144                         fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
145                 except IOError, msg:
146                         self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
147                         del test_opener
148                         return
149                 del test_opener
150
151                 before_name = ''
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:
157                                 break
158                         before_name = self.SOURCELIST.getFilename()
159
160         def onClickOk(self):
161                 if self.SOURCELIST.canDescent() : # isDir                                                                   
162                         self.SOURCELIST.descent()                                                                              
163                         if self.SOURCELIST.getCurrentDirectory():
164                                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
165                 else:                                                                                                      
166                         self.onClickGreen()
167
168         def onClickUp(self):
169                 self.SOURCELIST.up()
170                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
171
172         def onClickDown(self):
173                 self.SOURCELIST.down()
174                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
175
176         def onClickLeft(self):
177                 self.SOURCELIST.pageUp()
178                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
179
180         def onClickRight(self):
181                 self.SOURCELIST.pageDown()
182                 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
183
184 def main(session, **kwargs):
185         session.open(FPGAUpgrade)
186                                                            
187 def Plugins(**kwargs):            
188         return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
189