Skip to content

Commit 71aab30

Browse files
committed
Fixed page handling when recreating a comic file [#2550]
1 parent 1f57b74 commit 71aab30

File tree

2 files changed

+33
-54
lines changed

2 files changed

+33
-54
lines changed

comixed-adaptors/src/main/java/org/comixedproject/adaptors/comicbooks/ComicBookAdaptor.java

Lines changed: 32 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.comixedproject.model.comicbooks.ComicBook;
4949
import org.comixedproject.model.comicbooks.ComicDetail;
5050
import org.comixedproject.model.comicpages.ComicPage;
51-
import org.comixedproject.model.comicpages.ComicPageType;
5251
import org.springframework.beans.factory.annotation.Autowired;
5352
import org.springframework.stereotype.Component;
5453

@@ -172,66 +171,45 @@ public void save(
172171
final ArchiveWriteHandle writeHandle =
173172
destinationArchive.openArchiveForWrite(temporaryFilename);
174173

175-
final List<ComicPage> oldPages = this.doRemoveOldPages(comicBook);
176174
final List<ComicArchiveEntry> sourceEntries = sourceArchive.getEntries(readHandle);
177-
final int length = String.valueOf(oldPages.size()).length();
178-
log.debug("Processing source archive entries");
179-
for (int index = 0; index < sourceEntries.size(); index++) {
180-
final ComicArchiveEntry entry = sourceEntries.get(index);
181-
String entryFilename = entry.getFilename();
182-
log.trace("Loading entry: {}", entryFilename);
183-
final byte[] entryContent = sourceArchive.readEntry(readHandle, entryFilename);
184-
final ContentAdaptor contentAdaptor =
185-
this.fileTypeAdaptor.getContentAdaptorFor(entryFilename, entryContent);
186-
if (contentAdaptor != null) {
187-
log.trace("Entry type: {}", contentAdaptor.getArchiveEntryType());
188-
if (contentAdaptor.getArchiveEntryType() == ArchiveEntryType.IMAGE) {
189-
boolean includePage = true;
190-
int entryPageNumber = comicBook.getPages().size();
175+
final int length = String.valueOf(comicBook.getPages().size()).length();
191176

192-
final String entryHash = this.genericUtilitiesAdaptor.createHash(entryContent);
193-
final ComicPage matchingPage =
194-
this.doFindMatchingPage(oldPages, entryFilename, entryHash);
195-
ComicPageType pageType = null;
196-
197-
if (Objects.nonNull(matchingPage)) {
198-
includePage = !matchingPage.isDeleted();
199-
pageType = matchingPage.getPageType();
200-
} else {
201-
log.debug("No matching page for: {}", entryFilename);
202-
}
203-
204-
if (includePage) {
205-
final ComicPage comicPage = new ComicPage(comicBook, entryFilename, entryPageNumber);
206-
207-
// adjust the page filenames
208-
if (!StringUtils.isBlank(pageRenamingRule)) {
209-
final String oldEntryFilename = comicPage.getFilename();
210-
entryFilename =
177+
for (int index = 0; index < comicBook.getPages().size(); index++) {
178+
final ComicPage page = comicBook.getPages().get(index);
179+
// only process if it's not deleted
180+
if (!page.isDeleted()) {
181+
final Optional<ComicArchiveEntry> sourceEntry =
182+
sourceEntries.stream()
183+
.filter(entry -> entry.getFilename().equals(page.getFilename()))
184+
.findFirst();
185+
if (sourceEntry.isPresent()) {
186+
final String entryFilename = sourceEntry.get().getFilename();
187+
final byte[] entryContent = sourceArchive.readEntry(readHandle, entryFilename);
188+
log.debug(
189+
"Getting content adaptor for file: {}#{}",
190+
comicBook.getComicDetail().getFilename(),
191+
entryFilename);
192+
final ContentAdaptor contentAdaptor =
193+
this.fileTypeAdaptor.getContentAdaptorFor(entryFilename, entryContent);
194+
if (Objects.nonNull(contentAdaptor)) {
195+
log.debug("Generating page details");
196+
page.setHash(this.genericUtilitiesAdaptor.createHash(entryContent));
197+
final BufferedImage image = ImageIO.read(new ByteArrayInputStream(entryContent));
198+
page.setWidth(image.getWidth());
199+
page.setHeight(image.getHeight());
200+
if (!StringUtils.isBlank((pageRenamingRule))) {
201+
final String pageFilename =
211202
this.comicPageAdaptor.createFilenameFromRule(
212-
FilenameUtils.getExtension(oldEntryFilename),
203+
FilenameUtils.getExtension(entryFilename),
213204
pageRenamingRule,
214-
comicPage.getPageNumber(),
205+
page.getPageNumber(),
215206
length);
216-
log.debug("Renamed page: {} => {}", oldEntryFilename, entryFilename);
217-
comicPage.setFilename(entryFilename);
207+
log.debug("Setting new filename: {} => {}", page.getFilename(), pageFilename);
208+
page.setFilename(pageFilename);
218209
}
219-
log.trace("Writing page: {}", entryFilename);
220-
destinationArchive.writeEntry(writeHandle, entryFilename, entryContent);
221-
final BufferedImage image = ImageIO.read(new ByteArrayInputStream(entryContent));
222-
comicPage.setWidth(image.getWidth());
223-
comicPage.setHeight(image.getHeight());
224-
comicPage.setHash(entryHash);
225-
if (Objects.nonNull(pageType)) {
226-
comicPage.setPageType(pageType);
227-
}
228-
comicBook.getPages().add(comicPage);
229-
}
230-
} else {
231-
if (!entryFilename.equalsIgnoreCase(COMIC_INFO_XML)) {
232-
log.trace("Writing non-page entry: {}", entryFilename);
233-
destinationArchive.writeEntry(writeHandle, entryFilename, entryContent);
234210
}
211+
log.trace("Writing page: {}", entryFilename);
212+
destinationArchive.writeEntry(writeHandle, page.getFilename(), entryContent);
235213
}
236214
}
237215
}

comixed-adaptors/src/test/java/org/comixedproject/adaptors/comicbooks/ComicBookAdaptorTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ void save_imageData_withRenameRule() throws AdaptorException, ArchiveAdaptorExce
399399
.thenReturn(TEST_IMAGE_DATA);
400400
Mockito.when(fileTypeAdaptor.getContentAdaptorFor(Mockito.anyString(), Mockito.any()))
401401
.thenReturn(contentAdaptor);
402+
Mockito.when(page.getFilename()).thenReturn(TEST_ENTRY_FILENAME, TEST_RENAMED_PAGE);
402403
Mockito.when(contentAdaptor.getArchiveEntryType()).thenReturn(ArchiveEntryType.IMAGE);
403404
Mockito.when(
404405
comicPageAdaptor.createFilenameFromRule(

0 commit comments

Comments
 (0)