diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java index 9e534c9833..cc27d2e5e3 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java +++ b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java @@ -18,7 +18,7 @@ */ package com.basistech.df.cybertriage.autopsy; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/CTMalwareScannerOptionsPanel.java b/Core/src/com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/CTMalwareScannerOptionsPanel.java index deff21d423..f1a9037d33 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/CTMalwareScannerOptionsPanel.java +++ b/Core/src/com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/CTMalwareScannerOptionsPanel.java @@ -28,7 +28,7 @@ import com.basistech.df.cybertriage.autopsy.ctapi.json.LicenseLimitType; import com.basistech.df.cybertriage.autopsy.ctapi.json.LicenseResponse; import com.basistech.df.cybertriage.autopsy.ctapi.util.LicenseDecryptorUtil; import com.basistech.df.cybertriage.autopsy.ctapi.util.LicenseDecryptorUtil.InvalidLicenseException; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.io.IOException; diff --git a/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java b/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java index 92b04140c3..e583326cc4 100644 --- a/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java +++ b/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.actions; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; diff --git a/Core/src/org/sleuthkit/autopsy/actions/OpenOutputFolderAction.java b/Core/src/org/sleuthkit/autopsy/actions/OpenOutputFolderAction.java index efbbe11135..08e43d1412 100644 --- a/Core/src/org/sleuthkit/autopsy/actions/OpenOutputFolderAction.java +++ b/Core/src/org/sleuthkit/autopsy/actions/OpenOutputFolderAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.actions; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.io.File; import java.io.IOException; import java.util.logging.Level; diff --git a/Core/src/org/sleuthkit/autopsy/actions/OpenPythonModulesFolderAction.java b/Core/src/org/sleuthkit/autopsy/actions/OpenPythonModulesFolderAction.java index 16a3ea1891..3675903bb8 100644 --- a/Core/src/org/sleuthkit/autopsy/actions/OpenPythonModulesFolderAction.java +++ b/Core/src/org/sleuthkit/autopsy/actions/OpenPythonModulesFolderAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.actions; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; diff --git a/Core/src/org/sleuthkit/autopsy/actions/ThreadDumpAction.java b/Core/src/org/sleuthkit/autopsy/actions/ThreadDumpAction.java index dad577e8cb..07991f9d83 100755 --- a/Core/src/org/sleuthkit/autopsy/actions/ThreadDumpAction.java +++ b/Core/src/org/sleuthkit/autopsy/actions/ThreadDumpAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.actions; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionListener; import java.io.BufferedWriter; import java.io.File; diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index f3ed2a66cd..e3d2fc6fcf 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -41,7 +41,7 @@ import com.mxgraph.view.mxGraph; import com.mxgraph.view.mxGraphView; import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowPanel.java index 200b04a6bb..720f0dd462 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowPanel.java @@ -19,7 +19,7 @@ package org.sleuthkit.autopsy.corecomponents; import java.awt.Cursor; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.Window; import java.io.File; import java.io.IOException; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/OfflineHelpAction.java b/Core/src/org/sleuthkit/autopsy/corecomponents/OfflineHelpAction.java index 3981ac63b9..2aee2852cc 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/OfflineHelpAction.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/OfflineHelpAction.java @@ -18,12 +18,13 @@ */ package org.sleuthkit.autopsy.corecomponents; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; import java.io.IOException; import java.net.MalformedURLException; -import java.net.URI; +import java.nio.file.Paths; import org.netbeans.core.actions.HTMLViewAction; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; @@ -33,6 +34,7 @@ import org.openide.awt.HtmlBrowser; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import java.util.logging.Level; +import org.openide.modules.InstalledFileLocator; import org.sleuthkit.autopsy.coreutils.Logger; /** @@ -52,6 +54,10 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Messages("CTL_OfflineHelpAction=Offline Autopsy Documentation") public final class OfflineHelpAction implements ActionListener { + private static final String DOCS_FOLDER = "docs"; + private static final String HELP_HTML_FILE = "index.html"; + private static final String HELP_REL_PATH = Paths.get("..", DOCS_FOLDER, HELP_HTML_FILE).toString(); + private static final Logger logger = org.sleuthkit.autopsy.coreutils.Logger.getLogger(AboutWindowPanel.class.getName()); @@ -67,41 +73,42 @@ public final class OfflineHelpAction implements ActionListener { * Tested and working: Chrome, Firefox, IE Not tested: Opera, Safari */ private void viewOfflineHelp() { - String fileForHelp = ""; - String indexForHelp = ""; - String currentDirectory = ""; - URI uri = null; - - try { - // Match the form: file:///C:/some/directory/AutopsyXYZ/docs/index.html - fileForHelp = NbBundle.getMessage(OfflineHelpAction.class, "FILE_FOR_LOCAL_HELP"); - indexForHelp = NbBundle.getMessage(OfflineHelpAction.class, "INDEX_FOR_LOCAL_HELP"); - currentDirectory = System.getProperty("user.dir").replace("\\", "/").replace(" ", "%20"); //NON-NLS - uri = new URI(fileForHelp + currentDirectory + indexForHelp); - } catch (Exception ex) { - logger.log(Level.SEVERE, "Unable to load Offline Documentation: " - + fileForHelp + currentDirectory + indexForHelp, ex); //NON-NLS + + File systemHelpFile = getOfflineHelpFile(); + if (systemHelpFile == null) { + logger.log(Level.SEVERE, "Unable to load Offline Documentation file at relative path: " + HELP_REL_PATH); + return; } - if (uri != null) { - // Display URL in the System browser - if (Desktop.isDesktopSupported()) { - Desktop desktop = Desktop.getDesktop(); - try { - desktop.browse(uri); - } catch (IOException ex) { - logger.log(Level.SEVERE, "Unable to launch the system browser: " - + fileForHelp + currentDirectory + indexForHelp, ex); //NON-NLS - } - } else { - org.openide.awt.StatusDisplayer.getDefault().setStatusText( - NbBundle.getMessage(HTMLViewAction.class, "CTL_OpeningBrowser")); //NON-NLS - try { - HtmlBrowser.URLDisplayer.getDefault().showURL(uri.toURL()); - } catch (MalformedURLException ex) { - logger.log(Level.SEVERE, "Unable to launch the built-in browser: " - + fileForHelp + currentDirectory + indexForHelp, ex); //NON-NLS - } + + // Display URL in the System browser + if (Desktop.isDesktopSupported()) { + Desktop desktop = Desktop.getDesktop(); + try { + desktop.open(systemHelpFile); + return; + } catch (IOException ex) { + logger.log(Level.SEVERE, "Unable to launch the system browser: " + + systemHelpFile, ex); //NON-NLS } } + + org.openide.awt.StatusDisplayer.getDefault().setStatusText( + NbBundle.getMessage(HTMLViewAction.class, "CTL_OpeningBrowser")); //NON-NLS + try { + HtmlBrowser.URLDisplayer.getDefault().showURL(systemHelpFile.toURI().toURL()); + } catch (MalformedURLException ex) { + logger.log(Level.SEVERE, "Unable to launch the built-in browser: " + + systemHelpFile, ex); //NON-NLS + } + + } + + + + private File getOfflineHelpFile() { + return InstalledFileLocator.getDefault().locate( + HELP_REL_PATH, + OfflineHelpAction.class.getPackage().getName(), + false); } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/OnlineHelpAction.java b/Core/src/org/sleuthkit/autopsy/corecomponents/OnlineHelpAction.java index e75a421b3a..ced8ad8c35 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/OnlineHelpAction.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/OnlineHelpAction.java @@ -20,7 +20,7 @@ package org.sleuthkit.autopsy.corecomponents; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/Desktop.java b/Core/src/org/sleuthkit/autopsy/coreutils/Desktop.java new file mode 100644 index 0000000000..bb7302ba98 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/coreutils/Desktop.java @@ -0,0 +1,146 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2023 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.coreutils; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import org.apache.commons.lang3.SystemUtils; + +/** + * Wrapper for java.awt.Desktop to handle some situations that java.awt.Desktop + * doesn't. + */ +public class Desktop { + + private static final Logger LOGGER = Logger.getLogger(Desktop.class.getName()); + private static final long XDG_TIMEOUT_SECS = 30; + + private static Boolean xdgSupported = null; + + private static boolean isXdgSupported() { + if (xdgSupported == null) { + xdgSupported = false; + if (SystemUtils.IS_OS_LINUX) { + try { + xdgSupported = Runtime.getRuntime().exec(new String[]{"which", "xdg-open"}).getInputStream().read() != -1; + } catch (IOException ex) { + LOGGER.log(Level.WARNING, "There was an error running 'which xdg-open' ", ex); + } + } + } + + return xdgSupported; + } + + /** + * @return True if this class's external calls can be used on this operating + * system. + */ + public static boolean isDesktopSupported() { + return java.awt.Desktop.isDesktopSupported() || isXdgSupported(); + } + + private static Desktop instance = null; + + /** + * @return A singleton instance of this class. + */ + public static Desktop getDesktop() { + if (instance == null) { + instance = new Desktop(java.awt.Desktop.getDesktop()); + } + + return instance; + } + + private final java.awt.Desktop awtDesktop; + + /** + * Private constructor for this wrapper. + * + * @param awtDesktop The delegate java.awt.Desktop. + */ + private Desktop(java.awt.Desktop awtDesktop) { + this.awtDesktop = awtDesktop; + } + + /** + * Opens a given path using `xdg-open` on linux. + * + * @param path The path. + * @throws IOException + */ + private void xdgOpen(String path) throws IOException { + Process process = Runtime.getRuntime().exec(new String[]{"xdg-open", path}); + try { + process.waitFor(XDG_TIMEOUT_SECS, TimeUnit.SECONDS); + } catch (InterruptedException ex) { + throw new IOException("xdg-open timed out", ex); + } + int exitCode = process.exitValue(); + if (exitCode != 0) { + throw new IOException("Received non-zero exit code from xdg-open: " + exitCode); + } + } + + /** + * Triggers the OS to navigate to the given uri. + * + * @param uri The uri. + * @throws IOException + */ + public void browse(URI uri) throws IOException { + if (!awtDesktop.isSupported(java.awt.Desktop.Action.BROWSE) && isXdgSupported()) { + xdgOpen(uri.toString()); + } else { + awtDesktop.browse(uri); + } + } + + /** + * Triggers the OS to open the given file. + * + * @param file The file. + * @throws IOException + */ + public void open(File file) throws IOException { + if (!awtDesktop.isSupported(java.awt.Desktop.Action.OPEN) && isXdgSupported()) { + xdgOpen(file.getAbsolutePath()); + } else { + awtDesktop.open(file); + } + } + + /** + * Triggers the OS to edit the given file. + * + * @param file The file. + * @throws IOException + */ + public void edit(File file) throws IOException { + if (!awtDesktop.isSupported(java.awt.Desktop.Action.EDIT) && isXdgSupported()) { + xdgOpen(file.getAbsolutePath()); + } else { + awtDesktop.edit(file); + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java index 020a2499fa..7435caaf87 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.directorytree; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverIngestJobSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverIngestJobSettingsPanel.java index 1efafafd24..5fe1f1b76b 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverIngestJobSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverIngestJobSettingsPanel.java @@ -20,7 +20,7 @@ package org.sleuthkit.autopsy.modules.photoreccarver; import java.awt.Color; import java.awt.Cursor; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; diff --git a/Core/src/org/sleuthkit/autopsy/modules/yara/ui/RuleSetDetailsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/yara/ui/RuleSetDetailsPanel.java index ef6a347921..bc241acd9e 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/yara/ui/RuleSetDetailsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/yara/ui/RuleSetDetailsPanel.java @@ -19,7 +19,7 @@ package org.sleuthkit.autopsy.modules.yara.ui; import java.awt.Component; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.io.File; import java.io.IOException; import java.util.List; diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportProgressPanel.java b/Core/src/org/sleuthkit/autopsy/report/ReportProgressPanel.java index f5d8e58aab..b167d2b1b5 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportProgressPanel.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportProgressPanel.java @@ -21,7 +21,7 @@ package org.sleuthkit.autopsy.report; import org.openide.util.NbBundle; import java.awt.Color; import java.awt.Cursor; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.EventQueue; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslatorSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslatorSettingsPanel.java index 1f0cf2c9df..0dfa7c7a1a 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslatorSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslatorSettingsPanel.java @@ -29,7 +29,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.net.URISyntaxException; import okhttp3.MediaType; import okhttp3.OkHttpClient; diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslatorSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslatorSettingsPanel.java index f790a9541b..df42b732cf 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslatorSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslatorSettingsPanel.java @@ -24,7 +24,7 @@ import com.google.cloud.translate.Language; import com.google.cloud.translate.Translate; import com.google.cloud.translate.TranslateOptions; import com.google.cloud.translate.Translation; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ItemListener; import java.io.File; import java.io.FileInputStream; diff --git a/Core/src/org/sleuthkit/autopsy/timeline/actions/SaveSnapshotAsReport.java b/Core/src/org/sleuthkit/autopsy/timeline/actions/SaveSnapshotAsReport.java index c713f73ef1..c3aa59cd8c 100755 --- a/Core/src/org/sleuthkit/autopsy/timeline/actions/SaveSnapshotAsReport.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/actions/SaveSnapshotAsReport.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.timeline.actions; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.file.InvalidPathException; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestAdminActions.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestAdminActions.java index 6680074a17..3171785909 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestAdminActions.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestAdminActions.java @@ -19,7 +19,7 @@ package org.sleuthkit.autopsy.experimental.autoingest; import java.awt.Cursor; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.io.IOException; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java index fdecd191f3..2de909ddb9 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java @@ -20,7 +20,7 @@ package org.sleuthkit.autopsy.experimental.autoingest; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.awt.Cursor; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.EventQueue; import java.io.IOException; import java.nio.file.Path; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestMonitor.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestMonitor.java index 0022cf6609..fa5d770eb0 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestMonitor.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestMonitor.java @@ -19,7 +19,7 @@ package org.sleuthkit.autopsy.experimental.autoingest; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.BufferedWriter; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseImportPanel.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseImportPanel.java index 7216f16816..30e35c57ad 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseImportPanel.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/CaseImportPanel.java @@ -19,7 +19,7 @@ package org.sleuthkit.autopsy.experimental.autoingest; import java.awt.Color; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.EventQueue; import java.awt.Font; import java.io.File; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/OpenAutoIngestLogAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/OpenAutoIngestLogAction.java index d88f7fdd24..5cc7d2c723 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/OpenAutoIngestLogAction.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/OpenAutoIngestLogAction.java @@ -18,7 +18,7 @@ */ package org.sleuthkit.autopsy.experimental.autoingest; -import java.awt.Desktop; +import org.sleuthkit.autopsy.coreutils.Desktop; import java.awt.event.ActionEvent; import java.io.IOException; import java.nio.file.Path;