Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
[enigma2.git] / lib / python / Plugins / Extensions / MediaScanner / plugin.py
1 from Plugins.Plugin import PluginDescriptor
2 from Components.Scanner import scanDevice
3 from Screens.InfoBar import InfoBar
4 from os import access, F_OK, R_OK
5
6 def execute(option):
7         print "execute", option
8         if option is None:
9                 return
10
11         (_, scanner, files, session) = option
12         scanner.open(files, session)
13
14 def mountpoint_choosen(option):
15         if option is None:
16                 return
17
18         from Screens.ChoiceBox import ChoiceBox
19
20         print "scanning", option
21         (description, mountpoint, session) = option
22         res = scanDevice(mountpoint)
23
24         list = [ (r.description, r, res[r], session) for r in res ]
25
26         if list == [ ]:
27                 from Screens.MessageBox import MessageBox
28                 if access(mountpoint, F_OK|R_OK):
29                         session.open(MessageBox, "No displayable files on this medium found!", MessageBox.TYPE_ERROR)
30                 else:
31                         print "ignore", mountpoint, "because its not accessible"
32                 return
33
34         session.openWithCallback(execute, ChoiceBox, 
35                 title = "The following files were found...",
36                 list = list)
37
38 def scan(session):
39         from Screens.ChoiceBox import ChoiceBox
40
41         from Components.Harddisk import harddiskmanager
42
43         parts = [ (r.description, r.mountpoint, session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)]
44         if len(parts):
45                 session.openWithCallback(mountpoint_choosen, ChoiceBox, title = _("Please Select Medium to be Scanned"), list = parts)
46
47 def main(session, **kwargs):
48         scan(session)
49
50 def menuEntry(*args):
51         mountpoint_choosen(args)
52
53 from Components.Harddisk import harddiskmanager
54
55 def menuHook(menuid):
56         if menuid != "mainmenu": 
57                 return [ ]
58
59         from Tools.BoundFunction import boundFunction
60         return [(("%s (files)") % r.description, boundFunction(menuEntry, r.description, r.mountpoint), "hotplug_%s" % r.mountpoint, None) for r in harddiskmanager.getMountedPartitions(onlyhotplug = True)]
61
62 global_session = None
63
64 def partitionListChanged(action, device):
65         if InfoBar.instance:
66                 if InfoBar.instance.execing:
67                         if action == 'add' and device.is_hotplug:
68                                 print "mountpoint", device.mountpoint
69                                 print "description", device.description
70                                 print "force_mounted", device.force_mounted
71                                 mountpoint_choosen((device.description, device.mountpoint, global_session))
72                 else:
73                         print "main infobar is not execing... so we ignore hotplug event!"
74         else:
75                         print "hotplug event.. but no infobar"
76
77 def sessionstart(reason, session):
78         global global_session
79         global_session = session
80
81 def autostart(reason, **kwargs):
82         global global_session
83         if reason == 0:
84                 harddiskmanager.on_partition_list_change.append(partitionListChanged)
85         elif reason == 1:
86                 harddiskmanager.on_partition_list_change.remove(partitionListChanged)
87                 global_session = None
88
89 def Plugins(**kwargs):
90         return [
91                 PluginDescriptor(name="MediaScanner", description="Scan Files...", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
92 #               PluginDescriptor(where = PluginDescriptor.WHERE_MENU, fnc=menuHook),
93                 PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart),
94                 PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)
95                 ]