mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 08:26:15 +00:00
make sure unseen groups always get updated when a group is marked as seen
This commit is contained in:
parent
2d661e66c8
commit
dba02a6ffa
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2011-17 Basis Technology Corp.
|
* Copyright 2011-18 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -19,6 +19,7 @@
|
|||||||
package org.sleuthkit.autopsy.imagegallery.actions;
|
package org.sleuthkit.autopsy.imagegallery.actions;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.beans.Observable;
|
import javafx.beans.Observable;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
@ -41,52 +42,57 @@ import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.GroupViewState;
|
|||||||
public class NextUnseenGroup extends Action {
|
public class NextUnseenGroup extends Action {
|
||||||
|
|
||||||
private static final String IMAGE_PATH = "/org/sleuthkit/autopsy/imagegallery/images/"; //NON-NLS
|
private static final String IMAGE_PATH = "/org/sleuthkit/autopsy/imagegallery/images/"; //NON-NLS
|
||||||
private static final Image END = new Image(NextUnseenGroup.class.getResourceAsStream(
|
private static final Image END_IMAGE = new Image(NextUnseenGroup.class.getResourceAsStream(
|
||||||
IMAGE_PATH + "control-stop.png")); //NON-NLS
|
IMAGE_PATH + "control-stop.png")); //NON-NLS
|
||||||
private static final Image ADVANCE = new Image(NextUnseenGroup.class.getResourceAsStream(
|
private static final Image ADVANCE_IMAGE = new Image(NextUnseenGroup.class.getResourceAsStream(
|
||||||
IMAGE_PATH + "control-double.png")); //NON-NLS
|
IMAGE_PATH + "control-double.png")); //NON-NLS
|
||||||
|
|
||||||
private static final String MARK_GROUP_SEEN = Bundle.NextUnseenGroup_markGroupSeen();
|
private static final String MARK_GROUP_SEEN = Bundle.NextUnseenGroup_markGroupSeen();
|
||||||
private static final String NEXT_UNSEEN_GROUP = Bundle.NextUnseenGroup_nextUnseenGroup();
|
private static final String NEXT_UNSEEN_GROUP = Bundle.NextUnseenGroup_nextUnseenGroup();
|
||||||
|
|
||||||
|
private final ImageGalleryController controller;
|
||||||
|
private final ObservableList<DrawableGroup> unSeenGroups;
|
||||||
|
|
||||||
public NextUnseenGroup(ImageGalleryController controller) {
|
public NextUnseenGroup(ImageGalleryController controller) {
|
||||||
super(NEXT_UNSEEN_GROUP);
|
super(NEXT_UNSEEN_GROUP);
|
||||||
|
setGraphic(new ImageView(ADVANCE_IMAGE));
|
||||||
|
|
||||||
|
this.controller = controller;
|
||||||
GroupManager groupManager = controller.getGroupManager();
|
GroupManager groupManager = controller.getGroupManager();
|
||||||
|
unSeenGroups = groupManager.getUnSeenGroups();
|
||||||
|
unSeenGroups.addListener((Observable observable) -> this.updateButton());
|
||||||
|
|
||||||
ObservableList<DrawableGroup> unSeenGroups = groupManager.getUnSeenGroups();
|
setEventHandler(event -> { //on fx-thread
|
||||||
setGraphic(new ImageView(ADVANCE));
|
|
||||||
|
|
||||||
unSeenGroups.addListener((Observable o) -> this.updateButton(unSeenGroups));
|
|
||||||
|
|
||||||
setEventHandler(event -> {
|
|
||||||
//fx-thread
|
|
||||||
//if there is a group assigned to the view, mark it as seen
|
//if there is a group assigned to the view, mark it as seen
|
||||||
Optional.ofNullable(controller.viewState())
|
Optional.ofNullable(controller.viewState())
|
||||||
.map(ObservableValue<GroupViewState>::getValue)
|
.map(ObservableValue<GroupViewState>::getValue)
|
||||||
.map(GroupViewState::getGroup)
|
.map(GroupViewState::getGroup)
|
||||||
.ifPresent(group -> groupManager.saveGroupSeen(group, true));
|
.ifPresent(group -> {
|
||||||
|
groupManager.saveGroupSeen(group, true)
|
||||||
|
.addListener(this::advanceToNextUnseenGroup, Platform::runLater);
|
||||||
|
});
|
||||||
|
|
||||||
if (unSeenGroups.isEmpty() == false) {
|
|
||||||
controller.advance(GroupViewState.tile(unSeenGroups.get(0)), true);
|
|
||||||
updateButton(unSeenGroups);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
updateButton(unSeenGroups);
|
updateButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param unSeenGroups the value of unSeenGroups
|
|
||||||
*/
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
private void updateButton(ObservableList<DrawableGroup> unSeenGroups) {
|
private void advanceToNextUnseenGroup() {
|
||||||
|
if (unSeenGroups.isEmpty() == false) {
|
||||||
|
controller.advance(GroupViewState.tile(unSeenGroups.get(0)), true);
|
||||||
|
}
|
||||||
|
updateButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ThreadConfined(type = ThreadConfined.ThreadType.JFX)
|
||||||
|
private void updateButton() {
|
||||||
setDisabled(unSeenGroups.isEmpty());
|
setDisabled(unSeenGroups.isEmpty());
|
||||||
if (unSeenGroups.size() <= 1) {
|
if (unSeenGroups.size() <= 1) {
|
||||||
setText(MARK_GROUP_SEEN);
|
setText(MARK_GROUP_SEEN);
|
||||||
setGraphic(new ImageView(END));
|
setGraphic(new ImageView(END_IMAGE));
|
||||||
} else {
|
} else {
|
||||||
setText(NEXT_UNSEEN_GROUP);
|
setText(NEXT_UNSEEN_GROUP);
|
||||||
setGraphic(new ImageView(ADVANCE));
|
setGraphic(new ImageView(ADVANCE_IMAGE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,20 +286,19 @@ public class GroupManager {
|
|||||||
* DB.
|
* DB.
|
||||||
*/
|
*/
|
||||||
public ListenableFuture<?> saveGroupSeen(DrawableGroup group, boolean seen) {
|
public ListenableFuture<?> saveGroupSeen(DrawableGroup group, boolean seen) {
|
||||||
synchronized (controller) {
|
DrawableDB db = getDB();
|
||||||
DrawableDB db = getDB();
|
if (nonNull(db)) {
|
||||||
if (nonNull(db)) {
|
return exec.submit(() -> {
|
||||||
return exec.submit(() -> {
|
try {
|
||||||
try {
|
db.markGroupSeen(group.getGroupKey(), seen);
|
||||||
db.markGroupSeen(group.getGroupKey(), seen);
|
group.setSeen(seen);
|
||||||
group.setSeen(seen);
|
Platform.runLater(() -> updateUnSeenGroups(group, seen));
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
} catch (TskCoreException ex) {
|
logger.log(Level.SEVERE, "Error marking group as seen", ex); //NON-NLS
|
||||||
logger.log(Level.SEVERE, "Error marking group as seen", ex); //NON-NLS
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Futures.immediateFuture(null);
|
return Futures.immediateFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,9 +658,7 @@ public class GroupManager {
|
|||||||
group = new DrawableGroup(groupKey, fileIDs, groupSeen);
|
group = new DrawableGroup(groupKey, fileIDs, groupSeen);
|
||||||
controller.getCategoryManager().registerListener(group);
|
controller.getCategoryManager().registerListener(group);
|
||||||
group.seenProperty().addListener((o, oldSeen, newSeen)
|
group.seenProperty().addListener((o, oldSeen, newSeen)
|
||||||
-> saveGroupSeen(group, newSeen)
|
-> saveGroupSeen(group, newSeen));
|
||||||
.addListener(() -> updateUnSeenGroups(group, newSeen),
|
|
||||||
Platform::runLater));
|
|
||||||
|
|
||||||
groupMap.put(groupKey, group);
|
groupMap.put(groupKey, group);
|
||||||
}
|
}
|
||||||
@ -857,7 +854,6 @@ public class GroupManager {
|
|||||||
default:
|
default:
|
||||||
//otherwise do straight db query
|
//otherwise do straight db query
|
||||||
if (nonNull(db)) {
|
if (nonNull(db)) {
|
||||||
//TODO -1017: pass datasource in here as appropriate
|
|
||||||
values = db.findValuesForAttribute(groupBy, sortBy, sortOrder, dataSource);
|
values = db.findValuesForAttribute(groupBy, sortBy, sortOrder, dataSource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user