refactored how the date control state was saved

This commit is contained in:
Kelly Kelly 2019-04-05 15:26:04 -04:00
parent 6a5b83cc7e
commit f6a2bf16c5
7 changed files with 157 additions and 85 deletions

View File

@ -120,7 +120,7 @@ public final class AccountsBrowser extends JPanel implements ExplorerManager.Pro
} }
@Subscribe @Subscribe
public void handleFilterEvent(CVTEvents.FilterChangeEvent filterChangeEvent) { void handleFilterEvent(CVTEvents.FilterChangeEvent filterChangeEvent) {
try { try {
final CommunicationsManager commsManager = Case.getCurrentCaseThrows().getSleuthkitCase().getCommunicationsManager(); final CommunicationsManager commsManager = Case.getCurrentCaseThrows().getSleuthkitCase().getCommunicationsManager();
accountsTableEM.setRootContext(new AbstractNode(Children.create(new AccountDeviceInstanceNodeFactory(commsManager, filterChangeEvent.getNewFilter()), true))); accountsTableEM.setRootContext(new AbstractNode(Children.create(new AccountDeviceInstanceNodeFactory(commsManager, filterChangeEvent.getNewFilter()), true)));
@ -132,7 +132,7 @@ public final class AccountsBrowser extends JPanel implements ExplorerManager.Pro
} }
@Subscribe @Subscribe
void historyChange(CVTEvents.StateEvent event) { void historyChange(CVTEvents.StateChangeEvent event) {
try { try {
final CommunicationsManager commsManager = Case.getCurrentCaseThrows().getSleuthkitCase().getCommunicationsManager(); final CommunicationsManager commsManager = Case.getCurrentCaseThrows().getSleuthkitCase().getCommunicationsManager();
accountsTableEM.setRootContext(new AbstractNode(Children.create(new AccountDeviceInstanceNodeFactory(commsManager, event.getCommunicationsState().getCommunicationsFilter()), true))); accountsTableEM.setRootContext(new AbstractNode(Children.create(new AccountDeviceInstanceNodeFactory(commsManager, event.getCommunicationsState().getCommunicationsFilter()), true)));

View File

@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.communications;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.eventbus.EventBus; import com.google.common.eventbus.EventBus;
import java.util.Collection; import java.util.Collection;
import org.sleuthkit.autopsy.communications.FiltersPanel.DateControlState;
import org.sleuthkit.datamodel.CommunicationsFilter; import org.sleuthkit.datamodel.CommunicationsFilter;
import org.sleuthkit.autopsy.communications.StateManager.CommunicationsState; import org.sleuthkit.autopsy.communications.StateManager.CommunicationsState;
@ -39,18 +40,30 @@ final class CVTEvents {
} }
/** /**
* Invoked when a ComminucationsFilter change occures. * Invoked when a change from the FiltersPanel occures.
*/ */
static final class FilterChangeEvent { static final class FilterChangeEvent {
private final CommunicationsFilter newFilter; private final CommunicationsFilter newFilter;
private final DateControlState startControlState;
private final DateControlState endControlState;
CommunicationsFilter getNewFilter() { CommunicationsFilter getNewFilter() {
return newFilter; return newFilter;
} }
DateControlState getStartControlState() {
return startControlState;
}
DateControlState getEndControlState() {
return endControlState;
}
FilterChangeEvent(CommunicationsFilter newFilter) { FilterChangeEvent(CommunicationsFilter newFilter, DateControlState startControlState, DateControlState endControlState) {
this.newFilter = newFilter; this.newFilter = newFilter;
this.startControlState = startControlState;
this.endControlState = endControlState;
} }
} }
@ -96,10 +109,10 @@ final class CVTEvents {
/** /**
* Invoked when there is a change in the state of the window. * Invoked when there is a change in the state of the window.
*/ */
static final class StateEvent { static final class StateChangeEvent {
private final CommunicationsState newState; private final CommunicationsState newState;
StateEvent(CommunicationsState newState) { StateChangeEvent(CommunicationsState newState) {
this.newState = newState; this.newState = newState;
} }
@ -111,15 +124,15 @@ final class CVTEvents {
/** /**
* Invoked when change in the link analysis graph scale occures. * Invoked when change in the link analysis graph scale occures.
*/ */
static final class ZoomEvent { static final class ScaleChangeEvent {
private final double zoomValue; private final double scaleValue;
ZoomEvent(double zoomValue) { ScaleChangeEvent(double scaleValue) {
this.zoomValue = zoomValue; this.scaleValue = scaleValue;
} }
public double getZoomValue(){ public double getZoomValue(){
return zoomValue; return scaleValue;
} }
} }
} }

View File

@ -22,10 +22,8 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Collection; import java.util.Collection;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
@ -272,13 +270,11 @@ final public class FiltersPanel extends JPanel {
* *
* @param subFilters A list of subFilters * @param subFilters A list of subFilters
*/ */
public void setFilters(List<CommunicationsFilter.SubFilter> subFilters) { public void setFilters(CommunicationsFilter commFilter) {
List<CommunicationsFilter.SubFilter> subFilters = commFilter.getAndFilters();
subFilters.forEach(subFilter -> { subFilters.forEach(subFilter -> {
if( subFilter instanceof DeviceFilter ) { if( subFilter instanceof DeviceFilter ) {
setDeviceFilter((DeviceFilter)subFilter); setDeviceFilter((DeviceFilter)subFilter);
} else if (subFilter instanceof DateRangeFilter) {
setDateRangeFilter( (DateRangeFilter) subFilter);
} else if( subFilter instanceof AccountTypeFilter) { } else if( subFilter instanceof AccountTypeFilter) {
setAccountTypeFilter((AccountTypeFilter) subFilter); setAccountTypeFilter((AccountTypeFilter) subFilter);
} }
@ -297,23 +293,6 @@ final public class FiltersPanel extends JPanel {
}); });
} }
/**
* Sets the value of the DateRangeFilters.
*
* @param dateFilter
*/
private void setDateRangeFilter(DateRangeFilter dateFilter) {
ZonedDateTime zoneDate = ZonedDateTime.ofInstant(Instant.ofEpochSecond(dateFilter.getStartDate()), Utils.getUserPreferredZoneId());
startDatePicker.setEnabled(dateFilter.isStartDateEnabled());
startCheckBox.setSelected(dateFilter.isStartDateEnabled());
startDatePicker.setDate(zoneDate.toLocalDate());
zoneDate = ZonedDateTime.ofInstant(Instant.ofEpochSecond(dateFilter.getEndDate()), Utils.getUserPreferredZoneId());
endDatePicker.setEnabled(dateFilter.isEndDateEnabled());
endCheckBox.setSelected(dateFilter.isEndDateEnabled());
endDatePicker.setDate(zoneDate.toLocalDate());
}
/** /**
* Set the state of the account type checkboxes to match the passed in filter * Set the state of the account type checkboxes to match the passed in filter
* *
@ -326,10 +305,36 @@ final public class FiltersPanel extends JPanel {
}); });
} }
/**
* Set up the startDatePicker and startCheckBox based on the passed in
* DateControlState.
*
* @param state new control state
*/
private void setStartDateControlState(DateControlState state) {
startDatePicker.setDate(state.getDate());
startCheckBox.setSelected(state.isEnabled());
startDatePicker.setEnabled(state.isEnabled());
}
/**
* Set up the endDatePicker and endCheckBox based on the passed in
* DateControlState.
*
* @param state new control state
*/
private void setEndDateControlState(DateControlState state) {
endDatePicker.setDate(state.getDate());
endCheckBox.setSelected(state.isEnabled());
endDatePicker.setEnabled(state.isEnabled());
}
@Subscribe @Subscribe
void filtersBack(CVTEvents.StateEvent event) { void filtersBack(CVTEvents.StateChangeEvent event) {
if(event.getCommunicationsState().getCommunicationsFilters() != null){ if(event.getCommunicationsState().getCommunicationsFilter() != null){
setFilters(event.getCommunicationsState().getCommunicationsFilters()); setFilters(event.getCommunicationsState().getCommunicationsFilter());
setStartDateControlState(event.getCommunicationsState().getStartControlState());
setEndDateControlState(event.getCommunicationsState().getEndControlState());
needsRefresh = false; needsRefresh = false;
validateFilters(); validateFilters();
} }
@ -577,7 +582,7 @@ final public class FiltersPanel extends JPanel {
* Post an event with the new filters. * Post an event with the new filters.
*/ */
private void applyFilters() { private void applyFilters() {
CVTEvents.getCVTEventBus().post(new CVTEvents.FilterChangeEvent(getFilter())); CVTEvents.getCVTEventBus().post(new CVTEvents.FilterChangeEvent(getFilter(), getStartControlState(), getEndControlState()));
needsRefresh = false; needsRefresh = false;
validateFilters(); validateFilters();
} }
@ -633,10 +638,16 @@ final public class FiltersPanel extends JPanel {
private DateRangeFilter getDateRangeFilter() { private DateRangeFilter getDateRangeFilter() {
ZoneId zone = Utils.getUserPreferredZoneId(); ZoneId zone = Utils.getUserPreferredZoneId();
return new DateRangeFilter(startDatePicker.isEnabled(), return new DateRangeFilter( startCheckBox.isSelected() ? startDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0,
startDatePicker.getDate().atStartOfDay(zone).toEpochSecond(), endCheckBox.isSelected() ? endDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0);
endDatePicker.isEnabled(), }
endDatePicker.getDate().atStartOfDay(zone).toEpochSecond());
private DateControlState getStartControlState() {
return new DateControlState (startDatePicker.getDate(), startCheckBox.isSelected());
}
private DateControlState getEndControlState() {
return new DateControlState (endDatePicker.getDate(), endCheckBox.isSelected());
} }
/** /**
@ -710,7 +721,47 @@ final public class FiltersPanel extends JPanel {
endDatePicker.setEnabled(endCheckBox.isSelected()); endDatePicker.setEnabled(endCheckBox.isSelected());
}//GEN-LAST:event_endCheckBoxStateChanged }//GEN-LAST:event_endCheckBoxStateChanged
/**
* A class to wrap the state of the date controls that consist of a date picker
* and a checkbox.
*
*/
final class DateControlState {
private final LocalDate date;
private final boolean enabled;
/**
* Wraps the state of the date controls that consist of a date picker
* and checkbox
*
* @param date LocalDate value of the datepicker
* @param enabled State of the checkbox
*/
protected DateControlState(LocalDate date, boolean enabled) {
this.date = date;
this.enabled = enabled;
}
/**
* Returns the given LocalDate from the datepicker
*
* @return Current state LocalDate
*/
public LocalDate getDate(){
return date;
}
/**
* Returns the given state of the datepicker checkbox
*
* @return boolean, whether or not the datepicker was enabled
*/
public boolean isEnabled() {
return enabled;
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private final javax.swing.JPanel accountTypePane = new javax.swing.JPanel(); private final javax.swing.JPanel accountTypePane = new javax.swing.JPanel();
private final javax.swing.JLabel accountTypeRequiredLabel = new javax.swing.JLabel(); private final javax.swing.JLabel accountTypeRequiredLabel = new javax.swing.JLabel();

View File

@ -18,16 +18,12 @@
*/ */
package org.sleuthkit.autopsy.communications; package org.sleuthkit.autopsy.communications;
import com.google.common.collect.ImmutableSet;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import org.sleuthkit.autopsy.communications.FiltersPanel.DateControlState;
import org.sleuthkit.autopsy.coreutils.History; import org.sleuthkit.autopsy.coreutils.History;
import org.sleuthkit.datamodel.CommunicationsFilter; import org.sleuthkit.datamodel.CommunicationsFilter;
import org.sleuthkit.datamodel.CommunicationsFilter.SubFilter;
import static org.sleuthkit.datamodel.Relationship.Type.CALL_LOG;
import static org.sleuthkit.datamodel.Relationship.Type.MESSAGE;
/** /**
* Manages the state history for the Communications window. History is currently * Manages the state history for the Communications window. History is currently
@ -39,6 +35,8 @@ final class StateManager {
private final History<CommunicationsState> historyManager = new History<>(); private final History<CommunicationsState> historyManager = new History<>();
private CommunicationsFilter comFilter; private CommunicationsFilter comFilter;
private final PinnedAccountModel pinModel; private final PinnedAccountModel pinModel;
private DateControlState currentStartState;
private DateControlState currentEndState;
/** /**
* Manages the state history for the Communications window. * Manages the state history for the Communications window.
@ -55,20 +53,22 @@ final class StateManager {
if(pinEvent.isReplace()){ if(pinEvent.isReplace()){
HashSet<AccountDeviceInstanceKey> pinnedList = new HashSet<>(); HashSet<AccountDeviceInstanceKey> pinnedList = new HashSet<>();
pinnedList.addAll(pinEvent.getAccountDeviceInstances()); pinnedList.addAll(pinEvent.getAccountDeviceInstances());
historyManager.advance(new CommunicationsState(comFilter.getAndFilters(), pinnedList, -1)); historyManager.advance(new CommunicationsState(comFilter, pinnedList, -1, currentStartState, currentEndState));
} else { } else {
HashSet<AccountDeviceInstanceKey> pinnedList = new HashSet<>(); HashSet<AccountDeviceInstanceKey> pinnedList = new HashSet<>();
pinnedList.addAll(pinEvent.getAccountDeviceInstances()); pinnedList.addAll(pinEvent.getAccountDeviceInstances());
pinnedList.addAll(pinModel.getPinnedAccounts()); pinnedList.addAll(pinModel.getPinnedAccounts());
historyManager.advance(new CommunicationsState( comFilter.getAndFilters(), pinnedList, -1)); historyManager.advance(new CommunicationsState( comFilter, pinnedList, -1, currentStartState, currentEndState));
} }
} }
@Subscribe @Subscribe
void filterChange(CVTEvents.FilterChangeEvent fileterEvent) { void filterChange(CVTEvents.FilterChangeEvent filterEvent) {
comFilter = fileterEvent.getNewFilter(); comFilter = filterEvent.getNewFilter();
historyManager.advance(new CommunicationsState(comFilter.getAndFilters(), pinModel.getPinnedAccounts(), -1)); currentStartState = filterEvent.getStartControlState();
currentEndState = filterEvent.getEndControlState();
historyManager.advance(new CommunicationsState(comFilter, pinModel.getPinnedAccounts(), -1, currentStartState, currentEndState));
} }
@Subscribe @Subscribe
@ -78,12 +78,12 @@ final class StateManager {
pinnedList.addAll(pinModel.getPinnedAccounts()); pinnedList.addAll(pinModel.getPinnedAccounts());
pinnedList.removeAll(pinEvent.getAccountDeviceInstances()); pinnedList.removeAll(pinEvent.getAccountDeviceInstances());
historyManager.advance(new CommunicationsState(comFilter.getAndFilters(), pinnedList, -1)); historyManager.advance(new CommunicationsState(comFilter, pinnedList, -1, currentStartState, currentEndState));
} }
@Subscribe @Subscribe
void zoomedGraph(CVTEvents.ZoomEvent zoomEvent) { void zoomedGraph(CVTEvents.ScaleChangeEvent zoomEvent) {
historyManager.advance(new CommunicationsState(comFilter.getAndFilters(), pinModel.getPinnedAccounts(), zoomEvent.getZoomValue())); historyManager.advance(new CommunicationsState(comFilter, pinModel.getPinnedAccounts(), zoomEvent.getZoomValue(), currentStartState, currentEndState));
} }
/** /**
@ -134,22 +134,28 @@ final class StateManager {
* Object to store one instance of the state of the Communications window. * Object to store one instance of the state of the Communications window.
*/ */
final class CommunicationsState{ final class CommunicationsState{
private final List<SubFilter> communcationFilters; private final CommunicationsFilter communcationFilter;
private final Set<AccountDeviceInstanceKey> pinnedList; private final Set<AccountDeviceInstanceKey> pinnedList;
private final double zoomValue; private final double zoomValue;
private final DateControlState startDateState;
private final DateControlState endDateState;
/** /**
* Stores all the properties of the current state of the Communications * Stores all the properties of the current state of the Communications
* window. * window.
* *
* @param communcationFilters List of the SubFilters from the FiltersPanel * @param communcationFilter Instance of CommunicationsFilter
* @param pinnedList Set of AccountDeviceInstanceKey * @param pinnedList Set of AccountDeviceInstanceKey
* @param zoomValue Double value of the current graph scale * @param zoomValue Double value of the current graph scale
*/ */
protected CommunicationsState(List<SubFilter> communcationFilters, Set<AccountDeviceInstanceKey> pinnedList, double zoomValue){ protected CommunicationsState(CommunicationsFilter communcationFilter,
Set<AccountDeviceInstanceKey> pinnedList, double zoomValue,
DateControlState startDateState, DateControlState endDateState){
this.pinnedList = pinnedList; this.pinnedList = pinnedList;
this.communcationFilters = communcationFilters; this.communcationFilter = communcationFilter;
this.zoomValue = zoomValue; this.zoomValue = zoomValue;
this.startDateState = startDateState;
this.endDateState = endDateState;
} }
/** /**
@ -169,16 +175,7 @@ final class StateManager {
public Set<AccountDeviceInstanceKey> getPinnedList(){ public Set<AccountDeviceInstanceKey> getPinnedList(){
return pinnedList; return pinnedList;
} }
/**
* Returns a list of communication SubFilters.
*
* @return List of SubFilter
*/
public List<SubFilter> getCommunicationsFilters(){
return communcationFilters;
}
/** /**
* Return a new CommunicationsFilter object based on the list of * Return a new CommunicationsFilter object based on the list of
* SubFilters * SubFilters
@ -186,13 +183,7 @@ final class StateManager {
* @return CommunicationsFilter * @return CommunicationsFilter
*/ */
public CommunicationsFilter getCommunicationsFilter() { public CommunicationsFilter getCommunicationsFilter() {
CommunicationsFilter newFilters = new CommunicationsFilter(); return communcationFilter;
newFilters.addAndFilter(new CommunicationsFilter.RelationshipTypeFilter(ImmutableSet.of(CALL_LOG, MESSAGE)));
communcationFilters.forEach(filter -> {
newFilters.addAndFilter(filter);
});
return newFilters;
} }
/** /**
@ -203,5 +194,23 @@ final class StateManager {
public double getZoomValue() { public double getZoomValue() {
return zoomValue; return zoomValue;
} }
/**
* Returns the state for the start date picker.
*
* @return Start DateControlState
*/
public DateControlState getStartControlState() {
return startDateState;
}
/**
* Returns the state for the end date picker.
*
* @return Etart DateControlState
*/
public DateControlState getEndControlState() {
return endDateState;
}
} }
} }

View File

@ -18,7 +18,6 @@
*/ */
package org.sleuthkit.autopsy.communications; package org.sleuthkit.autopsy.communications;
import com.google.common.collect.ImmutableSet;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout; import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.layout.mxCircleLayout; import com.mxgraph.layout.mxCircleLayout;
@ -609,17 +608,17 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
private void zoomActualButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomActualButtonActionPerformed private void zoomActualButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomActualButtonActionPerformed
graphComponent.zoomActual(); graphComponent.zoomActual();
CVTEvents.getCVTEventBus().post(new CVTEvents.ZoomEvent(graph.getView().getScale())); CVTEvents.getCVTEventBus().post(new CVTEvents.ScaleChangeEvent(graph.getView().getScale()));
}//GEN-LAST:event_zoomActualButtonActionPerformed }//GEN-LAST:event_zoomActualButtonActionPerformed
private void zoomInButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomInButtonActionPerformed private void zoomInButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomInButtonActionPerformed
graphComponent.zoomIn(); graphComponent.zoomIn();
CVTEvents.getCVTEventBus().post(new CVTEvents.ZoomEvent(graph.getView().getScale())); CVTEvents.getCVTEventBus().post(new CVTEvents.ScaleChangeEvent(graph.getView().getScale()));
}//GEN-LAST:event_zoomInButtonActionPerformed }//GEN-LAST:event_zoomInButtonActionPerformed
private void zoomOutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomOutButtonActionPerformed private void zoomOutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_zoomOutButtonActionPerformed
graphComponent.zoomOut(); graphComponent.zoomOut();
CVTEvents.getCVTEventBus().post(new CVTEvents.ZoomEvent(graph.getView().getScale())); CVTEvents.getCVTEventBus().post(new CVTEvents.ScaleChangeEvent(graph.getView().getScale()));
}//GEN-LAST:event_zoomOutButtonActionPerformed }//GEN-LAST:event_zoomOutButtonActionPerformed
/** /**
@ -695,7 +694,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
// This will cause the FilterPane to update its controls // This will cause the FilterPane to update its controls
CVTEvents.getCVTEventBus().post(new CVTEvents.StateEvent(newState)); CVTEvents.getCVTEventBus().post(new CVTEvents.StateChangeEvent(newState));
setStateButtonsEnabled(); setStateButtonsEnabled();
graph.getModel().beginUpdate(); graph.getModel().beginUpdate();
@ -1133,7 +1132,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
graphComponent.zoomOut(); graphComponent.zoomOut();
} }
CVTEvents.getCVTEventBus().post(new CVTEvents.ZoomEvent(graph.getView().getScale())); CVTEvents.getCVTEventBus().post(new CVTEvents.ScaleChangeEvent(graph.getView().getScale()));
} }
/** /**

View File

@ -35,7 +35,7 @@ KeywordSearchResultFactory.createNodeForKey.noResultsFound.text=No results found
KeywordSearchResultFactory.query.exception.msg=Could not perform the query KeywordSearchResultFactory.query.exception.msg=Could not perform the query
OpenIDE-Module-Display-Category=Ingest Module OpenIDE-Module-Display-Category=Ingest Module
OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\nThe module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found. OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\n\The module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found.
OpenIDE-Module-Name=KeywordSearch OpenIDE-Module-Name=KeywordSearch
OptionsCategory_Name_KeywordSearchOptions=Keyword Search OptionsCategory_Name_KeywordSearchOptions=Keyword Search
OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search

View File

@ -64,7 +64,7 @@ ExtractZone_progress_Msg=Extracting :Zone.Identifer files
ExtractZone_Restricted=Restricted Sites Zone ExtractZone_Restricted=Restricted Sites Zone
ExtractZone_Trusted=Trusted Sites Zone ExtractZone_Trusted=Trusted Sites Zone
OpenIDE-Module-Display-Category=Ingest Module OpenIDE-Module-Display-Category=Ingest Module
OpenIDE-Module-Long-Description=Recent Activity ingest module.\n\nThe module extracts useful information about the recent user activity on the disk image being ingested, such as:\n\n- Recently open documents,\n- Web activity (sites visited, stored cookies, book marked sites, search engine queries, file downloads),\n- Recently attached devices,\n- Installed programs.\n\nThe module currently supports Windows only disk images.\nThe plugin is also fully functional when deployed on Windows version of Autopsy. OpenIDE-Module-Long-Description=Recent Activity ingest module.\n\n\The module extracts useful information about the recent user activity on the disk image being ingested, such as:\n\n- Recently open documents,\n- Web activity (sites visited, stored cookies, book marked sites, search engine queries, file downloads),\n- Recently attached devices,\n- Installed programs.\n\nThe module currently supports Windows only disk images.\nThe plugin is also fully functional when deployed on Windows version of Autopsy.
OpenIDE-Module-Name=RecentActivity OpenIDE-Module-Name=RecentActivity
OpenIDE-Module-Short-Description=Recent Activity finder ingest module OpenIDE-Module-Short-Description=Recent Activity finder ingest module
Chrome.moduleName=Chrome Chrome.moduleName=Chrome