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
|
||||
*
|
||||
* Copyright 2011-17 Basis Technology Corp.
|
||||
* Copyright 2011-18 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> org
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -19,6 +19,7 @@
|
||||
package org.sleuthkit.autopsy.imagegallery.actions;
|
||||
|
||||
import java.util.Optional;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.Observable;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.ObservableList;
|
||||
@ -41,52 +42,57 @@ import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.GroupViewState;
|
||||
public class NextUnseenGroup extends Action {
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
private static final String MARK_GROUP_SEEN = Bundle.NextUnseenGroup_markGroupSeen();
|
||||
private static final String NEXT_UNSEEN_GROUP = Bundle.NextUnseenGroup_nextUnseenGroup();
|
||||
|
||||
private final ImageGalleryController controller;
|
||||
private final ObservableList<DrawableGroup> unSeenGroups;
|
||||
|
||||
public NextUnseenGroup(ImageGalleryController controller) {
|
||||
super(NEXT_UNSEEN_GROUP);
|
||||
setGraphic(new ImageView(ADVANCE_IMAGE));
|
||||
|
||||
this.controller = controller;
|
||||
GroupManager groupManager = controller.getGroupManager();
|
||||
unSeenGroups = groupManager.getUnSeenGroups();
|
||||
unSeenGroups.addListener((Observable observable) -> this.updateButton());
|
||||
|
||||
ObservableList<DrawableGroup> unSeenGroups = groupManager.getUnSeenGroups();
|
||||
setGraphic(new ImageView(ADVANCE));
|
||||
|
||||
unSeenGroups.addListener((Observable o) -> this.updateButton(unSeenGroups));
|
||||
|
||||
setEventHandler(event -> {
|
||||
//fx-thread
|
||||
setEventHandler(event -> { //on fx-thread
|
||||
//if there is a group assigned to the view, mark it as seen
|
||||
Optional.ofNullable(controller.viewState())
|
||||
.map(ObservableValue<GroupViewState>::getValue)
|
||||
.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)
|
||||
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());
|
||||
if (unSeenGroups.size() <= 1) {
|
||||
setText(MARK_GROUP_SEEN);
|
||||
setGraphic(new ImageView(END));
|
||||
setGraphic(new ImageView(END_IMAGE));
|
||||
} else {
|
||||
setText(NEXT_UNSEEN_GROUP);
|
||||
setGraphic(new ImageView(ADVANCE));
|
||||
setGraphic(new ImageView(ADVANCE_IMAGE));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -286,20 +286,19 @@ public class GroupManager {
|
||||
* DB.
|
||||
*/
|
||||
public ListenableFuture<?> saveGroupSeen(DrawableGroup group, boolean seen) {
|
||||
synchronized (controller) {
|
||||
DrawableDB db = getDB();
|
||||
if (nonNull(db)) {
|
||||
return exec.submit(() -> {
|
||||
try {
|
||||
db.markGroupSeen(group.getGroupKey(), seen);
|
||||
group.setSeen(seen);
|
||||
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Error marking group as seen", ex); //NON-NLS
|
||||
}
|
||||
});
|
||||
}
|
||||
DrawableDB db = getDB();
|
||||
if (nonNull(db)) {
|
||||
return exec.submit(() -> {
|
||||
try {
|
||||
db.markGroupSeen(group.getGroupKey(), seen);
|
||||
group.setSeen(seen);
|
||||
Platform.runLater(() -> updateUnSeenGroups(group, seen));
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Error marking group as seen", ex); //NON-NLS
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return Futures.immediateFuture(null);
|
||||
}
|
||||
|
||||
@ -659,9 +658,7 @@ public class GroupManager {
|
||||
group = new DrawableGroup(groupKey, fileIDs, groupSeen);
|
||||
controller.getCategoryManager().registerListener(group);
|
||||
group.seenProperty().addListener((o, oldSeen, newSeen)
|
||||
-> saveGroupSeen(group, newSeen)
|
||||
.addListener(() -> updateUnSeenGroups(group, newSeen),
|
||||
Platform::runLater));
|
||||
-> saveGroupSeen(group, newSeen));
|
||||
|
||||
groupMap.put(groupKey, group);
|
||||
}
|
||||
@ -857,7 +854,6 @@ public class GroupManager {
|
||||
default:
|
||||
//otherwise do straight db query
|
||||
if (nonNull(db)) {
|
||||
//TODO -1017: pass datasource in here as appropriate
|
||||
values = db.findValuesForAttribute(groupBy, sortBy, sortOrder, dataSource);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user