Compare commits
1 Commits
v1.8.1
...
dependency
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e939c4592 |
@@ -45,6 +45,7 @@ set(discord-screenaudio_SRC
|
||||
src/log.cpp
|
||||
src/userscript.cpp
|
||||
src/centralwidget.cpp
|
||||
src/dependencycheck.cpp
|
||||
resources.qrc
|
||||
)
|
||||
|
||||
|
||||
@@ -62,9 +62,6 @@ You have multiple options:
|
||||
With apt:
|
||||
`apt install -y build-essential cmake qtbase5-dev qtwebengine5-dev libkf5notifications-dev libkf5xmlgui-dev libkf5globalaccel-dev pkg-config libpipewire-0.3-dev git`
|
||||
|
||||
With dnf:
|
||||
`dnf install @development-tools cmake qt5-qtbase-devel qt5-qtwebengine-devel kf5-knotifications-devel kf5-kxmlgui-devel kf5-kglobalaccel-devel pkgconfig pipewire-devel git`
|
||||
|
||||
### Building
|
||||
|
||||
First, clone the repository:
|
||||
|
||||
10
src/dependencycheck.cpp
Normal file
10
src/dependencycheck.cpp
Normal file
@@ -0,0 +1,10 @@
|
||||
#include "dependencycheck.h"
|
||||
#include "pipewire-0.3/pipewire/version.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
void checkDependencies() {
|
||||
QString versionPipewire(pw_get_library_version());
|
||||
QMessageBox::information(nullptr, "Dependency Check",
|
||||
QString("Pipewire: v%1").arg(versionPipewire));
|
||||
}
|
||||
3
src/dependencycheck.h
Normal file
3
src/dependencycheck.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
void checkDependencies();
|
||||
@@ -282,7 +282,6 @@ void DiscordPage::javaScriptConsoleMessage(
|
||||
ansi += "\033[" + cssAnsiColorMap[color] + "m";
|
||||
}
|
||||
}
|
||||
if (endOfStyles < lines.length())
|
||||
qDebug(discordLog) << (ansi + lines[0].trimmed() + "\033[0m " +
|
||||
lines[endOfStyles].trimmed())
|
||||
.toUtf8()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "dependencycheck.h"
|
||||
#include "mainwindow.h"
|
||||
#include "virtmic.h"
|
||||
|
||||
@@ -49,6 +50,8 @@ int main(int argc, char *argv[]) {
|
||||
"--remote-debugging-port=9222 " +
|
||||
qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
|
||||
|
||||
checkDependencies();
|
||||
|
||||
MainWindow w(parser.isSet(notifySendOption));
|
||||
w.show();
|
||||
|
||||
|
||||
@@ -44,10 +44,6 @@ void UserScript::setupHelpMenu() {
|
||||
QString(), "https://github.com/Curve");
|
||||
aboutData.addComponent("Rohrkabel", "A C++ RAII Pipewire-API Wrapper", "1.3",
|
||||
"https://github.com/Soundux/rohrkabel");
|
||||
aboutData.addComponent("arRPC",
|
||||
"An open implementation of Discord's local RPC "
|
||||
"servers<br>Copyright (c) 2022 OpenAsar",
|
||||
nullptr, "https://github.com/OpenAsar/arrpc");
|
||||
m_helpMenu = new KHelpMenu(MainWindow::instance(), aboutData);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -8,25 +8,6 @@ namespace Virtmic {
|
||||
|
||||
const QStringList EXCLUDE_TARGETS{"Chromium input", "discord-screenaudio"};
|
||||
|
||||
const std::string nullstr = "";
|
||||
const std::string &getTarget(const pipewire::spa::dict &props) {
|
||||
if (props.count("media.class") &&
|
||||
props.at("media.class") == "Stream/Output/Audio") {
|
||||
if (props.count("application.name") && props.at("application.name") != "")
|
||||
return props.at("application.name");
|
||||
else if (props.count("application.process.binary") &&
|
||||
props.at("application.process.binary") != "")
|
||||
return props.at("application.process.binary");
|
||||
else
|
||||
return props.at("node.name");
|
||||
} else
|
||||
return nullstr;
|
||||
}
|
||||
|
||||
QString qGetTarget(const pipewire::spa::dict &props) {
|
||||
return QString::fromStdString(getTarget(props));
|
||||
}
|
||||
|
||||
QVector<QString> getTargets() {
|
||||
auto main_loop = pipewire::main_loop();
|
||||
auto context = pipewire::context(main_loop);
|
||||
@@ -41,7 +22,14 @@ QVector<QString> getTargets() {
|
||||
if (global.type == pipewire::node::type) {
|
||||
auto node = reg.bind<pipewire::node>(global.id);
|
||||
auto info = node.info();
|
||||
QString name = qGetTarget(info.props);
|
||||
QString name;
|
||||
if (info.props.count("application.name") &&
|
||||
info.props["application.name"] != "")
|
||||
name = QString::fromStdString(info.props["application.name"]);
|
||||
else
|
||||
name = QString::fromStdString(
|
||||
info.props["application.process.binary"]);
|
||||
|
||||
if (name != "" && !EXCLUDE_TARGETS.contains(name) &&
|
||||
!targets.contains(name)) {
|
||||
targets.append(name);
|
||||
@@ -85,7 +73,13 @@ void start(QString _target) {
|
||||
continue;
|
||||
|
||||
auto &parent = nodes.at(parent_id);
|
||||
std::string name = getTarget(parent.props);
|
||||
std::string name;
|
||||
if (parent.props.count("application.name") &&
|
||||
parent.props["application.name"] != "")
|
||||
name = parent.props["application.name"];
|
||||
else
|
||||
name = parent.props["application.process.binary"];
|
||||
|
||||
if (name == target ||
|
||||
(target == "[All Desktop Audio]" &&
|
||||
!EXCLUDE_TARGETS.contains(QString::fromStdString(name)))) {
|
||||
@@ -105,7 +99,7 @@ void start(QString _target) {
|
||||
}
|
||||
};
|
||||
|
||||
std::string target = _target.toUtf8().toStdString();
|
||||
std::string target = _target.toLatin1().toStdString();
|
||||
|
||||
auto virtual_mic = core.create("adapter",
|
||||
{{"node.name", "discord-screenaudio-virtmic"},
|
||||
@@ -129,8 +123,13 @@ void start(QString _target) {
|
||||
if (global.type == pipewire::node::type) {
|
||||
auto node = reg.bind<pipewire::node>(global.id);
|
||||
auto info = node.info();
|
||||
std::string name = getTarget(info.props);
|
||||
if (name == nullstr)
|
||||
std::string name;
|
||||
if (info.props.count("application.name") &&
|
||||
info.props["application.name"] != "")
|
||||
name = info.props["application.name"];
|
||||
else if (info.props.count("application.process.binary")) {
|
||||
name = info.props["application.process.binary"];
|
||||
} else
|
||||
return;
|
||||
qDebug(virtmicLog) << QString("Added: %1")
|
||||
.arg(QString::fromStdString(name))
|
||||
@@ -169,9 +168,12 @@ void start(QString _target) {
|
||||
[&](const std::uint32_t id) {
|
||||
if (nodes.count(id)) {
|
||||
auto info = nodes.at(id);
|
||||
std::string name = getTarget(info.props);
|
||||
if (name == nullstr)
|
||||
return;
|
||||
std::string name;
|
||||
if (info.props.count("application.name") &&
|
||||
info.props["application.name"] != "")
|
||||
name = info.props["application.name"];
|
||||
else
|
||||
name = info.props["application.process.binary"];
|
||||
qDebug(virtmicLog) << QString("Removed: %1")
|
||||
.arg(QString::fromStdString(name))
|
||||
.toUtf8()
|
||||
|
||||
Reference in New Issue
Block a user