diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java index 1bac490042..f03d937e60 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java @@ -285,7 +285,6 @@ public class HashDb implements Comparable { }); progress.start(); progress.switchToIndeterminate(); - indexing = true; SleuthkitJNI.createLookupIndex(databasePaths.get(0)); return null; } diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java index 0c9e46479f..2e73d688ab 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java @@ -24,6 +24,8 @@ import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import javax.swing.JButton; import javax.swing.JComponent; @@ -44,6 +46,10 @@ final class HashDbManagementPanel extends javax.swing.JPanel implements OptionsP private HashSetTableModel hashSetTableModel; private static final Logger logger = Logger.getLogger(HashDbManagementPanel.class.getName()); private static boolean ingestRunning = false; + + //keep track of dbs being indexed, since HashDb objects are reloaded, + //we cannot rely on their status + private final MapindexingState = new HashMap(); HashDbManagementPanel() { this.hashSetTableModel = new HashSetTableModel(); @@ -90,7 +96,15 @@ final class HashDbManagementPanel extends javax.swing.JPanel implements OptionsP this.hashDbIndexStatusLabel.setText("No database selected"); this.hashDbTypeLabel.setText("No database selected"); } else { - setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, db.status()); + //check if dn in indexing state + String dbName = db.getName(); + IndexStatus status = db.status(); + Boolean state = indexingState.get(dbName); + if (state != null && state.equals(Boolean.TRUE) ) { + status = IndexStatus.INDEXING; + } + + setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, status); String shortenPath = db.getDatabasePaths().get(0); this.hashDbLocationLabel.setToolTipText(shortenPath); if(shortenPath.length() > 50){ @@ -365,6 +379,8 @@ final class HashDbManagementPanel extends javax.swing.JPanel implements OptionsP @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(HashDb.EVENT.INDEXING_DONE.toString())) { + //update tracking of indexing status + indexingState.put((String)evt.getNewValue(), Boolean.FALSE); setButtonFromIndexStatus(indexButton, hashDbIndexStatusLabel, current.status()); resync(); @@ -373,8 +389,10 @@ final class HashDbManagementPanel extends javax.swing.JPanel implements OptionsP }); try { + indexingState.put(current.getName(), Boolean.TRUE); current.createIndex(); } catch (TskException ex) { + indexingState.put(current.getName(), Boolean.FALSE); logger.log(Level.WARNING, "Error creating index", ex); } setButtonFromIndexStatus(indexButton, this.hashDbIndexStatusLabel, current.status()); diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java index 88fad28bb9..3935241138 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java @@ -162,6 +162,9 @@ public class HashDbXML { public void reload() { boolean created = false; + //TODO clearing the list causes a bug: we lose track of the state + //whether db is being indexed, we should somehow preserve the state when loading new HashDb objects + knownBadSets.clear(); nsrlSet = null;