package ctbrec.ui.action; import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; import ctbrec.GlobalThreadPool; import ctbrec.Model; import ctbrec.recorder.Recorder; import ctbrec.ui.controls.Dialogs; import javafx.application.Platform; import javafx.scene.control.Button; @Slf4j public class CheckModelAccountAction { private Button b; private Recorder recorder; private String buttonText; public CheckModelAccountAction(Button b, Recorder recorder) { this.b = b; this.recorder = recorder; buttonText = b.getText(); } public void execute(Predicate filter) { b.setDisable(true); Runnable checker = (() -> { List deletedAccounts = new ArrayList<>(); try { checkModelAccounts(filter, deletedAccounts); } finally { showResult(deletedAccounts); } }); GlobalThreadPool.submit(checker); } private void showResult(List deletedAccounts) { Platform.runLater(() -> { b.setDisable(false); b.setText(buttonText); if (!deletedAccounts.isEmpty()) { var sb = new StringBuilder(); for (Model deletedModel : deletedAccounts) { String name = deletedModel.getDisplayName() + " ".repeat(30); name = name.substring(0, 30); sb.append(name).append(' ').append('(').append(deletedModel.getUrl()).append(')').append('\n'); } boolean remove = Dialogs.showConfirmDialog("Deleted Accounts", sb.toString(), "The following accounts seem to have been deleted. Do you want to remove them?", b.getScene()); if (remove) { new StopRecordingAction(b, deletedAccounts, recorder).execute(); } } }); } private void checkModelAccounts(Predicate filter, List deletedAccounts) { List models = recorder.getModels().stream() // .filter(filter) // .collect(Collectors.toList()); int total = models.size(); for (var i = 0; i < total; i++) { final int counter = i+1; Platform.runLater(() -> b.setText(buttonText + ' ' + counter + '/' + total)); var modelToCheck = models.get(i); try { if (!modelToCheck.exists()) { deletedAccounts.add(modelToCheck); } } catch (IOException e) { log.warn("Couldn't check, if model account still exists", e); } } } }