Skip to content

Commit

Permalink
Fixed recreate comic files adding the wrong file extension [#437]
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpierce committed Nov 2, 2021
1 parent a79a40b commit dd90379
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 15 deletions.
Expand Up @@ -24,7 +24,8 @@
import java.util.Optional;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
import org.codehaus.plexus.util.FileUtils;
import org.apache.commons.compress.utils.FileNameUtils;
import org.apache.commons.io.FileUtils;
import org.comixedproject.adaptors.AdaptorException;
import org.comixedproject.adaptors.archive.ArchiveAdaptor;
import org.comixedproject.adaptors.archive.ArchiveAdaptorException;
Expand Down Expand Up @@ -109,26 +110,22 @@ public void load(final Comic comic) throws AdaptorException {
* Renames pages if the flag is set.
*
* @param comic the comic
* @param archiveType the target format
* @param targetArchiveType the target format
* @param removeDeletedPages remove deleted pages flag
* @param renamePages rename pages flag
* @throws AdaptorException if an error occurs
*/
public void save(
final Comic comic,
final ArchiveType archiveType,
final ArchiveType targetArchiveType,
final boolean removeDeletedPages,
final boolean renamePages)
throws AdaptorException {
try {
final String temporaryFilename =
this.comicFileAdaptor.findAvailableFilename(
comic.getFilename(), 0, archiveType.getExtension());

final ArchiveAdaptor sourceArchive =
this.fileTypeAdaptor.getArchiveAdaptorFor(comic.getFilename());
final ArchiveAdaptor destinationArchive =
this.fileTypeAdaptor.getArchiveAdaptorFor(archiveType);
this.fileTypeAdaptor.getArchiveAdaptorFor(targetArchiveType);

if (removeDeletedPages) {
log.trace("Removing deleted pages from comic");
Expand All @@ -137,6 +134,12 @@ public void save(

log.trace("Preparing to save comic file");
final ArchiveReadHandle readHandle = sourceArchive.openArchiveForRead(comic.getFilename());

final String temporaryFilename =
File.createTempFile(
"comixed", targetArchiveType.getExtension(), FileUtils.getTempDirectory())
.getAbsolutePath();

final ArchiveWriteHandle writeHandle =
destinationArchive.openArchiveForWrite(temporaryFilename);

Expand All @@ -152,7 +155,7 @@ public void save(
@NonNull String pageFilename = page.getFilename();
if (renamePages) {
pageFilename =
String.format(PAGE_FILENAME_PATTERN, index, FileUtils.getExtension(pageFilename));
String.format(PAGE_FILENAME_PATTERN, index, FileNameUtils.getExtension(pageFilename));
}
log.trace("Writing comic page content: {}", pageFilename);
destinationArchive.writeEntry(writeHandle, pageFilename, content);
Expand All @@ -164,9 +167,12 @@ public void save(

log.trace("Replacing original file");
this.fileAdaptor.deleteFile(comic.getFile());
final String directory = comic.getFile().getAbsoluteFile().getParent();
final String destinationFilename =
this.comicFileAdaptor.findAvailableFilename(
comic.getFilename(), 0, archiveType.getExtension());
directory + File.separator + FileNameUtils.getBaseName(comic.getFilename()),
0,
targetArchiveType.getExtension());
log.trace("Copying file: {} => {}", temporaryFilename, destinationFilename);
this.fileAdaptor.moveFile(new File(temporaryFilename), new File(destinationFilename));
log.trace("Updating filename: {}", destinationFilename);
Expand Down
Expand Up @@ -57,13 +57,13 @@ public class ComicBookAdaptorTest {
private static final String TEST_FINAL_FILENAME = "The final filename";
private static final byte[] TEST_COMICINFO_XML_CONTENT = "ComicInfo.xml content".getBytes();
private static final int TEST_PAGE_INDEX = 0;
private static final String TEST_REAL_COMIC_FILE = "target/test-classes/example.cbz";

@InjectMocks private ComicBookAdaptor adaptor;
@Mock private FileTypeAdaptor fileTypeAdaptor;
@Mock private ArchiveAdaptor readableArchiveAdaptor;
@Mock private ArchiveAdaptor writeableArchiveAdaptor;
@Mock private Comic comic;
@Mock private File comicFile;
@Mock private Page page;
@Mock private ArchiveReadHandle readHandle;
@Mock private ArchiveWriteHandle writeHandle;
Expand All @@ -75,7 +75,9 @@ public class ComicBookAdaptorTest {

@Captor private ArgumentCaptor<File> moveSourceFile;
@Captor private ArgumentCaptor<File> moveDestinationFile;
@Captor private ArgumentCaptor<String> temporaryArchiveFile;

private File comicFile = new File(TEST_REAL_COMIC_FILE);
private List<ComicArchiveEntry> archiveEntryList = new ArrayList<>();
private List<Page> pageList = new ArrayList<>();

Expand All @@ -85,7 +87,7 @@ public void setUp()
Mockito.when(comic.getFilename()).thenReturn(TEST_COMIC_FILENAME);
Mockito.when(readableArchiveAdaptor.openArchiveForRead(Mockito.anyString()))
.thenReturn(readHandle);
Mockito.when(writeableArchiveAdaptor.openArchiveForWrite(Mockito.anyString()))
Mockito.when(writeableArchiveAdaptor.openArchiveForWrite(temporaryArchiveFile.capture()))
.thenReturn(writeHandle);
Mockito.when(fileTypeAdaptor.getArchiveAdaptorFor(Mockito.any(ArchiveType.class)))
.thenReturn(writeableArchiveAdaptor);
Expand All @@ -104,7 +106,7 @@ public void setUp()
Mockito.when(
comicFileAdaptor.findAvailableFilename(
Mockito.anyString(), Mockito.anyInt(), Mockito.anyString()))
.thenReturn(TEST_TEMPORARY_FILENAME, TEST_FINAL_FILENAME);
.thenReturn(TEST_FINAL_FILENAME);

Mockito.when(comic.getFile()).thenReturn(comicFile);
Mockito.when(comic.getPages()).thenReturn(pageList);
Expand Down Expand Up @@ -335,11 +337,14 @@ public void testSaveRenamePages()

adaptor.save(comic, TEST_ARCHIVE_TYPE, false, true);

final String temporaryArchiveFilename = temporaryArchiveFile.getValue();
assertNotNull(temporaryArchiveFilename);

Mockito.verify(fileTypeAdaptor, Mockito.times(1)).getArchiveAdaptorFor(TEST_COMIC_FILENAME);
Mockito.verify(readableArchiveAdaptor, Mockito.times(1))
.openArchiveForRead(TEST_COMIC_FILENAME);
Mockito.verify(writeableArchiveAdaptor, Mockito.times(1))
.openArchiveForWrite(TEST_TEMPORARY_FILENAME);
.openArchiveForWrite(temporaryArchiveFilename);
Mockito.verify(comicMetadataContentAdaptor, Mockito.times(1)).createContent(comic);
Mockito.verify(readableArchiveAdaptor, Mockito.times(1))
.readEntry(readHandle, TEST_ENTRY_FILENAME);
Expand All @@ -358,11 +363,14 @@ public void testSaveRemoveDeletedPages()

adaptor.save(comic, TEST_ARCHIVE_TYPE, true, false);

final String temporaryArchiveFilename = temporaryArchiveFile.getValue();
assertNotNull(temporaryArchiveFilename);

Mockito.verify(fileTypeAdaptor, Mockito.times(1)).getArchiveAdaptorFor(TEST_COMIC_FILENAME);
Mockito.verify(readableArchiveAdaptor, Mockito.times(1))
.openArchiveForRead(TEST_COMIC_FILENAME);
Mockito.verify(writeableArchiveAdaptor, Mockito.times(1))
.openArchiveForWrite(TEST_TEMPORARY_FILENAME);
.openArchiveForWrite(temporaryArchiveFilename);
Mockito.verify(comic, Mockito.times(1)).removeDeletedPages();
Mockito.verify(comicMetadataContentAdaptor, Mockito.times(1)).createContent(comic);
Mockito.verify(readableArchiveAdaptor, Mockito.times(1))
Expand Down

0 comments on commit dd90379

Please sign in to comment.