From d679bb65ca7c8c7c0fc1fa8697382e20413dd023 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 10 Jan 2021 19:58:17 +0100 Subject: [PATCH] Revert "Use CompletableFuture.runAsync instead of creating new Threads" This reverts commit 53684668abf1af1b72a87a2e409e8449d30d4d8c. --- .../java/ctbrec/ui/CamrecApplication.java | 6 +- .../java/ctbrec/ui/PreviewPopupHandler.java | 7 +- .../ui/StreamSourceSelectionDialog.java | 3 +- client/src/main/java/ctbrec/ui/TipDialog.java | 3 +- .../src/main/java/ctbrec/ui/TokenLabel.java | 3 +- .../ui/action/CheckModelAccountAction.java | 4 +- .../ctbrec/ui/action/EditNotesAction.java | 5 +- .../ctbrec/ui/action/ModelMassEditAction.java | 11 ++- .../ctbrec/ui/action/OpenRecordingsDir.java | 3 +- .../ui/action/ToggleRecordingAction.java | 6 +- .../ui/controls/SearchPopoverTreeList.java | 28 ++++--- .../ctbrec/ui/controls/StreamPreview.java | 5 +- .../main/java/ctbrec/ui/controls/Toast.java | 6 +- .../src/main/java/ctbrec/ui/news/NewsTab.java | 17 ++-- .../ui/sites/bonga/BongaCamsSiteUi.java | 18 ++--- .../ui/sites/camsoda/CamsodaShowsTab.java | 77 ++++++++++--------- .../ui/sites/jasmin/LiveJasminSiteUi.java | 5 +- .../sites/myfreecams/MyFreeCamsTableTab.java | 5 +- .../ctbrec/ui/sites/showup/ShowupSiteUi.java | 5 +- .../java/ctbrec/ui/tabs/RecordingsTab.java | 25 +++--- .../main/java/ctbrec/ui/tabs/ThumbCell.java | 8 +- 21 files changed, 130 insertions(+), 120 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/CamrecApplication.java b/client/src/main/java/ctbrec/ui/CamrecApplication.java index 1e049d2a..1e860240 100644 --- a/client/src/main/java/ctbrec/ui/CamrecApplication.java +++ b/client/src/main/java/ctbrec/ui/CamrecApplication.java @@ -16,7 +16,6 @@ import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -478,7 +477,7 @@ public class CamrecApplication extends Application { } private void checkForUpdates() { - CompletableFuture.runAsync(() -> { + Thread updateCheck = new Thread(() -> { String url = "https://pastebin.com/raw/mUxtKzyB"; Request request = new Request.Builder().url(url).build(); try (Response response = httpClient.execute(request)) { @@ -505,6 +504,9 @@ public class CamrecApplication extends Application { LOG.warn("Update check failed: {}", e.getMessage()); } }); + updateCheck.setName("Update Check"); + updateCheck.setDaemon(true); + updateCheck.start(); } public static Version getVersion() throws IOException { diff --git a/client/src/main/java/ctbrec/ui/PreviewPopupHandler.java b/client/src/main/java/ctbrec/ui/PreviewPopupHandler.java index 5b8434a2..5c05eb98 100644 --- a/client/src/main/java/ctbrec/ui/PreviewPopupHandler.java +++ b/client/src/main/java/ctbrec/ui/PreviewPopupHandler.java @@ -1,7 +1,6 @@ package ctbrec.ui; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; @@ -146,7 +145,7 @@ public class PreviewPopupHandler implements EventHandler { } private void createTimerThread() { - CompletableFuture.runAsync(() -> { + Thread timerThread = new Thread(() -> { while(true) { openCountdown--; if(openCountdown == 0) { @@ -182,5 +181,9 @@ public class PreviewPopupHandler implements EventHandler { } } }); + timerThread.setDaemon(true); + timerThread.setPriority(Thread.MIN_PRIORITY); + timerThread.setName("PreviewPopupTimer"); + timerThread.start(); } } diff --git a/client/src/main/java/ctbrec/ui/StreamSourceSelectionDialog.java b/client/src/main/java/ctbrec/ui/StreamSourceSelectionDialog.java index 42c7c854..2aa64e8f 100644 --- a/client/src/main/java/ctbrec/ui/StreamSourceSelectionDialog.java +++ b/client/src/main/java/ctbrec/ui/StreamSourceSelectionDialog.java @@ -4,7 +4,6 @@ import java.io.InputStream; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.function.Function; @@ -62,7 +61,7 @@ public class StreamSourceSelectionDialog { } }); selectStreamSource.setOnFailed(e -> onFail.apply(selectStreamSource.getException())); - CompletableFuture.runAsync(selectStreamSource); + new Thread(selectStreamSource).start(); } private static class BestStreamSource extends StreamSource { diff --git a/client/src/main/java/ctbrec/ui/TipDialog.java b/client/src/main/java/ctbrec/ui/TipDialog.java index 5c1b8ecd..459d8d8a 100644 --- a/client/src/main/java/ctbrec/ui/TipDialog.java +++ b/client/src/main/java/ctbrec/ui/TipDialog.java @@ -2,7 +2,6 @@ package ctbrec.ui; import java.text.DecimalFormat; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import org.slf4j.Logger; @@ -79,7 +78,7 @@ public class TipDialog extends TextInputDialog { } } }; - CompletableFuture.runAsync(task); + new Thread(task).start(); } private void showErrorDialog(Throwable throwable) { diff --git a/client/src/main/java/ctbrec/ui/TokenLabel.java b/client/src/main/java/ctbrec/ui/TokenLabel.java index 6a5cd5c8..917dad12 100644 --- a/client/src/main/java/ctbrec/ui/TokenLabel.java +++ b/client/src/main/java/ctbrec/ui/TokenLabel.java @@ -3,7 +3,6 @@ package ctbrec.ui; import java.text.DecimalFormat; import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import org.slf4j.Logger; @@ -84,6 +83,6 @@ public class TokenLabel extends Label { } } }; - CompletableFuture.runAsync(task); + new Thread(task).start(); } } diff --git a/client/src/main/java/ctbrec/ui/action/CheckModelAccountAction.java b/client/src/main/java/ctbrec/ui/action/CheckModelAccountAction.java index cad69b2a..c9bab392 100644 --- a/client/src/main/java/ctbrec/ui/action/CheckModelAccountAction.java +++ b/client/src/main/java/ctbrec/ui/action/CheckModelAccountAction.java @@ -3,7 +3,6 @@ package ctbrec.ui.action; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -32,7 +31,7 @@ public class CheckModelAccountAction { public void execute(Predicate filter) { String buttonText = b.getText(); b.setDisable(true); - CompletableFuture.runAsync(() -> { + Runnable checker = (() -> { List deletedAccounts = new ArrayList<>(); try { List models = recorder.getModels().stream() // @@ -71,5 +70,6 @@ public class CheckModelAccountAction { }); } }); + new Thread(checker).start(); } } diff --git a/client/src/main/java/ctbrec/ui/action/EditNotesAction.java b/client/src/main/java/ctbrec/ui/action/EditNotesAction.java index e55b77c0..2a23edec 100644 --- a/client/src/main/java/ctbrec/ui/action/EditNotesAction.java +++ b/client/src/main/java/ctbrec/ui/action/EditNotesAction.java @@ -2,7 +2,6 @@ package ctbrec.ui.action; import java.io.IOException; import java.util.Optional; -import java.util.concurrent.CompletableFuture; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,7 +30,7 @@ public class EditNotesAction { public void execute() { source.setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> Platform.runLater(() -> { + new Thread(() -> Platform.runLater(() -> { String notes = Config.getInstance().getSettings().modelNotes.getOrDefault(model.getUrl(), ""); Optional newNotes = Dialogs.showTextInput(source.getScene(), "Model Notes", "Notes for " + model.getName(), notes); newNotes.ifPresent(n -> { @@ -48,6 +47,6 @@ public class EditNotesAction { }); table.refresh(); source.setCursor(Cursor.DEFAULT); - })); + })).start(); } } diff --git a/client/src/main/java/ctbrec/ui/action/ModelMassEditAction.java b/client/src/main/java/ctbrec/ui/action/ModelMassEditAction.java index f6da2d5d..70c6dfc1 100644 --- a/client/src/main/java/ctbrec/ui/action/ModelMassEditAction.java +++ b/client/src/main/java/ctbrec/ui/action/ModelMassEditAction.java @@ -2,7 +2,11 @@ package ctbrec.ui.action; import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import ctbrec.Model; @@ -12,6 +16,9 @@ import javafx.scene.Node; public class ModelMassEditAction { + static BlockingQueue queue = new LinkedBlockingQueue<>(); + static ExecutorService threadPool = new ThreadPoolExecutor(2, 10, 10, TimeUnit.MINUTES, queue); + protected List models; protected Consumer action; protected Node source; @@ -35,7 +42,7 @@ public class ModelMassEditAction { Consumer cb = Objects.requireNonNull(callback, "Callback is null, call execute() instead"); source.setCursor(Cursor.WAIT); for (Model model : models) { - CompletableFuture.runAsync(() -> { + threadPool.submit(() -> { action.accept(model); cb.accept(model); Platform.runLater(() -> source.setCursor(Cursor.DEFAULT)); diff --git a/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java b/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java index b7d8d37c..4ef67fd0 100644 --- a/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java +++ b/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java @@ -2,7 +2,6 @@ package ctbrec.ui.action; import java.io.File; import java.time.Instant; -import java.util.concurrent.CompletableFuture; import ctbrec.Config; import ctbrec.Model; @@ -27,7 +26,7 @@ public class OpenRecordingsDir { File fileForRecording = Config.getInstance().getFileForRecording(selectedModel, ".mp4", Instant.now()); final File dir = getModelDirectory(fileForRecording); if (dir.exists()) { - CompletableFuture.runAsync(() -> DesktopIntegration.open(dir)); + new Thread(() -> DesktopIntegration.open(dir)).start(); } else { Dialogs.showError(source.getScene(), "Directory does not exist", "There are no recordings for this model", null); } diff --git a/client/src/main/java/ctbrec/ui/action/ToggleRecordingAction.java b/client/src/main/java/ctbrec/ui/action/ToggleRecordingAction.java index f15f3e20..6e9fc155 100644 --- a/client/src/main/java/ctbrec/ui/action/ToggleRecordingAction.java +++ b/client/src/main/java/ctbrec/ui/action/ToggleRecordingAction.java @@ -1,7 +1,5 @@ package ctbrec.ui.action; -import java.util.concurrent.CompletableFuture; - import ctbrec.recorder.Recorder; import ctbrec.ui.controls.Dialogs; import javafx.application.Platform; @@ -22,7 +20,7 @@ public class ToggleRecordingAction { public void execute() { toggleButton.setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + Thread t = new Thread(() -> { try { if (pause) { recorder.pause(); @@ -38,5 +36,7 @@ public class ToggleRecordingAction { Platform.runLater(() -> toggleButton.setCursor(Cursor.DEFAULT)); } }); + t.setDaemon(true); + t.start(); } } diff --git a/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java b/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java index aa8131b2..966a2b21 100644 --- a/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java +++ b/client/src/main/java/ctbrec/ui/controls/SearchPopoverTreeList.java @@ -31,6 +31,13 @@ */ package ctbrec.ui.controls; +import java.net.URL; +import java.util.Objects; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import ctbrec.Model; import ctbrec.recorder.Recorder; import ctbrec.ui.action.PlayAction; @@ -40,18 +47,15 @@ import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Cursor; import javafx.scene.Node; -import javafx.scene.control.*; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.Skin; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.shape.Rectangle; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.URL; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; /** * Popover page that displays a list of samples and sample categories for a given SampleCategory. @@ -163,7 +167,7 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop follow = new Button("Follow"); follow.setOnAction(evt -> { setCursor(Cursor.WAIT); - CompletableFuture.runAsync(new Task() { + new Thread(new Task() { @Override protected Boolean call() throws Exception { model.getSite().login(); @@ -179,12 +183,12 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop } Platform.runLater(() -> setCursor(Cursor.DEFAULT)); } - }); + }).start(); }); record = new Button("Record"); record.setOnAction(evt -> { setCursor(Cursor.WAIT); - CompletableFuture.runAsync(new Task() { + new Thread(new Task() { @Override protected Void call() throws Exception { recorder.addModel(model); @@ -195,7 +199,7 @@ public class SearchPopoverTreeList extends PopoverTreeList implements Pop protected void done() { Platform.runLater(() -> setCursor(Cursor.DEFAULT)); } - }); + }).start(); }); getChildren().addAll(thumb, title, follow, record); diff --git a/client/src/main/java/ctbrec/ui/controls/StreamPreview.java b/client/src/main/java/ctbrec/ui/controls/StreamPreview.java index 249eda45..9b1eb20e 100644 --- a/client/src/main/java/ctbrec/ui/controls/StreamPreview.java +++ b/client/src/main/java/ctbrec/ui/controls/StreamPreview.java @@ -3,7 +3,6 @@ package ctbrec.ui.controls; import java.io.InterruptedIOException; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -158,14 +157,14 @@ public class StreamPreview extends StackPane { running = false; MediaPlayer old = videoPlayer; Future oldFuture = future; - CompletableFuture.runAsync(() -> { + new Thread(() -> { if(oldFuture != null && !oldFuture.isDone()) { oldFuture.cancel(true); } if(old != null) { old.dispose(); } - }); + }).start(); } private void onError(MediaPlayer videoPlayer) { diff --git a/client/src/main/java/ctbrec/ui/controls/Toast.java b/client/src/main/java/ctbrec/ui/controls/Toast.java index c74b7986..e622013d 100644 --- a/client/src/main/java/ctbrec/ui/controls/Toast.java +++ b/client/src/main/java/ctbrec/ui/controls/Toast.java @@ -1,7 +1,5 @@ package ctbrec.ui.controls; -import java.util.concurrent.CompletableFuture; - import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; @@ -38,7 +36,7 @@ public final class Toast { KeyFrame fadeInKey1 = new KeyFrame(Duration.millis(fadeInDelay), new KeyValue(toastStage.getScene().getRoot().opacityProperty(), 1)); fadeInTimeline.getKeyFrames().add(fadeInKey1); fadeInTimeline.setOnFinished((ae) -> { - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { Thread.sleep(toastDelay); } catch (InterruptedException e) { @@ -49,7 +47,7 @@ public final class Toast { fadeOutTimeline.getKeyFrames().add(fadeOutKey1); fadeOutTimeline.setOnFinished((aeb) -> toastStage.close()); fadeOutTimeline.play(); - }); + }).start(); }); fadeInTimeline.play(); } diff --git a/client/src/main/java/ctbrec/ui/news/NewsTab.java b/client/src/main/java/ctbrec/ui/news/NewsTab.java index 712b5a15..a5f11d8e 100644 --- a/client/src/main/java/ctbrec/ui/news/NewsTab.java +++ b/client/src/main/java/ctbrec/ui/news/NewsTab.java @@ -1,16 +1,7 @@ package ctbrec.ui.news; -import static ctbrec.io.HttpConstants.*; - -import java.io.IOException; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; - -import org.json.JSONObject; - import com.squareup.moshi.JsonAdapter; import com.squareup.moshi.Moshi; - import ctbrec.io.HttpException; import ctbrec.ui.CamrecApplication; import ctbrec.ui.controls.Dialogs; @@ -23,6 +14,12 @@ import javafx.scene.control.Tab; import javafx.scene.layout.VBox; import okhttp3.Request; import okhttp3.Response; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.Objects; + +import static ctbrec.io.HttpConstants.USER_AGENT; public class NewsTab extends Tab implements TabSelectionListener { private static final String ACCESS_TOKEN = "a2804d73a89951a22e0f8483a6fcec8943afd88b7ba17c459c095aa9e6f94fd0"; @@ -39,7 +36,7 @@ public class NewsTab extends Tab implements TabSelectionListener { @Override public void selected() { - CompletableFuture.runAsync(this::loadToots); + new Thread(this::loadToots).start(); } private void loadToots() { diff --git a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java index a391bc20..a75ab316 100644 --- a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java +++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java @@ -1,19 +1,17 @@ package ctbrec.ui.sites.bonga; -import java.io.IOException; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.LinkedBlockingQueue; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import ctbrec.sites.bonga.BongaCams; import ctbrec.sites.bonga.BongaCamsHttpClient; import ctbrec.ui.controls.Dialogs; import ctbrec.ui.sites.AbstractSiteUi; import ctbrec.ui.sites.ConfigUI; import ctbrec.ui.tabs.TabProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; public class BongaCamsSiteUi extends AbstractSiteUi { @@ -46,7 +44,7 @@ public class BongaCamsSiteUi extends AbstractSiteUi { } else { BlockingQueue queue = new LinkedBlockingQueue<>(); try { - CompletableFuture.runAsync(() -> { + new Thread(() -> { // login with external browser window try { new BongaCamsElectronLoginDialog(bongaCams.getHttpClient().getCookieJar()); @@ -61,7 +59,7 @@ public class BongaCamsSiteUi extends AbstractSiteUi { Thread.currentThread().interrupt(); LOG.error("Error while signaling termination", e); } - }); + }).start(); queue.take(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java index d4e0d342..68049c52 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java @@ -1,32 +1,5 @@ package ctbrec.ui.sites.camsoda; -import ctbrec.Model; -import ctbrec.recorder.Recorder; -import ctbrec.sites.camsoda.Camsoda; -import ctbrec.ui.AutosizeAlert; -import ctbrec.ui.DesktopIntegration; -import ctbrec.ui.SiteUiFactory; -import ctbrec.ui.tabs.TabSelectionListener; -import javafx.application.Platform; -import javafx.beans.value.ChangeListener; -import javafx.concurrent.Task; -import javafx.geometry.Insets; -import javafx.scene.Cursor; -import javafx.scene.Node; -import javafx.scene.control.*; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import javafx.scene.layout.BorderPane; -import javafx.scene.layout.GridPane; -import javafx.scene.text.Font; -import javafx.scene.text.FontWeight; -import okhttp3.Request; -import okhttp3.Response; -import org.json.JSONArray; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @@ -40,7 +13,41 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ctbrec.Model; +import ctbrec.recorder.Recorder; +import ctbrec.sites.camsoda.Camsoda; +import ctbrec.ui.AutosizeAlert; +import ctbrec.ui.DesktopIntegration; +import ctbrec.ui.SiteUiFactory; +import ctbrec.ui.tabs.TabSelectionListener; +import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.concurrent.Task; +import javafx.geometry.Insets; +import javafx.scene.Cursor; +import javafx.scene.Node; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.Tab; +import javafx.scene.control.TitledPane; +import javafx.scene.control.Tooltip; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import okhttp3.Request; +import okhttp3.Response; public class CamsodaShowsTab extends Tab implements TabSelectionListener { @@ -129,7 +136,7 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener { }); } }; - CompletableFuture.runAsync(task); + new Thread(task).start(); } @Override @@ -195,7 +202,7 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener { private void follow(Model model) { setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { SiteUiFactory.getUi(model.getSite()).login(); model.follow(); @@ -207,12 +214,12 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener { setCursor(Cursor.DEFAULT); }); } - }); + }).start(); } private void record(Model model) { setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { recorder.addModel(model); } catch (InvalidKeyException | NoSuchAlgorithmException | IllegalStateException | IOException e) { @@ -222,11 +229,11 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener { setCursor(Cursor.DEFAULT); }); } - }); + }).start(); } private void loadImage(Model model, ImageView thumb) { - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { String url = camsoda.getBaseUrl() + "/api/v1/user/" + model.getName(); Request detailRequest = new Request.Builder().url(url).build(); @@ -263,7 +270,7 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener { } catch (Exception e) { LOG.error("Couldn't load model details", e); } - }); + }).start(); } private Node createLabel(String string, boolean bold) { diff --git a/client/src/main/java/ctbrec/ui/sites/jasmin/LiveJasminSiteUi.java b/client/src/main/java/ctbrec/ui/sites/jasmin/LiveJasminSiteUi.java index 6ae87f34..5975a489 100644 --- a/client/src/main/java/ctbrec/ui/sites/jasmin/LiveJasminSiteUi.java +++ b/client/src/main/java/ctbrec/ui/sites/jasmin/LiveJasminSiteUi.java @@ -2,7 +2,6 @@ package ctbrec.ui.sites.jasmin; import java.io.IOException; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -56,7 +55,7 @@ public class LiveJasminSiteUi extends AbstractSiteUi { lastLoginTime = System.currentTimeMillis(); BlockingQueue queue = new LinkedBlockingQueue<>(); - CompletableFuture.runAsync(() -> { + new Thread (() -> { // login with external browser window try { new LiveJasminElectronLoginDialog(liveJasmin.getHttpClient().getCookieJar()); @@ -70,7 +69,7 @@ public class LiveJasminSiteUi extends AbstractSiteUi { } catch (InterruptedException e) { LOG.error("Error while signaling termination", e); } - }); + }).start(); try { queue.take(); diff --git a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java index 427a4174..c09865fb 100644 --- a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java +++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -354,7 +353,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { if (Objects.equals(System.getenv("CTBREC_DEV"), "1")) { MenuItem debug = new MenuItem("debug"); - debug.setOnAction(e -> CompletableFuture.runAsync(() -> { + debug.setOnAction(e -> new Thread(() -> { for (Model m : selectedModels) { try { List sources = m.getStreamSources(); @@ -366,7 +365,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { LOG.error("Couldn't get stream sources", e1); } } - })); + }).start()); menu.getItems().add(debug); } diff --git a/client/src/main/java/ctbrec/ui/sites/showup/ShowupSiteUi.java b/client/src/main/java/ctbrec/ui/sites/showup/ShowupSiteUi.java index 7cdd781e..3ab05d27 100644 --- a/client/src/main/java/ctbrec/ui/sites/showup/ShowupSiteUi.java +++ b/client/src/main/java/ctbrec/ui/sites/showup/ShowupSiteUi.java @@ -2,7 +2,6 @@ package ctbrec.ui.sites.showup; import java.io.IOException; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.LinkedBlockingQueue; import org.slf4j.Logger; @@ -47,7 +46,7 @@ public class ShowupSiteUi extends AbstractSiteUi { } else { BlockingQueue queue = new LinkedBlockingQueue<>(); try { - CompletableFuture.runAsync(() -> { + new Thread(() -> { // login with external browser window try { new ShowupElectronLoginDialog(site.getHttpClient().getCookieJar()); @@ -62,7 +61,7 @@ public class ShowupSiteUi extends AbstractSiteUi { LOG.error("Error while signaling termination", e); Thread.currentThread().interrupt(); } - }); + }).start(); queue.take(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java index 612e985e..beba4d80 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java @@ -17,7 +17,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -497,9 +496,9 @@ public class RecordingsTab extends Tab implements TabSelectionListener { private void openContactSheet(JavaFxRecording recording) { if (config.getSettings().localRecording) { - recording.getContactSheet().ifPresent(f -> CompletableFuture.runAsync(() -> DesktopIntegration.open(f))); + recording.getContactSheet().ifPresent(f -> new Thread(() -> DesktopIntegration.open(f)).start()); } else { - recording.getContactSheet().ifPresent(f -> CompletableFuture.runAsync(() -> { + recording.getContactSheet().ifPresent(f -> new Thread(() -> { File target; try { target = File.createTempFile("cs_", ".jpg"); @@ -517,7 +516,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { } catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e) { Dialogs.showError(getTabPane().getScene(), "Download Error", "An error occurred while downloading the contact sheet", e); } - })); + }).start()); } } @@ -527,7 +526,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { Optional newNote = Dialogs.showTextInput(source.getScene(), "Recording Notes", "", notes); if (newNote.isPresent()) { table.setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + Thread backgroundThread = new Thread(() -> { List exceptions = new ArrayList<>(); try { recording.setNote(newNote.get()); @@ -543,12 +542,13 @@ public class RecordingsTab extends Tab implements TabSelectionListener { }); } }); + backgroundThread.start(); } } private void pin(List recordings) { table.setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + Thread backgroundThread = new Thread(() -> { List exceptions = new ArrayList<>(); try { for (JavaFxRecording javaFxRecording : recordings) { @@ -569,11 +569,12 @@ public class RecordingsTab extends Tab implements TabSelectionListener { }); } }); + backgroundThread.start(); } private void unpin(List recordings) { table.setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + Thread backgroundThread = new Thread(() -> { List exceptions = new ArrayList<>(); try { for (JavaFxRecording javaFxRecording : recordings) { @@ -594,6 +595,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { }); } }); + backgroundThread.start(); } private void jumpToNextModel(KeyCode code) { @@ -644,11 +646,11 @@ public class RecordingsTab extends Tab implements TabSelectionListener { private void onOpenDirectory(JavaFxRecording first) { File tsFile = first.getAbsoluteFile(); - CompletableFuture.runAsync(() -> DesktopIntegration.open(tsFile.getParent())); + new Thread(() -> DesktopIntegration.open(tsFile.getParent())).start(); } private void triggerPostProcessing(List recs) { - CompletableFuture.runAsync(() -> { + new Thread(() -> { for (JavaFxRecording rec : recs) { try { recorder.rerunPostProcessing(rec.getDelegate()); @@ -657,7 +659,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { LOG.error("Error while starting post-processing", e1); } } - }); + }).start(); } private void download(Recording recording) { @@ -793,7 +795,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { } private void deleteAsync(List recordings) { - CompletableFuture.runAsync(() -> { + Thread deleteThread = new Thread(() -> { recordingsLock.lock(); try { List deleted = new ArrayList<>(); @@ -819,6 +821,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener { Platform.runLater(() -> table.setCursor(Cursor.DEFAULT)); } }); + deleteThread.start(); } public void saveState() { diff --git a/client/src/main/java/ctbrec/ui/tabs/ThumbCell.java b/client/src/main/java/ctbrec/ui/tabs/ThumbCell.java index 1c6455b9..25a36772 100644 --- a/client/src/main/java/ctbrec/ui/tabs/ThumbCell.java +++ b/client/src/main/java/ctbrec/ui/tabs/ThumbCell.java @@ -512,7 +512,7 @@ public class ThumbCell extends StackPane { void pauseResumeAction(boolean pause) { setCursor(Cursor.WAIT); - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { if (pause) { recorder.suspendRecording(model); @@ -532,11 +532,11 @@ public class ThumbCell extends StackPane { } finally { Platform.runLater(() -> setCursor(Cursor.DEFAULT)); } - }); + }).start(); } private void startStopActionAsync(Model model, boolean start) { - CompletableFuture.runAsync(() -> { + new Thread(() -> { try { if (start) { recorder.addModel(model); @@ -552,7 +552,7 @@ public class ThumbCell extends StackPane { } finally { Platform.runLater(() -> setCursor(Cursor.DEFAULT)); } - }); + }).start(); } CompletableFuture follow(boolean follow) {