Skip to content

Commit

Permalink
fix volume 0 for opf, add <div> for html description for epub
Browse files Browse the repository at this point in the history
  • Loading branch information
ewilan-riviere committed Sep 18, 2023
1 parent 24a1ab3 commit 8ccde88
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 1 deletion.
14 changes: 14 additions & 0 deletions src/Formats/EbookModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,20 @@ protected function sanitizeHtml(?string $html): ?string
return $html;
}

protected function toHtml(?string $html): ?string
{
$html = $this->sanitizeHtml($html);
if (! $html) {
return null;
}

if ($html === strip_tags($html)) {
return "<div>$html</div>";
}

return $html;
}

/**
* Clean string, remove tabs, new lines, carriage returns, and multiple spaces.
*/
Expand Down
6 changes: 5 additions & 1 deletion src/Formats/Epub/EpubMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public function toEbook(): Ebook
$authors = array_values($this->opf->getDcCreators());
$this->ebook->setAuthors($authors);
$this->ebook->setDescription($this->htmlToString($this->opf->getDcDescription()));
$this->ebook->setDescriptionHtml($this->sanitizeHtml($this->opf->getDcDescription()));
$this->ebook->setDescriptionHtml($this->toHtml($this->opf->getDcDescription()));
$this->ebook->setCopyright(! empty($this->opf->getDcRights()) ? implode(', ', $this->opf->getDcRights()) : null);
$this->ebook->setPublisher($this->opf->getDcPublisher());
$this->ebook->setIdentifiers($this->opf->getDcIdentifiers());
Expand Down Expand Up @@ -114,6 +114,10 @@ public function toEbook(): Ebook
'rating' => $rating,
]);

if ($this->ebook->getSeries() && ! $this->ebook->getVolume()) {
$this->ebook->setVolume(0);
}

return $this->ebook;
}

Expand Down
12 changes: 12 additions & 0 deletions tests/EpubTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,15 @@
expect($ebook->getDescription())->toBe("1re vague : Extinction des feux. 2e vague : Déferlante. 3e vague : Pandémie. 4e vague : Silence. À l'aube de la 5e vague, sur une autoroute désertée, Cassie tente de Leur échapper... Eux, ces êtres qui ressemblent trait pour trait aux humains et qui écument la campagne, exécutant quiconque a le malheur de croiser Leur chemin. Eux, qui ont balayé les dernières poches de résistance et dispersé les quelques rescapés. Pour Cassie, rester en vie signifie rester seule. Elle se raccroche à cette règle jusqu'à ce qu'elle rencontre Evan Walker. Mystérieux et envoûtant, ce garçon pourrait bien être son ultime espoir de sauver son petit frère. Du moins si Evan est bien celui qu'il prétend... Ils connaissent notre manière de penser. Ils savent commentr nous exterminer. Ils nous ont enlevé toute raison de vivre. Ils viennent nous arracher ce pour quoi nous sommes prêts à mourir.");
expect($ebook->getDescriptionHtml())->toBe("<div><p>1re vague : Extinction des feux.<br>2e vague : Déferlante.<br>3e vague : Pandémie.<br>4e vague : Silence.<br><br>À l'aube de la 5e vague, sur une autoroute désertée, Cassie tente de Leur échapper... Eux, ces êtres qui ressemblent trait pour trait aux humains et qui écument la campagne, exécutant quiconque a le malheur de croiser Leur chemin. Eux, qui ont balayé les dernières poches de résistance et dispersé les quelques rescapés.<br><br>Pour Cassie, rester en vie signifie rester seule. Elle se raccroche à cette règle jusqu'à ce qu'elle rencontre Evan Walker. Mystérieux et envoûtant, ce garçon pourrait bien être son ultime espoir de sauver son petit frère. Du moins si Evan est bien celui qu'il prétend...</p><p>Ils connaissent notre manière de penser.</p><p>Ils savent commentr nous exterminer.</p><p>Ils nous ont enlevé toute raison de vivre.</p><p>Ils viennent nous arracher ce pour quoi nous sommes prêts à mourir.</p></div>");
})->with([EPUB_DESCRIPTION]);

it('can parse epub with series but empty volume', function (string $path) {
$ebook = Ebook::read($path);

expect($ebook->getVolume())->toBe(0);
})->with([EPUB_VOL0]);

it('can parse epub with bad summary', function (string $path) {
$ebook = Ebook::read($path);

expect($ebook->getDescription())->not()->toContain("\n");
})->with([EPUB_EPEE_ET_MORT]);
2 changes: 2 additions & 0 deletions tests/Pest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
define('EPUB_NO_OPF', __DIR__.'/media/epub-no-opf.epub');
define('EPUB_BAD_FILE', __DIR__.'/media/epub-bad-file.epub');
define('EPUB_DESCRIPTION', __DIR__.'/media/epub-description.epub');
define('EPUB_VOL0', __DIR__.'/media/epub-vol-0.epub');
define('EPUB_EPEE_ET_MORT', __DIR__.'/media/epub-epee-et-mort.epub');

define('STANDARD_EPUB', __DIR__.'/media/alice-lewis-carroll-1.epub');
define('STANDARD_AZW3', __DIR__.'/media/alice-lewis-carroll-2.azw3');
Expand Down
Binary file added tests/media/epub-epee-et-mort.epub
Binary file not shown.
Binary file added tests/media/epub-vol-0.epub
Binary file not shown.

0 comments on commit 8ccde88

Please sign in to comment.