mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
4313 add option to disable limiting of deleted file display to 10k
This commit is contained in:
parent
863a82c6ff
commit
a59eadb393
@ -190,3 +190,5 @@ ViewPreferencesPanel.hideRejectedResultsCheckbox.text=Hide rejected results
|
|||||||
ViewPreferencesPanel.hideOtherUsersTagsLabel.text=Hide other users' tags in the:
|
ViewPreferencesPanel.hideOtherUsersTagsLabel.text=Hide other users' tags in the:
|
||||||
ViewPreferencesPanel.centralRepoLabel.text=Do not use Central Repository for:
|
ViewPreferencesPanel.centralRepoLabel.text=Do not use Central Repository for:
|
||||||
ViewPreferencesPanel.commentsOccurencesColumnsCheckbox.text=C(omments) and O(ccurences) columns to reduce loading times
|
ViewPreferencesPanel.commentsOccurencesColumnsCheckbox.text=C(omments) and O(ccurences) columns to reduce loading times
|
||||||
|
ViewPreferencesPanel.deletedFilesLimitCheckbox.text=Limit to 10,000
|
||||||
|
ViewPreferencesPanel.deletedFilesLimitLabel.text=Limit number of deleted files displayed:
|
||||||
|
@ -79,8 +79,18 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="commentsOccurencesColumnsCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="hideOtherUsersTagsCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="deletedFilesLimitCheckbox" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
@ -122,22 +132,19 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Component id="hideOtherUsersTagsLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="hideOtherUsersTagsLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="centralRepoLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="centralRepoLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Component id="deletedFilesLimitLabel" alignment="0" min="-2" pref="215" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
</Group>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<EmptySpace min="0" pref="10" max="32767" attributes="0"/>
|
||||||
<Component id="commentsOccurencesColumnsCheckbox" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="hideOtherUsersTagsCheckbox" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="16" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="hideKnownFilesLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="hideKnownFilesLabel" min="-2" max="-2" attributes="0"/>
|
||||||
@ -174,6 +181,11 @@
|
|||||||
<Component id="centralRepoLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="centralRepoLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="commentsOccurencesColumnsCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="commentsOccurencesColumnsCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="deletedFilesLimitLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="deletedFilesLimitCheckbox" min="-2" pref="33" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -327,6 +339,23 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="deletedFilesLimitCheckbox">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="ViewPreferencesPanel.deletedFilesLimitCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="deletedFilesLimitCheckboxActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="deletedFilesLimitLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="ViewPreferencesPanel.deletedFilesLimitLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JPanel" name="currentCaseSettingsPanel">
|
<Container class="javax.swing.JPanel" name="currentCaseSettingsPanel">
|
||||||
@ -388,7 +417,7 @@
|
|||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="hideRejectedResultsCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="hideRejectedResultsCheckbox" min="-2" pref="259" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
@ -25,6 +25,7 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.casemodule.CasePreferences;
|
import org.sleuthkit.autopsy.casemodule.CasePreferences;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbUtil;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbUtil;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
|
import org.sleuthkit.autopsy.deletedFiles.DeletedFilePreferences;
|
||||||
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
|
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,6 +66,8 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
commentsOccurencesColumnsCheckbox.setEnabled(EamDbUtil.useCentralRepo());
|
commentsOccurencesColumnsCheckbox.setEnabled(EamDbUtil.useCentralRepo());
|
||||||
commentsOccurencesColumnsCheckbox.setSelected(UserPreferences.hideCentralRepoCommentsAndOccurrences());
|
commentsOccurencesColumnsCheckbox.setSelected(UserPreferences.hideCentralRepoCommentsAndOccurrences());
|
||||||
|
|
||||||
|
deletedFilesLimitCheckbox.setSelected(DeletedFilePreferences.getDefault().getShouldLimitDeletedFiles());
|
||||||
|
|
||||||
// Current Case Settings
|
// Current Case Settings
|
||||||
boolean caseIsOpen = Case.isCaseOpen();
|
boolean caseIsOpen = Case.isCaseOpen();
|
||||||
currentCaseSettingsPanel.setEnabled(caseIsOpen);
|
currentCaseSettingsPanel.setEnabled(caseIsOpen);
|
||||||
@ -91,6 +94,8 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
storeGroupItemsInTreeByDataSource();
|
storeGroupItemsInTreeByDataSource();
|
||||||
|
|
||||||
DirectoryTreeTopComponent.getDefault().setShowRejectedResults(hideRejectedResultsCheckbox.isSelected() == false);
|
DirectoryTreeTopComponent.getDefault().setShowRejectedResults(hideRejectedResultsCheckbox.isSelected() == false);
|
||||||
|
|
||||||
|
DeletedFilePreferences.getDefault().setShouldLimitDeletedFiles(deletedFilesLimitCheckbox.isSelected());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,6 +140,8 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
hideOtherUsersTagsLabel = new javax.swing.JLabel();
|
hideOtherUsersTagsLabel = new javax.swing.JLabel();
|
||||||
commentsOccurencesColumnsCheckbox = new javax.swing.JCheckBox();
|
commentsOccurencesColumnsCheckbox = new javax.swing.JCheckBox();
|
||||||
centralRepoLabel = new javax.swing.JLabel();
|
centralRepoLabel = new javax.swing.JLabel();
|
||||||
|
deletedFilesLimitCheckbox = new javax.swing.JCheckBox();
|
||||||
|
deletedFilesLimitLabel = new javax.swing.JLabel();
|
||||||
currentCaseSettingsPanel = new javax.swing.JPanel();
|
currentCaseSettingsPanel = new javax.swing.JPanel();
|
||||||
groupByDataSourceCheckbox = new javax.swing.JCheckBox();
|
groupByDataSourceCheckbox = new javax.swing.JCheckBox();
|
||||||
currentSessionSettingsPanel = new javax.swing.JPanel();
|
currentSessionSettingsPanel = new javax.swing.JPanel();
|
||||||
@ -228,12 +235,29 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(centralRepoLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.centralRepoLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(centralRepoLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.centralRepoLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(deletedFilesLimitCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.deletedFilesLimitCheckbox.text")); // NOI18N
|
||||||
|
deletedFilesLimitCheckbox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
deletedFilesLimitCheckboxActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(deletedFilesLimitLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.deletedFilesLimitLabel.text")); // NOI18N
|
||||||
|
|
||||||
javax.swing.GroupLayout globalSettingsPanelLayout = new javax.swing.GroupLayout(globalSettingsPanel);
|
javax.swing.GroupLayout globalSettingsPanelLayout = new javax.swing.GroupLayout(globalSettingsPanel);
|
||||||
globalSettingsPanel.setLayout(globalSettingsPanelLayout);
|
globalSettingsPanel.setLayout(globalSettingsPanelLayout);
|
||||||
globalSettingsPanelLayout.setHorizontalGroup(
|
globalSettingsPanelLayout.setHorizontalGroup(
|
||||||
globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
|
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(commentsOccurencesColumnsCheckbox)
|
||||||
|
.addComponent(hideOtherUsersTagsCheckbox)
|
||||||
|
.addComponent(deletedFilesLimitCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
||||||
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -264,17 +288,14 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
.addComponent(selectFileLabel)))
|
.addComponent(selectFileLabel)))
|
||||||
.addComponent(hideOtherUsersTagsLabel)
|
.addComponent(hideOtherUsersTagsLabel)
|
||||||
.addComponent(centralRepoLabel)
|
.addComponent(centralRepoLabel)
|
||||||
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
.addComponent(deletedFilesLimitLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGap(10, 10, 10)
|
.addGap(0, 10, Short.MAX_VALUE)))
|
||||||
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addContainerGap())
|
||||||
.addComponent(commentsOccurencesColumnsCheckbox)
|
|
||||||
.addComponent(hideOtherUsersTagsCheckbox))))
|
|
||||||
.addContainerGap(16, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
globalSettingsPanelLayout.setVerticalGroup(
|
globalSettingsPanelLayout.setVerticalGroup(
|
||||||
globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addContainerGap()
|
||||||
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
.addGroup(globalSettingsPanelLayout.createSequentialGroup()
|
||||||
.addComponent(hideKnownFilesLabel)
|
.addComponent(hideKnownFilesLabel)
|
||||||
@ -307,7 +328,12 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(centralRepoLabel)
|
.addComponent(centralRepoLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(commentsOccurencesColumnsCheckbox))
|
.addComponent(commentsOccurencesColumnsCheckbox)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(deletedFilesLimitLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(deletedFilesLimitCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
|
|
||||||
currentCaseSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.currentCaseSettingsPanel.border.title"))); // NOI18N
|
currentCaseSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.currentCaseSettingsPanel.border.title"))); // NOI18N
|
||||||
@ -350,7 +376,7 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
currentSessionSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
currentSessionSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(currentSessionSettingsPanelLayout.createSequentialGroup()
|
.addGroup(currentSessionSettingsPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(hideRejectedResultsCheckbox)
|
.addComponent(hideRejectedResultsCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
);
|
);
|
||||||
currentSessionSettingsPanelLayout.setVerticalGroup(
|
currentSessionSettingsPanelLayout.setVerticalGroup(
|
||||||
@ -501,6 +527,14 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_commentsOccurencesColumnsCheckboxActionPerformed
|
}//GEN-LAST:event_commentsOccurencesColumnsCheckboxActionPerformed
|
||||||
|
|
||||||
|
private void deletedFilesLimitCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deletedFilesLimitCheckboxActionPerformed
|
||||||
|
if (immediateUpdates) {
|
||||||
|
DeletedFilePreferences.getDefault().setShouldLimitDeletedFiles(deletedFilesLimitCheckbox.isSelected());
|
||||||
|
} else {
|
||||||
|
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_deletedFilesLimitCheckboxActionPerformed
|
||||||
|
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JLabel centralRepoLabel;
|
private javax.swing.JLabel centralRepoLabel;
|
||||||
@ -509,6 +543,8 @@ public class ViewPreferencesPanel extends JPanel implements OptionsPanel {
|
|||||||
private javax.swing.JPanel currentSessionSettingsPanel;
|
private javax.swing.JPanel currentSessionSettingsPanel;
|
||||||
private javax.swing.JCheckBox dataSourcesHideKnownCheckbox;
|
private javax.swing.JCheckBox dataSourcesHideKnownCheckbox;
|
||||||
private javax.swing.JCheckBox dataSourcesHideSlackCheckbox;
|
private javax.swing.JCheckBox dataSourcesHideSlackCheckbox;
|
||||||
|
private javax.swing.JCheckBox deletedFilesLimitCheckbox;
|
||||||
|
private javax.swing.JLabel deletedFilesLimitLabel;
|
||||||
private javax.swing.JLabel displayTimeLabel;
|
private javax.swing.JLabel displayTimeLabel;
|
||||||
private javax.swing.JPanel globalSettingsPanel;
|
private javax.swing.JPanel globalSettingsPanel;
|
||||||
private javax.swing.JCheckBox groupByDataSourceCheckbox;
|
private javax.swing.JCheckBox groupByDataSourceCheckbox;
|
||||||
|
@ -45,6 +45,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
|||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import static org.sleuthkit.autopsy.datamodel.Bundle.*;
|
import static org.sleuthkit.autopsy.datamodel.Bundle.*;
|
||||||
|
import org.sleuthkit.autopsy.deletedFiles.DeletedFilePreferences;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
@ -191,6 +192,7 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
* fired. Other nodes are listening to this for changes.
|
* fired. Other nodes are listening to this for changes.
|
||||||
*/
|
*/
|
||||||
private static final class DeletedContentsChildrenObservable extends Observable {
|
private static final class DeletedContentsChildrenObservable extends Observable {
|
||||||
|
|
||||||
private static final Set<Case.Events> CASE_EVENTS_OF_INTEREST = EnumSet.of(
|
private static final Set<Case.Events> CASE_EVENTS_OF_INTEREST = EnumSet.of(
|
||||||
Case.Events.DATA_SOURCE_ADDED,
|
Case.Events.DATA_SOURCE_ADDED,
|
||||||
Case.Events.CURRENT_CASE
|
Case.Events.CURRENT_CASE
|
||||||
@ -213,12 +215,11 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
String eventType = evt.getPropertyName();
|
String eventType = evt.getPropertyName();
|
||||||
if (eventType.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())) {
|
if (eventType.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())) {
|
||||||
/**
|
/**
|
||||||
* + // @@@ COULD CHECK If the new file is deleted
|
* + // @@@ COULD CHECK If the new file is deleted before
|
||||||
* before notifying... Checking for a current case is a
|
* notifying... Checking for a current case is a stop gap
|
||||||
* stop gap measure + update(); until a different way of
|
* measure + update(); until a different way of handling the
|
||||||
* handling the closing of cases is worked out.
|
* closing of cases is worked out. Currently, remote events
|
||||||
* Currently, remote events may be received for a case
|
* may be received for a case that is already closed.
|
||||||
* that is already closed.
|
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
Case.getCurrentCaseThrows();
|
Case.getCurrentCaseThrows();
|
||||||
@ -234,10 +235,10 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
|| eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())
|
|| eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())
|
||||||
|| eventType.equals(Case.Events.DATA_SOURCE_ADDED.toString())) {
|
|| eventType.equals(Case.Events.DATA_SOURCE_ADDED.toString())) {
|
||||||
/**
|
/**
|
||||||
* Checking for a current case is a stop gap measure
|
* Checking for a current case is a stop gap measure until a
|
||||||
* until a different way of handling the closing of
|
* different way of handling the closing of cases is worked
|
||||||
* cases is worked out. Currently, remote events may be
|
* out. Currently, remote events may be received for a case
|
||||||
* received for a case that is already closed.
|
* that is already closed.
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
Case.getCurrentCaseThrows();
|
Case.getCurrentCaseThrows();
|
||||||
@ -282,7 +283,7 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
// Use version that has observer for updates
|
// Use version that has observer for updates
|
||||||
@Deprecated
|
@Deprecated
|
||||||
DeletedContentNode(SleuthkitCase skCase, DeletedContent.DeletedContentFilter filter, long dsObjId) {
|
DeletedContentNode(SleuthkitCase skCase, DeletedContent.DeletedContentFilter filter, long dsObjId) {
|
||||||
super(Children.create(new DeletedContentChildren(filter, skCase, null, dsObjId ), true), Lookups.singleton(filter.getDisplayName()));
|
super(Children.create(new DeletedContentChildren(filter, skCase, null, dsObjId), true), Lookups.singleton(filter.getDisplayName()));
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
this.datasourceObjId = dsObjId;
|
this.datasourceObjId = dsObjId;
|
||||||
init();
|
init();
|
||||||
@ -366,7 +367,7 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
private final SleuthkitCase skCase;
|
private final SleuthkitCase skCase;
|
||||||
private final DeletedContent.DeletedContentFilter filter;
|
private final DeletedContent.DeletedContentFilter filter;
|
||||||
private static final Logger logger = Logger.getLogger(DeletedContentChildren.class.getName());
|
private static final Logger logger = Logger.getLogger(DeletedContentChildren.class.getName());
|
||||||
private static final int MAX_OBJECTS = 10001;
|
|
||||||
private final Observable notifier;
|
private final Observable notifier;
|
||||||
private final long datasourceObjId;
|
private final long datasourceObjId;
|
||||||
|
|
||||||
@ -408,15 +409,16 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
+ "There are more Deleted Files than can be displayed."
|
+ "There are more Deleted Files than can be displayed."
|
||||||
+ " Only the first {0} Deleted Files will be shown."})
|
+ " Only the first {0} Deleted Files will be shown."})
|
||||||
protected boolean createKeys(List<AbstractFile> list) {
|
protected boolean createKeys(List<AbstractFile> list) {
|
||||||
|
DeletedFilePreferences deletedPreferences = DeletedFilePreferences.getDefault();
|
||||||
List<AbstractFile> queryList = runFsQuery();
|
List<AbstractFile> queryList = runFsQuery();
|
||||||
if (queryList.size() == MAX_OBJECTS) {
|
if (deletedPreferences.getShouldLimitDeletedFiles() && queryList.size() == deletedPreferences.getDeletedFilesLimit()) {
|
||||||
queryList.remove(queryList.size() - 1);
|
queryList.remove(queryList.size() - 1);
|
||||||
// only show the dialog once - not each time we refresh
|
// only show the dialog once - not each time we refresh
|
||||||
if (maxFilesDialogShown == false) {
|
if (maxFilesDialogShown == false) {
|
||||||
maxFilesDialogShown = true;
|
maxFilesDialogShown = true;
|
||||||
SwingUtilities.invokeLater(()
|
SwingUtilities.invokeLater(()
|
||||||
-> JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
|
-> JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
|
||||||
DeletedContent_createKeys_maxObjects_msg(MAX_OBJECTS - 1))
|
DeletedContent_createKeys_maxObjects_msg(deletedPreferences.getDeletedFilesLimit() - 1))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -465,8 +467,10 @@ public class DeletedContent implements AutopsyVisitableItem {
|
|||||||
if (Objects.equals(CasePreferences.getGroupItemsInTreeByDataSource(), true)) {
|
if (Objects.equals(CasePreferences.getGroupItemsInTreeByDataSource(), true)) {
|
||||||
query += " AND data_source_obj_id = " + filteringDSObjId;
|
query += " AND data_source_obj_id = " + filteringDSObjId;
|
||||||
}
|
}
|
||||||
|
DeletedFilePreferences deletedPreferences = DeletedFilePreferences.getDefault();
|
||||||
query += " LIMIT " + MAX_OBJECTS; //NON-NLS
|
if (deletedPreferences.getShouldLimitDeletedFiles()) {
|
||||||
|
query += " LIMIT " + deletedPreferences.getDeletedFilesLimit(); //NON-NLS
|
||||||
|
}
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,171 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2018 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> 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.deletedFiles;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.sleuthkit.autopsy.casemodule.CasePreferences;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to store settings related to the display of deleted files.
|
||||||
|
*/
|
||||||
|
public class DeletedFilePreferences {
|
||||||
|
|
||||||
|
private static final String SETTINGS_FILE = "DeletedFilePreferences.properties"; //NON-NLS
|
||||||
|
private static final String KEY_LIMIT_DELETED_FILES = "limitDeletedFiles"; //NON-NLS
|
||||||
|
private static final String KEY_LIMIT_VALUE = "limitValue";
|
||||||
|
private static final String VALUE_TRUE = "true"; //NON-NLS
|
||||||
|
private static final String VALUE_FALSE = "false"; //NON-NLS
|
||||||
|
private static final int DEFAULT_MAX_OBJECTS = 10001;
|
||||||
|
private static final Logger logger = Logger.getLogger(CasePreferences.class.getName());
|
||||||
|
private static DeletedFilePreferences defaultInstance;
|
||||||
|
private static boolean limitDeletedFiles = true;
|
||||||
|
private static int deletedFilesLimit = DEFAULT_MAX_OBJECTS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the settings for the display of deleted files.
|
||||||
|
*
|
||||||
|
* @return defaultInstance with freshly loaded
|
||||||
|
*/
|
||||||
|
public static synchronized DeletedFilePreferences getDefault() {
|
||||||
|
if (defaultInstance == null) {
|
||||||
|
defaultInstance = new DeletedFilePreferences();
|
||||||
|
}
|
||||||
|
defaultInstance.loadFromStorage();
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent instantiation.
|
||||||
|
*/
|
||||||
|
private DeletedFilePreferences() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the 'limitDeletedFiles' value. This can be true or false. It will
|
||||||
|
* default to true if it was not saved correctly previously.s
|
||||||
|
*
|
||||||
|
* @return true if the number of deleted files displayed should be limied,
|
||||||
|
* false if it should not be limited.
|
||||||
|
*/
|
||||||
|
public boolean getShouldLimitDeletedFiles() {
|
||||||
|
return limitDeletedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the 'limitDeletedFiles' value to true or false.
|
||||||
|
*
|
||||||
|
* @param value true if the number of deleted files displayed should be
|
||||||
|
* limied, false if it should not be limited.
|
||||||
|
*/
|
||||||
|
public void setShouldLimitDeletedFiles(boolean value) {
|
||||||
|
limitDeletedFiles = value;
|
||||||
|
saveToStorage();
|
||||||
|
DirectoryTreeTopComponent.getDefault().refreshContentTreeSafe();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the 'limitValue' value. This is an interger value and will default to
|
||||||
|
* DEFAULT_MAX_OBJECTS if it was not previously saved correctly.
|
||||||
|
*
|
||||||
|
* @return an integer representing the max number of deleted files to display.
|
||||||
|
*/
|
||||||
|
public int getDeletedFilesLimit() {
|
||||||
|
return deletedFilesLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the 'limitValue' for max number of deleted files to display.
|
||||||
|
*
|
||||||
|
* @param value an integer representing the max number of deleted files to display.
|
||||||
|
*/
|
||||||
|
public void setDeletedFilesLimit(int value) {
|
||||||
|
deletedFilesLimit = value;
|
||||||
|
saveToStorage();
|
||||||
|
DirectoryTreeTopComponent.getDefault().refreshContentTreeSafe();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load deleted file preferences from the settings file.
|
||||||
|
*/
|
||||||
|
private void loadFromStorage() {
|
||||||
|
Path settingsFile = Paths.get(PlatformUtil.getUserConfigDirectory(), SETTINGS_FILE); //NON-NLS
|
||||||
|
if (settingsFile.toFile().exists()) {
|
||||||
|
// Read the settings
|
||||||
|
try (InputStream inputStream = Files.newInputStream(settingsFile)) {
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.load(inputStream);
|
||||||
|
String limitDeletedFilesValue = props.getProperty(KEY_LIMIT_DELETED_FILES);
|
||||||
|
if (limitDeletedFilesValue != null) {
|
||||||
|
switch (limitDeletedFilesValue) {
|
||||||
|
case VALUE_TRUE:
|
||||||
|
limitDeletedFiles = true;
|
||||||
|
break;
|
||||||
|
case VALUE_FALSE:
|
||||||
|
limitDeletedFiles = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.log(Level.WARNING, String.format("Unexpected value '%s' for limit deleted files using value of true instead",
|
||||||
|
limitDeletedFilesValue));
|
||||||
|
limitDeletedFiles = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String limitValue = props.getProperty(KEY_LIMIT_VALUE);
|
||||||
|
try {
|
||||||
|
if (limitValue != null) {
|
||||||
|
deletedFilesLimit = Integer.valueOf(limitValue);
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
logger.log(Level.INFO, String.format("Unexpected value '%s' for limit, expected an integer using default of 10,001 instead",
|
||||||
|
limitValue));
|
||||||
|
deletedFilesLimit = DEFAULT_MAX_OBJECTS;
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Error reading deletedFilesPreferences file", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store deleted file preferences in the settings file.
|
||||||
|
*/
|
||||||
|
private void saveToStorage() {
|
||||||
|
Path settingsFile = Paths.get(PlatformUtil.getUserConfigDirectory(), SETTINGS_FILE); //NON-NLS
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.setProperty(KEY_LIMIT_DELETED_FILES, (limitDeletedFiles ? VALUE_TRUE : VALUE_FALSE));
|
||||||
|
props.setProperty(KEY_LIMIT_VALUE, String.valueOf(deletedFilesLimit));
|
||||||
|
try (OutputStream fos = Files.newOutputStream(settingsFile)) {
|
||||||
|
props.store(fos, ""); //NON-NLS
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Error writing deletedFilesPreferences file", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user