First fix for #2325 (edit book table with readonly database)

pull/2205/merge
Ozzie Isaacs 2 years ago
parent d80297e1a8
commit 547ea93dc9

@ -1152,80 +1152,81 @@ def edit_list_book(param):
vals = request.form.to_dict() vals = request.form.to_dict()
book = calibre_db.get_book(vals['pk']) book = calibre_db.get_book(vals['pk'])
# ret = "" # ret = ""
if param == 'series_index': try:
edit_book_series_index(vals['value'], book) if param == 'series_index':
ret = Response(json.dumps({'success': True, 'newValue': book.series_index}), mimetype='application/json') edit_book_series_index(vals['value'], book)
elif param == 'tags': ret = Response(json.dumps({'success': True, 'newValue': book.series_index}), mimetype='application/json')
edit_book_tags(vals['value'], book) elif param == 'tags':
ret = Response(json.dumps({'success': True, 'newValue': ', '.join([tag.name for tag in book.tags])}), edit_book_tags(vals['value'], book)
mimetype='application/json') ret = Response(json.dumps({'success': True, 'newValue': ', '.join([tag.name for tag in book.tags])}),
elif param == 'series':
edit_book_series(vals['value'], book)
ret = Response(json.dumps({'success': True, 'newValue': ', '.join([serie.name for serie in book.series])}),
mimetype='application/json')
elif param == 'publishers':
edit_book_publisher(vals['value'], book)
ret = Response(json.dumps({'success': True,
'newValue': ', '.join([publisher.name for publisher in book.publishers])}),
mimetype='application/json')
elif param == 'languages':
invalid = list()
edit_book_languages(vals['value'], book, invalid=invalid)
if invalid:
ret = Response(json.dumps({'success': False,
'msg': 'Invalid languages in request: {}'.format(','.join(invalid))}),
mimetype='application/json') mimetype='application/json')
else: elif param == 'series':
lang_names = list() edit_book_series(vals['value'], book)
for lang in book.languages: ret = Response(json.dumps({'success': True, 'newValue': ', '.join([serie.name for serie in book.series])}),
lang_names.append(isoLanguages.get_language_name(get_locale(), lang.lang_code)) mimetype='application/json')
ret = Response(json.dumps({'success': True, 'newValue': ', '.join(lang_names)}), elif param == 'publishers':
mimetype='application/json') edit_book_publisher(vals['value'], book)
elif param == 'author_sort': ret = Response(json.dumps({'success': True,
book.author_sort = vals['value'] 'newValue': ', '.join([publisher.name for publisher in book.publishers])}),
ret = Response(json.dumps({'success': True, 'newValue': book.author_sort}), mimetype='application/json')
mimetype='application/json') elif param == 'languages':
elif param == 'title': invalid = list()
sort = book.sort edit_book_languages(vals['value'], book, invalid=invalid)
handle_title_on_edit(book, vals.get('value', "")) if invalid:
helper.update_dir_structure(book.id, config.config_calibre_dir) ret = Response(json.dumps({'success': False,
ret = Response(json.dumps({'success': True, 'newValue': book.title}), 'msg': 'Invalid languages in request: {}'.format(','.join(invalid))}),
mimetype='application/json') mimetype='application/json')
elif param == 'sort': else:
book.sort = vals['value'] lang_names = list()
ret = Response(json.dumps({'success': True, 'newValue': book.sort}), for lang in book.languages:
mimetype='application/json') lang_names.append(isoLanguages.get_language_name(get_locale(), lang.lang_code))
elif param == 'comments': ret = Response(json.dumps({'success': True, 'newValue': ', '.join(lang_names)}),
edit_book_comments(vals['value'], book) mimetype='application/json')
ret = Response(json.dumps({'success': True, 'newValue': book.comments[0].text}), elif param == 'author_sort':
mimetype='application/json') book.author_sort = vals['value']
elif param == 'authors': ret = Response(json.dumps({'success': True, 'newValue': book.author_sort}),
input_authors, __, renamed = handle_author_on_edit(book, vals['value'], vals.get('checkA', None) == "true") mimetype='application/json')
helper.update_dir_structure(book.id, config.config_calibre_dir, input_authors[0], renamed_author=renamed) elif param == 'title':
ret = Response(json.dumps({'success': True, sort = book.sort
'newValue': ' & '.join([author.replace('|',',') for author in input_authors])}), handle_title_on_edit(book, vals.get('value', ""))
mimetype='application/json') helper.update_dir_structure(book.id, config.config_calibre_dir)
elif param == 'is_archived': ret = Response(json.dumps({'success': True, 'newValue': book.title}),
change_archived_books(book.id, vals['value'] == "True") mimetype='application/json')
ret = "" elif param == 'sort':
elif param == 'read_status': book.sort = vals['value']
ret = helper.edit_book_read_status(book.id, vals['value'] == "True") ret = Response(json.dumps({'success': True, 'newValue': book.sort}),
if ret: mimetype='application/json')
return ret, 400 elif param == 'comments':
elif param.startswith("custom_column_"): edit_book_comments(vals['value'], book)
new_val = dict() ret = Response(json.dumps({'success': True, 'newValue': book.comments[0].text}),
new_val[param] = vals['value'] mimetype='application/json')
edit_single_cc_data(book.id, book, param[14:], new_val) elif param == 'authors':
# ToDo: Very hacky find better solution input_authors, __, renamed = handle_author_on_edit(book, vals['value'], vals.get('checkA', None) == "true")
if vals['value'] in ["True", "False"]: helper.update_dir_structure(book.id, config.config_calibre_dir, input_authors[0], renamed_author=renamed)
ret = Response(json.dumps({'success': True,
'newValue': ' & '.join([author.replace('|',',') for author in input_authors])}),
mimetype='application/json')
elif param == 'is_archived':
change_archived_books(book.id, vals['value'] == "True")
ret = "" ret = ""
elif param == 'read_status':
ret = helper.edit_book_read_status(book.id, vals['value'] == "True")
if ret:
return ret, 400
elif param.startswith("custom_column_"):
new_val = dict()
new_val[param] = vals['value']
edit_single_cc_data(book.id, book, param[14:], new_val)
# ToDo: Very hacky find better solution
if vals['value'] in ["True", "False"]:
ret = ""
else:
ret = Response(json.dumps({'success': True, 'newValue': vals['value']}),
mimetype='application/json')
else: else:
ret = Response(json.dumps({'success': True, 'newValue': vals['value']}), return _("Parameter not found"), 400
mimetype='application/json') book.last_modified = datetime.utcnow()
else:
return _("Parameter not found"), 400
book.last_modified = datetime.utcnow()
try:
calibre_db.session.commit() calibre_db.session.commit()
# revert change for sort if automatic fields link is deactivated # revert change for sort if automatic fields link is deactivated
if param == 'title' and vals.get('checkT') == "false": if param == 'title' and vals.get('checkT') == "false":
@ -1233,7 +1234,10 @@ def edit_list_book(param):
calibre_db.session.commit() calibre_db.session.commit()
except (OperationalError, IntegrityError) as e: except (OperationalError, IntegrityError) as e:
calibre_db.session.rollback() calibre_db.session.rollback()
log.error("Database error: %s", e) log.error("Database error: {}".format(e))
ret = Response(json.dumps({'success': False,
'msg': 'Database error: {}'.format(e.orig)}),
mimetype='application/json')
return ret return ret

Loading…
Cancel
Save