@@ -214,6 +214,76 @@ def table_get_custom_enum(c_id):
214214@edit_required
215215def edit_list_book (param ):
216216 vals = request .form .to_dict ()
217+ return edit_book_param (param , vals )
218+
219+ @editbook .route ("/ajax/editselectedbooks" , methods = ['POST' ])
220+ @login_required_if_no_ano
221+ @edit_required
222+ def edit_selected_books ():
223+ d = request .get_json ()
224+ selections = d .get ('selections' )
225+ title = d .get ('title' )
226+ title_sort = d .get ('title_sort' )
227+ author_sort = d .get ('author_sort' )
228+ authors = d .get ('authors' )
229+ categories = d .get ('categories' )
230+ series = d .get ('series' )
231+ languages = d .get ('languages' )
232+ publishers = d .get ('publishers' )
233+ comments = d .get ('comments' )
234+ checkA = d .get ('checkA' )
235+
236+ if len (selections ) != 0 :
237+ for book_id in selections :
238+ vals = {
239+ "pk" : book_id ,
240+ "value" : None ,
241+ "checkA" : checkA ,
242+ }
243+ if title :
244+ vals ['value' ] = title
245+ edit_book_param ('title' , vals )
246+ if title_sort :
247+ vals ['value' ] = title_sort
248+ edit_book_param ('sort' , vals )
249+ if author_sort :
250+ vals ['value' ] = author_sort
251+ edit_book_param ('author_sort' , vals )
252+ if authors :
253+ vals ['value' ] = authors
254+ edit_book_param ('authors' , vals )
255+ if categories :
256+ vals ['value' ] = categories
257+ edit_book_param ('tags' , vals )
258+ if series :
259+ vals ['value' ] = series
260+ edit_book_param ('series' , vals )
261+ if languages :
262+ vals ['value' ] = languages
263+ edit_book_param ('languages' , vals )
264+ if publishers :
265+ vals ['value' ] = publishers
266+ edit_book_param ('publishers' , vals )
267+ if comments :
268+ vals ['value' ] = comments
269+ edit_book_param ('comments' , vals )
270+ return json .dumps ({'success' : True })
271+ return ""
272+
273+ # Separated from /editbooks so that /editselectedbooks can also use this
274+ #
275+ # param: the property of the book to be changed
276+ # vals - JSON Object:
277+ # {
278+ # 'pk': "the book id",
279+ # 'value': "changes value of param to what's passed here"
280+ # 'checkA': "Optional. Used to check if autosort author is enabled. Assumed as true if not passed"
281+ # 'checkT': "Optional. Used to check if autotitle author is enabled. Assumed as true if not passed"
282+ # }
283+ #
284+ @login_required_if_no_ano
285+ @edit_required
286+ def edit_book_param (param , vals ):
217287 book = calibre_db .get_book (vals ['pk' ])
218288 sort_param = ""
219289 ret = ""
@@ -353,6 +423,66 @@ def simulate_merge_list_book():
353423 return ""
354424
355425
426+ @editbook .route ("/ajax/displayselectedbooks" , methods = ['POST' ])
427+ @user_login_required
428+ @edit_required
429+ def display_selected_books ():
430+ vals = request .get_json ().get ('selections' )
431+ books = []
432+ if vals :
433+ for book_id in vals :
434+ books .append (calibre_db .get_book (book_id ).title )
435+ return json .dumps ({'books' : books })
436+ return ""
437+
438+ @editbook .route ("/ajax/archiveselectedbooks" , methods = ['POST' ])
439+ @login_required_if_no_ano
440+ @edit_required
441+ def archive_selected_books ():
442+ vals = request .get_json ().get ('selections' )
443+ state = request .get_json ().get ('archive' )
444+ if vals :
445+ for book_id in vals :
446+ is_archived = change_archived_books (book_id , state ,
447+ message = "Book {} archive bit set to: {}" .format (book_id , state ))
448+ if is_archived :
449+ kobo_sync_status .remove_synced_book (book_id )
450+ return json .dumps ({'success' : True })
451+ return ""
452+
453+ @editbook .route ("/ajax/deleteselectedbooks" , methods = ['POST' ])
454+ @user_login_required
455+ @edit_required
456+ def delete_selected_books ():
457+ vals = request .get_json ().get ('selections' )
458+ if vals :
459+ for book_id in vals :
460+ delete_book_from_table (book_id , "" , True )
461+ return json .dumps ({'success' : True })
462+ return ""
463+
464+ @editbook .route ("/ajax/readselectedbooks" , methods = ['POST' ])
465+ @user_login_required
466+ @edit_required
467+ def read_selected_books ():
468+ vals = request .get_json ().get ('selections' )
469+ markAsRead = request .get_json ().get ('markAsRead' )
470+ if vals :
471+ try :
472+ for book_id in vals :
473+ ret = helper .edit_book_read_status (book_id , markAsRead )
474+
475+ except (OperationalError , IntegrityError , StaleDataError ) as e :
476+ calibre_db .session .rollback ()
477+ log .error_or_exception ("Database error: {}" .format (e ))
478+ ret = Response (json .dumps ({'success' : False ,
479+ 'msg' : 'Database error: {}' .format (e .orig if hasattr (e , "orig" ) else e )}),
480+ mimetype = 'application/json' )
481+
482+ return json .dumps ({'success' : True })
483+ return ""
484+
485+
356486@editbook .route ("/ajax/mergebooks" , methods = ['POST' ])
357487@user_login_required
358488@edit_required
0 commit comments