Compare commits
8 Commits
v1.0.0-rc.
...
v1.0.0-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ef16b9625 | ||
|
|
b62f1bab1f | ||
|
|
5f9211f98f | ||
|
|
cfbb4152c3 | ||
|
|
fa83e2d9a8 | ||
|
|
58ecbbc6f4 | ||
|
|
77300ed178 | ||
|
|
99df18ef89 |
18
README.md
18
README.md
@@ -9,11 +9,18 @@ of [@edisionnano](https://github.com/edisionnano) and the
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user