|
48 | 48 | import org.comixedproject.model.comicbooks.ComicBook; |
49 | 49 | import org.comixedproject.model.comicbooks.ComicDetail; |
50 | 50 | import org.comixedproject.model.comicpages.ComicPage; |
51 | | -import org.comixedproject.model.comicpages.ComicPageType; |
52 | 51 | import org.springframework.beans.factory.annotation.Autowired; |
53 | 52 | import org.springframework.stereotype.Component; |
54 | 53 |
|
@@ -172,66 +171,45 @@ public void save( |
172 | 171 | final ArchiveWriteHandle writeHandle = |
173 | 172 | destinationArchive.openArchiveForWrite(temporaryFilename); |
174 | 173 |
|
175 | | - final List<ComicPage> oldPages = this.doRemoveOldPages(comicBook); |
176 | 174 | 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(); |
191 | 176 |
|
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 = |
211 | 202 | this.comicPageAdaptor.createFilenameFromRule( |
212 | | - FilenameUtils.getExtension(oldEntryFilename), |
| 203 | + FilenameUtils.getExtension(entryFilename), |
213 | 204 | pageRenamingRule, |
214 | | - comicPage.getPageNumber(), |
| 205 | + page.getPageNumber(), |
215 | 206 | 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); |
218 | 209 | } |
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); |
234 | 210 | } |
| 211 | + log.trace("Writing page: {}", entryFilename); |
| 212 | + destinationArchive.writeEntry(writeHandle, page.getFilename(), entryContent); |
235 | 213 | } |
236 | 214 | } |
237 | 215 | } |
|
0 commit comments