implemented checking for required applications

This commit is contained in:
2022-01-07 18:49:54 +01:00
parent 76373c99ab
commit 4681f6f079
3 changed files with 41 additions and 6 deletions

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>BelegScanner</groupId>
<artifactId>BelegScanner</artifactId>
<version>1.0.4</version>
<version>1.0.5</version>
<name>BelegScanner</name>
<packaging>jar</packaging>

View File

@@ -17,6 +17,7 @@ public class Application {
Configuration config = new Configuration(Constants.APPLICATION_NAME);
MainFrame app = new MainFrame(config);
app.setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE);
app.checkDependencies();
}
/**

View File

@@ -8,17 +8,16 @@ import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.*;
import java.util.Map.Entry;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
@@ -32,6 +31,7 @@ import org.slf4j.LoggerFactory;
import static de.srsoftware.belegscanner.Application.*;
import de.srsoftware.belegscanner.Configuration;
import de.srsoftware.belegscanner.Constants;
/**
@@ -136,7 +136,25 @@ public class MainFrame extends JFrame {
while (matches.find()) marks.add(matches.group(1));
toolbar.addFieldsFor(marks);
};
public void checkDependencies() {
List<String> missing = List.of("convert --version", "killall --version", "pdfsandwich -version", "pdftk --version", "scanimage --version",Constants.FILE_BROWSER+" --version").stream().map(this::appMissing).filter(app -> app != null).collect(Collectors.toList());
if (!missing.isEmpty()) notifyAppsMissing(missing);
}
public String appMissing(String appTest){
List<String> cmd = Arrays.asList(appTest.split(" "));
try {
Process process = new ProcessBuilder(cmd).start();
int errorCode = process.waitFor();
if (errorCode == 0) return null;
} catch (InterruptedException | IOException e) {
LOG.error(t("{} terminated: "),appTest,e);
}
return cmd.get(0);
}
/**
* checks, whether the scan button may be enabled.
*/
@@ -144,6 +162,22 @@ public class MainFrame extends JFrame {
toolbar.readyToScan(!(isScanning || patchedPath==null || patchedPath.isBlank() || patchedPath.contains("$")));
}
private void notifyAppsMissing(List<String> missingApps) {
StringBuilder message = new StringBuilder();
message.append("<html>");
message.append(t("This application requires the following helper commands to be installed:"));
message.append("<ul>");
missingApps.forEach(app -> message.append("<li>").append(app).append("</li>"));
message.append("</ul>");
JOptionPane.showMessageDialog(this,
message,
t("Apps missing"),
JOptionPane.WARNING_MESSAGE);
System.exit(-1);
}
/**
* scan a new document, convert it to pdf and perform text recognition
* @param path