diff --git a/pom.xml b/pom.xml index d03769ad..0e4beca5 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ commons-io commons-io - 2.7 + 2.11.0 compile @@ -83,7 +83,7 @@ org.controlsfx controlsfx - 11.1.0 + 11.1.1 org.openjfx @@ -95,13 +95,13 @@ com.google.code.gson gson - 2.8.6 + 2.8.9 com.google.guava guava - 30.1.1-jre + 31.0.1-jre diff --git a/src/main/java/uk/yermak/audiobookconverter/AudiobookConverter.java b/src/main/java/uk/yermak/audiobookconverter/AudiobookConverter.java index 56942c4e..e406d2aa 100644 --- a/src/main/java/uk/yermak/audiobookconverter/AudiobookConverter.java +++ b/src/main/java/uk/yermak/audiobookconverter/AudiobookConverter.java @@ -16,8 +16,6 @@ import org.controlsfx.control.Notifications; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import uk.yermak.audiobookconverter.AppProperties; -import uk.yermak.audiobookconverter.Utils; import uk.yermak.audiobookconverter.Version; import uk.yermak.audiobookconverter.fx.ConversionContext; import uk.yermak.audiobookconverter.fx.JfxEnv; diff --git a/src/main/java/uk/yermak/audiobookconverter/Chapter.java b/src/main/java/uk/yermak/audiobookconverter/Chapter.java index 4e433203..24719f02 100644 --- a/src/main/java/uk/yermak/audiobookconverter/Chapter.java +++ b/src/main/java/uk/yermak/audiobookconverter/Chapter.java @@ -63,12 +63,6 @@ public long getDuration() { return media.stream().mapToLong(MediaInfo::getDuration).sum(); } -/* - public String getDurationString() { - return Utils.formatTime(getDuration()); - } -*/ - @Override public boolean split() { if (part.getChapters().size() == 1) { diff --git a/src/main/java/uk/yermak/audiobookconverter/ConversionException.java b/src/main/java/uk/yermak/audiobookconverter/ConversionException.java index d25b8294..1d1878a4 100644 --- a/src/main/java/uk/yermak/audiobookconverter/ConversionException.java +++ b/src/main/java/uk/yermak/audiobookconverter/ConversionException.java @@ -2,10 +2,6 @@ public class ConversionException extends RuntimeException { - public ConversionException(String message) { - super(message); - } - public ConversionException(String message, Throwable cause) { super(message, cause); } @@ -14,7 +10,4 @@ public ConversionException(Throwable cause) { super(cause); } - public ConversionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } } diff --git a/src/main/java/uk/yermak/audiobookconverter/ConversionGroup.java b/src/main/java/uk/yermak/audiobookconverter/ConversionGroup.java index a762cb44..b7f99014 100644 --- a/src/main/java/uk/yermak/audiobookconverter/ConversionGroup.java +++ b/src/main/java/uk/yermak/audiobookconverter/ConversionGroup.java @@ -139,15 +139,13 @@ public void launch(ListView progressQueue, ProgressComponent Chapter chapter = chapters.get(i); String finalDesination = outputDestination; if (chapters.size() > 1) { - finalDesination = finalDesination.replace("." + format.toString(), ", Chapter " + (i + 1) + "." + format.toString()); + finalDesination = finalDesination.replace("." + format.toString(), ", Chapter " + (i + 1) + "." + format); } String finalName = new File(finalDesination).getName(); logger.debug("Adding conversion for chapter {}", finalName); ConversionProgress conversionProgress = this.start(chapter, finalDesination); - Platform.runLater(() -> { - progressQueue.getItems().add(0, new ProgressComponent(conversionProgress)); - }); + Platform.runLater(() -> progressQueue.getItems().add(0, new ProgressComponent(conversionProgress))); } } else { @@ -156,15 +154,13 @@ public void launch(ListView progressQueue, ProgressComponent Part part = parts.get(i); String finalDesination = outputDestination; if (parts.size() > 1) { - finalDesination = finalDesination.replace("." + format.toString(), ", Part " + (i + 1) + "." + format.toString()); + finalDesination = finalDesination.replace("." + format.toString(), ", Part " + (i + 1) + "." + format); } String finalName = new File(finalDesination).getName(); logger.debug("Adding conversion for part {}", finalName); ConversionProgress conversionProgress = this.start(part, finalDesination); - Platform.runLater(() -> { - progressQueue.getItems().add(0, new ProgressComponent(conversionProgress)); - }); + Platform.runLater(() -> progressQueue.getItems().add(0, new ProgressComponent(conversionProgress))); } } diff --git a/src/main/java/uk/yermak/audiobookconverter/ConversionJob.java b/src/main/java/uk/yermak/audiobookconverter/ConversionJob.java index 87187370..7661b760 100644 --- a/src/main/java/uk/yermak/audiobookconverter/ConversionJob.java +++ b/src/main/java/uk/yermak/audiobookconverter/ConversionJob.java @@ -55,7 +55,6 @@ public void run() { String tempFile = Utils.getTmp(jobId, outputDestination.hashCode(), conversionGroup.getWorkfileExtension()); - File metaFile = null; try { // conversion.getOutputParameters().updateAuto(conversion.getMedia()); @@ -94,8 +93,6 @@ public void run() { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); error(e.getMessage() + "; " + sw.getBuffer().toString()); - } finally { - FileUtils.deleteQuietly(metaFile); } } diff --git a/src/main/java/uk/yermak/audiobookconverter/Environment.java b/src/main/java/uk/yermak/audiobookconverter/Environment.java index 3cf2dcd3..186ba50c 100644 --- a/src/main/java/uk/yermak/audiobookconverter/Environment.java +++ b/src/main/java/uk/yermak/audiobookconverter/Environment.java @@ -20,14 +20,14 @@ protected String getAppPath() { } @Override - protected File getConfigFilePath(File file) { + protected File getConfigFilePath() { return new File(getAppPath(), "Contents/app/path.properties"); } }, LINUX { @Override - protected File getConfigFilePath(File file) { + protected File getConfigFilePath() { return new File("../lib/app/path.properties"); } @@ -83,14 +83,13 @@ protected String getAppPath() { return ""; } - protected File getConfigFilePath(File file) { + protected File getConfigFilePath() { return new File("app/path.properties"); } synchronized Properties loadAppProperties() { if (properties.isEmpty()) { - File file = null; - file = getConfigFilePath(file); + File file = getConfigFilePath(); if (file.exists()) { try (FileInputStream in = new FileInputStream(file)) { diff --git a/src/main/java/uk/yermak/audiobookconverter/FFMediaLoader.java b/src/main/java/uk/yermak/audiobookconverter/FFMediaLoader.java index b63be59c..22e290d0 100644 --- a/src/main/java/uk/yermak/audiobookconverter/FFMediaLoader.java +++ b/src/main/java/uk/yermak/audiobookconverter/FFMediaLoader.java @@ -203,8 +203,7 @@ static void parseCue(MediaInfoBean mediaInfo, String cue) { private static long parseCueTime(String substring) { String cleanText = cleanText(substring); String[] split = cleanText.split(":"); - long time = 1000 * (Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1])) + Integer.parseInt(split[2]) * 1000 / 75; - return time; + return 1000 * (Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1])) + Integer.parseInt(split[2]) * 1000 / 75; } private static String cleanText(String text) { diff --git a/src/main/java/uk/yermak/audiobookconverter/FFMpegConcatenator.java b/src/main/java/uk/yermak/audiobookconverter/FFMpegConcatenator.java index 0444d8aa..482adb65 100644 --- a/src/main/java/uk/yermak/audiobookconverter/FFMpegConcatenator.java +++ b/src/main/java/uk/yermak/audiobookconverter/FFMpegConcatenator.java @@ -30,7 +30,6 @@ public class FFMpegConcatenator { private final ProgressCallback callback; private ProgressParser progressParser; private List tmpFiles = new ArrayList<>(); - private String fileListFileName; public FFMpegConcatenator(ConversionJob conversionJob, String outputFileName, MetadataBuilder metadataBuilder, List media, ProgressCallback callback) { this.conversionJob = conversionJob; @@ -49,14 +48,12 @@ protected static File prepareFiles(long jobId, List media, String wor public void concat() throws IOException, InterruptedException { if (conversionJob.getStatus().isOver()) return; - fileListFileName = prepareFiles(conversionJob.jobId, media, conversionJob.getConversionGroup().getWorkfileExtension()).getAbsolutePath(); + String fileListFileName = prepareFiles(conversionJob.jobId, media, conversionJob.getConversionGroup().getWorkfileExtension()).getAbsolutePath(); while (ProgressStatus.PAUSED.equals(conversionJob.getStatus())) Thread.sleep(1000); callback.reset(); try { - progressParser = new TcpProgressParser(progress -> { - callback.converted(progress.out_time_ns / 1000000, progress.total_size); - }); + progressParser = new TcpProgressParser(progress -> callback.converted(progress.out_time_ns / 1000000, progress.total_size)); progressParser.start(); } catch (URISyntaxException e) { } @@ -83,15 +80,15 @@ public void concat() throws IOException, InterruptedException { while (!conversionJob.getStatus().isOver() && !finished) { finished = process.waitFor(500, TimeUnit.MILLISECONDS); } - logger.debug("Concat Out: {}", out.toString()); - logger.error("Concat Error: {}", err.toString()); + logger.debug("Concat Out: {}", out); + logger.error("Concat Error: {}", err); if (process.exitValue() != 0) { throw new ConversionException("Concatenation exit code " + process.exitValue() + "!=0", new Error(err.toString())); } if (!new File(outputFileName).exists()) { - throw new ConversionException("Concatenation failed, no output file:" + out.toString(), new Error(err.toString())); + throw new ConversionException("Concatenation failed, no output file:" + out, new Error(err.toString())); } } catch (Exception e) { logger.error("Error during concatination of files:", e); diff --git a/src/main/java/uk/yermak/audiobookconverter/FFMpegNativeConverter.java b/src/main/java/uk/yermak/audiobookconverter/FFMpegNativeConverter.java index cf34a952..f7cb8203 100644 --- a/src/main/java/uk/yermak/audiobookconverter/FFMpegNativeConverter.java +++ b/src/main/java/uk/yermak/audiobookconverter/FFMpegNativeConverter.java @@ -69,8 +69,8 @@ public String call() throws Exception { while (!conversionJob.getStatus().isOver() && !finished) { finished = process.waitFor(500, TimeUnit.MILLISECONDS); } - logger.debug("ffmpeg out: {}", out.toString()); - logger.warn("ffmpeg err: {}", err.toString()); + logger.debug("ffmpeg out: {}", out); + logger.warn("ffmpeg err: {}", err); DurationVerifier.ffMpegUpdateDuration(mediaInfo, outputFileName); return outputFileName; diff --git a/src/main/java/uk/yermak/audiobookconverter/FFMpegOptimizer.java b/src/main/java/uk/yermak/audiobookconverter/FFMpegOptimizer.java index 41321f03..29eb28df 100644 --- a/src/main/java/uk/yermak/audiobookconverter/FFMpegOptimizer.java +++ b/src/main/java/uk/yermak/audiobookconverter/FFMpegOptimizer.java @@ -18,7 +18,6 @@ public class FFMpegOptimizer { private String tempFile; private final String outputFileName; - private final ProgressCallback callback; private ProgressParser progressParser; @@ -26,7 +25,6 @@ public FFMpegOptimizer(ConversionJob conversionJob, String tempFile, String outp this.conversionJob = conversionJob; this.tempFile = tempFile; this.outputFileName = outputFileName; - this.callback = callback; } @@ -45,7 +43,7 @@ public void moveResultingFile() { } } - private void optimize() throws IOException, InterruptedException { + private void optimize() throws InterruptedException { if (conversionJob.getStatus().isOver()) return; while (ProgressStatus.PAUSED.equals(conversionJob.getStatus())) Thread.sleep(1000); // callback.reset(); @@ -88,15 +86,15 @@ private void optimize() throws IOException, InterruptedException { while (!conversionJob.getStatus().isOver() && !finished) { finished = process.waitFor(500, TimeUnit.MILLISECONDS); } - logger.debug("Optimize Out: {}", out.toString()); - logger.error("Optimize Error: {}", err.toString()); + logger.debug("Optimize Out: {}", out); + logger.error("Optimize Error: {}", err); if (process.exitValue() != 0) { throw new ConversionException("Optimisation exit code " + process.exitValue() + "!=0", new Error(err.toString())); } if (!new File(Utils.getTmp(conversionJob.jobId, outputFileName.hashCode()+1, conversionJob.getConversionGroup().getWorkfileExtension())).exists()) { - throw new ConversionException("Optimisation failed, no output file:" + out.toString(), new Error(err.toString())); + throw new ConversionException("Optimisation failed, no output file:" + out, new Error(err.toString())); } } catch (Exception e) { logger.error("Error during optimisation of resulting file:", e); diff --git a/src/main/java/uk/yermak/audiobookconverter/FFmpegArtWorkExtractor.java b/src/main/java/uk/yermak/audiobookconverter/FFmpegArtWorkExtractor.java index 4e1dff6e..cbda93d0 100644 --- a/src/main/java/uk/yermak/audiobookconverter/FFmpegArtWorkExtractor.java +++ b/src/main/java/uk/yermak/audiobookconverter/FFmpegArtWorkExtractor.java @@ -28,7 +28,6 @@ public ArtWork call() throws Exception { if (conversionGroup.isOver() || conversionGroup.isStarted() || conversionGroup.isDetached()) throw new InterruptedException("ArtWork loading was interrupted"); String poster = Utils.getTmp(mediaInfo.hashCode(), stream, format); - //TODO consider replacing with m4art extract for m4b files ProcessBuilder pictureProcessBuilder = new ProcessBuilder(Environment.FFMPEG, "-i", mediaInfo.getFileName(), "-map", "0:" + stream, @@ -47,8 +46,8 @@ public ArtWork call() throws Exception { while (!conversionGroup.isOver() && !finished) { finished = process.waitFor(500, TimeUnit.MILLISECONDS); } - FFMediaLoader.logger.debug("ArtWork Out: {}", out.toString()); - FFMediaLoader.logger.error("ArtWork Error: {}", err.toString()); + FFMediaLoader.logger.debug("ArtWork Out: {}", out); + FFMediaLoader.logger.error("ArtWork Error: {}", err); ArtWorkBean artWorkBean = new ArtWorkBean(poster); Platform.runLater(() -> { diff --git a/src/main/java/uk/yermak/audiobookconverter/MediaInfo.java b/src/main/java/uk/yermak/audiobookconverter/MediaInfo.java index 8f0fc425..1fb62554 100644 --- a/src/main/java/uk/yermak/audiobookconverter/MediaInfo.java +++ b/src/main/java/uk/yermak/audiobookconverter/MediaInfo.java @@ -22,9 +22,9 @@ public interface MediaInfo extends Organisable { void setChapter(Chapter chapter); - public Chapter getChapter(); + Chapter getChapter(); - public int getUID(); + int getUID(); } \ No newline at end of file diff --git a/src/main/java/uk/yermak/audiobookconverter/MediaInfoProxy.java b/src/main/java/uk/yermak/audiobookconverter/MediaInfoProxy.java index b60e00d1..d97a5e9a 100644 --- a/src/main/java/uk/yermak/audiobookconverter/MediaInfoProxy.java +++ b/src/main/java/uk/yermak/audiobookconverter/MediaInfoProxy.java @@ -1,7 +1,6 @@ package uk.yermak.audiobookconverter; import java.util.List; -import java.util.Objects; import java.util.concurrent.Future; public class MediaInfoProxy implements MediaInfo { diff --git a/src/main/java/uk/yermak/audiobookconverter/Mp4v2ArtBuilder.java b/src/main/java/uk/yermak/audiobookconverter/Mp4v2ArtBuilder.java index 6d1b0f57..d2877679 100644 --- a/src/main/java/uk/yermak/audiobookconverter/Mp4v2ArtBuilder.java +++ b/src/main/java/uk/yermak/audiobookconverter/Mp4v2ArtBuilder.java @@ -33,7 +33,7 @@ public void coverArt(String outputFileName) throws IOException, InterruptedExcep } } - public void updateSinglePoster(ArtWork poster, int index, String outputFileName) throws IOException, InterruptedException { + public void updateSinglePoster(ArtWork poster, int index, String outputFileName) { Process process = null; try { ProcessBuilder artProcessBuilder = new ProcessBuilder(Environment.MP4ART, @@ -53,15 +53,15 @@ public void updateSinglePoster(ArtWork poster, int index, String outputFileName) while (!conversionJob.getStatus().isOver() && !finished) { finished = process.waitFor(500, TimeUnit.MILLISECONDS); } - logger.debug("mp4art out: {}", out.toString()); - logger.warn("mp4art err: {}", err.toString()); + logger.debug("mp4art out: {}", out); + logger.warn("mp4art err: {}", err); if (process.exitValue() != 0) { throw new ConversionException("ArtWork failed with code " + process.exitValue() + "!=0", new Error(err.toString())); } if (!new File(outputFileName).exists()) { - throw new ConversionException("ArtWork failed, no output file:" + out.toString(), new Error(err.toString())); + throw new ConversionException("ArtWork failed, no output file:" + out, new Error(err.toString())); } } catch (Exception e) { logger.error("Failed to apply art work", e); diff --git a/src/main/java/uk/yermak/audiobookconverter/Utils.java b/src/main/java/uk/yermak/audiobookconverter/Utils.java index e64e7a5a..7cf08c9a 100644 --- a/src/main/java/uk/yermak/audiobookconverter/Utils.java +++ b/src/main/java/uk/yermak/audiobookconverter/Utils.java @@ -162,9 +162,7 @@ public static String renderPart(Part part, Map> c ST partTemplate = new ST(g, partFormat); - context.forEach((key, value) -> { - partTemplate.add(key, value.apply(part)); - }); + context.forEach((key, value) -> partTemplate.add(key, value.apply(part))); String result = partTemplate.render(); char[] toRemove = new char[]{':', '\\', '/', '>', '<', '|', '?', '*', '"'}; diff --git a/src/main/java/uk/yermak/audiobookconverter/Version.java b/src/main/java/uk/yermak/audiobookconverter/Version.java index 4095cc9f..e5954aab 100644 --- a/src/main/java/uk/yermak/audiobookconverter/Version.java +++ b/src/main/java/uk/yermak/audiobookconverter/Version.java @@ -3,7 +3,7 @@ public class Version { public static String getVersionString() { - return "AudioBookConverter-5.6.3"; + return "AudiobookConverter-#{APP_VERSION}#"; } } diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/BookInfoController.java b/src/main/java/uk/yermak/audiobookconverter/fx/BookInfoController.java index 64e81d42..d808fd77 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/BookInfoController.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/BookInfoController.java @@ -85,7 +85,7 @@ private void initialize() { year.textProperty().addListener(o -> AudiobookConverter.getContext().getBookInfo().year().set(year.getText())); comment.textProperty().addListener(o -> AudiobookConverter.getContext().getBookInfo().comment().set(comment.getText())); - AudiobookConverter.getContext().addContextDetachListener(observable -> Platform.runLater(() -> clearTags())); + AudiobookConverter.getContext().addContextDetachListener(observable -> Platform.runLater(this::clearTags)); } private void updateTags(ObservableList media, boolean clear) { diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/ConversionContext.java b/src/main/java/uk/yermak/audiobookconverter/fx/ConversionContext.java index d6df0d57..0e581b26 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/ConversionContext.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/ConversionContext.java @@ -137,9 +137,7 @@ public void movePosterUp(final Integer selected) { } public void addPosterIfMissingWithDelay(ArtWork artWork) { - Platform.runLater(() -> { - addPosterIfMissing(artWork); - }); + Platform.runLater(() -> addPosterIfMissing(artWork)); } public void addPosterIfMissing(ArtWork artWork) { diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/DialogHelper.java b/src/main/java/uk/yermak/audiobookconverter/fx/DialogHelper.java index 697b66d7..f43fb4b6 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/DialogHelper.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/DialogHelper.java @@ -55,7 +55,7 @@ public static List selectFilesDialog() { Arrays.stream(FILE_EXTENSIONS).map(String::toUpperCase).forEach(filetypes::add); - fileChooser.setTitle("Select " + filetypes.toString() + " files for conversion"); + fileChooser.setTitle("Select " + filetypes + " files for conversion"); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Audio", Arrays.asList(toSuffixes("*.", FILE_EXTENSIONS)))); @@ -67,8 +67,7 @@ public static List selectFilesDialog() { File parentFile = firstFile.getParentFile(); AppProperties.setProperty("source.folder", parentFile.getAbsolutePath()); } - List fileNames = collectFiles(files); - return fileNames; + return collectFiles(files); } public static List selectFolderDialog() { @@ -81,14 +80,13 @@ public static List selectFolderDialog() { Arrays.stream(FILE_EXTENSIONS).map(String::toUpperCase).forEach(filetypes::add); - directoryChooser.setTitle("Select folder with " + filetypes.toString() + " files for conversion"); + directoryChooser.setTitle("Select folder with " + filetypes + " files for conversion"); File selectedDirectory = directoryChooser.showDialog(window); if (selectedDirectory == null) return null; AppProperties.setProperty("source.folder", selectedDirectory.getAbsolutePath()); - List fileNames = collectFiles(Collections.singleton(selectedDirectory)); - return fileNames; + return collectFiles(Collections.singleton(selectedDirectory)); } static List collectFiles(Collection files) { diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/OutputController.java b/src/main/java/uk/yermak/audiobookconverter/fx/OutputController.java index d635ef31..18075e95 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/OutputController.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/OutputController.java @@ -90,12 +90,9 @@ private void initialize() { AudiobookConverter.getContext().setSpeed(Double.valueOf(newValue)); }); force.getSelectionModel().select(0); - force.valueProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observableValue, String oldValue, String newValue) { - if (newValue == null) return; - AudiobookConverter.getContext().getOutputParameters().setForce(FORCE.equals(newValue)); - } + force.valueProperty().addListener((observableValue, oldValue, newValue) -> { + if (newValue == null) return; + AudiobookConverter.getContext().getOutputParameters().setForce(FORCE.equals(newValue)); }); outputFormatBox.getItems().addAll(Format.values()); diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/SubTracksDialog.java b/src/main/java/uk/yermak/audiobookconverter/fx/SubTracksDialog.java index db1a14a8..ff34eb08 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/SubTracksDialog.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/SubTracksDialog.java @@ -7,13 +7,11 @@ import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; import javafx.stage.Window; -import javafx.util.Callback; import javafx.util.Pair; import org.controlsfx.control.ToggleSwitch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.imageio.plugins.tiff.GeoTIFFTagSet; import java.io.IOException; import java.lang.invoke.MethodHandles; diff --git a/src/main/java/uk/yermak/audiobookconverter/fx/util/ContextMenuTreeTableRow.java b/src/main/java/uk/yermak/audiobookconverter/fx/util/ContextMenuTreeTableRow.java index ac87a0a9..c23cd86f 100644 --- a/src/main/java/uk/yermak/audiobookconverter/fx/util/ContextMenuTreeTableRow.java +++ b/src/main/java/uk/yermak/audiobookconverter/fx/util/ContextMenuTreeTableRow.java @@ -19,9 +19,7 @@ public static Callback, TreeTableRow> forListView(final row.setContextMenu(contextMenuBuilder.menu(row.getTreeItem().getValue())); } }); - row.selectedProperty().addListener((observableValue, prev, current) -> { - row.setContextMenu(contextMenuBuilder.menu(row.getTreeItem().getValue())); - }); + row.selectedProperty().addListener((observableValue, prev, current) -> row.setContextMenu(contextMenuBuilder.menu(row.getTreeItem().getValue()))); return row; }; } diff --git a/src/test/java/uk/yermak/audiobookconverter/DurationVerifierTest.java b/src/test/java/uk/yermak/audiobookconverter/DurationVerifierTest.java index cfeb2b3f..d29c1bf6 100644 --- a/src/test/java/uk/yermak/audiobookconverter/DurationVerifierTest.java +++ b/src/test/java/uk/yermak/audiobookconverter/DurationVerifierTest.java @@ -8,11 +8,12 @@ public class DurationVerifierTest { @Test public void testParseInfo() { - String info ="Track Type Info\n" + - "1 audio MPEG-4 AAC LC, 7137.041 secs, 119 kbps, 44100 Hz\n" + - "2 text\n" + - " Comments: null\n" + - " Media Type: Audio Book"; + String info = """ + Track Type Info + 1 audio MPEG-4 AAC LC, 7137.041 secs, 119 kbps, 44100 Hz + 2 text + Comments: null + Media Type: Audio Book"""; long l = DurationVerifier.parseDuration(info); assertEquals(l, 7137041);