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 | ## Known Issues | ||||||
|  |  | ||||||
| - Only works with **PipeWire** | - Only works with **PipeWire** | ||||||
| - Only works on **X11** | - 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 | ## Installation | ||||||
|  |  | ||||||
| @@ -36,7 +43,14 @@ On Debian: | |||||||
|  |  | ||||||
| ### Building | ### 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 | ```bash | ||||||
| cmake -B build | cmake -B build | ||||||
|   | |||||||
| @@ -117,7 +117,7 @@ setInterval(() => { | |||||||
|   ) { |   ) { | ||||||
|     for (const el of document.getElementsByClassName("info-3pQQBb")) { |     for (const el of document.getElementsByClassName("info-3pQQBb")) { | ||||||
|       const aboutEl = document.createElement("div"); |       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.fontSize = "12px"; | ||||||
|       aboutEl.style.color = "var(--text-muted)"; |       aboutEl.style.color = "var(--text-muted)"; | ||||||
|       aboutEl.classList.add("dirscordScreenaudioAboutText"); |       aboutEl.classList.add("dirscordScreenaudioAboutText"); | ||||||
| @@ -129,3 +129,7 @@ setInterval(() => { | |||||||
|   document.getElementById("manage-streams-change-windows")?.remove(); |   document.getElementById("manage-streams-change-windows")?.remove(); | ||||||
|   document.querySelector(`[aria-label="Stream Settings"]`)?.remove(); |   document.querySelector(`[aria-label="Stream Settings"]`)?.remove(); | ||||||
| }, 500); | }, 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::FullScreenSupportEnabled, true); | ||||||
|   settings()->setAttribute(QWebEngineSettings::PlaybackRequiresUserGesture, |   settings()->setAttribute(QWebEngineSettings::PlaybackRequiresUserGesture, | ||||||
|                            false); |                            false); | ||||||
|  |   settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, false); | ||||||
|  |  | ||||||
|   setUrl(QUrl("https://discord.com/app")); |   setUrl(QUrl("https://discord.com/app")); | ||||||
|  |  | ||||||
| @@ -85,6 +86,18 @@ bool DiscordPage::acceptNavigationRequest(const QUrl &url, | |||||||
|   return true; |   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() { | void DiscordPage::stopVirtmic() { | ||||||
|   if (m_virtmicProcess.state() == QProcess::Running) { |   if (m_virtmicProcess.state() == QProcess::Running) { | ||||||
|     qDebug() << "[virtmic] Stopping Virtmic"; |     qDebug() << "[virtmic] Stopping Virtmic"; | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| #include "virtmic.h" | #include "virtmic.h" | ||||||
|  |  | ||||||
| #include <QProcess> | #include <QProcess> | ||||||
|  | #include <QWebEngineFullScreenRequest> | ||||||
| #include <QWebEnginePage> | #include <QWebEnginePage> | ||||||
|  |  | ||||||
| class DiscordPage : public QWebEnginePage { | class DiscordPage : public QWebEnginePage { | ||||||
| @@ -18,6 +19,7 @@ private: | |||||||
|   bool acceptNavigationRequest(const QUrl &url, |   bool acceptNavigationRequest(const QUrl &url, | ||||||
|                                QWebEnginePage::NavigationType type, |                                QWebEnginePage::NavigationType type, | ||||||
|                                bool isMainFrame) override; |                                bool isMainFrame) override; | ||||||
|  |   QWebEnginePage *createWindow(QWebEnginePage::WebWindowType type) override; | ||||||
|   void |   void | ||||||
|   javaScriptConsoleMessage(QWebEnginePage::JavaScriptConsoleMessageLevel level, |   javaScriptConsoleMessage(QWebEnginePage::JavaScriptConsoleMessageLevel level, | ||||||
|                            const QString &message, int lineNumber, |                            const QString &message, int lineNumber, | ||||||
| @@ -31,3 +33,15 @@ private Q_SLOTS: | |||||||
|                                   QWebEnginePage::Feature feature); |                                   QWebEnginePage::Feature feature); | ||||||
|   void startStream(QString target, uint width, uint height, uint frameRate); |   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[]) { | int main(int argc, char *argv[]) { | ||||||
|   QApplication app(argc, argv); |   QApplication app(argc, argv); | ||||||
|   QApplication::setApplicationName("discord-screenaudio"); |   QApplication::setApplicationName("discord-screenaudio"); | ||||||
|   QApplication::setApplicationVersion("1.0.0-rc.6"); |   QApplication::setApplicationVersion("1.0.0-rc.7"); | ||||||
|  |  | ||||||
|   QCommandLineParser parser; |   QCommandLineParser parser; | ||||||
|   parser.setApplicationDescription( |   parser.setApplicationDescription( | ||||||
|   | |||||||
| @@ -23,8 +23,25 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void MainWindow::setupWebView() { | void MainWindow::setupWebView() { | ||||||
|   m_webView = new QWebEngineView(this); |  | ||||||
|   auto page = new DiscordPage(this); |   auto page = new DiscordPage(this); | ||||||
|  |   connect(page, &QWebEnginePage::fullScreenRequested, this, | ||||||
|  |           &MainWindow::fullScreenRequested); | ||||||
|  |  | ||||||
|  |   m_webView = new QWebEngineView(this); | ||||||
|   m_webView->setPage(page); |   m_webView->setPage(page); | ||||||
|  |  | ||||||
|   setCentralWidget(m_webView); |   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; |   QWebEngineView *m_webView; | ||||||
|   QWebEngineProfile *prepareProfile(); |   QWebEngineProfile *prepareProfile(); | ||||||
|   DiscordPage *m_discordPage; |   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