mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
ImageGalleryController checks RuntimeProperties.coreComponentsAreActive
This commit is contained in:
parent
bd587ce664
commit
39632a0815
@ -19,6 +19,7 @@
|
||||
package org.sleuthkit.autopsy.imagegallery;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@ -59,6 +60,7 @@ import org.openide.util.Exceptions;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
||||
import org.sleuthkit.autopsy.core.RuntimeProperties;
|
||||
import org.sleuthkit.autopsy.coreutils.History;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
||||
@ -455,88 +457,8 @@ public final class ImageGalleryController {
|
||||
LOGGER.info("setting up ImageGallery listeners");
|
||||
//TODO can we do anything usefull in an InjestJobEventListener?
|
||||
//IngestManager.getInstance().addIngestJobEventListener((PropertyChangeEvent evt) -> {});
|
||||
IngestManager.getInstance().addIngestModuleEventListener((PropertyChangeEvent evt) -> {
|
||||
switch (IngestManager.IngestModuleEvent.valueOf(evt.getPropertyName())) {
|
||||
case CONTENT_CHANGED:
|
||||
//TODO: do we need to do anything here? -jm
|
||||
case DATA_ADDED:
|
||||
/*
|
||||
* we could listen to DATA events and progressivly update
|
||||
* files, and get data from DataSource ingest modules, but
|
||||
* given that most modules don't post new artifacts in the
|
||||
* events and we would have to query for them, without
|
||||
* knowing which are the new ones, we just ignore these
|
||||
* events for now. The relevant data should all be captured
|
||||
* by file done event, anyways -jm
|
||||
*/
|
||||
break;
|
||||
case FILE_DONE:
|
||||
/**
|
||||
* getOldValue has fileID getNewValue has
|
||||
* {@link Abstractfile}
|
||||
*/
|
||||
|
||||
AbstractFile file = (AbstractFile) evt.getNewValue();
|
||||
|
||||
if (isListeningEnabled()) {
|
||||
if (file.isFile()) {
|
||||
try {
|
||||
if (ImageGalleryModule.isDrawableAndNotKnown(file)) {
|
||||
//this file should be included and we don't already know about it from hash sets (NSRL)
|
||||
queueDBWorkerTask(new UpdateFileTask(file, db));
|
||||
} else if (FileTypeUtils.getAllSupportedExtensions().contains(file.getNameExtension())) {
|
||||
//doing this check results in fewer tasks queued up, and faster completion of db update
|
||||
//this file would have gotten scooped up in initial grab, but actually we don't need it
|
||||
queueDBWorkerTask(new RemoveFileTask(file, db));
|
||||
}
|
||||
} catch (TskCoreException ex) {
|
||||
//TODO: What to do here?
|
||||
LOGGER.log(Level.WARNING, "Unable to determine if file is drawable and not known. Not making any changes to DB", ex);
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
} else { //TODO: keep track of what we missed for later
|
||||
setStale(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
Case.addPropertyChangeListener((PropertyChangeEvent evt) -> {
|
||||
switch (Case.Events.valueOf(evt.getPropertyName())) {
|
||||
case CURRENT_CASE:
|
||||
Case newCase = (Case) evt.getNewValue();
|
||||
if (newCase != null) { // case has been opened
|
||||
setCase(newCase); //connect db, groupmanager, start worker thread
|
||||
} else { // case is closing
|
||||
//close window, reset everything
|
||||
SwingUtilities.invokeLater(ImageGalleryTopComponent::closeTopComponent);
|
||||
reset();
|
||||
}
|
||||
break;
|
||||
case DATA_SOURCE_ADDED:
|
||||
//copy all file data to drawable databse
|
||||
Content newDataSource = (Content) evt.getNewValue();
|
||||
if (isListeningEnabled()) {
|
||||
queueDBWorkerTask(new PrePopulateDataSourceFiles(newDataSource));
|
||||
} else {//TODO: keep track of what we missed for later
|
||||
setStale(true);
|
||||
}
|
||||
break;
|
||||
case CONTENT_TAG_ADDED:
|
||||
final ContentTagAddedEvent tagAddedEvent = (ContentTagAddedEvent) evt;
|
||||
if (getDatabase().isInDB(tagAddedEvent.getAddedTag().getContent().getId())) {
|
||||
getTagsManager().fireTagAddedEvent(tagAddedEvent);
|
||||
}
|
||||
break;
|
||||
case CONTENT_TAG_DELETED:
|
||||
final ContentTagDeletedEvent tagDeletedEvent = (ContentTagDeletedEvent) evt;
|
||||
if (getDatabase().isInDB(tagDeletedEvent.getDeletedTagInfo().getContentID())) {
|
||||
getTagsManager().fireTagDeletedEvent(tagDeletedEvent);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
});
|
||||
IngestManager.getInstance().addIngestModuleEventListener(new IngestModuleEventListener());
|
||||
Case.addPropertyChangeListener(new CaseEventListener());
|
||||
}
|
||||
|
||||
public HashSetManager getHashSetManager() {
|
||||
@ -977,4 +899,114 @@ public final class ImageGalleryController {
|
||||
progressHandle.finish();
|
||||
}
|
||||
}
|
||||
|
||||
private class IngestModuleEventListener implements PropertyChangeListener {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (RuntimeProperties.coreComponentsAreActive() == false) {
|
||||
/*
|
||||
* Running in "headless" mode, no need to process any events.
|
||||
* This cannot be done earlier because the switch to core
|
||||
* components inactive may not have been made at start up.
|
||||
*/
|
||||
IngestManager.getInstance().removeIngestModuleEventListener(this);
|
||||
return;
|
||||
}
|
||||
switch (IngestManager.IngestModuleEvent.valueOf(evt.getPropertyName())) {
|
||||
case CONTENT_CHANGED:
|
||||
//TODO: do we need to do anything here? -jm
|
||||
case DATA_ADDED:
|
||||
/*
|
||||
* we could listen to DATA events and progressivly update
|
||||
* files, and get data from DataSource ingest modules, but
|
||||
* given that most modules don't post new artifacts in the
|
||||
* events and we would have to query for them, without
|
||||
* knowing which are the new ones, we just ignore these
|
||||
* events for now. The relevant data should all be captured
|
||||
* by file done event, anyways -jm
|
||||
*/
|
||||
break;
|
||||
case FILE_DONE:
|
||||
/**
|
||||
* getOldValue has fileID getNewValue has
|
||||
* {@link Abstractfile}
|
||||
*/
|
||||
|
||||
AbstractFile file = (AbstractFile) evt.getNewValue();
|
||||
|
||||
if (isListeningEnabled()) {
|
||||
if (file.isFile()) {
|
||||
try {
|
||||
if (ImageGalleryModule.isDrawableAndNotKnown(file)) {
|
||||
//this file should be included and we don't already know about it from hash sets (NSRL)
|
||||
queueDBWorkerTask(new UpdateFileTask(file, db));
|
||||
} else if (FileTypeUtils.getAllSupportedExtensions().contains(file.getNameExtension())) {
|
||||
//doing this check results in fewer tasks queued up, and faster completion of db update
|
||||
//this file would have gotten scooped up in initial grab, but actually we don't need it
|
||||
queueDBWorkerTask(new RemoveFileTask(file, db));
|
||||
}
|
||||
} catch (TskCoreException ex) {
|
||||
//TODO: What to do here?
|
||||
LOGGER.log(Level.WARNING, "Unable to determine if file is drawable and not known. Not making any changes to DB", ex);
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
} else { //TODO: keep track of what we missed for later
|
||||
setStale(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class CaseEventListener implements PropertyChangeListener {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (RuntimeProperties.coreComponentsAreActive() == false) {
|
||||
/*
|
||||
* Running in "headless" mode, no need to process any events.
|
||||
* This cannot be done earlier because the switch to core
|
||||
* components inactive may not have been made at start up.
|
||||
*/
|
||||
Case.removePropertyChangeListener(this);
|
||||
return;
|
||||
}
|
||||
switch (Case.Events.valueOf(evt.getPropertyName())) {
|
||||
case CURRENT_CASE:
|
||||
Case newCase = (Case) evt.getNewValue();
|
||||
if (newCase != null) { // case has been opened
|
||||
setCase(newCase); //connect db, groupmanager, start worker thread
|
||||
} else { // case is closing
|
||||
//close window, reset everything
|
||||
SwingUtilities.invokeLater(ImageGalleryTopComponent::closeTopComponent);
|
||||
reset();
|
||||
}
|
||||
break;
|
||||
case DATA_SOURCE_ADDED:
|
||||
//copy all file data to drawable databse
|
||||
Content newDataSource = (Content) evt.getNewValue();
|
||||
if (isListeningEnabled()) {
|
||||
queueDBWorkerTask(new PrePopulateDataSourceFiles(newDataSource));
|
||||
} else {//TODO: keep track of what we missed for later
|
||||
setStale(true);
|
||||
}
|
||||
break;
|
||||
case CONTENT_TAG_ADDED:
|
||||
final ContentTagAddedEvent tagAddedEvent = (ContentTagAddedEvent) evt;
|
||||
if (getDatabase().isInDB(tagAddedEvent.getAddedTag().getContent().getId())) {
|
||||
getTagsManager().fireTagAddedEvent(tagAddedEvent);
|
||||
}
|
||||
break;
|
||||
case CONTENT_TAG_DELETED:
|
||||
final ContentTagDeletedEvent tagDeletedEvent = (ContentTagDeletedEvent) evt;
|
||||
if (getDatabase().isInDB(tagDeletedEvent.getDeletedTagInfo().getContentID())) {
|
||||
getTagsManager().fireTagDeletedEvent(tagDeletedEvent);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user