Move UriScheme to extras module
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package com.replaymod.extras.urischeme;
|
||||
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.io.output.StringBuilderWriter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
public class LinuxUriScheme extends UriScheme {
|
||||
|
||||
@Override
|
||||
public void install() throws URISyntaxException, IOException {
|
||||
File file = new File("replaymod.desktop");
|
||||
File iconFile = new File("replaymod-icon.jpg");
|
||||
String path = ReplayMod.getContainer().getSource().getAbsolutePath().replace("\\", "\\\\").replace("\"", "\\\"");
|
||||
String content =
|
||||
"[Desktop Entry]\n" +
|
||||
"Name=ReplayMod\n" +
|
||||
"Exec=java -cp \"" + path + "\" " + UriScheme.class.getName() + " %u\n" +
|
||||
"Icon=" + iconFile.getAbsolutePath().replace("\\", "\\\\").replace("\"", "\\\"") + "\n" +
|
||||
"Type=Application\n" +
|
||||
"Terminal=false\n" +
|
||||
"MimeType=x-scheme-handler/replaymod;";
|
||||
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
try {
|
||||
IOUtils.write(content, out);
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
|
||||
InputStream in = LinuxUriScheme.class.getResourceAsStream("/assets/replaymod/logo.jpg");
|
||||
try {
|
||||
out = new FileOutputStream(iconFile);
|
||||
try {
|
||||
IOUtils.copy(in, out);
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
|
||||
String[] command = {"xdg-desktop-menu", "install", "--novendor", "replaymod.desktop"};
|
||||
Process process = new ProcessBuilder().command(command).start();
|
||||
try {
|
||||
if (process.waitFor() != 0) {
|
||||
StringBuilderWriter writer = new StringBuilderWriter();
|
||||
IOUtils.copy(process.getInputStream(), writer);
|
||||
IOUtils.copy(process.getErrorStream(), writer);
|
||||
throw new IOException(writer.toString());
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
|
||||
FileUtils.deleteQuietly(file);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user