From af986a720021e0baae953638065798f0a761d7ae Mon Sep 17 00:00:00 2001 From: Knut Forkalsrud Date: Sat, 2 Sep 2023 14:37:38 -0700 Subject: [PATCH] More robust handling of odd files --- .../album/exif/DirectoryMetadataGenerator.java | 14 +++++++++++++- .../org/forkalsrud/album/exif/SearchEngine.java | 12 ++++++++++-- .../org/forkalsrud/album/video/MovieCoder.java | 6 +++++- src/main/webapp/assets/render.js | 4 ++-- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java b/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java index adf8043..30edcf2 100644 --- a/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java +++ b/src/main/java/org/forkalsrud/album/exif/DirectoryMetadataGenerator.java @@ -17,6 +17,7 @@ import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; +import com.drew.imaging.jpeg.JpegProcessingException; import org.forkalsrud.album.db.DirectoryProps; import org.forkalsrud.album.video.MovieCoder; import org.slf4j.Logger; @@ -60,6 +61,10 @@ public class DirectoryMetadataGenerator { File[] files = dir.listFiles(); for (File f : files) { + if (f.length() == 0) { + continue; + } + String name = f.getName(); if (f.isDirectory()) { if ("CVS".equals(name)) { @@ -80,7 +85,9 @@ public class DirectoryMetadataGenerator { } if (name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".JPG")) { Map p = generateThumbnailProperties(f); - addPropsForFile(props, f, p); + if (p != null) { + addPropsForFile(props, f, p); + } } else if (name.endsWith(".mov") || name.endsWith(".MOV") || name.endsWith(".mp4") || name.endsWith(".m4v") || name.endsWith(".avi")) { Map p = movieCoder.generateVideoProperties(f); addPropsForFile(props, f, p); @@ -128,6 +135,11 @@ public class DirectoryMetadataGenerator { Metadata metadata; try { metadata = JpegMetadataReader.readMetadata(f); + } catch (JpegProcessingException e) { + // not a JPEG file + return null; + } + try { Directory exifDirectory = metadata.getDirectory(ExifIFD0Directory.class); if (exifDirectory != null && exifDirectory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) { int orientation = exifDirectory.getInt(ExifIFD0Directory.TAG_ORIENTATION); diff --git a/src/main/java/org/forkalsrud/album/exif/SearchEngine.java b/src/main/java/org/forkalsrud/album/exif/SearchEngine.java index 84113d5..93224c5 100644 --- a/src/main/java/org/forkalsrud/album/exif/SearchEngine.java +++ b/src/main/java/org/forkalsrud/album/exif/SearchEngine.java @@ -1,5 +1,7 @@ package org.forkalsrud.album.exif; +import java.io.File; +import java.nio.file.Path; import java.util.LinkedList; public class SearchEngine { @@ -8,12 +10,14 @@ public class SearchEngine { SearchResults results; LinkedList queue; + int rootPathLen; public SearchEngine(DirectoryEntry root) { this.root = root; this.results = new SearchResults(root); this.queue = new LinkedList(); this.queue.add(root); + this.rootPathLen = root.file.getAbsolutePath().length(); } public SearchResults search(String query) { @@ -32,7 +36,7 @@ public class SearchEngine { tryAttribute(dir, dir.getName(), query); tryAttribute(dir, dir.getCaption(), query); - tryAttribute(dir, dir.getPath().getAbsolutePath(), query); + tryPath(dir, dir.getPath(), query); for (Entry e : dir.getContents()) { if ("dir".equals(e.getType())) { @@ -42,10 +46,14 @@ public class SearchEngine { FileEntry file = (FileEntry)e; tryAttribute(file, file.getName(), query); tryAttribute(file, file.getCaption(), query); - tryAttribute(file, file.getPath().getAbsolutePath(), query); + tryPath(file, file.getPath(), query); } } + void tryPath(Entry entry, File path, String query) { + tryAttribute(entry, path.getAbsolutePath().substring(rootPathLen), query); + } + void tryAttribute(Entry entry, String attr, String query) { if (isMatch(attr, query)) { results.addMatch(entry); diff --git a/src/main/java/org/forkalsrud/album/video/MovieCoder.java b/src/main/java/org/forkalsrud/album/video/MovieCoder.java index b26d5a2..fe5d0df 100644 --- a/src/main/java/org/forkalsrud/album/video/MovieCoder.java +++ b/src/main/java/org/forkalsrud/album/video/MovieCoder.java @@ -197,7 +197,11 @@ public class MovieCoder { props.put("orientation", orientation); } - props.put("dimensions", userData.get("ImageSize").toString()); + Object imageSize = userData.get("ImageSize"); + if (imageSize == null) { + imageSize = props.get("ImageWidth") + "x" + props.get("ImageHeight"); + } + props.put("dimensions", imageSize.toString()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss"); props.put("captureDate", sdf.format(new Date(f.lastModified()))); diff --git a/src/main/webapp/assets/render.js b/src/main/webapp/assets/render.js index 0d588c2..c69bb61 100644 --- a/src/main/webapp/assets/render.js +++ b/src/main/webapp/assets/render.js @@ -42,8 +42,8 @@ $(function() { var gridDiv = $("
\n" + " " + entry.name + "
\n" - + " \n" + + " \n" + "
\n"); var captionP = $("

\n");