%PDF- %PDF-
Direktori : /lib/calibre/calibre/db/cli/ |
Current File : //lib/calibre/calibre/db/cli/cmd_restore_database.py |
#!/usr/bin/env python3 # License: GPLv3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net> from calibre import prints from calibre.db.restore import Restore readonly = False version = 0 # change this if you change signature of implementation() no_remote = True def implementation(db, notify_changes, *args): raise NotImplementedError() def option_parser(get_parser, args): parser = get_parser( _( '''\ %prog restore_database [options] Restore this database from the metadata stored in OPF files in each folder of the calibre library. This is useful if your metadata.db file has been corrupted. WARNING: This command completely regenerates your database. You will lose all saved searches, user categories, plugboards, stored per-book conversion settings, and custom recipes. Restored metadata will only be as accurate as what is found in the OPF files. ''' ) ) parser.add_option( '-r', '--really-do-it', default=False, action='store_true', help=_( 'Really do the recovery. The command will not run ' 'unless this option is specified.' ) ) return parser class Progress: def __init__(self): self.total = 1 def __call__(self, msg, step): if msg is None: self.total = float(step) else: prints(msg, '...', '%d%%' % int(100 * (step / self.total))) def main(opts, args, dbctx): if not opts.really_do_it: raise SystemExit( _('You must provide the %s option to do a' ' recovery') % '--really-do-it' ) r = Restore(dbctx.library_path, progress_callback=Progress()) r.start() r.join() if r.tb is not None: prints('Restoring database failed with error:') prints(r.tb) else: prints('Restoring database succeeded') prints('old database saved as', r.olddb) if r.errors_occurred: name = 'calibre_db_restore_report.txt' lopen('calibre_db_restore_report.txt', 'wb').write(r.report.encode('utf-8')) prints('Some errors occurred. A detailed report was ' 'saved to', name) return 0