diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java index f865ccccb6..7f1245fef2 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java @@ -18,8 +18,13 @@ */ package org.sleuthkit.autopsy.datamodel; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Arrays; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.openide.nodes.ChildFactory; import org.openide.nodes.Node; import org.sleuthkit.datamodel.SleuthkitCase; @@ -31,6 +36,8 @@ import org.sleuthkit.datamodel.SleuthkitCase; public class RecentFilesChildren extends ChildFactory{ SleuthkitCase skCase; + long latestUpdateTime; + private final static Logger logger = Logger.getLogger(RecentFilesChildren.class.getName()); public RecentFilesChildren(SleuthkitCase skCase) { this.skCase = skCase; @@ -39,12 +46,45 @@ public class RecentFilesChildren extends ChildFactory list) { list.addAll(Arrays.asList(RecentFiles.RecentFilesFilter.values())); + latestUpdateTime = getLastTime(); return true; } @Override protected Node createNodeForKey(RecentFiles.RecentFilesFilter key){ - return new RecentFilesFilterNode(skCase, key); + return new RecentFilesFilterNode(skCase, key, latestUpdateTime); + } + + private long getLastTime() { + String query = createMaxQuery("crtime"); + long maxcr = runTimeQuery(query); + query = createMaxQuery("ctime"); + long maxc = runTimeQuery(query); + query = createMaxQuery("mtime"); + long maxm = runTimeQuery(query); + query = createMaxQuery("atime"); + long maxa = runTimeQuery(query); + return Math.max(maxcr, Math.max(maxc, Math.max(maxm, maxa))); + } + + private String createMaxQuery(String attr){ + return "select max(" + attr + ") from tsk_files where " + attr + " < " + System.currentTimeMillis()/1000; + } + + private long runTimeQuery(String query) { + long result = 0; + try { + ResultSet rs = skCase.runQuery(query); + result = rs.getLong(1); + Statement s = rs.getStatement(); + rs.close(); + if (s != null) + s.close(); + } catch (SQLException ex) { + Logger.getLogger(RecentFilesFilterChildren.class.getName()) + .log(Level.INFO, "Couldn't get search results", ex); + } + return result; } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java index b94a62f539..36ad641afa 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java @@ -44,11 +44,13 @@ public class RecentFilesFilterChildren extends ChildFactory{ SleuthkitCase skCase; RecentFilesFilter filter; + long latestUpdate; private final static Logger logger = Logger.getLogger(RecentFilesFilterChildren.class.getName()); - RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase) { + RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase, long latestUpdate) { this.skCase = skCase; this.filter = filter; + this.latestUpdate = latestUpdate; } @Override @@ -59,7 +61,6 @@ public class RecentFilesFilterChildren extends ChildFactory{ private String createQuery(){ String query = "select * from tsk_files where "; - long latestUpdate = getLastTime(); long threshold = latestUpdate-filter.getDurationSeconds(); query += "(crtime between " + threshold + " and " + latestUpdate + ") or "; query += "(ctime between " + threshold + " and " + latestUpdate + ") or "; @@ -109,36 +110,4 @@ public class RecentFilesFilterChildren extends ChildFactory{ }); } - - private long getLastTime() { - String query = createMaxQuery("crtime"); - long maxcr = runTimeQuery(query); - query = createMaxQuery("ctime"); - long maxc = runTimeQuery(query); - query = createMaxQuery("mtime"); - long maxm = runTimeQuery(query); - query = createMaxQuery("atime"); - long maxa = runTimeQuery(query); - return Math.max(maxcr, Math.max(maxc, Math.max(maxm, maxa))); - } - - private String createMaxQuery(String attr){ - return "select max(" + attr + ") from tsk_files where " + attr + " < " + System.currentTimeMillis()/1000; - } - - private long runTimeQuery(String query) { - long result = 0; - try { - ResultSet rs = skCase.runQuery(query); - result = rs.getLong(1); - Statement s = rs.getStatement(); - rs.close(); - if (s != null) - s.close(); - } catch (SQLException ex) { - Logger.getLogger(RecentFilesFilterChildren.class.getName()) - .log(Level.INFO, "Couldn't get search results", ex); - } - return result; - } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java index 953e8b7568..a32e229890 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java @@ -18,6 +18,12 @@ */ package org.sleuthkit.autopsy.datamodel; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Date; +import java.util.logging.Level; +import java.util.logging.Logger; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; @@ -34,12 +40,15 @@ public class RecentFilesFilterNode extends AbstractNode implements DisplayableIt SleuthkitCase skCase; RecentFilesFilter filter; - RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter) { - super(Children.create(new RecentFilesFilterChildren(filter, skCase), true), Lookups.singleton(filter)); + RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter, long latestUpdate) { + super(Children.create(new RecentFilesFilterChildren(filter, skCase, latestUpdate), true), Lookups.singleton(filter)); super.setName(filter.getName()); super.setDisplayName(filter.getDisplayName()); this.skCase = skCase; this.filter = filter; + String tooltip = "Between " + new Date((latestUpdate-filter.getDurationSeconds())*1000).toString(); + tooltip += "\n and " + new Date(latestUpdate*1000).toString(); + this.setShortDescription(tooltip); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/recent-icon.png"); } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java index 2d9e8378c2..4491ee3dd8 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java @@ -30,10 +30,15 @@ public class SearchFilters implements AutopsyVisitableItem{ SleuthkitCase skCase; public enum FileSearchFilter implements AutopsyVisitableItem { - TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", Arrays.asList(".jpg", ".jpeg", ".png", ".psd", ".nef")), - TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", Arrays.asList(".mov", ".avi", ".m4v")), - TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", Arrays.asList(".mp3", ".aac", ".wav", ".ogg", ".wma", ".m4a")), - TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls")); + TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", Arrays.asList(".jpg", ".jpeg", ".png", ".psd", ".nef", ".tiff")), + TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", + Arrays.asList(".aaf", ".3gp", ".asf", ".avi", ".m1v", ".m2v", ".m4v", + ".mov", ".mpeg", ".mpg", ".mpe", ".mp4", ".rm", ".wmv", ".mpv")), + TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", + Arrays.asList(".aiff", ".aif", ".flac", ".wav", ".m4a", ".ape", ".wma", ".mp2", + ".mp1", ".mp3", ".aac", ".mp4", ".m4p", ".m1a", ".m2a", ".m4r", ".mpa", + ".m3u", ".mid", ".midi", ".ogg")), + TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls", ".rtf", ".txt")); int id; String name; diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java index dc9aa1b42a..d285aea416 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java @@ -32,8 +32,8 @@ public class SearchFiltersNode extends AbstractNode implements DisplayableItemNo SearchFiltersNode(SleuthkitCase skCase) { super(Children.create(new SearchFiltersChildren(skCase), true)); - super.setName("Search Filters"); - super.setDisplayName("Search Filters"); + super.setName("File Types"); + super.setDisplayName("File Types"); this.skCase = skCase; this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/filter-icon.png"); }