Merge branch 'dev' into camsoda

This commit is contained in:
0xboobface 2018-10-25 20:11:53 +02:00
commit 02b50f61c5
9 changed files with 102 additions and 30 deletions

View File

@ -53,6 +53,9 @@ public class Config {
BufferedSource source = buffer.readFrom(fin);
settings = adapter.fromJson(source);
settings.httpTimeout = Math.max(settings.httpTimeout, 10_000);
for (Site site : sites) {
site.setEnabled(!settings.disabledSites.contains(site.getName()));
}
}
} else {
LOG.error("Config file does not exist. Falling back to default values.");

View File

@ -43,4 +43,5 @@ public class Settings {
public int windowX;
public int windowY;
public int splitRecordings = 0;
public List<String> disabledSites = new ArrayList<>();
}

View File

@ -0,0 +1,16 @@
package ctbrec.sites;
public abstract class AbstractSite implements Site {
private boolean enabled;
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Override
public boolean isEnabled() {
return enabled;
}
}

View File

@ -26,4 +26,6 @@ public interface Site {
public boolean isSiteForModel(Model m);
public Node getConfigurationGui();
public boolean credentialsAvailable();
public void setEnabled(boolean enabled);
public boolean isEnabled();
}

View File

@ -29,7 +29,7 @@ import ctbrec.Model;
import ctbrec.Settings;
import ctbrec.io.HttpClient;
import ctbrec.recorder.Recorder;
import ctbrec.sites.Site;
import ctbrec.sites.AbstractSite;
import ctbrec.ui.DesktopIntergation;
import ctbrec.ui.HtmlParser;
import ctbrec.ui.SettingsTab;
@ -47,7 +47,7 @@ import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class Chaturbate implements Site {
public class Chaturbate extends AbstractSite {
private static final transient Logger LOG = LoggerFactory.getLogger(Chaturbate.class);
public static final String BASE_URI = "https://chaturbate.com";

View File

@ -7,7 +7,7 @@ import org.jsoup.select.Elements;
import ctbrec.Config;
import ctbrec.Model;
import ctbrec.recorder.Recorder;
import ctbrec.sites.Site;
import ctbrec.sites.AbstractSite;
import ctbrec.ui.DesktopIntergation;
import ctbrec.ui.HtmlParser;
import ctbrec.ui.SettingsTab;
@ -23,7 +23,7 @@ import javafx.scene.layout.Priority;
import okhttp3.Request;
import okhttp3.Response;
public class MyFreeCams implements Site {
public class MyFreeCams extends AbstractSite {
public static final String BASE_URI = "https://www.myfreecams.com";
@ -158,7 +158,6 @@ public class MyFreeCams implements Site {
return layout;
}
@Override
public boolean credentialsAvailable() {
String username = Config.getInstance().getSettings().mfcUsername;

View File

@ -6,6 +6,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executors;
@ -67,14 +68,16 @@ public class CamrecApplication extends Application {
hostServices = getHostServices();
createRecorder();
for (Site site : sites) {
try {
site.setRecorder(recorder);
site.init();
if (!Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
site.login();
if(site.isEnabled()) {
try {
site.setRecorder(recorder);
site.init();
if (!Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
site.login();
}
} catch(Exception e) {
LOG.error("Error while initializing site {}", site.getName(), e);
}
} catch(Exception e) {
LOG.error("Error while initializing site {}", site.getName(), e);
}
}
createGui(primaryStage);
@ -92,11 +95,16 @@ public class CamrecApplication extends Application {
rootPane = new TabPane();
Scene scene = new Scene(rootPane, windowWidth, windowHeight);
primaryStage.setScene(scene);
for (Site site : sites) {
SiteTab siteTab = new SiteTab(site, scene);
rootPane.getTabs().add(siteTab);
for (Iterator<Site> iterator = sites.iterator(); iterator.hasNext();) {
Site site = iterator.next();
if(site.isEnabled()) {
SiteTab siteTab = new SiteTab(site, scene);
rootPane.getTabs().add(siteTab);
}
}
((SiteTab)rootPane.getTabs().get(0)).selected();
try {
((SiteTab)rootPane.getTabs().get(0)).selected();
} catch(ClassCastException | IndexOutOfBoundsException e) {}
RecordedModelsTab modelsTab = new RecordedModelsTab("Recording", recorder, sites);
rootPane.getTabs().add(modelsTab);
@ -131,7 +139,9 @@ public class CamrecApplication extends Application {
settingsTab.saveConfig();
recorder.shutdown();
for (Site site : sites) {
site.shutdown();
if(site.isEnabled()) {
site.shutdown();
}
}
try {
Config.getInstance().save();

View File

@ -24,8 +24,10 @@ public class ProxySettingsPane extends TitledPane implements EventHandler<Action
private TextField proxyPort = new TextField();
private TextField proxyUser = new TextField();
private PasswordField proxyPassword = new PasswordField();
private SettingsTab settingsTab;
public ProxySettingsPane() {
public ProxySettingsPane(SettingsTab settingsTab) {
this.settingsTab = settingsTab;
createGui();
loadConfig();
}
@ -84,7 +86,7 @@ public class ProxySettingsPane extends TitledPane implements EventHandler<Action
@Override
public void handle(ActionEvent event) {
setComponentDisableState();
SettingsTab.showRestartRequired();
settingsTab.showRestartRequired();
}
private void setComponentDisableState() {

View File

@ -13,13 +13,14 @@ import com.sun.javafx.collections.ObservableListWrapper;
import ctbrec.Config;
import ctbrec.Hmac;
import ctbrec.Settings;
import ctbrec.sites.Site;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
@ -41,6 +42,7 @@ import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;;
@ -64,6 +66,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
private ProxySettingsPane proxySettingsPane;
private ComboBox<SplitAfterOption> splitAfter;
private List<Site> sites;
private Label restartLabel;
public SettingsTab(List<Site> sites) {
this.sites = sites;
@ -74,6 +77,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
}
private void createGui() {
// set up main layout, 2 columns with VBoxes 50/50
GridPane mainLayout = createGridLayout();
mainLayout.setHgap(15);
mainLayout.setVgap(15);
@ -82,22 +86,33 @@ public class SettingsTab extends Tab implements TabSelectionListener {
cc.setPercentWidth(50);
mainLayout.getColumnConstraints().setAll(cc, cc);
setContent(mainLayout);
VBox leftSide = new VBox(15);
VBox rightSide = new VBox(15);
GridPane.setHgrow(leftSide, Priority.ALWAYS);
GridPane.setHgrow(rightSide, Priority.ALWAYS);
GridPane.setFillWidth(leftSide, true);
GridPane.setFillWidth(rightSide, true);
mainLayout.add(leftSide, 0, 0);
mainLayout.add(rightSide, 1, 0);
mainLayout.add(leftSide, 0, 1);
mainLayout.add(rightSide, 1, 1);
// restart info label
restartLabel = new Label("A restart is required to apply changes you made!");
restartLabel.setVisible(false);
restartLabel.setFont(Font.font(24));
restartLabel.setTextFill(Color.RED);
mainLayout.add(restartLabel, 0, 0);
GridPane.setColumnSpan(restartLabel, 2);
GridPane.setHalignment(restartLabel, HPos.CENTER);
// left side
leftSide.getChildren().add(createGeneralPanel());
leftSide.getChildren().add(createLocationsPanel());
leftSide.getChildren().add(createRecordLocationPanel());
proxySettingsPane = new ProxySettingsPane();
proxySettingsPane = new ProxySettingsPane(this);
leftSide.getChildren().add(proxySettingsPane);
//right side
rightSide.getChildren().add(createSiteSelectionPanel());
for (Site site : sites) {
Node siteConfig = site.getConfigurationGui();
if(siteConfig != null) {
@ -108,6 +123,34 @@ public class SettingsTab extends Tab implements TabSelectionListener {
}
}
private Node createSiteSelectionPanel() {
Settings settings = Config.getInstance().getSettings();
GridPane layout = createGridLayout();
int row = 0;
for (Site site : sites) {
Label l = new Label(site.getName());
layout.add(l, 0, row);
CheckBox enabled = new CheckBox();
enabled.setSelected(!settings.disabledSites.contains(site.getName()));
enabled.setOnAction((e) -> {
if(enabled.isSelected()) {
settings.disabledSites.remove(site.getName());
} else {
settings.disabledSites.add(site.getName());
}
showRestartRequired();
});
GridPane.setMargin(l, new Insets(CHECKBOX_MARGIN, 0, 0, 0));
GridPane.setMargin(enabled, new Insets(CHECKBOX_MARGIN, 0, 0, CHECKBOX_MARGIN));
layout.add(enabled, 1, row++);
}
TitledPane siteSelection = new TitledPane("Enabled Sites", layout);
siteSelection.setCollapsible(false);
return siteSelection;
}
private Node createRecordLocationPanel() {
GridPane layout = createGridLayout();
Label l = new Label("Record Location");
@ -284,12 +327,8 @@ public class SettingsTab extends Tab implements TabSelectionListener {
}
}
static void showRestartRequired() {
Alert restart = new AutosizeAlert(AlertType.INFORMATION);
restart.setTitle("Restart required");
restart.setHeaderText("Restart required");
restart.setContentText("Changes get applied after a restart of the application");
restart.show();
void showRestartRequired() {
restartLabel.setVisible(true);
}
public static GridPane createGridLayout() {