Add command line option to shutdown running calibre

This commit is contained in:
Kovid Goyal 2011-04-28 08:48:54 -06:00
parent b905ae569e
commit 213df8e3d7
3 changed files with 24 additions and 10 deletions

View File

@ -40,6 +40,11 @@ path_to_ebook to the database.
parser.add_option('--ignore-plugins', default=False, action='store_true',
help=_('Ignore custom plugins, useful if you installed a plugin'
' that is preventing calibre from starting'))
parser.add_option('-s', '--shutdown-running-calibre', default=False,
action='store_true',
help=_('Cause a running calibre instance, if any, to be'
' shutdown. Note that if there are running jobs, they '
'will be silently aborted, so use with care.'))
return parser
def init_qt(args):
@ -339,7 +344,7 @@ def cant_start(msg=_('If you are sure it is not running')+', ',
raise SystemExit(1)
def communicate(args):
def communicate(opts, args):
t = RC()
t.start()
time.sleep(3)
@ -348,6 +353,9 @@ def communicate(args):
cant_start(what=_('try deleting the file')+': '+f)
raise SystemExit(1)
if opts.shutdown_running_calibre:
t.conn.send('shutdown:')
else:
if len(args) > 1:
args[1] = os.path.abspath(args[1])
t.conn.send('launched:'+repr(args))
@ -365,6 +373,8 @@ def main(args=sys.argv):
from calibre.utils.lock import singleinstance
from multiprocessing.connection import Listener
si = singleinstance('calibre GUI')
if si and opts.shutdown_running_calibre:
return 0
if si:
try:
listener = Listener(address=ADDRESS)
@ -390,10 +400,10 @@ def main(args=sys.argv):
else:
# On windows only singleinstance can be trusted
otherinstance = True if iswindows else False
if not otherinstance:
if not otherinstance and not opts.shutdown_running_calibre:
return run_gui(opts, args, actions, listener, app, gui_debug=gui_debug)
communicate(args)
communicate(opts, args)
return 0

View File

@ -446,6 +446,8 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
self.library_view.model().refresh()
self.library_view.model().research()
self.tags_view.recount()
elif msg.startswith('shutdown:'):
self.quit(confirm_quit=False)
else:
print msg
@ -599,8 +601,9 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
dynamic.set('sort_history', self.library_view.model().sort_history)
self.save_layout_state()
def quit(self, checked=True, restart=False, debug_on_restart=False):
if not self.confirm_quit():
def quit(self, checked=True, restart=False, debug_on_restart=False,
confirm_quit=True):
if confirm_quit and not self.confirm_quit():
return
try:
self.shutdown()

View File

@ -195,9 +195,10 @@ It can get tiresome to keep re-adding a plugin to calibre to test small changes.
Once you've located the zip file of your plugin you can then directly update it with your changes instead of re-adding it each time. To do so from the command line, in the directory that contains your plugin source code, use::
zip -R /path/to/plugin/zip/file.zip *
calibre -s; sleep 4s; zip -R /path/to/plugin/zip/file.zip *; calibre
This will update all changed files. It relies on the freely available zip command line tool. Note that you should quit calibre before running this command.
This will shutdown a running calibre. Wait for the shutdown to complete, then update your plugin files and relaunch calibre.
It relies on the freely available zip command line tool.
More plugin examples
----------------------