Update cover extraction with comicapi for webp files (fixes #2280)
This commit is contained in:
parent
0c0313f375
commit
35209ede67
20
cps/comic.py
20
cps/comic.py
|
@ -56,25 +56,25 @@ COVER_EXTENSIONS = ['.png', '.webp', '.bmp', '.jpg', '.jpeg']
|
|||
|
||||
def _cover_processing(tmp_file_name, img, extension):
|
||||
tmp_cover_name = os.path.join(os.path.dirname(tmp_file_name), 'cover.jpg')
|
||||
if use_IM:
|
||||
# convert to jpg because calibre only supports jpg
|
||||
if extension in NO_JPEG_EXTENSIONS:
|
||||
with Image(filename=tmp_file_name) as imgc:
|
||||
if use_IM:
|
||||
with Image(blob=img) as imgc:
|
||||
imgc.format = 'jpeg'
|
||||
imgc.transform_colorspace('rgb')
|
||||
imgc.save(tmp_cover_name)
|
||||
imgc.save(filename=tmp_cover_name)
|
||||
return tmp_cover_name
|
||||
|
||||
if not img:
|
||||
else:
|
||||
return None
|
||||
|
||||
if img:
|
||||
with open(tmp_cover_name, 'wb') as f:
|
||||
f.write(img)
|
||||
return tmp_cover_name
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def _extract_Cover_from_archive(original_file_extension, tmp_file_name, rarExecutable):
|
||||
cover_data = None
|
||||
cover_data = extension = None
|
||||
if original_file_extension.upper() == '.CBZ':
|
||||
cf = zipfile.ZipFile(tmp_file_name)
|
||||
for name in cf.namelist():
|
||||
|
@ -106,7 +106,7 @@ def _extract_Cover_from_archive(original_file_extension, tmp_file_name, rarExecu
|
|||
break
|
||||
except Exception as ex:
|
||||
log.debug('Rarfile failed with error: %s', ex)
|
||||
return cover_data
|
||||
return cover_data, extension
|
||||
|
||||
|
||||
def _extractCover(tmp_file_name, original_file_extension, rarExecutable):
|
||||
|
@ -121,7 +121,7 @@ def _extractCover(tmp_file_name, original_file_extension, rarExecutable):
|
|||
cover_data = archive.getPage(index)
|
||||
break
|
||||
else:
|
||||
cover_data = _extract_Cover_from_archive(original_file_extension, tmp_file_name, rarExecutable)
|
||||
cover_data, extension = _extract_Cover_from_archive(original_file_extension, tmp_file_name, rarExecutable)
|
||||
return _cover_processing(tmp_file_name, cover_data, extension)
|
||||
|
||||
|
||||
|
|
|
@ -37,20 +37,20 @@
|
|||
<div class="row">
|
||||
<div class="col-xs-6 col-md-6 col-sm-offset-3" style="margin-top:50px;">
|
||||
|
||||
<p class='text-justify attribute'><strong>Start Time: </strong>2022-01-17 18:51:33</p>
|
||||
<p class='text-justify attribute'><strong>Start Time: </strong>2022-01-18 21:11:17</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
||||
|
||||
<p class='text-justify attribute'><strong>Stop Time: </strong>2022-01-18 07:49:35</p>
|
||||
<p class='text-justify attribute'><strong>Stop Time: </strong>2022-01-19 01:03:52</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
||||
<p class='text-justify attribute'><strong>Duration: </strong>12h 17 min</p>
|
||||
<p class='text-justify attribute'><strong>Duration: </strong>3h 12 min</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1423,11 +1423,11 @@
|
|||
|
||||
|
||||
|
||||
<tr id="su" class="passClass">
|
||||
<tr id="su" class="failClass">
|
||||
<td>TestLoadMetadata</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">
|
||||
|
@ -1437,11 +1437,31 @@
|
|||
|
||||
|
||||
|
||||
<tr id='pt13.1' class='hiddenRow bg-success'>
|
||||
<tr id="ft13.1" class="none bg-danger">
|
||||
<td>
|
||||
<div class='testcase'>TestLoadMetadata - test_load_metadata</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
<td colspan='6'>
|
||||
<div class="text-center">
|
||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft13.1')">FAIL</a>
|
||||
</div>
|
||||
<!--css div popup start-->
|
||||
<div id="div_ft13.1" class="popup_window test_output" style="display:block;">
|
||||
<div class='close_button pull-right'>
|
||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
||||
onclick="document.getElementById('div_ft13.1').style.display='none'"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="text-left pull-left">
|
||||
<pre class="text-left">Traceback (most recent call last):
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 136, in test_load_metadata
|
||||
self.assertGreaterEqual(diff(BytesIO(cover), BytesIO(original_cover), delete_diff_file=True), 0.05)
|
||||
AssertionError: 0.0 not greater than or equal to 0.05</pre>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<!--css div popup end-->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
@ -1613,19 +1633,9 @@
|
|||
</div>
|
||||
<div class="text-left pull-left">
|
||||
<pre class="text-left">Traceback (most recent call last):
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 250, in test_edit_title
|
||||
self.fill_basic_config({"config_unicode_filename": 0})
|
||||
File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 358, in fill_basic_config
|
||||
cls._fill_basic_config(elements)
|
||||
File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 268, in _fill_basic_config
|
||||
WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port")))
|
||||
File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 89, in until
|
||||
raise TimeoutException(message, screen, stacktrace)
|
||||
selenium.common.exceptions.TimeoutException: Message:
|
||||
Stacktrace:
|
||||
WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:183:5
|
||||
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.jsm:395:5
|
||||
element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre>
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 245, in test_edit_title
|
||||
self.assertEqual(ele.text, u'Very long extra super turbo cool title without any issue of displaying including ö utf-8 characters')
|
||||
AttributeError: 'bool' object has no attribute 'text'</pre>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
@ -1998,11 +2008,11 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id="su" class="passClass">
|
||||
<tr id="su" class="failClass">
|
||||
<td>TestKoboSync</td>
|
||||
<td class="text-center">11</td>
|
||||
<td class="text-center">11</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">10</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">
|
||||
|
@ -2084,11 +2094,31 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id='pt23.9' class='hiddenRow bg-success'>
|
||||
<tr id="ft23.9" class="none bg-danger">
|
||||
<td>
|
||||
<div class='testcase'>TestKoboSync - test_sync_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
<td colspan='6'>
|
||||
<div class="text-center">
|
||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft23.9')">FAIL</a>
|
||||
</div>
|
||||
<!--css div popup start-->
|
||||
<div id="div_ft23.9" class="popup_window test_output" style="display:block;">
|
||||
<div class='close_button pull-right'>
|
||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
||||
onclick="document.getElementById('div_ft23.9').style.display='none'"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="text-left pull-left">
|
||||
<pre class="text-left">Traceback (most recent call last):
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 350, in test_sync_shelf
|
||||
self.assertEqual(1, len(data), data)
|
||||
AssertionError: 1 != 0 : []</pre>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<!--css div popup end-->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
@ -2983,11 +3013,11 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id="su" class="passClass">
|
||||
<tr id="su" class="failClass">
|
||||
<td>TestReader</td>
|
||||
<td class="text-center">5</td>
|
||||
<td class="text-center">5</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">4</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">
|
||||
|
@ -3024,11 +3054,37 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id='pt33.4' class='hiddenRow bg-success'>
|
||||
<tr id="ft33.4" class="none bg-danger">
|
||||
<td>
|
||||
<div class='testcase'>TestReader - test_sound_listener</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
<td colspan='6'>
|
||||
<div class="text-center">
|
||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft33.4')">FAIL</a>
|
||||
</div>
|
||||
<!--css div popup start-->
|
||||
<div id="div_ft33.4" class="popup_window test_output" style="display:block;">
|
||||
<div class='close_button pull-right'>
|
||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
||||
onclick="document.getElementById('div_ft33.4').style.display='none'"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="text-left pull-left">
|
||||
<pre class="text-left">Traceback (most recent call last):
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_reader.py", line 230, in test_sound_listener
|
||||
self.sound_test('music.flac', 'Unknown - music', '0:02')
|
||||
File "/home/ozzie/Development/calibre-web-test/test/test_reader.py", line 219, in sound_test
|
||||
self.assertEqual(duration, duration_item.text)
|
||||
AssertionError: '0:02' != '0:01'
|
||||
- 0:02
|
||||
? ^
|
||||
+ 0:01
|
||||
? ^</pre>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<!--css div popup end-->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
@ -3174,13 +3230,13 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id="su" class="skipClass">
|
||||
<td>TestShelf</td>
|
||||
<td class="text-center">15</td>
|
||||
<td class="text-center">14</td>
|
||||
<td class="text-center">13</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">0</td>
|
||||
<td class="text-center">1</td>
|
||||
<td class="text-center">
|
||||
<a onclick="showClassDetail('c36', 14)">Detail</a>
|
||||
<a onclick="showClassDetail('c36', 15)">Detail</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -3224,7 +3280,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.5' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_delete_book_of_shelf</div>
|
||||
<div class='testcase'>TestShelf - test_create_public_shelf_no_permission</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3233,7 +3289,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.6' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_private_shelf</div>
|
||||
<div class='testcase'>TestShelf - test_delete_book_of_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3242,7 +3298,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.7' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_public_private_shelf</div>
|
||||
<div class='testcase'>TestShelf - test_private_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3251,7 +3307,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.8' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_public_shelf</div>
|
||||
<div class='testcase'>TestShelf - test_public_private_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3260,7 +3316,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.9' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_rename_shelf</div>
|
||||
<div class='testcase'>TestShelf - test_public_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3269,7 +3325,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='pt36.10' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_shelf_action_non_shelf_edit_role</div>
|
||||
<div class='testcase'>TestShelf - test_rename_shelf</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
@ -3277,6 +3333,15 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
<tr id='pt36.11' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_shelf_action_non_shelf_edit_role</div>
|
||||
</td>
|
||||
<td colspan='6' align='center'>PASS</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr id='pt36.12' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_shelf_anonymous</div>
|
||||
</td>
|
||||
|
@ -3285,19 +3350,19 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id="st36.12" class="none bg-warning">
|
||||
<tr id="st36.13" class="none bg-warning">
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_shelf_database_change</div>
|
||||
</td>
|
||||
<td colspan='6'>
|
||||
<div class="text-center">
|
||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st36.12')">SKIP</a>
|
||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st36.13')">SKIP</a>
|
||||
</div>
|
||||
<!--css div popup start-->
|
||||
<div id="div_st36.12" class="popup_window test_output" style="display:none;">
|
||||
<div id="div_st36.13" class="popup_window test_output" style="display:none;">
|
||||
<div class='close_button pull-right'>
|
||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
||||
onclick="document.getElementById('div_st36.12').style.display='none'"><span
|
||||
onclick="document.getElementById('div_st36.13').style.display='none'"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="text-left pull-left">
|
||||
|
@ -3311,7 +3376,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id='pt36.13' class='hiddenRow bg-success'>
|
||||
<tr id='pt36.14' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_shelf_long_name</div>
|
||||
</td>
|
||||
|
@ -3320,7 +3385,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
|
||||
|
||||
<tr id='pt36.14' class='hiddenRow bg-success'>
|
||||
<tr id='pt36.15' class='hiddenRow bg-success'>
|
||||
<td>
|
||||
<div class='testcase'>TestShelf - test_xss_shelf</div>
|
||||
</td>
|
||||
|
@ -4362,9 +4427,9 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
|
||||
<tr id='total_row' class="text-center bg-grey">
|
||||
<td>Total</td>
|
||||
<td>385</td>
|
||||
<td>376</td>
|
||||
<td>0</td>
|
||||
<td>386</td>
|
||||
<td>374</td>
|
||||
<td>3</td>
|
||||
<td>1</td>
|
||||
<td>8</td>
|
||||
<td> </td>
|
||||
|
@ -4754,7 +4819,7 @@ element.find/</<@chrome://remote/content/marionette/element.js:300:16</pre
|
|||
</div>
|
||||
|
||||
<script>
|
||||
drawCircle(376, 0, 1, 8);
|
||||
drawCircle(374, 3, 1, 8);
|
||||
showCase(5);
|
||||
</script>
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user