1
0
mirror of https://github.com/janeczku/calibre-web synced 2024-12-12 11:10:30 +00:00

Fixes for parallel upload (coverfiles get individual temporary names)

Updated teststatus
This commit is contained in:
Ozzie Isaacs 2024-11-30 09:45:46 +01:00
parent 344c0c7bc3
commit d45ed1c921
5 changed files with 627 additions and 4448 deletions

View File

@ -16,8 +16,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import mutagen import mutagen
import base64 import base64
from . import cover, logger from . import cover, logger
@ -51,13 +49,12 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
if not pubdate: if not pubdate:
pubdate = str(audio_file.tags.get('TDOR').text[0]) if "TDOR" in audio_file.tags else None pubdate = str(audio_file.tags.get('TDOR').text[0]) if "TDOR" in audio_file.tags else None
if cover_data and not no_cover_processing: if cover_data and not no_cover_processing:
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg')
cover_info = cover_data[0] cover_info = cover_data[0]
for dat in cover_data: for dat in cover_data:
if dat.type == mutagen.id3.PictureType.COVER_FRONT: if dat.type == mutagen.id3.PictureType.COVER_FRONT:
cover_info = dat cover_info = dat
break break
cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:]) tmp_cover_name = cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:])
elif original_file_extension in [".ogg", ".flac", ".opus", ".ogv"]: elif original_file_extension in [".ogg", ".flac", ".opus", ".ogv"]:
title = audio_file.tags.get('TITLE')[0] if "TITLE" in audio_file else None title = audio_file.tags.get('TITLE')[0] if "TITLE" in audio_file else None
author = audio_file.tags.get('ARTIST')[0] if "ARTIST" in audio_file else None author = audio_file.tags.get('ARTIST')[0] if "ARTIST" in audio_file else None
@ -70,17 +67,15 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
cover_data = audio_file.tags.get('METADATA_BLOCK_PICTURE') cover_data = audio_file.tags.get('METADATA_BLOCK_PICTURE')
if not no_cover_processing: if not no_cover_processing:
if cover_data: if cover_data:
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg')
cover_info = mutagen.flac.Picture(base64.b64decode(cover_data[0])) cover_info = mutagen.flac.Picture(base64.b64decode(cover_data[0]))
cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:]) tmp_cover_name = cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:])
if hasattr(audio_file, "pictures"): if hasattr(audio_file, "pictures"):
cover_info = audio_file.pictures[0] cover_info = audio_file.pictures[0]
for dat in audio_file.pictures: for dat in audio_file.pictures:
if dat.type == mutagen.id3.PictureType.COVER_FRONT: if dat.type == mutagen.id3.PictureType.COVER_FRONT:
cover_info = dat cover_info = dat
break break
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg') tmp_cover_name = cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:])
cover.cover_processing(tmp_file_path, cover_info.data, "." + cover_info.mime[-3:])
elif original_file_extension in [".aac"]: elif original_file_extension in [".aac"]:
title = audio_file.tags.get('Title').value if "Title" in audio_file else None title = audio_file.tags.get('Title').value if "Title" in audio_file else None
author = audio_file.tags.get('Artist').value if "Artist" in audio_file else None author = audio_file.tags.get('Artist').value if "Artist" in audio_file else None
@ -92,7 +87,7 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
pubdate = audio_file.tags.get('Year').value if "Year" in audio_file else None pubdate = audio_file.tags.get('Year').value if "Year" in audio_file else None
cover_data = audio_file.tags['Cover Art (Front)'] cover_data = audio_file.tags['Cover Art (Front)']
if cover_data and not no_cover_processing: if cover_data and not no_cover_processing:
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg') tmp_cover_name = tmp_file_path + '.jpg'
with open(tmp_cover_name, "wb") as cover_file: with open(tmp_cover_name, "wb") as cover_file:
cover_file.write(cover_data.value.split(b"\x00",1)[1]) cover_file.write(cover_data.value.split(b"\x00",1)[1])
elif original_file_extension in [".asf"]: elif original_file_extension in [".asf"]:
@ -106,7 +101,7 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
pubdate = audio_file.tags.get('Year')[0].value if "Year" in audio_file else None pubdate = audio_file.tags.get('Year')[0].value if "Year" in audio_file else None
cover_data = audio_file.tags.get('WM/Picture', None) cover_data = audio_file.tags.get('WM/Picture', None)
if cover_data and not no_cover_processing: if cover_data and not no_cover_processing:
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg') tmp_cover_name = tmp_file_path + '.jpg'
with open(tmp_cover_name, "wb") as cover_file: with open(tmp_cover_name, "wb") as cover_file:
cover_file.write(cover_data[0].value) cover_file.write(cover_data[0].value)
elif original_file_extension in [".mp4", ".m4a", ".m4b"]: elif original_file_extension in [".mp4", ".m4a", ".m4b"]:
@ -120,7 +115,6 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
pubdate = audio_file.tags.get('©day')[0] if "©day" in audio_file.tags else None pubdate = audio_file.tags.get('©day')[0] if "©day" in audio_file.tags else None
cover_data = audio_file.tags.get('covr', None) cover_data = audio_file.tags.get('covr', None)
if cover_data and not no_cover_processing: if cover_data and not no_cover_processing:
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg')
cover_type = None cover_type = None
for c in cover_data: for c in cover_data:
if c.imageformat == mutagen.mp4.AtomDataType.JPEG: if c.imageformat == mutagen.mp4.AtomDataType.JPEG:
@ -132,7 +126,7 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na
cover_bin = c cover_bin = c
break break
if cover_type: if cover_type:
cover.cover_processing(tmp_file_path, cover_bin, cover_type) tmp_cover_name = cover.cover_processing(tmp_file_path, cover_bin, cover_type)
else: else:
logger.error("Unknown covertype in file {} ".format(original_file_name)) logger.error("Unknown covertype in file {} ".format(original_file_name))

