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:
parent
344c0c7bc3
commit
d45ed1c921
18
cps/audio.py
18
cps/audio.py
@ -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))
|
||||||
|
|
||||||
|
12
cps/comic.py
12
cps/comic.py
@ -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):
|
||||||
|
@ -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:
|
||||||
|
@ -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
Loading…
Reference in New Issue
Block a user