add DefaultServicesScanner plugin to do automatic services scans and build a lamedb...
[enigma2.git] / lib / python / Plugins / SystemPlugins / DefaultServicesScanner / plugin.py
1 #from Components.ActionMap import ActionMap, NumberActionMap
2 #from Components.Input import Input
3 #from Components.Ipkg import IpkgComponent
4 #from Components.Label import Label
5 #from Components.MenuList import MenuList
6 #from Components.Slider import Slider
7 from Components.NimManager import nimmanager
8 from Plugins.Plugin import PluginDescriptor
9 from Screens.ScanSetup import ScanSetup
10 from Screens.ServiceScan import ServiceScan
11 from Screens.MessageBox import MessageBox
12 from Tools.Directories import resolveFilename, SCOPE_CONFIG
13 #from Screens.Screen import Screen
14 from enigma import eTimer, eDVBDB
15 import os
16
17 class DefaultServiceScan(ServiceScan):
18         skin = """
19                 <screen position="150,115" size="420,390" title="Service Scan">
20                 <widget source="FrontendInfo" render="Pixmap" pixmap="skin_default/icons/scan-s.png" position="5,5" size="64,64" transparent="1" alphatest="on">
21                         <convert type="FrontendInfo">TYPE</convert>
22                         <convert type="ValueRange">0,0</convert>
23                         <convert type="ConditionalShowHide" />
24                 </widget>
25                 <widget source="FrontendInfo" render="Pixmap" pixmap="skin_default/icons/scan-c.png" position="5,5" size="64,64" transparent="1" alphatest="on">
26                         <convert type="FrontendInfo">TYPE</convert>
27                         <convert type="ValueRange">1,1</convert>
28                         <convert type="ConditionalShowHide" />
29                 </widget>
30                 <widget source="FrontendInfo" render="Pixmap" pixmap="skin_default/icons/scan-t.png" position="5,5" size="64,64" transparent="1" alphatest="on">
31                         <convert type="FrontendInfo">TYPE</convert>
32                         <convert type="ValueRange">2,2</convert>
33                         <convert type="ConditionalShowHide" />
34                 </widget>
35                 <widget name="network" position="80,15" size="330,20" font="Regular;20" />
36                 <widget name="transponder" position="80,40" size="330,20" font="Regular;20" />
37                 <widget name="scan_state" position="10,80" zPosition="2" size="400,20" font="Regular;18" />
38                 <widget name="pass" position="10,80" size="400,20" font="Regular;18" />
39                 <widget name="scan_progress" position="10,105" size="400,15" pixmap="skin_default/progress_big.png" borderWidth="2" borderColor="#cccccc" />
40                 <widget name="servicelist" position="10,135" size="400,265" selectionDisabled="1" />
41         </screen>"""
42                 
43         def __init__(self, session, scanList):
44                 os.system("rm " + resolveFilename(SCOPE_CONFIG) + "/lamedb")
45                 db = eDVBDB.getInstance()
46                 db.reloadServicelist()
47                 ServiceScan.__init__(self, session, scanList)
48                 self.timer = eTimer()
49                 self.timer.callback.append(self.ok)
50                 self.timer.start(1000)
51
52 class DefaultServicesScannerPlugin(ScanSetup):
53         skin = """
54                 <screen position="100,115" size="520,390" title="Service scan">
55                         <widget name="config" position="10,10" size="500,350" scrollbarMode="showOnDemand" />
56                         <widget name="introduction" position="10,365" size="500,25" font="Regular;20" halign="center" />
57                 </screen>"""
58                 
59         def __init__(self, session, args = None):
60                 ScanSetup.__init__(self, session)
61                 # backup lamedb
62                 os.system("cp " + resolveFilename(SCOPE_CONFIG) + "/lamedb " + resolveFilename(SCOPE_CONFIG) + "/lamedb.backup")
63                 self.scan_type.value = "multisat"
64                 self.createSetup()
65                 self.scanIndex = 0
66                 self.selectSat(0)
67                 self.onFirstExecBegin.append(self.runScan)
68                 
69         def selectSat(self, index):
70                 for satindex in range(len(self.multiscanlist)):
71                         if satindex != index:
72                                 self.multiscanlist[satindex][1].value = False
73                         else:
74                                 self.multiscanlist[satindex][1].value = True
75                                 
76         def runScan(self):
77                 print "runScan"
78                 self.keyGo()
79
80         def startScan(self, tlist, flags, feid):
81                 print "startScan"
82                 if len(tlist):
83                         # flags |= eComponentScan.scanSearchBAT
84                         self.session.openWithCallback(self.scanFinished, DefaultServiceScan, [{"transponders": tlist, "feid": feid, "flags": flags}])
85                 else:
86                         self.session.openWithCallback(self.scanFinished, MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
87
88         def scanFinished(self, value = None):
89                 print "finished"
90                 db = eDVBDB.getInstance()
91                 satint = self.multiscanlist[self.scanIndex][0]
92                 print "scanned sat:", satint
93                 db.saveServicelist("/tmp/lamedb." + str(satint))
94                 file = open("/tmp/sat" + str(satint) + ".info", "w")
95                 xml = """<default>
96         <prerequisites>
97                 <tag type="services" />
98                 <bcastsystem type="DVB-S" />
99                 <satellite type="%d" />
100         </prerequisites>
101         
102         <info>
103                 <author>%s</author>
104                 <name>%s</name>
105         </info>
106
107         <files type="directories">
108                 <file type="services" name="lamedb.%d">
109                 </file>
110         </files>
111 </default>""" % (satint, "Dream", nimmanager.getSatDescription(satint), satint)
112                 file.write(xml)
113                 file.close()
114                 
115                 self.scanIndex += 1
116                 if self.scanIndex + 1 >= len(self.multiscanlist):
117                         print "no more sats to scan"
118                         os.system("cp " + resolveFilename(SCOPE_CONFIG) + "/lamedb.backup " + resolveFilename(SCOPE_CONFIG) + "/lamedb")
119                         db.reloadServicelist()
120                         self.close()
121                 else:
122                         self.selectSat(self.scanIndex)
123                         self.keyGo()
124
125 def DefaultServicesScannerMain(session, **kwargs):
126         session.open(DefaultServicesScannerPlugin)
127
128 def Plugins(**kwargs):
129         return PluginDescriptor(name="Default Services Scanner", description=_("Scans default lamedbs sorted by satellite with a connected dish positioner"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DefaultServicesScannerMain)