Compare commits

..

1 Commits

Author SHA1 Message Date
Malte Jürgens
94b27f5b6a implement ctrl+q keybind 2023-06-23 17:48:54 +02:00
5 changed files with 37 additions and 74 deletions

View File

@@ -1,14 +1,12 @@
navigator.mediaDevices.chromiumGetDisplayMedia = navigator.mediaDevices.chromiumGetDisplayMedia =
navigator.mediaDevices.getDisplayMedia; navigator.mediaDevices.getDisplayMedia;
navigator.mediaDevices.chromiumGetUserMedia =
navigator.mediaDevices.getUserMedia;
function sleep(ms) { function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
} }
const getAudioDevice = async (nameOfAudioDevice) => { const getAudioDevice = async (nameOfAudioDevice) => {
await navigator.mediaDevices.chromiumGetUserMedia({ await navigator.mediaDevices.getUserMedia({
audio: true, audio: true,
}); });
let audioDevice; let audioDevice;
@@ -25,16 +23,6 @@ const getAudioDevice = async (nameOfAudioDevice) => {
return audioDevice; return audioDevice;
}; };
function setGetUserMedia() {
const getUserMedia = async (constraints) => {
return await navigator.mediaDevices.chromiumGetUserMedia({
video: constraints?.video || false,
audio: { ...constraints?.audio, autoGainControl },
});
};
navigator.mediaDevices.getUserMedia = getUserMedia;
}
function setGetDisplayMedia(video = true, overrideArgs = undefined) { function setGetDisplayMedia(video = true, overrideArgs = undefined) {
const getDisplayMedia = async (...args) => { const getDisplayMedia = async (...args) => {
var id; var id;
@@ -46,27 +34,26 @@ function setGetDisplayMedia(video = true, overrideArgs = undefined) {
} catch (error) { } catch (error) {
id = "default"; id = "default";
} }
let captureSystemAudioStream = let captureSystemAudioStream = await navigator.mediaDevices.getUserMedia({
await navigator.mediaDevices.chromiumGetUserMedia({ audio: {
audio: { // We add our audio constraints here, to get a list of supported constraints use navigator.mediaDevices.getSupportedConstraints();
// We add our audio constraints here, to get a list of supported constraints use navigator.mediaDevices.getSupportedConstraints(); // We must capture a microphone, we use default since its the only deviceId that is the same for every Chromium user
// We must capture a microphone, we use default since its the only deviceId that is the same for every Chromium user deviceId: {
deviceId: { exact: id,
exact: id,
},
// We want auto gain control, noise cancellation and noise suppression disabled so that our stream won't sound bad
autoGainControl: false,
echoCancellation: false,
noiseSuppression: false,
// By default Chromium sets channel count for audio devices to 1, we want it to be stereo in case we find a way for Discord to accept stereo screenshare too
channelCount: 2,
// You can set more audio constraints here, bellow are some examples
//latency: 0,
//sampleRate: 48000,
//sampleSize: 16,
//volume: 1.0
}, },
}); // We want auto gain control, noise cancellation and noise suppression disabled so that our stream won't sound bad
autoGainControl: false,
echoCancellation: false,
noiseSuppression: false,
// By default Chromium sets channel count for audio devices to 1, we want it to be stereo in case we find a way for Discord to accept stereo screenshare too
channelCount: 2,
// You can set more audio constraints here, bellow are some examples
//latency: 0,
//sampleRate: 48000,
//sampleSize: 16,
//volume: 1.0
},
});
let [track] = captureSystemAudioStream.getAudioTracks(); let [track] = captureSystemAudioStream.getAudioTracks();
const gdm = await navigator.mediaDevices.chromiumGetDisplayMedia( const gdm = await navigator.mediaDevices.chromiumGetDisplayMedia(
...(overrideArgs ...(overrideArgs
@@ -81,7 +68,6 @@ function setGetDisplayMedia(video = true, overrideArgs = undefined) {
} }
setGetDisplayMedia(); setGetDisplayMedia();
setGetUserMedia();
let userscript; let userscript;
let muteBtn; let muteBtn;
@@ -90,7 +76,6 @@ let streamStartBtn;
let streamStartBtnInitialDisplay; let streamStartBtnInitialDisplay;
let streamStartBtnClone; let streamStartBtnClone;
let resolutionString; let resolutionString;
let autoGainControl = true;
const clonedElements = []; const clonedElements = [];
const hiddenElements = []; const hiddenElements = [];
let wasStreamActive = false; let wasStreamActive = false;
@@ -174,10 +159,6 @@ function main() {
streamStartBtnClone.remove(); streamStartBtnClone.remove();
}); });
userscript.getPref("disableAutomaticGain", false).then((disabled) => {
autoGainControl = !disabled;
});
function updateUserstyles() { function updateUserstyles() {
userscript.log("Loading userstyles..."); userscript.log("Loading userstyles...");
userscript.loadingMessage = "Loading userstyles..."; userscript.loadingMessage = "Loading userstyles...";
@@ -387,29 +368,5 @@ function main() {
} }
} }
} }
for (const el of document.getElementsByClassName("sensitivity-3A7Gs9")) {
if (
el.getElementsByTagName("div").length > 0 &&
!document.getElementById("discord-screenaudio-gaintoggle")
) {
const toggle = createSwitch(
"Disable automatic gain",
await userscript.getPref("disableAutomaticGain", false),
async (disabled) => {
await userscript.setPref("disableAutomaticGain", disabled);
autoGainControl = !disabled;
setGetUserMedia();
if (disabled)
userscript.showInformation(
"discord-screenaudio",
"If you are currently in a call, this setting may only take effect after you rejoin the call or restart discord-screenaudio."
);
}
);
toggle.id = "discord-screenaudio-gaintoggle";
el.getElementsByTagName("div")[0].appendChild(toggle);
}
}
}, 500); }, 500);
} }

