Call the startup and shutdown methods for the device plugins in ebook-device

This commit is contained in:
Kovid Goyal 2012-08-09 09:36:49 +05:30
parent 6d9a72022d
commit 5904626f3c
2 changed files with 19 additions and 2 deletions

View File

@ -503,14 +503,16 @@ class DevicePlugin(Plugin):
Called when calibre is is starting the device. Do any initialization
required. Note that multiple instances of the class can be instantiated,
and thus __init__ can be called multiple times, but only one instance
will have this method called.
will have this method called. This method is called on the device
thread, not the GUI thread.
'''
pass
def shutdown(self):
'''
Called when calibre is shutting down, either for good or in preparation
to restart. Do any cleanup required.
to restart. Do any cleanup required. This method is called on the
device thread, not the GUI thread.
'''
pass

View File

@ -174,6 +174,13 @@ def ls(dev, path, term, recurse=False, color=False, human_readable_size=False, l
output.close()
return listing
def shutdown_plugins():
for d in device_plugins():
try:
d.shutdown()
except:
pass
def main():
term = TerminalController()
cols = term.COLS
@ -201,6 +208,10 @@ def main():
scanner.scan()
connected_devices = []
for d in device_plugins():
try:
d.startup()
except:
print ('Startup failed for device plugin: %s'%d)
ok, det = scanner.is_device_connected(d)
if ok:
dev = d
@ -209,6 +220,7 @@ def main():
if dev is None:
print >>sys.stderr, 'Unable to find a connected ebook reader.'
shutdown_plugins()
return 1
for det, d in connected_devices:
@ -358,6 +370,9 @@ def main():
except (ArgumentError, DeviceError) as e:
print >>sys.stderr, e
return 1
finally:
shutdown_plugins()
return 0
if __name__ == '__main__':