Merge branch 'sleuthkit:develop' into develop

This commit is contained in:
Seb2lyon 2021-05-12 18:53:55 +02:00
commit ea32abf166

View File

@ -29,6 +29,7 @@ import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
import java.io.File; import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.InvalidPathException; import java.nio.file.InvalidPathException;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -1214,9 +1215,7 @@ public class Case {
/** /**
* Update the GUI to to reflect the current case. * Update the GUI to to reflect the current case.
*/ */
private static void updateGUIForCaseOpened(Case newCurrentCase) { private static void updateGUIForCaseOpened(Case newCurrentCase) {
if (RuntimeProperties.runningWithGUI()) {
SwingUtilities.invokeLater(() -> {
/* /*
* If the case database was upgraded for a new schema and a * If the case database was upgraded for a new schema and a
* backup database was created, notify the user. * backup database was created, notify the user.
@ -1242,17 +1241,31 @@ public class Case {
String path = entry.getValue(); String path = entry.getValue();
boolean fileExists = (new File(path).isFile() || DriveUtils.driveExists(path)); boolean fileExists = (new File(path).isFile() || DriveUtils.driveExists(path));
if (!fileExists) { if (!fileExists) {
int response = JOptionPane.showConfirmDialog( try {
mainFrame, // Using invokeAndWait means that the dialog will
NbBundle.getMessage(Case.class, "Case.checkImgExist.confDlg.doesntExist.msg", path), // open on the EDT but this thread will wait for an
NbBundle.getMessage(Case.class, "Case.checkImgExist.confDlg.doesntExist.title"), // answer. Using invokeLater would cause this loop to
JOptionPane.YES_NO_OPTION); // end before all of the dialogs appeared.
if (response == JOptionPane.YES_OPTION) { SwingUtilities.invokeAndWait(new Runnable() {
MissingImageDialog.makeDialog(obj_id, caseDb); @Override
} else { public void run() {
logger.log(Level.SEVERE, "User proceeding with missing image files"); //NON-NLS int response = JOptionPane.showConfirmDialog(
mainFrame,
NbBundle.getMessage(Case.class, "Case.checkImgExist.confDlg.doesntExist.msg", path),
NbBundle.getMessage(Case.class, "Case.checkImgExist.confDlg.doesntExist.title"),
JOptionPane.YES_NO_OPTION);
if (response == JOptionPane.YES_OPTION) {
MissingImageDialog.makeDialog(obj_id, caseDb);
} else {
logger.log(Level.SEVERE, "User proceeding with missing image files"); //NON-NLS
} }
}
});
} catch (InterruptedException | InvocationTargetException ex) {
logger.log(Level.SEVERE, "Failed to show missing image confirmation dialog", ex); //NON-NLS
}
} }
} }
@ -1270,14 +1283,16 @@ public class Case {
CallableSystemAction.get(CommonAttributeSearchAction.class).setEnabled(true); CallableSystemAction.get(CommonAttributeSearchAction.class).setEnabled(true);
CallableSystemAction.get(OpenOutputFolderAction.class).setEnabled(false); CallableSystemAction.get(OpenOutputFolderAction.class).setEnabled(false);
CallableSystemAction.get(OpenDiscoveryAction.class).setEnabled(true); CallableSystemAction.get(OpenDiscoveryAction.class).setEnabled(true);
/* /*
* Add the case to the recent cases tracker that supplies a list * Add the case to the recent cases tracker that supplies a list
* of recent cases to the recent cases menu item and the * of recent cases to the recent cases menu item and the
* open/create case dialog. * open/create case dialog.
*/ */
RecentCases.getInstance().addRecentCase(newCurrentCase.getDisplayName(), newCurrentCase.getMetadata().getFilePath().toString()); RecentCases.getInstance().addRecentCase(newCurrentCase.getDisplayName(), newCurrentCase.getMetadata().getFilePath().toString());
final boolean hasData = newCurrentCase.hasData();
SwingUtilities.invokeLater(() -> {
/* /*
* Open the top components (windows within the main application * Open the top components (windows within the main application
* window). * window).
@ -1286,7 +1301,7 @@ public class Case {
* opened via the DirectoryTreeTopComponent 'propertyChange()' * opened via the DirectoryTreeTopComponent 'propertyChange()'
* method on a DATA_SOURCE_ADDED event. * method on a DATA_SOURCE_ADDED event.
*/ */
if (newCurrentCase.hasData()) { if (hasData) {
CoreComponentControl.openCoreWindows(); CoreComponentControl.openCoreWindows();
} else { } else {
//ensure that the DirectoryTreeTopComponent is open so that it's listener can open the core windows including making it visible. //ensure that the DirectoryTreeTopComponent is open so that it's listener can open the core windows including making it visible.
@ -1300,7 +1315,6 @@ public class Case {
*/ */
mainFrame.setTitle(newCurrentCase.getDisplayName() + " - " + getNameForTitle()); mainFrame.setTitle(newCurrentCase.getDisplayName() + " - " + getNameForTitle());
}); });
}
} }
/* /*