99 lines
3.2 KiB
Java
99 lines
3.2 KiB
Java
package ctbrec.ui;
|
|
|
|
import java.awt.Desktop;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.net.URI;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import javafx.geometry.Insets;
|
|
import javafx.scene.control.Alert;
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.control.TextField;
|
|
import javafx.scene.layout.BorderPane;
|
|
|
|
public class DesktopIntegration {
|
|
|
|
private static final transient Logger LOG = LoggerFactory.getLogger(DesktopIntegration.class);
|
|
|
|
public static void open(String uri) {
|
|
try {
|
|
CamrecApplication.hostServices.showDocument(uri);
|
|
return;
|
|
} catch (Exception e) {
|
|
LOG.debug("Couldn't open URL with host services {}", uri);
|
|
}
|
|
|
|
// opening with HostServices failed, now try Desktop
|
|
try {
|
|
Desktop.getDesktop().browse(new URI(uri));
|
|
return;
|
|
} catch (Exception e) {
|
|
LOG.debug("Couldn't open URL with Desktop {}", uri);
|
|
}
|
|
|
|
// try external helpers
|
|
String[] externalHelpers = {"kde-open5", "kde-open", "gnome-open", "xdg-open"};
|
|
Runtime rt = Runtime.getRuntime();
|
|
for (String helper : externalHelpers) {
|
|
try {
|
|
rt.exec(helper + " " + uri);
|
|
return;
|
|
} catch (IOException e) {
|
|
LOG.debug("Couldn't open URL with {} {}", helper, uri);
|
|
}
|
|
}
|
|
|
|
// all attempts failed, show a dialog with URL at least
|
|
Alert info = new AutosizeAlert(Alert.AlertType.ERROR);
|
|
info.setTitle("Open URL");
|
|
info.setContentText("Couldn't open URL");
|
|
BorderPane pane = new BorderPane();
|
|
pane.setTop(new Label());
|
|
TextField urlField = new TextField(uri);
|
|
urlField.setPadding(new Insets(10));
|
|
urlField.setEditable(false);
|
|
pane.setCenter(urlField);
|
|
info.getDialogPane().setExpandableContent(pane);
|
|
info.getDialogPane().setExpanded(true);
|
|
info.show();
|
|
}
|
|
|
|
public static void open(File f) {
|
|
try {
|
|
Desktop.getDesktop().open(f);
|
|
return;
|
|
} catch (Exception e) {
|
|
LOG.debug("Couldn't open file with Desktop {}", f);
|
|
}
|
|
|
|
// try external helpers
|
|
String[] externalHelpers = {"kde-open5", "kde-open", "gnome-open", "xdg-open"};
|
|
Runtime rt = Runtime.getRuntime();
|
|
for (String helper : externalHelpers) {
|
|
try {
|
|
rt.exec(helper + " " + f.getAbsolutePath());
|
|
return;
|
|
} catch (IOException e) {
|
|
LOG.debug("Couldn't open file with {} {}", helper, f);
|
|
}
|
|
}
|
|
|
|
// all attempts failed, show a dialog with path at least
|
|
Alert info = new AutosizeAlert(Alert.AlertType.ERROR);
|
|
info.setTitle("Open file");
|
|
info.setContentText("Couldn't open file");
|
|
BorderPane pane = new BorderPane();
|
|
pane.setTop(new Label());
|
|
TextField urlField = new TextField(f.toString());
|
|
urlField.setPadding(new Insets(10));
|
|
urlField.setEditable(false);
|
|
pane.setCenter(urlField);
|
|
info.getDialogPane().setExpandableContent(pane);
|
|
info.getDialogPane().setExpanded(true);
|
|
info.show();
|
|
}
|
|
}
|