from Plugins.Plugin import PluginDescriptor from Components.Scanner import scanDevice from Screens.InfoBar import InfoBar from os import access, F_OK, R_OK def execute(option): print "execute", option if option is None: return (_, scanner, files, session) = option scanner.open(files, session) def mountpoint_choosen(option): if option is None: return from Screens.ChoiceBox import ChoiceBox print "scanning", option (description, mountpoint, session) = option res = scanDevice(mountpoint) list = [ (r.description, r, res[r], session) for r in res ] if list == [ ]: from Screens.MessageBox import MessageBox if access(mountpoint, F_OK|R_OK): session.open(MessageBox, "No displayable files on this medium found!", MessageBox.TYPE_ERROR) else: print "ignore", mountpoint, "because its not accessible" return session.openWithCallback(execute, ChoiceBox, title = "The following files were found...", list = list) def scan(session): from Screens.ChoiceBox import ChoiceBox from Components.Harddisk import harddiskmanager parts = [ (r.description, r.mountpoint, session) for r in harddiskmanager.getMountedPartitions(onlyhotplug = False)] if len(parts): session.openWithCallback(mountpoint_choosen, ChoiceBox, title = _("Please Select Medium to be Scanned"), list = parts) def main(session, **kwargs): scan(session) def menuEntry(*args): mountpoint_choosen(args) from Components.Harddisk import harddiskmanager def menuHook(menuid): if menuid != "mainmenu": return [ ] from Tools.BoundFunction import boundFunction return [(("%s (files)") % r.description, boundFunction(menuEntry, r.description, r.mountpoint), "hotplug_%s" % r.mountpoint, None) for r in harddiskmanager.getMountedPartitions(onlyhotplug = True)] global_session = None def partitionListChanged(action, device): if InfoBar.instance: if InfoBar.instance.execing: if action == 'add' and device.is_hotplug: print "mountpoint", device.mountpoint print "description", device.description print "force_mounted", device.force_mounted mountpoint_choosen((device.description, device.mountpoint, global_session)) else: print "main infobar is not execing... so we ignore hotplug event!" else: print "hotplug event.. but no infobar" def sessionstart(reason, session): global global_session global_session = session def autostart(reason, **kwargs): global global_session if reason == 0: harddiskmanager.on_partition_list_change.append(partitionListChanged) elif reason == 1: harddiskmanager.on_partition_list_change.remove(partitionListChanged) global_session = None def Plugins(**kwargs): return [ PluginDescriptor(name="MediaScanner", description="Scan Files...", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main), # PluginDescriptor(where = PluginDescriptor.WHERE_MENU, fnc=menuHook), PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart), PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart) ]