mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	Fix for errors editing/uploading books with duplicate tags/authors/language names
Additional parsing of epubs for cover files Fix for change of database with linked read_column and read column isn't present any more
This commit is contained in:
		| @@ -317,7 +317,8 @@ def edit_book_ratings(to_save, book): | |||||||
| def edit_book_tags(tags, book): | def edit_book_tags(tags, book): | ||||||
|     input_tags = tags.split(',') |     input_tags = tags.split(',') | ||||||
|     input_tags = list(map(lambda it: it.strip(), input_tags)) |     input_tags = list(map(lambda it: it.strip(), input_tags)) | ||||||
|     # if input_tags[0] !="": ?? |     # Remove duplicates | ||||||
|  |     input_tags = helper.uniq(input_tags) | ||||||
|     return modify_database_object(input_tags, book.tags, db.Tags, calibre_db.session, 'tags') |     return modify_database_object(input_tags, book.tags, db.Tags, calibre_db.session, 'tags') | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -331,8 +332,6 @@ def edit_book_series_index(series_index, book): | |||||||
|     # Add default series_index to book |     # Add default series_index to book | ||||||
|     modif_date = False |     modif_date = False | ||||||
|     series_index = series_index or '1' |     series_index = series_index or '1' | ||||||
|     #if series_index == '': |  | ||||||
|     #    series_index = '1' |  | ||||||
|     if book.series_index != series_index: |     if book.series_index != series_index: | ||||||
|         book.series_index = series_index |         book.series_index = series_index | ||||||
|         modif_date = True |         modif_date = True | ||||||
| @@ -366,6 +365,8 @@ def edit_book_languages(languages, book, upload=False): | |||||||
|         if input_l[0] != current_user.filter_language() and current_user.filter_language() != "all": |         if input_l[0] != current_user.filter_language() and current_user.filter_language() != "all": | ||||||
|             input_l[0] = calibre_db.session.query(db.Languages). \ |             input_l[0] = calibre_db.session.query(db.Languages). \ | ||||||
|                 filter(db.Languages.lang_code == current_user.filter_language()).first() |                 filter(db.Languages.lang_code == current_user.filter_language()).first() | ||||||
|  |     # Remove duplicates | ||||||
|  |     input_l = helper.uniq(input_l) | ||||||
|     return modify_database_object(input_l, book.languages, db.Languages, calibre_db.session, 'languages') |     return modify_database_object(input_l, book.languages, db.Languages, calibre_db.session, 'languages') | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -568,6 +569,8 @@ def edit_book(book_id): | |||||||
|         # handle author(s) |         # handle author(s) | ||||||
|         input_authors = to_save["author_name"].split('&') |         input_authors = to_save["author_name"].split('&') | ||||||
|         input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors)) |         input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors)) | ||||||
|  |         # Remove duplicates in authors list | ||||||
|  |         input_authors = helper.uniq(input_authors) | ||||||
|         # we have all author names now |         # we have all author names now | ||||||
|         if input_authors == ['']: |         if input_authors == ['']: | ||||||
|             input_authors = [_(u'Unknown')]  # prevent empty Author |             input_authors = [_(u'Unknown')]  # prevent empty Author | ||||||
| @@ -738,6 +741,9 @@ def upload(): | |||||||
|                 input_authors = authr.split('&') |                 input_authors = authr.split('&') | ||||||
|                 # handle_authors(input_authors) |                 # handle_authors(input_authors) | ||||||
|                 input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors)) |                 input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors)) | ||||||
|  |                 # Remove duplicates in authors list | ||||||
|  |                 input_authors = helper.uniq(input_authors) | ||||||
|  |  | ||||||
|                 # we have all author names now |                 # we have all author names now | ||||||
|                 if input_authors == ['']: |                 if input_authors == ['']: | ||||||
|                     input_authors = [_(u'Unknown')]  # prevent empty Author |                     input_authors = [_(u'Unknown')]  # prevent empty Author | ||||||
|   | |||||||
| @@ -122,8 +122,13 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): | |||||||
|                 markupTree = etree.fromstring(markup) |                 markupTree = etree.fromstring(markup) | ||||||
|                 # no matter xhtml or html with no namespace |                 # no matter xhtml or html with no namespace | ||||||
|                 imgsrc = markupTree.xpath("//*[local-name() = 'img']/@src") |                 imgsrc = markupTree.xpath("//*[local-name() = 'img']/@src") | ||||||
|  |                 # Alternative image source | ||||||
|  |                 if not len(imgsrc): | ||||||
|  |                     imgsrc = markupTree.xpath("//attribute::*[contains(local-name(), 'href')]") | ||||||
|  |                 if len(imgsrc): | ||||||
|                     # imgsrc maybe startwith "../"" so fullpath join then relpath to cwd |                     # imgsrc maybe startwith "../"" so fullpath join then relpath to cwd | ||||||
|                 filename = os.path.relpath(os.path.join(os.path.dirname(os.path.join(coverpath, coversection[0])), imgsrc[0])) |                     filename = os.path.relpath(os.path.join(os.path.dirname(os.path.join(coverpath, coversection[0])), | ||||||
|  |                                                             imgsrc[0])) | ||||||
|                     coverfile = extractCover(epubZip, filename, "", tmp_file_path) |                     coverfile = extractCover(epubZip, filename, "", tmp_file_path) | ||||||
|             else: |             else: | ||||||
|                 coverfile = extractCover(epubZip, coversection[0], coverpath, tmp_file_path) |                 coverfile = extractCover(epubZip, coversection[0], coverpath, tmp_file_path) | ||||||
|   | |||||||
| @@ -468,6 +468,14 @@ def generate_random_password(): | |||||||
|     passlen = 8 |     passlen = 8 | ||||||
|     return "".join(s[c % len(s)] for c in os.urandom(passlen)) |     return "".join(s[c % len(s)] for c in os.urandom(passlen)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def uniq(input): | ||||||
|  |   output = [] | ||||||
|  |   for x in input: | ||||||
|  |     if x not in output: | ||||||
|  |       output.append(x) | ||||||
|  |   return output | ||||||
|  |  | ||||||
| ################################## External interface | ################################## External interface | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -446,7 +446,7 @@ def toggle_read(book_id): | |||||||
|                 new_cc = cc_class(value=1, book=book_id) |                 new_cc = cc_class(value=1, book=book_id) | ||||||
|                 calibre_db.session.add(new_cc) |                 calibre_db.session.add(new_cc) | ||||||
|                 calibre_db.session.commit() |                 calibre_db.session.commit() | ||||||
|         except KeyError: |         except (KeyError, AttributeError): | ||||||
|             log.error(u"Custom Column No.%d is not exisiting in calibre database", config.config_read_column) |             log.error(u"Custom Column No.%d is not exisiting in calibre database", config.config_read_column) | ||||||
|         except OperationalError as e: |         except OperationalError as e: | ||||||
|             calibre_db.session.rollback() |             calibre_db.session.rollback() | ||||||
| @@ -1204,7 +1204,7 @@ def render_read_books(page, are_read, as_xml=False, order=None, *args, **kwargs) | |||||||
|                                                                     db_filter, |                                                                     db_filter, | ||||||
|                                                                     order, |                                                                     order, | ||||||
|                                                                     db.cc_classes[config.config_read_column]) |                                                                     db.cc_classes[config.config_read_column]) | ||||||
|         except KeyError: |         except (KeyError, AttributeError): | ||||||
|             log.error("Custom Column No.%d is not existing in calibre database", config.config_read_column) |             log.error("Custom Column No.%d is not existing in calibre database", config.config_read_column) | ||||||
|             if not as_xml: |             if not as_xml: | ||||||
|                 flash(_("Custom Column No.%(column)d is not existing in calibre database", |                 flash(_("Custom Column No.%(column)d is not existing in calibre database", | ||||||
| @@ -1711,7 +1711,7 @@ def show_book(book_id): | |||||||
|                 try: |                 try: | ||||||
|                     matching_have_read_book = getattr(entries, 'custom_column_' + str(config.config_read_column)) |                     matching_have_read_book = getattr(entries, 'custom_column_' + str(config.config_read_column)) | ||||||
|                     have_read = len(matching_have_read_book) > 0 and matching_have_read_book[0].value |                     have_read = len(matching_have_read_book) > 0 and matching_have_read_book[0].value | ||||||
|                 except KeyError: |                 except (KeyError, AttributeError): | ||||||
|                     log.error("Custom Column No.%d is not existing in calibre database", config.config_read_column) |                     log.error("Custom Column No.%d is not existing in calibre database", config.config_read_column) | ||||||
|                     have_read = None |                     have_read = None | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzieisaacs
					Ozzieisaacs