View File

@ -90,7 +90,7 @@ def _extract_cover_from_archive(original_file_extension, tmp_file_name, rar_exec
if len(ext) > 1: if len(ext) > 1:
extension = ext[1].lower() extension = ext[1].lower()
if extension in cover.COVER_EXTENSIONS: if extension in cover.COVER_EXTENSIONS:
cover_data = cf.read([name]) cover_data = cf.read(name)
break break
except Exception as ex: except Exception as ex:
log.error('Rarfile failed with error: {}'.format(ex)) log.error('Rarfile failed with error: {}'.format(ex))
@ -109,13 +109,13 @@ def _extract_cover_from_archive(original_file_extension, tmp_file_name, rar_exec
return cover_data, extension return cover_data, extension
def _extract_cover(tmp_file_name, original_file_extension, rar_executable): def _extract_cover(tmp_file_path, original_file_extension, rar_executable):
cover_data = extension = None cover_data = extension = None
if use_comic_meta: if use_comic_meta:
try: try:
archive = ComicArchive(tmp_file_name, rar_exe_path=rar_executable) archive = ComicArchive(tmp_file_path, rar_exe_path=rar_executable)
except TypeError: except TypeError:
archive = ComicArchive(tmp_file_name) archive = ComicArchive(tmp_file_path)
name_list = archive.getPageNameList if hasattr(archive, "getPageNameList") else archive.get_page_name_list name_list = archive.getPageNameList if hasattr(archive, "getPageNameList") else archive.get_page_name_list
for index, name in enumerate(name_list()): for index, name in enumerate(name_list()):
ext = os.path.splitext(name) ext = os.path.splitext(name)
@ -126,8 +126,8 @@ def _extract_cover(tmp_file_name, original_file_extension, rar_executable):
cover_data = get_page(index) cover_data = get_page(index)
break break
else: else:
cover_data, extension = _extract_cover_from_archive(original_file_extension, tmp_file_name, rar_executable) cover_data, extension = _extract_cover_from_archive(original_file_extension, tmp_file_path, rar_executable)
return cover.cover_processing(tmp_file_name, cover_data, extension) return cover.cover_processing(tmp_file_path, cover_data, extension)
def get_comic_info(tmp_file_path, original_file_name, original_file_extension, rar_executable, no_cover_processing): def get_comic_info(tmp_file_path, original_file_name, original_file_extension, rar_executable, no_cover_processing):

View File

@ -29,8 +29,9 @@ NO_JPEG_EXTENSIONS = ['.png', '.webp', '.bmp']
COVER_EXTENSIONS = ['.png', '.webp', '.bmp', '.jpg', '.jpeg'] COVER_EXTENSIONS = ['.png', '.webp', '.bmp', '.jpg', '.jpeg']
def cover_processing(tmp_file_name, img, extension): def cover_processing(tmp_file_path, img, extension):
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_name), 'cover.jpg') # tmp_cover_name = os.path.join(os.path.dirname(tmp_file_name), 'cover.jpg')
tmp_cover_name = tmp_file_path + '.jpg'
if extension in NO_JPEG_EXTENSIONS: if extension in NO_JPEG_EXTENSIONS:
if use_IM: if use_IM:
with Image(blob=img) as imgc: with Image(blob=img) as imgc:

View File

@ -237,7 +237,7 @@ def pdf_preview(tmp_file_path, tmp_dir):
if use_generic_pdf_cover: if use_generic_pdf_cover:
return None return None
try: try:
cover_file_name = os.path.join(os.path.dirname(tmp_file_path), "cover.jpg") cover_file_name = tmp_file_path + ".jpg"
with Image() as img: with Image() as img:
img.options["pdf:use-cropbox"] = "true" img.options["pdf:use-cropbox"] = "true"
img.read(filename=tmp_file_path + '[0]', resolution=150) img.read(filename=tmp_file_path + '[0]', resolution=150)
@ -245,7 +245,7 @@ def pdf_preview(tmp_file_path, tmp_dir):
if img.alpha_channel: if img.alpha_channel:
img.alpha_channel = 'remove' img.alpha_channel = 'remove'
img.background_color = Color('white') img.background_color = Color('white')
img.save(filename=os.path.join(tmp_dir, cover_file_name)) img.save(filename=cover_file_name)
return cover_file_name return cover_file_name
except PolicyError as ex: except PolicyError as ex:
log.warning('Pdf extraction forbidden by Imagemagick policy: %s', ex) log.warning('Pdf extraction forbidden by Imagemagick policy: %s', ex)

File diff suppressed because it is too large Load Diff