discord-screenaudio/src/discordpage.h

63 lines
2.1 KiB
C
Raw Normal View History

2022-07-09 20:07:14 +00:00
#pragma once
#include "userscript.h"
2022-07-09 20:07:14 +00:00
2023-02-18 23:35:09 +00:00
#include <QDir>
#include <QFile>
#include <QNetworkAccessManager>
2022-07-27 12:13:59 +00:00
#include <QWebEngineFullScreenRequest>
2022-07-09 20:07:14 +00:00
#include <QWebEnginePage>
2023-02-15 00:59:22 +00:00
#include <QWebEngineScript>
2022-07-09 20:07:14 +00:00
class DiscordPage : public QWebEnginePage {
Q_OBJECT
public:
explicit DiscordPage(QWidget *parent = nullptr);
UserScript *userScript();
2022-07-09 20:07:14 +00:00
private:
UserScript m_userScript;
2023-02-18 14:23:14 +00:00
QFile *m_userStylesFile;
QString m_userStylesContent;
QNetworkAccessManager m_networkAccessManager;
2023-02-18 23:35:09 +00:00
const QDir m_configLocation =
QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
2023-02-15 00:59:22 +00:00
void setupPermissions();
void setupUserStyles();
2023-02-18 14:23:14 +00:00
void fetchUserStyles();
2022-07-09 20:07:14 +00:00
bool acceptNavigationRequest(const QUrl &url,
QWebEnginePage::NavigationType type,
bool isMainFrame) override;
2022-07-27 12:53:16 +00:00
QWebEnginePage *createWindow(QWebEnginePage::WebWindowType type) override;
2022-07-09 20:07:14 +00:00
void
javaScriptConsoleMessage(QWebEnginePage::JavaScriptConsoleMessageLevel level,
const QString &message, int lineNumber,
const QString &sourceID) override;
2023-02-15 00:59:22 +00:00
void injectScript(QString name, QString content,
QWebEngineScript::InjectionPoint injectionPoint);
void injectScript(QString name, QString content);
void injectStylesheet(QString name, QString content);
void injectFile(void (DiscordPage::*inject)(QString, QString), QString name,
QString source);
2022-07-09 20:07:14 +00:00
private Q_SLOTS:
void featurePermissionRequested(const QUrl &securityOrigin,
QWebEnginePage::Feature feature);
2023-02-18 14:23:14 +00:00
public Q_SLOTS:
void getUserStyles(QString url);
2022-07-09 20:07:14 +00:00
};
2022-07-27 12:53:16 +00:00
// 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;
};