View File

@@ -12,6 +12,7 @@
#include <QGridLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
#include <QPushButton> #include <QPushButton>
#include <QShortcut>
#include <QSpacerItem> #include <QSpacerItem>
#include <QThread> #include <QThread>
#include <QTimer> #include <QTimer>
@@ -31,6 +32,8 @@ MainWindow::MainWindow(bool useNotifySend, QWidget *parent)
setCentralWidget(m_centralWidget); setCentralWidget(m_centralWidget);
setupTrayIcon(); setupTrayIcon();
setMinimumSize(800, 300); setMinimumSize(800, 300);
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this),
&QShortcut::activated, this, &MainWindow::toggleOrCloseWindow);
if (m_settings->contains("geometry")) { if (m_settings->contains("geometry")) {
restoreGeometry(m_settings->value("geometry").toByteArray()); restoreGeometry(m_settings->value("geometry").toByteArray());
} else { } else {
@@ -79,12 +82,7 @@ void MainWindow::setupTrayIcon() {
connect(m_trayIcon, &QSystemTrayIcon::activated, [this](auto reason) { connect(m_trayIcon, &QSystemTrayIcon::activated, [this](auto reason) {
if (reason == QSystemTrayIcon::Trigger) { if (reason == QSystemTrayIcon::Trigger) {
if (isVisible()) { toggleOrCloseWindow();
hide();
} else {
show();
activateWindow();
}
} }
}); });
} }
@@ -131,3 +129,15 @@ MainWindow *MainWindow::instance() { return m_instance; }
CentralWidget *MainWindow::centralWidget() { CentralWidget *MainWindow::centralWidget() {
return instance()->m_centralWidget; return instance()->m_centralWidget;
}; };
void MainWindow::toggleOrCloseWindow() {
if (isVisible()) {
if (m_trayIcon == nullptr)
QApplication::quit();
else
hide();
} else {
show();
activateWindow();
}
}

View File

@@ -36,4 +36,5 @@ private:
public Q_SLOTS: public Q_SLOTS:
void setTrayIcon(bool enabled); void setTrayIcon(bool enabled);
void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest); void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
void toggleOrCloseWindow();
}; };

View File

@@ -182,7 +182,3 @@ void UserScript::showThemeDialog() {
void UserScript::installUserStyles(QString url) { void UserScript::installUserStyles(QString url) {
emit shouldInstallUserStyles(url); emit shouldInstallUserStyles(url);
} }
void UserScript::showInformation(QString title, QString message) {
QMessageBox::information(MainWindow::instance(), title, message);
}

View File

@@ -72,7 +72,6 @@ public Q_SLOTS:
void showShortcutsDialog(); void showShortcutsDialog();
void showHelpMenu(); void showHelpMenu();
void showStreamDialog(); void showStreamDialog();
void showInformation(QString title, QString message);
void stopVirtmic(); void stopVirtmic();
void startVirtmic(QString target); void startVirtmic(QString target);
void showThemeDialog(); void showThemeDialog();