show userstyles status on the bottom of the page
This commit is contained in:
parent
63180f5d53
commit
3119e1df19
|
@ -44,6 +44,7 @@ set(discord-screenaudio_SRC
|
||||||
src/streamdialog.cpp
|
src/streamdialog.cpp
|
||||||
src/log.cpp
|
src/log.cpp
|
||||||
src/userscript.cpp
|
src/userscript.cpp
|
||||||
|
src/centralwidget.cpp
|
||||||
resources.qrc
|
resources.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,7 @@ function main() {
|
||||||
|
|
||||||
function updateUserstyles() {
|
function updateUserstyles() {
|
||||||
userscript.log("Loading userstyles...");
|
userscript.log("Loading userstyles...");
|
||||||
|
userscript.loadingMessage = "Loading userstyles...";
|
||||||
let stylesheet = document.getElementById("discordScreenaudioUserstyles");
|
let stylesheet = document.getElementById("discordScreenaudioUserstyles");
|
||||||
if (!stylesheet) {
|
if (!stylesheet) {
|
||||||
stylesheet = document.createElement("style");
|
stylesheet = document.createElement("style");
|
||||||
|
@ -168,6 +169,7 @@ function main() {
|
||||||
}
|
}
|
||||||
stylesheet.innerText = userscript.userstyles;
|
stylesheet.innerText = userscript.userstyles;
|
||||||
userscript.log("Finished loading userstyles");
|
userscript.log("Finished loading userstyles");
|
||||||
|
userscript.loadingMessage = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
userscript.userstylesChanged.connect(updateUserstyles);
|
userscript.userstylesChanged.connect(updateUserstyles);
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "centralwidget.h"
|
||||||
|
#include "discordpage.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QWebEngineNotification>
|
||||||
|
#include <QWebEngineProfile>
|
||||||
|
#include <QWebEngineScript>
|
||||||
|
#include <QWebEngineScriptCollection>
|
||||||
|
#include <QWebEngineSettings>
|
||||||
|
|
||||||
|
CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent) {
|
||||||
|
setStyleSheet("background-color:#202225;");
|
||||||
|
m_layout = new QVBoxLayout(this);
|
||||||
|
m_layout->setMargin(0);
|
||||||
|
m_layout->setSpacing(0);
|
||||||
|
setupWebView();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CentralWidget::setupWebView() {
|
||||||
|
auto page = new DiscordPage(this);
|
||||||
|
|
||||||
|
m_webView = new QWebEngineView(this);
|
||||||
|
m_webView->setPage(page);
|
||||||
|
|
||||||
|
bool useNotifySend = MainWindow::instance()
|
||||||
|
->settings()
|
||||||
|
->value("useNotifySend", false)
|
||||||
|
.toBool();
|
||||||
|
if (m_useKF5Notifications || useNotifySend)
|
||||||
|
QWebEngineProfile::defaultProfile()->setNotificationPresenter(
|
||||||
|
[&](std::unique_ptr<QWebEngineNotification> notificationInfo) {
|
||||||
|
if (useNotifySend) {
|
||||||
|
auto title = notificationInfo->title();
|
||||||
|
auto message = notificationInfo->message();
|
||||||
|
auto image_path =
|
||||||
|
QString("/tmp/discord-screenaudio-%1.png").arg(title);
|
||||||
|
notificationInfo->icon().save(image_path);
|
||||||
|
QProcess::execute("notify-send",
|
||||||
|
{"--icon", image_path, "--app-name",
|
||||||
|
"discord-screenaudio", title, message});
|
||||||
|
} else if (m_useKF5Notifications) {
|
||||||
|
#ifdef KNOTIFICATIONS
|
||||||
|
KNotification *notification =
|
||||||
|
new KNotification("discordNotification");
|
||||||
|
notification->setTitle(notificationInfo->title());
|
||||||
|
notification->setText(notificationInfo->message());
|
||||||
|
notification->setPixmap(
|
||||||
|
QPixmap::fromImage(notificationInfo->icon()));
|
||||||
|
notification->setDefaultAction("View");
|
||||||
|
connect(notification, &KNotification::defaultActivated,
|
||||||
|
[&, notificationInfo = std::move(notificationInfo)]() {
|
||||||
|
notificationInfo->click();
|
||||||
|
show();
|
||||||
|
activateWindow();
|
||||||
|
});
|
||||||
|
notification->sendEvent();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(page->userScript(), &UserScript::loadingMessageChanged, this,
|
||||||
|
&CentralWidget::setLoadingIndicator);
|
||||||
|
|
||||||
|
m_layout->addWidget(m_webView);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CentralWidget::setLoadingIndicator(QString text) {
|
||||||
|
if (text != "") {
|
||||||
|
if (m_loadingLabel == nullptr) {
|
||||||
|
m_loadingLabel = new QLabel(this);
|
||||||
|
m_loadingLabel->setMaximumHeight(20);
|
||||||
|
m_loadingLabel->setAlignment(Qt::AlignHCenter);
|
||||||
|
m_layout->addWidget(m_loadingLabel);
|
||||||
|
}
|
||||||
|
m_loadingLabel->setText(text);
|
||||||
|
} else {
|
||||||
|
if (m_loadingLabel != nullptr) {
|
||||||
|
m_layout->removeWidget(m_loadingLabel);
|
||||||
|
m_loadingLabel->deleteLater();
|
||||||
|
m_loadingLabel = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QWebEnginePage>
|
||||||
|
#include <QWebEngineProfile>
|
||||||
|
#include <QWebEngineView>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class CentralWidget : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CentralWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupWebView();
|
||||||
|
QVBoxLayout *m_layout;
|
||||||
|
QWebEngineView *m_webView;
|
||||||
|
#ifdef KNOTIFICATIONS
|
||||||
|
bool m_useKF5Notifications = true;
|
||||||
|
#else
|
||||||
|
bool m_useKF5Notifications = false;
|
||||||
|
#endif
|
||||||
|
QLabel *m_loadingLabel = nullptr;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void setLoadingIndicator(QString text);
|
||||||
|
};
|
|
@ -85,6 +85,9 @@ void DiscordPage::fetchUserStyles(QFile *file) {
|
||||||
<< "Skipping" << url << "because it we can't prefetch it";
|
<< "Skipping" << url << "because it we can't prefetch it";
|
||||||
} else {
|
} else {
|
||||||
qDebug(userstylesLog) << "Fetching" << url;
|
qDebug(userstylesLog) << "Fetching" << url;
|
||||||
|
m_userScript.setProperty(
|
||||||
|
"loadingMessage",
|
||||||
|
QString("Loading userstyles: Fetching %1").arg(url));
|
||||||
QNetworkRequest request(url);
|
QNetworkRequest request(url);
|
||||||
auto reply = m_networkAccessManager.get(request);
|
auto reply = m_networkAccessManager.get(request);
|
||||||
connect(reply, &QNetworkReply::finished, [=]() {
|
connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
|
@ -281,3 +284,5 @@ void DiscordPage::javaScriptConsoleMessage(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserScript *DiscordPage::userScript() { return &m_userScript; }
|
||||||
|
|
|
@ -13,6 +13,7 @@ class DiscordPage : public QWebEnginePage {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DiscordPage(QWidget *parent = nullptr);
|
explicit DiscordPage(QWidget *parent = nullptr);
|
||||||
|
UserScript *userScript();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UserScript m_userScript;
|
UserScript m_userScript;
|
||||||
|
|
|
@ -16,11 +16,7 @@
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QWebEngineNotification>
|
#include <QWebEngineFullScreenRequest>
|
||||||
#include <QWebEngineProfile>
|
|
||||||
#include <QWebEngineScript>
|
|
||||||
#include <QWebEngineScriptCollection>
|
|
||||||
#include <QWebEngineSettings>
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
MainWindow *MainWindow::m_instance = nullptr;
|
MainWindow *MainWindow::m_instance = nullptr;
|
||||||
|
@ -29,9 +25,10 @@ MainWindow::MainWindow(bool useNotifySend, QWidget *parent)
|
||||||
: QMainWindow(parent) {
|
: QMainWindow(parent) {
|
||||||
assert(MainWindow::m_instance == nullptr);
|
assert(MainWindow::m_instance == nullptr);
|
||||||
MainWindow::m_instance = this;
|
MainWindow::m_instance = this;
|
||||||
m_useNotifySend = useNotifySend;
|
|
||||||
setupSettings();
|
setupSettings();
|
||||||
setupWebView();
|
m_settings->setValue("useNotifySend", useNotifySend);
|
||||||
|
m_centralWidget = new CentralWidget(this);
|
||||||
|
setCentralWidget(m_centralWidget);
|
||||||
setupTrayIcon();
|
setupTrayIcon();
|
||||||
resize(1000, 700);
|
resize(1000, 700);
|
||||||
showMaximized();
|
showMaximized();
|
||||||
|
@ -42,49 +39,6 @@ MainWindow::MainWindow(bool useNotifySend, QWidget *parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setupWebView() {
|
|
||||||
auto page = new DiscordPage(this);
|
|
||||||
connect(page, &QWebEnginePage::fullScreenRequested, this,
|
|
||||||
&MainWindow::fullScreenRequested);
|
|
||||||
|
|
||||||
m_webView = new QWebEngineView(this);
|
|
||||||
m_webView->setPage(page);
|
|
||||||
|
|
||||||
if (m_useKF5Notifications || m_useNotifySend)
|
|
||||||
QWebEngineProfile::defaultProfile()->setNotificationPresenter(
|
|
||||||
[&](std::unique_ptr<QWebEngineNotification> notificationInfo) {
|
|
||||||
if (m_useNotifySend) {
|
|
||||||
auto title = notificationInfo->title();
|
|
||||||
auto message = notificationInfo->message();
|
|
||||||
auto image_path =
|
|
||||||
QString("/tmp/discord-screenaudio-%1.png").arg(title);
|
|
||||||
notificationInfo->icon().save(image_path);
|
|
||||||
QProcess::execute("notify-send",
|
|
||||||
{"--icon", image_path, "--app-name",
|
|
||||||
"discord-screenaudio", title, message});
|
|
||||||
} else if (m_useKF5Notifications) {
|
|
||||||
#ifdef KNOTIFICATIONS
|
|
||||||
KNotification *notification =
|
|
||||||
new KNotification("discordNotification");
|
|
||||||
notification->setTitle(notificationInfo->title());
|
|
||||||
notification->setText(notificationInfo->message());
|
|
||||||
notification->setPixmap(
|
|
||||||
QPixmap::fromImage(notificationInfo->icon()));
|
|
||||||
notification->setDefaultAction("View");
|
|
||||||
connect(notification, &KNotification::defaultActivated,
|
|
||||||
[&, notificationInfo = std::move(notificationInfo)]() {
|
|
||||||
notificationInfo->click();
|
|
||||||
show();
|
|
||||||
activateWindow();
|
|
||||||
});
|
|
||||||
notification->sendEvent();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
setCentralWidget(m_webView);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::fullScreenRequested(
|
void MainWindow::fullScreenRequested(
|
||||||
QWebEngineFullScreenRequest fullScreenRequest) {
|
QWebEngineFullScreenRequest fullScreenRequest) {
|
||||||
fullScreenRequest.accept();
|
fullScreenRequest.accept();
|
||||||
|
@ -165,3 +119,7 @@ void MainWindow::closeEvent(QCloseEvent *event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow *MainWindow::instance() { return m_instance; }
|
MainWindow *MainWindow::instance() { return m_instance; }
|
||||||
|
|
||||||
|
CentralWidget *MainWindow::centralWidget() {
|
||||||
|
return instance()->m_centralWidget;
|
||||||
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "discordpage.h"
|
#include "centralwidget.h"
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
@ -8,10 +8,8 @@
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QVBoxLayout>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
#include <QWebEnginePage>
|
|
||||||
#include <QWebEngineProfile>
|
|
||||||
#include <QWebEngineView>
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow {
|
class MainWindow : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -20,31 +18,22 @@ public:
|
||||||
explicit MainWindow(bool useNotifySend = false, QWidget *parent = nullptr);
|
explicit MainWindow(bool useNotifySend = false, QWidget *parent = nullptr);
|
||||||
static MainWindow *instance();
|
static MainWindow *instance();
|
||||||
QSettings *settings() const;
|
QSettings *settings() const;
|
||||||
|
static CentralWidget *centralWidget();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupWebView();
|
|
||||||
void setupTrayIcon();
|
void setupTrayIcon();
|
||||||
void cleanTrayIcon();
|
void cleanTrayIcon();
|
||||||
void setupSettings();
|
void setupSettings();
|
||||||
QWebEngineView *m_webView;
|
|
||||||
QWebEngineProfile *prepareProfile();
|
QWebEngineProfile *prepareProfile();
|
||||||
DiscordPage *m_discordPage;
|
|
||||||
void closeEvent(QCloseEvent *event) override;
|
void closeEvent(QCloseEvent *event) override;
|
||||||
QSystemTrayIcon *m_trayIcon = nullptr;
|
QSystemTrayIcon *m_trayIcon = nullptr;
|
||||||
QMenu *m_trayIconMenu;
|
QMenu *m_trayIconMenu;
|
||||||
QSettings *m_settings;
|
QSettings *m_settings;
|
||||||
bool m_wasMaximized;
|
bool m_wasMaximized;
|
||||||
static MainWindow *m_instance;
|
static MainWindow *m_instance;
|
||||||
bool m_useNotifySend;
|
CentralWidget *m_centralWidget;
|
||||||
#ifdef KNOTIFICATIONS
|
|
||||||
bool m_useKF5Notifications = true;
|
|
||||||
#else
|
|
||||||
bool m_useKF5Notifications = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setTrayIcon(bool enabled);
|
void setTrayIcon(bool enabled);
|
||||||
|
|
||||||
private Q_SLOTS:
|
|
||||||
void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
|
void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,8 +15,6 @@ UserScript::UserScript() : QObject() {
|
||||||
setupShortcutsDialog();
|
setupShortcutsDialog();
|
||||||
setupStreamDialog();
|
setupStreamDialog();
|
||||||
setupVirtmic();
|
setupVirtmic();
|
||||||
// connect(this, &UserScript::loadingMessageChanged, MainWindow::instance(),
|
|
||||||
// &MainWindow::setLoadingIndicator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserScript::setupHelpMenu() {
|
void UserScript::setupHelpMenu() {
|
||||||
|
|
|
@ -64,7 +64,7 @@ Q_SIGNALS:
|
||||||
void deafenToggled();
|
void deafenToggled();
|
||||||
void streamStarted(bool video, int width, int height, int frameRate);
|
void streamStarted(bool video, int width, int height, int frameRate);
|
||||||
void userstylesChanged();
|
void userstylesChanged();
|
||||||
void loadingMessageChanged();
|
void loadingMessageChanged(QString message);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void log(QString message);
|
void log(QString message);
|
||||||
|
|
Loading…
Reference in New Issue