81 lines
2.9 KiB
Java
81 lines
2.9 KiB
Java
package ctbrec.ui.action;
|
|
|
|
import ctbrec.GlobalThreadPool;
|
|
import ctbrec.Model;
|
|
import ctbrec.recorder.Recorder;
|
|
import ctbrec.ui.action.StopRecordingAction;
|
|
import ctbrec.ui.controls.Dialogs;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.function.Predicate;
|
|
import java.util.stream.Collectors;
|
|
import javafx.application.Platform;
|
|
import javafx.scene.control.Button;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@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<Model> filter) {
|
|
b.setDisable(true);
|
|
Runnable checker = () -> {
|
|
ArrayList<Model> deletedAccounts = new ArrayList<Model>();
|
|
try {
|
|
checkModelAccounts(filter, deletedAccounts);
|
|
}
|
|
finally {
|
|
showResult(deletedAccounts);
|
|
}
|
|
};
|
|
GlobalThreadPool.submit((Runnable)checker);
|
|
}
|
|
|
|
private void showResult(List<Model> deletedAccounts) {
|
|
Platform.runLater(() -> {
|
|
b.setDisable(false);
|
|
b.setText(this.buttonText);
|
|
if (!deletedAccounts.isEmpty()) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for (Model deletedModel : deletedAccounts) {
|
|
Object name = deletedModel.getDisplayName() + " ".repeat(30);
|
|
name = ((String)name).substring(0, 30);
|
|
sb.append((String)name).append(' ').append('(').append(deletedModel.getUrl()).append(')').append('\n');
|
|
}
|
|
boolean remove = Dialogs.showExpandedConfirmDialog("Deleted Accounts", "Accounts list:", 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<Model> filter, List<Model> deletedAccounts) {
|
|
List models = recorder.getModels().stream().filter(filter).collect(Collectors.toList());
|
|
int total = models.size();
|
|
for (int i = 0; i < total; ++i) {
|
|
int counter = i + 1;
|
|
Platform.runLater(() -> b.setText(buttonText + " " + counter + "/" + total));
|
|
Model modelToCheck = (Model)models.get(i);
|
|
try {
|
|
if (modelToCheck.exists()) continue;
|
|
deletedAccounts.add(modelToCheck);
|
|
continue;
|
|
}
|
|
catch (IOException e) {
|
|
log.warn("Couldn't check, if model account still exists", (Throwable)e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|