diff --git a/libresonic-main/src/main/java/org/libresonic/player/service/TranscodingService.java b/libresonic-main/src/main/java/org/libresonic/player/service/TranscodingService.java index 36871490..f28da40f 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/service/TranscodingService.java +++ b/libresonic-main/src/main/java/org/libresonic/player/service/TranscodingService.java @@ -329,8 +329,8 @@ public class TranscodingService { title = "Unknown Artist"; } - List result = new LinkedList(Arrays.asList(StringUtil.split(command))); - result.set(0, getTranscodeDirectory().getPath() + File.separatorChar + result.get(0)); + List result = new LinkedList<>(Arrays.asList(StringUtil.split(command))); + result.set(0, getExecutableName(result)); File tmpFile = null; @@ -381,6 +381,20 @@ public class TranscodingService { return new TranscodeInputStream(new ProcessBuilder(result), in, tmpFile); } + private String getExecutableName(List transcodeTokens) { + String executableName = transcodeTokens.get(0); + String transcodeDirectoryPath = getTranscodeDirectory().getPath() + File.separatorChar + executableName; + File file = new File(transcodeDirectoryPath); + if(file.exists()) { + if(!file.canExecute()) { + throw new RuntimeException("Transcoder is not executable at " + transcodeDirectoryPath); + } + return transcodeDirectoryPath; + } else { + return executableName; + } + } + /** * Returns an applicable transcoding for the given file and player, or null if no * transcoding should be done.