Compare commits

...

8 Commits

Author SHA1 Message Date
Malte Jürgens
6ef16b9625 bump version to 1.0.0-rc.7 2022-07-27 21:24:31 +02:00
Malte Jürgens
b62f1bab1f update readme 2022-07-27 19:49:49 +02:00
Malte Jürgens
5f9211f98f remember is window was maximised before fullscreen 2022-07-27 19:38:09 +02:00
Malte Jürgens
cfbb4152c3 ensure application is closed when window is closed 2022-07-27 15:11:53 +02:00
Malte Jürgens
fa83e2d9a8 fix broken discord notifications after restart 2022-07-27 15:02:51 +02:00
Malte Jürgens
58ecbbc6f4 Allow navigation to external links 2022-07-27 14:53:16 +02:00
Malte Jürgens
77300ed178 allow discord to go fullscreen 2022-07-27 14:13:59 +02:00
Malte Jürgens
99df18ef89 add scope of project to readme 2022-07-27 13:09:15 +02:00
7 changed files with 72 additions and 5 deletions

View File

@@ -9,11 +9,18 @@ of [@edisionnano](https://github.com/edisionnano) and the
![Screenshot_20220718_194357](https://user-images.githubusercontent.com/48161361/179571245-11ea05f3-fb5e-4aef-9132-2736e122ef04.png)
The purpose of this project is **not** to provide an alternative to the original
Discord client. Rather, it should be used in addition to the original client in
case you want to stream something, maybe used with a second account. For
anything else, this client has way too many things that work less well than in
the original client.
## Known Issues
- Only works with **PipeWire**
- Only works on **X11**
- Can only share primary screen (no other screens or specific applications) (see [#1](https://github.com/maltejur/discord-screenaudio/issues/1))
- Can only share primary screen (no other screens or specific applications) (see
[#1](https://github.com/maltejur/discord-screenaudio/issues/1))
## Installation
@@ -36,7 +43,14 @@ On Debian:
### Building
To build the program, run this in the source directory:
First, clone the repository:
```bash
git clone https://github.com/maltejur/discord-screenaudio.git
cd discord-screenaudio
```
Then, to build the program, run this in the source directory:
```bash
cmake -B build

View File

@@ -117,7 +117,7 @@ setInterval(() => {
) {
for (const el of document.getElementsByClassName("info-3pQQBb")) {
const aboutEl = document.createElement("div");
aboutEl.innerText = "discord-screenaudio v1.0.0-rc.6";
aboutEl.innerText = "discord-screenaudio v1.0.0-rc.7";
aboutEl.style.fontSize = "12px";
aboutEl.style.color = "var(--text-muted)";
aboutEl.classList.add("dirscordScreenaudioAboutText");
@@ -129,3 +129,7 @@ setInterval(() => {
document.getElementById("manage-streams-change-windows")?.remove();
document.querySelector(`[aria-label="Stream Settings"]`)?.remove();
}, 500);
// Fix for broken discord notifications after restart
// (https://github.com/maltejur/discord-screenaudio/issues/17)
Notification.requestPermission();

View File

@@ -26,6 +26,7 @@ DiscordPage::DiscordPage(QWidget *parent) : QWebEnginePage(parent) {
settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
settings()->setAttribute(QWebEngineSettings::PlaybackRequiresUserGesture,
false);
settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, false);
setUrl(QUrl("https://discord.com/app"));
@@ -85,6 +86,18 @@ bool DiscordPage::acceptNavigationRequest(const QUrl &url,
return true;
};
bool ExternalPage::acceptNavigationRequest(const QUrl &url,
QWebEnginePage::NavigationType type,
bool isMainFrame) {
QDesktopServices::openUrl(url);
deleteLater();
return false;
}
QWebEnginePage *DiscordPage::createWindow(QWebEnginePage::WebWindowType type) {
return new ExternalPage;
}
void DiscordPage::stopVirtmic() {
if (m_virtmicProcess.state() == QProcess::Running) {
qDebug() << "[virtmic] Stopping Virtmic";

View File

@@ -4,6 +4,7 @@
#include "virtmic.h"
#include <QProcess>
#include <QWebEngineFullScreenRequest>
#include <QWebEnginePage>
class DiscordPage : public QWebEnginePage {
@@ -18,6 +19,7 @@ private:
bool acceptNavigationRequest(const QUrl &url,
QWebEnginePage::NavigationType type,
bool isMainFrame) override;
QWebEnginePage *createWindow(QWebEnginePage::WebWindowType type) override;
void
javaScriptConsoleMessage(QWebEnginePage::JavaScriptConsoleMessageLevel level,
const QString &message, int lineNumber,
@@ -31,3 +33,15 @@ private Q_SLOTS:
QWebEnginePage::Feature feature);
void startStream(QString target, uint width, uint height, uint frameRate);
};
// Will immediately get destroyed again but is needed for navigation to
// target="_blank" links, since QWebEnginePage::newWindowRequested is
// only available sinec Qt 6.3.
class ExternalPage : public QWebEnginePage {
Q_OBJECT
private:
bool acceptNavigationRequest(const QUrl &url,
QWebEnginePage::NavigationType type,
bool isMainFrame) override;
};

View File

@@ -7,7 +7,7 @@
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QApplication::setApplicationName("discord-screenaudio");
QApplication::setApplicationVersion("1.0.0-rc.6");
QApplication::setApplicationVersion("1.0.0-rc.7");
QCommandLineParser parser;
parser.setApplicationDescription(

View File

@@ -23,8 +23,25 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
}
void MainWindow::setupWebView() {
m_webView = new QWebEngineView(this);
auto page = new DiscordPage(this);
connect(page, &QWebEnginePage::fullScreenRequested, this,
&MainWindow::fullScreenRequested);
m_webView = new QWebEngineView(this);
m_webView->setPage(page);
setCentralWidget(m_webView);
}
void MainWindow::fullScreenRequested(
QWebEngineFullScreenRequest fullScreenRequest) {
fullScreenRequest.accept();
if (fullScreenRequest.toggleOn()) {
m_wasMaximized = isMaximized();
showFullScreen();
} else {
m_wasMaximized ? showMaximized() : showNormal();
}
}
void MainWindow::closeEvent(QCloseEvent *event) { QApplication::quit(); }

View File

@@ -21,4 +21,9 @@ private:
QWebEngineView *m_webView;
QWebEngineProfile *prepareProfile();
DiscordPage *m_discordPage;
void closeEvent(QCloseEvent *event) override;
bool m_wasMaximized;
private Q_SLOTS:
void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
};