more complete error message
[enigma2.git] / lib / python / Components / ServiceScan.py
1 from enigma import eComponentScan
2
3 class ServiceScan:
4         
5         Idle = 1
6         Running = 2
7         Done = 3
8         Error = 4
9         
10         Errors = { 
11                 0: "error starting scanning",
12                 1: "error while scanning",
13                 2: "no resource manager",
14                 3: "no channel list"
15                 }
16         
17         def scanStatusChanged(self):
18                 if self.state == self.Running:
19                         self.progressbar.setValue(self.scan.getProgress())
20                         if self.scan.isDone():
21                                 errcode = self.scan.getError()
22                                 
23                                 if errcode == 0:
24                                         self.state = self.Done
25                                 else:
26                                         self.state = self.Error
27                                         self.errorcode = errcode
28                         else:
29                                 self.text.setText(_("scan in progress - %d %% done!\n%d services found!") % (self.scan.getProgress(), self.foundServices + self.scan.getNumServices()))
30                 
31                 if self.state == self.Done:
32                         if self.scan.getNumServices() == 1:
33                                 self.text.setText(_("scan done!\nOne service found!"))
34                         elif self.scan.getNumServices() == 0:
35                                 self.text.setText(_("scan done!\nNo service found!"))
36                         else:
37                                 self.text.setText(_("scan done!\n%d services found!") % (self.foundServices + self.scan.getNumServices()))
38                 
39                 if self.state == self.Error:
40                         self.text.setText(_("ERROR - failed to scan (%s)!") % (self.Errors[self.errorcode]) )
41                         
42                 if self.state == self.Done or self.state == self.Error:
43                         if self.run != len(self.scanList) - 1:
44                                 self.foundServices += self.scan.getNumServices()
45                                 self.execEnd()
46                                 self.run += 1
47                                 self.execBegin()
48         
49         def __init__(self, progressbar, text, servicelist, passNumber, scanList):
50                 self.foundServices = 0
51                 self.progressbar = progressbar
52                 self.text = text
53                 self.servicelist = servicelist
54                 self.passNumber = passNumber
55                 self.scanList = scanList
56                 self.run = 0
57                 
58         def doRun(self):
59                 self.scan = eComponentScan()
60                 
61                 self.feid = self.scanList[self.run]["feid"]
62                 self.flags = self.scanList[self.run]["flags"]
63                 self.state = self.Idle
64                 self.scanStatusChanged()
65                 
66                 for x in self.scanList[self.run]["transponders"]:
67                         self.scan.addInitial(x)
68
69         def updatePass(self):
70                 size = len(self.scanList)
71                 if size > 1:
72                         self.passNumber.setText(_("pass") + " " + str(self.run + 1) + "/" + str(size) + " (" + _("Tuner") + " " + str(self.scanList[self.run]["feid"]) + ")")
73                 
74         def execBegin(self):
75                 self.doRun()
76                 self.updatePass()
77                 self.scan.statusChanged.get().append(self.scanStatusChanged)
78                 self.scan.newService.get().append(self.newService)
79                 self.servicelist.clear()
80                 self.state = self.Running
81                 err = self.scan.start(self.feid, self.flags)
82                 if err:
83                         self.state = self.Error
84                         self.errorcode = 0
85
86                 self.scanStatusChanged()
87         
88         def execEnd(self):
89                 self.scan.statusChanged.get().remove(self.scanStatusChanged)
90                 self.scan.newService.get().remove(self.newService)
91                 if not self.isDone():
92                         print "*** warning *** scan was not finished!"
93                 
94                 del self.scan
95
96         def isDone(self):
97                 return self.state == self.Done or self.state == self.Error
98
99         def newService(self):
100                 newServiceName = self.scan.getLastServiceName()
101                 self.servicelist.addItem(newServiceName)
102
103         def destroy(self):
104                 pass