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