Riccardo Azzolini
d8f401cb22
.zip files were only used to cache compiled Java rules, and the new rule system has nothing to cache.
201 lines
5.0 KiB
Java
201 lines
5.0 KiB
Java
package it.cavallium.warppi.desktop;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
import java.net.URL;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.apache.commons.io.FileUtils;
|
|
|
|
import it.cavallium.warppi.Engine;
|
|
import it.cavallium.warppi.Platform;
|
|
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
|
|
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
|
|
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingEngine;
|
|
import it.cavallium.warppi.util.CacheUtils;
|
|
import it.cavallium.warppi.util.Error;
|
|
|
|
public class DesktopPlatform implements Platform {
|
|
|
|
private final DesktopConsoleUtils cu;
|
|
private final DesktopGpio gi;
|
|
private final DesktopStorageUtils su;
|
|
private final ImageUtils pu;
|
|
private final String on;
|
|
private final Map<String, GraphicEngine> el;
|
|
private final DesktopSettings settings;
|
|
private Boolean runningOnRaspberryOverride = null;
|
|
|
|
public DesktopPlatform() {
|
|
cu = new DesktopConsoleUtils();
|
|
gi = new DesktopGpio();
|
|
su = new DesktopStorageUtils();
|
|
pu = new DesktopImageUtils();
|
|
on = System.getProperty("os.name").toLowerCase();
|
|
el = new HashMap<>();
|
|
el.put("CPU engine", new SwingEngine());
|
|
el.put("GPU engine", new JOGLEngine());
|
|
settings = new DesktopSettings();
|
|
}
|
|
|
|
@Override
|
|
public ConsoleUtils getConsoleUtils() {
|
|
return cu;
|
|
}
|
|
|
|
@Override
|
|
public Gpio getGpio() {
|
|
return gi;
|
|
}
|
|
|
|
@Override
|
|
public StorageUtils getStorageUtils() {
|
|
return su;
|
|
}
|
|
|
|
@Override
|
|
public ImageUtils getImageUtils() {
|
|
return pu;
|
|
}
|
|
|
|
@Override
|
|
public DesktopSettings getSettings() {
|
|
return settings;
|
|
}
|
|
|
|
@Override
|
|
public void setThreadName(final Thread t, final String name) {
|
|
t.setName(name);
|
|
}
|
|
|
|
@Override
|
|
public void setThreadDaemon(final Thread t) {
|
|
t.setDaemon(true);
|
|
}
|
|
|
|
@Override
|
|
public void setThreadDaemon(final Thread t, final boolean value) {
|
|
t.setDaemon(value);
|
|
}
|
|
|
|
@Override
|
|
public void exit(final int value) {
|
|
System.exit(value);
|
|
}
|
|
|
|
@Override
|
|
public void gc() {
|
|
System.gc();
|
|
}
|
|
|
|
@Override
|
|
public boolean isJavascript() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public String getOsName() {
|
|
return on;
|
|
}
|
|
|
|
@Override
|
|
public void alphaChanged(final boolean val) {
|
|
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
|
|
if (currentEngine instanceof SwingEngine)
|
|
((SwingEngine) currentEngine).setAlphaChanged(val);
|
|
}
|
|
|
|
@Override
|
|
public void shiftChanged(final boolean val) {
|
|
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
|
|
if (currentEngine instanceof SwingEngine)
|
|
((SwingEngine) currentEngine).setShiftChanged(val);
|
|
}
|
|
|
|
@Override
|
|
public Semaphore newSemaphore() {
|
|
return new DesktopSemaphore(0);
|
|
}
|
|
|
|
@Override
|
|
public Semaphore newSemaphore(final int i) {
|
|
return new DesktopSemaphore(i);
|
|
}
|
|
|
|
@Override
|
|
public URLClassLoader newURLClassLoader(final URL[] urls) {
|
|
return new DesktopURLClassLoader(urls);
|
|
}
|
|
|
|
@Override
|
|
public Map<String, GraphicEngine> getEnginesList() {
|
|
return el;
|
|
}
|
|
|
|
@Override
|
|
public GraphicEngine getEngine(final String string) throws NullPointerException {
|
|
return el.get(string);
|
|
}
|
|
|
|
@Override
|
|
public void throwNewExceptionInInitializerError(final String text) {
|
|
throw new ExceptionInInitializerError();
|
|
}
|
|
|
|
@Override
|
|
public String[] stacktraceToString(final Error e) {
|
|
final StringWriter sw = new StringWriter();
|
|
final PrintWriter pw = new PrintWriter(sw);
|
|
e.printStackTrace(pw);
|
|
return sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n");
|
|
}
|
|
|
|
@Override
|
|
public List<String> getRuleFilePaths() throws IOException {
|
|
final File dslRulesPath = getStorageUtils().get("rules/");
|
|
List<String> paths = new ArrayList<>();
|
|
if (dslRulesPath.exists()) {
|
|
for (final File file : getStorageUtils().walk(dslRulesPath)) {
|
|
final String path = file.toString();
|
|
if (path.endsWith(".rules")) {
|
|
paths.add(path);
|
|
}
|
|
}
|
|
}
|
|
return paths;
|
|
}
|
|
|
|
@Override
|
|
public void setRunningOnRaspberry(boolean b) {
|
|
if (isRunningOnRaspberry()) {
|
|
runningOnRaspberryOverride = b;
|
|
} else {
|
|
runningOnRaspberryOverride = false;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isRunningOnRaspberry() {
|
|
if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride;
|
|
return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> {
|
|
if (Engine.getPlatform().isJavascript())
|
|
return false;
|
|
if (Engine.getPlatform().getOsName().equals("Linux"))
|
|
try {
|
|
final File osRelease = new File("/etc", "os-release");
|
|
return FileUtils.readLines(osRelease, "UTF-8").stream().map(String::toLowerCase).anyMatch(line -> line.contains("raspbian") && line.contains("name"));
|
|
} catch (final IOException readException) {
|
|
return false;
|
|
}
|
|
else
|
|
return false;
|
|
});
|
|
}
|
|
|
|
}
|