mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-08 17:45:57 -05:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beb482bd5a | ||
|
|
e561d378dd | ||
|
|
73ce88e2f0 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -173,7 +173,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mkdir ./build
|
mkdir ./build
|
||||||
cd ./build
|
cd ./build
|
||||||
cmake -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DWITH_RTMPS=OFF -DBUILD_BROWSER=OFF ..
|
cmake -DENABLE_PIPEWIRE=OFF -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DWITH_RTMPS=OFF -DBUILD_BROWSER=OFF ..
|
||||||
- name: 'Build'
|
- name: 'Build'
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: ${{ github.workspace }}/build
|
working-directory: ${{ github.workspace }}/build
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMet.switchTo="Wechsle zu:"
|
|||||||
AdvSceneSwitcher.generalTab.generalBehavior.cooldown="Nach einem automatisierten Szenenwechsel wechsle nicht mehr für"
|
AdvSceneSwitcher.generalTab.generalBehavior.cooldown="Nach einem automatisierten Szenenwechsel wechsle nicht mehr für"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="In diesem Zeitraum werden potentielle erfüllte Bedingungen ignoriert!"
|
AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="In diesem Zeitraum werden potentielle erfüllte Bedingungen ignoriert!"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Ausführliches Logging"
|
AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Ausführliches Logging"
|
||||||
|
AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Fensterposition und -größe speichern"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Deaktiviere UI Tipps"
|
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Deaktiviere UI Tipps"
|
||||||
AdvSceneSwitcher.generalTab.priority="Priorität"
|
AdvSceneSwitcher.generalTab.priority="Priorität"
|
||||||
AdvSceneSwitcher.generalTab.priority.description="Szenenwechselmethoden sortiert nach Priorität"
|
AdvSceneSwitcher.generalTab.priority.description="Szenenwechselmethoden sortiert nach Priorität"
|
||||||
@@ -218,6 +219,7 @@ AdvSceneSwitcher.videoTab.help="<html><head/><body><p>Dieser Tab ermöglicht es
|
|||||||
; Network Tab
|
; Network Tab
|
||||||
AdvSceneSwitcher.networkTab.title="Netzwerk"
|
AdvSceneSwitcher.networkTab.title="Netzwerk"
|
||||||
AdvSceneSwitcher.networkTab.warning="Die Verwendung des Servers außerhalb eines lokalen Netzwerks kann dazu führen, dass die aktive Szene von dritten Personen ausgelesen werden kann."
|
AdvSceneSwitcher.networkTab.warning="Die Verwendung des Servers außerhalb eines lokalen Netzwerks kann dazu führen, dass die aktive Szene von dritten Personen ausgelesen werden kann."
|
||||||
|
AdvSceneSwitcher.networkTab.Disabledwarning="Diese Funktionalität musste unter macOS leider aufgrund von Bibliotheksinkompatibilitäten mit dem obs-websocket plugin deaktiviert werden."
|
||||||
AdvSceneSwitcher.networkTab.server="Server starten (Sendet Szenenwechselnachrichten zu allen verbundenen Clients)"
|
AdvSceneSwitcher.networkTab.server="Server starten (Sendet Szenenwechselnachrichten zu allen verbundenen Clients)"
|
||||||
AdvSceneSwitcher.networkTab.server.port="Port"
|
AdvSceneSwitcher.networkTab.server.port="Port"
|
||||||
AdvSceneSwitcher.networkTab.server.lockToIPv4="Nur IPv4 verwenden (deaktiviert IPv6)"
|
AdvSceneSwitcher.networkTab.server.lockToIPv4="Nur IPv4 verwenden (deaktiviert IPv6)"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMet.switchTo="Switch to:"
|
|||||||
AdvSceneSwitcher.generalTab.generalBehavior.cooldown="After a match do not switch scenes for"
|
AdvSceneSwitcher.generalTab.generalBehavior.cooldown="After a match do not switch scenes for"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="During this time potential matches will be ignored!"
|
AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="During this time potential matches will be ignored!"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Enable verbose logging"
|
AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Enable verbose logging"
|
||||||
|
AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position and size"
|
||||||
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints"
|
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints"
|
||||||
AdvSceneSwitcher.generalTab.priority="Priority"
|
AdvSceneSwitcher.generalTab.priority="Priority"
|
||||||
AdvSceneSwitcher.generalTab.priority.description="Switching methods priority (Highest priority is at the top)"
|
AdvSceneSwitcher.generalTab.priority.description="Switching methods priority (Highest priority is at the top)"
|
||||||
@@ -218,6 +219,7 @@ AdvSceneSwitcher.videoTab.help="<html><head/><body><p>This tab will allow you to
|
|||||||
; Network Tab
|
; Network Tab
|
||||||
AdvSceneSwitcher.networkTab.title="Network"
|
AdvSceneSwitcher.networkTab.title="Network"
|
||||||
AdvSceneSwitcher.networkTab.warning="Running the server outside of a local network will allow third parties to read the active scene."
|
AdvSceneSwitcher.networkTab.warning="Running the server outside of a local network will allow third parties to read the active scene."
|
||||||
|
AdvSceneSwitcher.networkTab.DisabledWarning="This functionality unfortunately had to be disabled on macOS due to library incompatibilities when running the obs-websocket plugin in parallel."
|
||||||
AdvSceneSwitcher.networkTab.server="Start server (Sends scene switch messages to all connected clients)"
|
AdvSceneSwitcher.networkTab.server="Start server (Sends scene switch messages to all connected clients)"
|
||||||
AdvSceneSwitcher.networkTab.server.port="Port"
|
AdvSceneSwitcher.networkTab.server.port="Port"
|
||||||
AdvSceneSwitcher.networkTab.server.lockToIPv4="Lock server to only using IPv4"
|
AdvSceneSwitcher.networkTab.server.lockToIPv4="Lock server to only using IPv4"
|
||||||
|
|||||||
@@ -161,46 +161,8 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>AdvSceneSwitcher.generalTab.generalBehavior</string>
|
<string>AdvSceneSwitcher.generalTab.generalBehavior</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
<layout class="QVBoxLayout" name="verticalLayout_32">
|
||||||
<item row="1" column="0">
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>AdvSceneSwitcher.generalTab.generalBehavior.cooldown</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QDoubleSpinBox" name="cooldownTime">
|
|
||||||
<property name="suffix">
|
|
||||||
<string>s</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="Line" name="line_6">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_43">
|
<layout class="QHBoxLayout" name="horizontalLayout_43">
|
||||||
@@ -295,7 +257,45 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>AdvSceneSwitcher.generalTab.generalBehavior.cooldown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDoubleSpinBox" name="cooldownTime">
|
||||||
|
<property name="suffix">
|
||||||
|
<string>s</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_6">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_52">
|
<layout class="QHBoxLayout" name="horizontalLayout_52">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="verboseLogging">
|
<widget class="QCheckBox" name="verboseLogging">
|
||||||
@@ -319,7 +319,31 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_50">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="saveWindowGeo">
|
||||||
|
<property name="text">
|
||||||
|
<string>AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_55">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_48">
|
<layout class="QHBoxLayout" name="horizontalLayout_48">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="uiHintsDisable">
|
<widget class="QCheckBox" name="uiHintsDisable">
|
||||||
@@ -3278,7 +3302,7 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_30">
|
<layout class="QVBoxLayout" name="verticalLayout_30">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_12">
|
<widget class="QLabel" name="networkTabWarningLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>AdvSceneSwitcher.networkTab.warning</string>
|
<string>AdvSceneSwitcher.networkTab.warning</string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ void AdvSceneSwitcher::loadUI()
|
|||||||
setupTriggerTab();
|
setupTriggerTab();
|
||||||
|
|
||||||
setTabOrder();
|
setTabOrder();
|
||||||
|
restoreWindowGeo();
|
||||||
|
|
||||||
loading = false;
|
loading = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,6 +156,9 @@ void AdvSceneSwitcher::on_toggleStartButton_clicked()
|
|||||||
|
|
||||||
void AdvSceneSwitcher::closeEvent(QCloseEvent *)
|
void AdvSceneSwitcher::closeEvent(QCloseEvent *)
|
||||||
{
|
{
|
||||||
|
switcher->windowPos = this->pos();
|
||||||
|
switcher->windowSize = this->size();
|
||||||
|
|
||||||
obs_frontend_save();
|
obs_frontend_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,6 +171,15 @@ void AdvSceneSwitcher::on_verboseLogging_stateChanged(int state)
|
|||||||
switcher->verbose = state;
|
switcher->verbose = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdvSceneSwitcher::on_saveWindowGeo_stateChanged(int state)
|
||||||
|
{
|
||||||
|
if (loading) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switcher->saveWindowGeo = state;
|
||||||
|
}
|
||||||
|
|
||||||
void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state)
|
void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state)
|
||||||
{
|
{
|
||||||
if (loading) {
|
if (loading) {
|
||||||
@@ -365,6 +377,14 @@ void AdvSceneSwitcher::setTabOrder()
|
|||||||
connect(bar, &QTabBar::tabMoved, this, &AdvSceneSwitcher::on_tabMoved);
|
connect(bar, &QTabBar::tabMoved, this, &AdvSceneSwitcher::on_tabMoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdvSceneSwitcher::restoreWindowGeo()
|
||||||
|
{
|
||||||
|
if (switcher->saveWindowGeo) {
|
||||||
|
this->resize(switcher->windowSize);
|
||||||
|
this->move(switcher->windowPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AdvSceneSwitcher::on_tabMoved(int from, int to)
|
void AdvSceneSwitcher::on_tabMoved(int from, int to)
|
||||||
{
|
{
|
||||||
if (loading) {
|
if (loading) {
|
||||||
@@ -505,6 +525,12 @@ void SwitcherData::saveGeneralSettings(obs_data_t *obj)
|
|||||||
obs_data_set_int(obj, "networkTabPos", switcher->tabOrder[14]);
|
obs_data_set_int(obj, "networkTabPos", switcher->tabOrder[14]);
|
||||||
obs_data_set_int(obj, "sceneGroupTabPos", switcher->tabOrder[15]);
|
obs_data_set_int(obj, "sceneGroupTabPos", switcher->tabOrder[15]);
|
||||||
obs_data_set_int(obj, "triggerTabPos", switcher->tabOrder[16]);
|
obs_data_set_int(obj, "triggerTabPos", switcher->tabOrder[16]);
|
||||||
|
|
||||||
|
obs_data_set_bool(obj, "saveWindowGeo", saveWindowGeo);
|
||||||
|
obs_data_set_int(obj, "windowPosX", switcher->windowPos.x());
|
||||||
|
obs_data_set_int(obj, "windowPosY", switcher->windowPos.y());
|
||||||
|
obs_data_set_int(obj, "windowWidth", switcher->windowSize.width());
|
||||||
|
obs_data_set_int(obj, "windowHeight", switcher->windowSize.height());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwitcherData::loadGeneralSettings(obs_data_t *obj)
|
void SwitcherData::loadGeneralSettings(obs_data_t *obj)
|
||||||
@@ -642,6 +668,12 @@ void SwitcherData::loadGeneralSettings(obs_data_t *obj)
|
|||||||
if (!tabOrderValid()) {
|
if (!tabOrderValid()) {
|
||||||
resetTabOrder();
|
resetTabOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
saveWindowGeo = obs_data_get_bool(obj, "saveWindowGeo");
|
||||||
|
windowPos = {(int)obs_data_get_int(obj, "windowPosX"),
|
||||||
|
(int)obs_data_get_int(obj, "windowPosY")};
|
||||||
|
windowSize = {(int)obs_data_get_int(obj, "windowWidth"),
|
||||||
|
(int)obs_data_get_int(obj, "windowHeight")};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SwitcherData::tabOrderValid()
|
bool SwitcherData::tabOrderValid()
|
||||||
@@ -763,6 +795,7 @@ void AdvSceneSwitcher::setupGeneralTab()
|
|||||||
"AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint"));
|
"AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint"));
|
||||||
|
|
||||||
ui->verboseLogging->setChecked(switcher->verbose);
|
ui->verboseLogging->setChecked(switcher->verbose);
|
||||||
|
ui->saveWindowGeo->setChecked(switcher->saveWindowGeo);
|
||||||
ui->uiHintsDisable->setChecked(switcher->disableHints);
|
ui->uiHintsDisable->setChecked(switcher->disableHints);
|
||||||
|
|
||||||
for (int p : switcher->functionNamesByPriority) {
|
for (int p : switcher->functionNamesByPriority) {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public:
|
|||||||
void setupVideoTab();
|
void setupVideoTab();
|
||||||
void setupNetworkTab();
|
void setupNetworkTab();
|
||||||
void setTabOrder();
|
void setTabOrder();
|
||||||
|
void restoreWindowGeo();
|
||||||
|
|
||||||
static bool DisplayMessage(QString msg, bool question = false);
|
static bool DisplayMessage(QString msg, bool question = false);
|
||||||
static void AskBackup(obs_data_t *obj);
|
static void AskBackup(obs_data_t *obj);
|
||||||
@@ -150,6 +151,7 @@ public slots:
|
|||||||
void on_sceneSequenceSwitches_itemDoubleClicked(QListWidgetItem *item);
|
void on_sceneSequenceSwitches_itemDoubleClicked(QListWidgetItem *item);
|
||||||
|
|
||||||
void on_verboseLogging_stateChanged(int state);
|
void on_verboseLogging_stateChanged(int state);
|
||||||
|
void on_saveWindowGeo_stateChanged(int state);
|
||||||
void on_uiHintsDisable_stateChanged(int state);
|
void on_uiHintsDisable_stateChanged(int state);
|
||||||
|
|
||||||
void on_exportSettings_clicked();
|
void on_exportSettings_clicked();
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ Most of this code is based on https://github.com/Palakis/obs-websocket
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
// Due to iussues with asio the network functionality will be disabled on macOS
|
||||||
|
#if !(__APPLE__)
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QMutex>
|
#include <QtCore/QMutex>
|
||||||
@@ -13,36 +16,16 @@ Most of this code is based on https://github.com/Palakis/obs-websocket
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
|
||||||
#include <websocketpp/config/asio_no_tls_client.hpp>
|
|
||||||
#include <websocketpp/config/asio_no_tls.hpp>
|
#include <websocketpp/config/asio_no_tls.hpp>
|
||||||
#include <websocketpp/server.hpp>
|
#include <websocketpp/server.hpp>
|
||||||
|
|
||||||
|
#include <websocketpp/config/asio_no_tls_client.hpp>
|
||||||
#include <websocketpp/client.hpp>
|
#include <websocketpp/client.hpp>
|
||||||
|
|
||||||
using websocketpp::connection_hdl;
|
using websocketpp::connection_hdl;
|
||||||
typedef websocketpp::server<websocketpp::config::asio> server;
|
typedef websocketpp::server<websocketpp::config::asio> server;
|
||||||
typedef websocketpp::client<websocketpp::config::asio_client> client;
|
typedef websocketpp::client<websocketpp::config::asio_client> client;
|
||||||
|
|
||||||
class NetworkConfig {
|
|
||||||
public:
|
|
||||||
NetworkConfig();
|
|
||||||
void Load(obs_data_t *obj);
|
|
||||||
void Save(obs_data_t *obj);
|
|
||||||
void SetDefaults(obs_data_t *obj);
|
|
||||||
|
|
||||||
std::string GetClientUri();
|
|
||||||
|
|
||||||
// Server
|
|
||||||
bool ServerEnabled;
|
|
||||||
uint64_t ServerPort;
|
|
||||||
bool LockToIPv4;
|
|
||||||
|
|
||||||
// Client
|
|
||||||
bool ClientEnabled;
|
|
||||||
std::string Address;
|
|
||||||
uint64_t ClientPort;
|
|
||||||
bool SendAll;
|
|
||||||
};
|
|
||||||
|
|
||||||
class WSServer : public QObject {
|
class WSServer : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -69,12 +52,6 @@ private:
|
|||||||
QThreadPool _threadPool;
|
QThreadPool _threadPool;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ServerStatus {
|
|
||||||
NOT_RUNNING,
|
|
||||||
STARTING,
|
|
||||||
RUNNING,
|
|
||||||
};
|
|
||||||
|
|
||||||
class WSClient : public QObject {
|
class WSClient : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -103,6 +80,62 @@ private:
|
|||||||
std::string _failMsg;
|
std::string _failMsg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
class WSServer : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit WSServer(){};
|
||||||
|
virtual ~WSServer(){};
|
||||||
|
void start(quint16 port, bool lockToIPv4){};
|
||||||
|
void stop(){};
|
||||||
|
void sendMessage(OBSWeakSource scene, OBSWeakSource transition){};
|
||||||
|
};
|
||||||
|
|
||||||
|
class WSClient : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit WSClient(){};
|
||||||
|
virtual ~WSClient(){};
|
||||||
|
void connect(std::string uri){};
|
||||||
|
void disconnect(){};
|
||||||
|
std::string getFail() { return _failMsg; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _failMsg;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class NetworkConfig {
|
||||||
|
public:
|
||||||
|
NetworkConfig();
|
||||||
|
void Load(obs_data_t *obj);
|
||||||
|
void Save(obs_data_t *obj);
|
||||||
|
void SetDefaults(obs_data_t *obj);
|
||||||
|
|
||||||
|
std::string GetClientUri();
|
||||||
|
|
||||||
|
// Server
|
||||||
|
bool ServerEnabled;
|
||||||
|
uint64_t ServerPort;
|
||||||
|
bool LockToIPv4;
|
||||||
|
|
||||||
|
// Client
|
||||||
|
bool ClientEnabled;
|
||||||
|
std::string Address;
|
||||||
|
uint64_t ClientPort;
|
||||||
|
bool SendAll;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ServerStatus {
|
||||||
|
NOT_RUNNING,
|
||||||
|
STARTING,
|
||||||
|
RUNNING,
|
||||||
|
};
|
||||||
|
|
||||||
enum class ClientStatus {
|
enum class ClientStatus {
|
||||||
DISCONNECTED,
|
DISCONNECTED,
|
||||||
CONNECTING,
|
CONNECTING,
|
||||||
|
|||||||
@@ -166,6 +166,10 @@ struct SwitcherData {
|
|||||||
obs_hotkey_id stopHotkey = 0;
|
obs_hotkey_id stopHotkey = 0;
|
||||||
obs_hotkey_id toggleHotkey = 0;
|
obs_hotkey_id toggleHotkey = 0;
|
||||||
|
|
||||||
|
bool saveWindowGeo = false;
|
||||||
|
QPoint windowPos = {};
|
||||||
|
QSize windowSize = {};
|
||||||
|
|
||||||
bool versionChanged(obs_data_t *obj, std::string currentVersion);
|
bool versionChanged(obs_data_t *obj, std::string currentVersion);
|
||||||
|
|
||||||
void Thread();
|
void Thread();
|
||||||
|
|||||||
@@ -24,64 +24,12 @@ Most of this code is based on https://github.com/Palakis/obs-websocket
|
|||||||
#define SCENE_ENTRY "scene"
|
#define SCENE_ENTRY "scene"
|
||||||
#define TRANSITION_ENTRY "transition"
|
#define TRANSITION_ENTRY "transition"
|
||||||
|
|
||||||
|
#if !(__APPLE__)
|
||||||
|
|
||||||
using websocketpp::lib::placeholders::_1;
|
using websocketpp::lib::placeholders::_1;
|
||||||
using websocketpp::lib::placeholders::_2;
|
using websocketpp::lib::placeholders::_2;
|
||||||
using websocketpp::lib::bind;
|
using websocketpp::lib::bind;
|
||||||
|
|
||||||
NetworkConfig::NetworkConfig()
|
|
||||||
: ServerEnabled(false),
|
|
||||||
ServerPort(55555),
|
|
||||||
LockToIPv4(false),
|
|
||||||
ClientEnabled(false),
|
|
||||||
Address(""),
|
|
||||||
ClientPort(55555),
|
|
||||||
SendAll(true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkConfig::Load(obs_data_t *obj)
|
|
||||||
{
|
|
||||||
SetDefaults(obj);
|
|
||||||
|
|
||||||
ServerEnabled = obs_data_get_bool(obj, PARAM_SERVER_ENABLE);
|
|
||||||
ServerPort = obs_data_get_int(obj, PARAM_SERVER_PORT);
|
|
||||||
LockToIPv4 = obs_data_get_bool(obj, PARAM_LOCKTOIPV4);
|
|
||||||
|
|
||||||
ClientEnabled = obs_data_get_bool(obj, PARAM_CLIENT_ENABLE);
|
|
||||||
Address = obs_data_get_string(obj, PARAM_ADDRESS);
|
|
||||||
ClientPort = obs_data_get_int(obj, PARAM_CLIENT_PORT);
|
|
||||||
SendAll = obs_data_get_bool(obj, PARAM_CLIENT_SENDALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkConfig::Save(obs_data_t *obj)
|
|
||||||
{
|
|
||||||
obs_data_set_bool(obj, PARAM_SERVER_ENABLE, ServerEnabled);
|
|
||||||
obs_data_set_int(obj, PARAM_SERVER_PORT, ServerPort);
|
|
||||||
obs_data_set_bool(obj, PARAM_LOCKTOIPV4, LockToIPv4);
|
|
||||||
|
|
||||||
obs_data_set_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled);
|
|
||||||
obs_data_set_string(obj, PARAM_ADDRESS, Address.c_str());
|
|
||||||
obs_data_set_int(obj, PARAM_CLIENT_PORT, ClientPort);
|
|
||||||
obs_data_set_bool(obj, PARAM_CLIENT_SENDALL, SendAll);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkConfig::SetDefaults(obs_data_t *obj)
|
|
||||||
{
|
|
||||||
obs_data_set_default_bool(obj, PARAM_SERVER_ENABLE, ServerEnabled);
|
|
||||||
obs_data_set_default_int(obj, PARAM_SERVER_PORT, ServerPort);
|
|
||||||
obs_data_set_default_bool(obj, PARAM_LOCKTOIPV4, LockToIPv4);
|
|
||||||
|
|
||||||
obs_data_set_default_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled);
|
|
||||||
obs_data_set_default_string(obj, PARAM_ADDRESS, Address.c_str());
|
|
||||||
obs_data_set_default_int(obj, PARAM_CLIENT_PORT, ClientPort);
|
|
||||||
obs_data_set_default_bool(obj, PARAM_CLIENT_SENDALL, SendAll);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string NetworkConfig::GetClientUri()
|
|
||||||
{
|
|
||||||
return "ws://" + Address + ":" + std::to_string(ClientPort);
|
|
||||||
}
|
|
||||||
|
|
||||||
WSServer::WSServer()
|
WSServer::WSServer()
|
||||||
: QObject(nullptr), _connections(), _clMutex(QMutex::Recursive)
|
: QObject(nullptr), _connections(), _clMutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
@@ -452,6 +400,62 @@ void WSClient::onClose(connection_hdl hdl)
|
|||||||
switcher->clientStatus = ClientStatus::DISCONNECTED;
|
switcher->clientStatus = ClientStatus::DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NetworkConfig::NetworkConfig()
|
||||||
|
: ServerEnabled(false),
|
||||||
|
ServerPort(55555),
|
||||||
|
LockToIPv4(false),
|
||||||
|
ClientEnabled(false),
|
||||||
|
Address(""),
|
||||||
|
ClientPort(55555),
|
||||||
|
SendAll(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkConfig::Load(obs_data_t *obj)
|
||||||
|
{
|
||||||
|
SetDefaults(obj);
|
||||||
|
|
||||||
|
ServerEnabled = obs_data_get_bool(obj, PARAM_SERVER_ENABLE);
|
||||||
|
ServerPort = obs_data_get_int(obj, PARAM_SERVER_PORT);
|
||||||
|
LockToIPv4 = obs_data_get_bool(obj, PARAM_LOCKTOIPV4);
|
||||||
|
|
||||||
|
ClientEnabled = obs_data_get_bool(obj, PARAM_CLIENT_ENABLE);
|
||||||
|
Address = obs_data_get_string(obj, PARAM_ADDRESS);
|
||||||
|
ClientPort = obs_data_get_int(obj, PARAM_CLIENT_PORT);
|
||||||
|
SendAll = obs_data_get_bool(obj, PARAM_CLIENT_SENDALL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkConfig::Save(obs_data_t *obj)
|
||||||
|
{
|
||||||
|
obs_data_set_bool(obj, PARAM_SERVER_ENABLE, ServerEnabled);
|
||||||
|
obs_data_set_int(obj, PARAM_SERVER_PORT, ServerPort);
|
||||||
|
obs_data_set_bool(obj, PARAM_LOCKTOIPV4, LockToIPv4);
|
||||||
|
|
||||||
|
obs_data_set_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled);
|
||||||
|
obs_data_set_string(obj, PARAM_ADDRESS, Address.c_str());
|
||||||
|
obs_data_set_int(obj, PARAM_CLIENT_PORT, ClientPort);
|
||||||
|
obs_data_set_bool(obj, PARAM_CLIENT_SENDALL, SendAll);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkConfig::SetDefaults(obs_data_t *obj)
|
||||||
|
{
|
||||||
|
obs_data_set_default_bool(obj, PARAM_SERVER_ENABLE, ServerEnabled);
|
||||||
|
obs_data_set_default_int(obj, PARAM_SERVER_PORT, ServerPort);
|
||||||
|
obs_data_set_default_bool(obj, PARAM_LOCKTOIPV4, LockToIPv4);
|
||||||
|
|
||||||
|
obs_data_set_default_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled);
|
||||||
|
obs_data_set_default_string(obj, PARAM_ADDRESS, Address.c_str());
|
||||||
|
obs_data_set_default_int(obj, PARAM_CLIENT_PORT, ClientPort);
|
||||||
|
obs_data_set_default_bool(obj, PARAM_CLIENT_SENDALL, SendAll);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string NetworkConfig::GetClientUri()
|
||||||
|
{
|
||||||
|
return "ws://" + Address + ":" + std::to_string(ClientPort);
|
||||||
|
}
|
||||||
|
|
||||||
void SwitcherData::loadNetworkSettings(obs_data_t *obj)
|
void SwitcherData::loadNetworkSettings(obs_data_t *obj)
|
||||||
{
|
{
|
||||||
networkConfig.Load(obj);
|
networkConfig.Load(obj);
|
||||||
@@ -467,6 +471,13 @@ void SwitcherData::saveNetworkSwitches(obs_data_t *obj)
|
|||||||
|
|
||||||
void AdvSceneSwitcher::setupNetworkTab()
|
void AdvSceneSwitcher::setupNetworkTab()
|
||||||
{
|
{
|
||||||
|
#if __APPLE__
|
||||||
|
ui->clientSettings->setDisabled(true);
|
||||||
|
ui->serverSettings->setDisabled(true);
|
||||||
|
ui->networkTabWarningLabel->setText(
|
||||||
|
obs_module_text("AdvSceneSwitcher.networkTab.DisabledWarning"));
|
||||||
|
#endif
|
||||||
|
|
||||||
ui->serverSettings->setChecked(switcher->networkConfig.ServerEnabled);
|
ui->serverSettings->setChecked(switcher->networkConfig.ServerEnabled);
|
||||||
ui->serverPort->setValue(switcher->networkConfig.ServerPort);
|
ui->serverPort->setValue(switcher->networkConfig.ServerPort);
|
||||||
ui->lockToIPv4->setChecked(switcher->networkConfig.LockToIPv4);
|
ui->lockToIPv4->setChecked(switcher->networkConfig.LockToIPv4);
|
||||||
|
|||||||
Reference in New Issue
Block a user