Fixes for deleting books(error handling and user feedback)
This commit is contained in:
parent
bb317d54f2
commit
000b85ff81
|
@ -933,8 +933,6 @@ def edit_user(user_id):
|
||||||
@login_required
|
@login_required
|
||||||
@admin_required
|
@admin_required
|
||||||
def reset_user_password(user_id):
|
def reset_user_password(user_id):
|
||||||
if not config.get_mail_server_configured():
|
|
||||||
abort(404)
|
|
||||||
if current_user is not None and current_user.is_authenticated:
|
if current_user is not None and current_user.is_authenticated:
|
||||||
ret, message = reset_password(user_id)
|
ret, message = reset_password(user_id)
|
||||||
if ret == 1:
|
if ret == 1:
|
||||||
|
|
|
@ -177,7 +177,10 @@ def delete_book(book_id, book_format):
|
||||||
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
|
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
|
||||||
if book:
|
if book:
|
||||||
try:
|
try:
|
||||||
helper.delete_book(book, config.config_calibre_dir, book_format=book_format.upper())
|
result, error = helper.delete_book(book, config.config_calibre_dir, book_format=book_format.upper())
|
||||||
|
if not result:
|
||||||
|
flash(error, category="error")
|
||||||
|
return redirect(url_for('editbook.edit_book', book_id=book_id))
|
||||||
if not book_format:
|
if not book_format:
|
||||||
# delete book from Shelfs, Downloads, Read list
|
# delete book from Shelfs, Downloads, Read list
|
||||||
ub.session.query(ub.BookShelf).filter(ub.BookShelf.book_id == book_id).delete()
|
ub.session.query(ub.BookShelf).filter(ub.BookShelf.book_id == book_id).delete()
|
||||||
|
@ -233,8 +236,10 @@ def delete_book(book_id, book_format):
|
||||||
# book not found
|
# book not found
|
||||||
log.error('Book with id "%s" could not be deleted: not found', book_id)
|
log.error('Book with id "%s" could not be deleted: not found', book_id)
|
||||||
if book_format:
|
if book_format:
|
||||||
|
flash(_('Book Format Successfully Deleted'), category="success")
|
||||||
return redirect(url_for('editbook.edit_book', book_id=book_id))
|
return redirect(url_for('editbook.edit_book', book_id=book_id))
|
||||||
else:
|
else:
|
||||||
|
flash(_('Book Successfully Deleted'), category="success")
|
||||||
return redirect(url_for('web.index'))
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -296,15 +296,29 @@ def delete_book_file(book, calibrepath, book_format=None):
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
if len(next(os.walk(path))[1]):
|
if len(next(os.walk(path))[1]):
|
||||||
log.error("Deleting book %s failed, path has subfolders: %s", book.id, book.path)
|
log.error("Deleting book %s failed, path has subfolders: %s", book.id, book.path)
|
||||||
return False
|
return False , _("Deleting book %(id)s failed, path has subfolders: %(path)s",
|
||||||
shutil.rmtree(path, ignore_errors=True)
|
id=book.id,
|
||||||
|
path=book.path)
|
||||||
|
try:
|
||||||
|
for root, __, files in os.walk(path):
|
||||||
|
for f in files:
|
||||||
|
os.unlink(os.path.join(root, f))
|
||||||
|
shutil.rmtree(path)
|
||||||
|
except (IOError, OSError) as e:
|
||||||
|
log.error("Deleting book %s failed: %s", book.id, e)
|
||||||
|
return False, _("Deleting book %(id)s failed: %(message)s", id=book.id, message=e)
|
||||||
authorpath = os.path.join(calibrepath, os.path.split(book.path)[0])
|
authorpath = os.path.join(calibrepath, os.path.split(book.path)[0])
|
||||||
if not os.listdir(authorpath):
|
if not os.listdir(authorpath):
|
||||||
shutil.rmtree(authorpath, ignore_errors=True)
|
try:
|
||||||
return True
|
shutil.rmtree(authorpath)
|
||||||
|
except (IOError, OSError) as e:
|
||||||
|
log.error("Deleting authorpath for book %s failed: %s", book.id, e)
|
||||||
|
return True, None
|
||||||
else:
|
else:
|
||||||
log.error("Deleting book %s failed, book path not valid: %s", book.id, book.path)
|
log.error("Deleting book %s failed, book path not valid: %s", book.id, book.path)
|
||||||
return False
|
return False, _("Deleting book %(id)s failed, book path not valid: %(path)s",
|
||||||
|
id=book.id,
|
||||||
|
path=book.path)
|
||||||
|
|
||||||
|
|
||||||
def update_dir_structure_file(book_id, calibrepath, first_author):
|
def update_dir_structure_file(book_id, calibrepath, first_author):
|
||||||
|
@ -413,7 +427,7 @@ def update_dir_structure_gdrive(book_id, first_author):
|
||||||
|
|
||||||
|
|
||||||
def delete_book_gdrive(book, book_format):
|
def delete_book_gdrive(book, book_format):
|
||||||
error = False
|
error = None
|
||||||
if book_format:
|
if book_format:
|
||||||
name = ''
|
name = ''
|
||||||
for entry in book.data:
|
for entry in book.data:
|
||||||
|
@ -427,7 +441,8 @@ def delete_book_gdrive(book, book_format):
|
||||||
gFile.Trash()
|
gFile.Trash()
|
||||||
else:
|
else:
|
||||||
error = _(u'Book path %(path)s not found on Google Drive', path=book.path) # file not found
|
error = _(u'Book path %(path)s not found on Google Drive', path=book.path) # file not found
|
||||||
return error
|
|
||||||
|
return error is None, error
|
||||||
|
|
||||||
|
|
||||||
def reset_password(user_id):
|
def reset_password(user_id):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user