Add option to export Websocket, Twitch, HTTP connections

This commit is contained in:
WarmUpTill 2026-04-19 20:47:23 +02:00
parent c0d27cc0db
commit ba4d879b8d
4 changed files with 137 additions and 0 deletions

View File

@ -205,6 +205,9 @@ AdvSceneSwitcher.macroTab.export.usePlainText="Use plain text"
AdvSceneSwitcher.macroTab.export.additionalContent="Export Additional Content"
AdvSceneSwitcher.macroTab.export.variables="Variables"
AdvSceneSwitcher.macroTab.export.actionQueues="Action Queues"
AdvSceneSwitcher.macroTab.export.httpServers="HTTP Servers"
AdvSceneSwitcher.macroTab.export.twitchConnections="Twitch Connections"
AdvSceneSwitcher.macroTab.export.websocketConnections="Websocket Connections"
AdvSceneSwitcher.macroTab.import="Import"
AdvSceneSwitcher.macroTab.import.info="Paste the export string into the below text box to import macros:"
AdvSceneSwitcher.macroTab.import.invalid="Invalid import data provided!"

View File

@ -1,5 +1,6 @@
#include "connection-manager.hpp"
#include "layout-helpers.hpp"
#include "macro-export-extensions.hpp"
#include "name-dialog.hpp"
#include "obs-module-helper.hpp"
#include "plugin-state-helpers.hpp"
@ -24,6 +25,51 @@ bool setup()
AddSaveStep(saveConnections);
AddLoadStep(loadConnections);
AddPluginCleanupStep([]() { connections.clear(); });
AddMacroExportExtension(
{"AdvSceneSwitcher.macroTab.export.websocketConnections",
"websocketConnections",
[](obs_data_t *data, const QStringList &selectedIds) {
OBSDataArrayAutoRelease array =
obs_data_array_create();
for (const auto &c : connections) {
if (!selectedIds.isEmpty() &&
!selectedIds.contains(
QString::fromStdString(c->Name())))
continue;
OBSDataAutoRelease item = obs_data_create();
c->Save(item);
obs_data_array_push_back(array, item);
}
obs_data_set_array(data, "websocketConnections",
array);
},
[](obs_data_t *data, const QStringList &) {
OBSDataArrayAutoRelease array = obs_data_get_array(
data, "websocketConnections");
const size_t count = obs_data_array_count(array);
for (size_t i = 0; i < count; ++i) {
OBSDataAutoRelease item =
obs_data_array_item(array, i);
auto con = WSConnection::Create();
con->Load(item);
if (!GetWeakConnectionByName(con->Name())
.expired())
continue;
connections.emplace_back(con);
ConnectionSelectionSignalManager::Instance()
->Add(QString::fromStdString(
con->Name()));
}
},
[]() -> QList<QPair<QString, QString>> {
QList<QPair<QString, QString>> items;
for (const auto &c : connections) {
const QString name =
QString::fromStdString(c->Name());
items.append({name, name});
}
return items;
}});
return true;
}

View File

@ -1,6 +1,7 @@
#include "http-server.hpp"
#include "layout-helpers.hpp"
#include "log-helper.hpp"
#include "macro-export-extensions.hpp"
#include "obs-module-helper.hpp"
#include "plugin-state-helpers.hpp"
@ -32,6 +33,49 @@ bool setup()
}
httpServers.clear();
});
AddMacroExportExtension(
{"AdvSceneSwitcher.macroTab.export.httpServers", "httpServers",
[](obs_data_t *data, const QStringList &selectedIds) {
OBSDataArrayAutoRelease array =
obs_data_array_create();
for (const auto &s : httpServers) {
if (!selectedIds.isEmpty() &&
!selectedIds.contains(
QString::fromStdString(s->Name())))
continue;
OBSDataAutoRelease item = obs_data_create();
s->Save(item);
obs_data_array_push_back(array, item);
}
obs_data_set_array(data, "httpServers", array);
},
[](obs_data_t *data, const QStringList &) {
OBSDataArrayAutoRelease array =
obs_data_get_array(data, "httpServers");
const size_t count = obs_data_array_count(array);
for (size_t i = 0; i < count; ++i) {
OBSDataAutoRelease item =
obs_data_array_item(array, i);
auto server = HttpServer::Create();
server->Load(item);
if (!GetWeakHttpServerByName(server->Name())
.expired())
continue;
httpServers.emplace_back(server);
HttpServerSignalManager::Instance()->Add(
QString::fromStdString(
server->Name()));
}
},
[]() -> QList<QPair<QString, QString>> {
QList<QPair<QString, QString>> items;
for (const auto &s : httpServers) {
const QString name =
QString::fromStdString(s->Name());
items.append({name, name});
}
return items;
}});
return true;
}

View File

@ -4,6 +4,7 @@
#include <help-icon.hpp>
#include <layout-helpers.hpp>
#include <log-helper.hpp>
#include <macro-export-extensions.hpp>
#include <obs-module-helper.hpp>
#include <plugin-state-helpers.hpp>
#include <QDesktopServices>
@ -88,6 +89,49 @@ static bool setupTwitchTokenSupport()
AddSaveStep(saveConnections);
AddLoadStep(loadConnections);
AddPluginCleanupStep([]() { twitchTokens.clear(); });
AddMacroExportExtension(
{"AdvSceneSwitcher.macroTab.export.twitchConnections",
"twitchConnections",
[](obs_data_t *data, const QStringList &selectedIds) {
OBSDataArrayAutoRelease array =
obs_data_array_create();
for (const auto &t : twitchTokens) {
if (!selectedIds.isEmpty() &&
!selectedIds.contains(
QString::fromStdString(t->Name())))
continue;
OBSDataAutoRelease item = obs_data_create();
t->Save(item);
obs_data_array_push_back(array, item);
}
obs_data_set_array(data, "twitchConnections", array);
},
[](obs_data_t *data, const QStringList &) {
OBSDataArrayAutoRelease array =
obs_data_get_array(data, "twitchConnections");
const size_t count = obs_data_array_count(array);
for (size_t i = 0; i < count; ++i) {
OBSDataAutoRelease item =
obs_data_array_item(array, i);
auto token = TwitchToken::Create();
token->Load(item);
if (!GetWeakTwitchTokenByName(token->Name())
.expired())
continue;
twitchTokens.emplace_back(token);
TwitchConnectionSignalManager::Instance()->Add(
QString::fromStdString(token->Name()));
}
},
[]() -> QList<QPair<QString, QString>> {
QList<QPair<QString, QString>> items;
for (const auto &t : twitchTokens) {
const QString name =
QString::fromStdString(t->Name());
items.append({name, name});
}
return items;
}});
return true;
}