diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dbus.cpp | 7 | ||||
| -rw-r--r-- | src/dbus.hpp | 24 | ||||
| -rw-r--r-- | src/main.cpp | 38 | ||||
| -rw-r--r-- | src/permissionmanager.cpp | 39 | ||||
| -rw-r--r-- | src/permissionmanager.hpp | 4 | ||||
| -rw-r--r-- | src/tray.cpp | 46 | ||||
| -rw-r--r-- | src/tray.hpp | 6 | ||||
| -rw-r--r-- | src/webwindow.cpp | 46 | ||||
| -rw-r--r-- | src/webwindow.hpp | 2 |
9 files changed, 123 insertions, 89 deletions
diff --git a/src/dbus.cpp b/src/dbus.cpp new file mode 100644 index 0000000..5e0ce6e --- /dev/null +++ b/src/dbus.cpp @@ -0,0 +1,7 @@ +#include "dbus.hpp" + +#include <iostream> + +void DBusHandler::show() { + this->window->show(); +} diff --git a/src/dbus.hpp b/src/dbus.hpp new file mode 100644 index 0000000..ba0d558 --- /dev/null +++ b/src/dbus.hpp @@ -0,0 +1,24 @@ +#ifndef WEBTRAY_DBUS_HPP +#define WEBTRAY_DBUS_HPP + +#include <QObject> + +#include "webwindow.hpp" + +static const char service_name[] = "xyz.nathanreiner.WebTray"; + +class DBusHandler : public QObject { + Q_OBJECT; + +private: + WebWindow *window; + +public slots: + void show(); + +public: + DBusHandler(WebWindow *window) : window(window) {} + virtual ~DBusHandler() {}; +}; + +#endif diff --git a/src/main.cpp b/src/main.cpp index 385d3c3..1630680 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,21 +1,22 @@ #include <QtWidgets/QApplication> +#include <QDBusConnection> +#include <QDBusError> #include <iostream> -using namespace std::chrono_literals; - #include "permissionmanager.hpp" #include "tray.hpp" #include "webwindow.hpp" +#include "dbus.hpp" -const QWebEnginePage::Feature features[] = { - QWebEnginePage::Feature::MouseLock, - QWebEnginePage::Feature::Notifications, - QWebEnginePage::Feature::Notifications, - QWebEnginePage::Feature::DesktopVideoCapture, - QWebEnginePage::Feature::DesktopAudioVideoCapture, - QWebEnginePage::Feature::MediaAudioCapture, - QWebEnginePage::Feature::MediaVideoCapture, +const QWebEnginePermission::PermissionType permissions[] = { + QWebEnginePermission::PermissionType::MouseLock, + QWebEnginePermission::PermissionType::Notifications, + QWebEnginePermission::PermissionType::Notifications, + QWebEnginePermission::PermissionType::DesktopVideoCapture, + QWebEnginePermission::PermissionType::DesktopAudioVideoCapture, + QWebEnginePermission::PermissionType::MediaAudioCapture, + QWebEnginePermission::PermissionType::MediaVideoCapture, }; void @@ -54,8 +55,8 @@ main(int argc, char **argv) bool start_hidden = not app->arguments().contains("--open-at-startup"); - for (auto feature : features) { - tray->set_permission(feature, webwindow->permissions().get(feature)); + for (auto permission: permissions) { + tray->set_permission(permission, webwindow->permissions().get(permission)); } webwindow->connect_icon_changed([&](auto icon) { @@ -75,11 +76,20 @@ main(int argc, char **argv) tray->connect_toggle([&]() { webwindow->toggle_visibility(); }); tray->connect_quit([&]() { webwindow->quit(); }); - tray->connect_permission_changed([&](auto feature, auto value) { - webwindow->permissions().set(feature, value); + tray->connect_permission_changed([&](auto permission, auto value) { + webwindow->permissions().set(permission, value); }); tray->connect_reset_cookies([&]() { webwindow->reset_cookies(); }); + auto connection = QDBusConnection::sessionBus(); + DBusHandler dbus_handler = DBusHandler(webwindow); + + if (!connection.registerService(QString(service_name) + "." + QUrl(url).host())) { + std::cerr << "could not register ipc\n"; + } + + connection.registerObject("/", &dbus_handler, QDBusConnection::ExportAllSlots); + webwindow->show(); if (start_hidden) { webwindow->hide(); diff --git a/src/permissionmanager.cpp b/src/permissionmanager.cpp index 22a7110..78564c6 100644 --- a/src/permissionmanager.cpp +++ b/src/permissionmanager.cpp @@ -39,59 +39,60 @@ PermissionManager::save() } bool -PermissionManager::get(QWebEnginePage::Feature feature) +PermissionManager::get(QWebEnginePermission::PermissionType feature) { switch (feature) { - case QWebEnginePage::Feature::MouseLock: + case QWebEnginePermission::PermissionType::MouseLock: return this->lock_mouse; - case QWebEnginePage::Feature::Geolocation: + case QWebEnginePermission::PermissionType::Geolocation: return this->location; - case QWebEnginePage::Feature::Notifications: + case QWebEnginePermission::PermissionType::Notifications: return this->notification; - case QWebEnginePage::Feature::MediaAudioCapture: + case QWebEnginePermission::PermissionType::MediaAudioCapture: return this->media_audio_capture; - case QWebEnginePage::Feature::MediaVideoCapture: + case QWebEnginePermission::PermissionType::MediaVideoCapture: return this->media_video_capture; - case QWebEnginePage::Feature::MediaAudioVideoCapture: + case QWebEnginePermission::PermissionType::MediaAudioVideoCapture: return this->media_video_capture && this->media_audio_capture; - case QWebEnginePage::Feature::DesktopVideoCapture: + case QWebEnginePermission::PermissionType::DesktopVideoCapture: return this->desktop_audio_video_capture; - case QWebEnginePage::Feature::DesktopAudioVideoCapture: + case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture: return this->desktop_audio_video_capture; default: - /* unreachable except QWebEnginePage::Feature gets new entries */ + /* unreachable except QWebEnginePermission::PermissionType gets new entries */ return false; } } void -PermissionManager::set(QWebEnginePage::Feature feature, bool value) +PermissionManager::set(QWebEnginePermission::PermissionType feature, bool value) { switch (feature) { - case QWebEnginePage::Feature::MouseLock: + case QWebEnginePermission::PermissionType::MouseLock: this->lock_mouse = value; break; - case QWebEnginePage::Feature::Geolocation: + case QWebEnginePermission::PermissionType::Geolocation: this->location = value; break; - case QWebEnginePage::Feature::Notifications: + case QWebEnginePermission::PermissionType::Notifications: this->notification = value; break; - case QWebEnginePage::Feature::MediaAudioCapture: + case QWebEnginePermission::PermissionType::MediaAudioCapture: this->media_audio_capture = value; break; - case QWebEnginePage::Feature::MediaVideoCapture: + case QWebEnginePermission::PermissionType::MediaVideoCapture: this->media_video_capture = value; break; - case QWebEnginePage::Feature::MediaAudioVideoCapture: + case QWebEnginePermission::PermissionType::MediaAudioVideoCapture: this->media_audio_capture = value; this->media_video_capture = value; break; - case QWebEnginePage::Feature::DesktopVideoCapture: + case QWebEnginePermission::PermissionType::DesktopVideoCapture: this->desktop_audio_video_capture = value; break; - case QWebEnginePage::Feature::DesktopAudioVideoCapture: + case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture: this->desktop_audio_video_capture = value; break; + default: break; } } diff --git a/src/permissionmanager.hpp b/src/permissionmanager.hpp index 8d53597..d1ea720 100644 --- a/src/permissionmanager.hpp +++ b/src/permissionmanager.hpp @@ -20,8 +20,8 @@ public: PermissionManager(std::string path); ~PermissionManager(); void save(); - bool get(QWebEnginePage::Feature feature); - void set(QWebEnginePage::Feature feature, bool value); + bool get(QWebEnginePermission::PermissionType feature); + void set(QWebEnginePermission::PermissionType feature, bool value); }; #endif diff --git a/src/tray.cpp b/src/tray.cpp index 8503cb7..d0f091a 100644 --- a/src/tray.cpp +++ b/src/tray.cpp @@ -25,13 +25,12 @@ Tray::Tray() this->permissions.location->setCheckable(true); this->permissions.lock_mouse->setCheckable(true); - this->connect(this, - &QSystemTrayIcon::activated, - [&](QSystemTrayIcon::ActivationReason reason) { - if (reason == QSystemTrayIcon::ActivationReason::Trigger) { - this->toggle_signal(); - } - }); + this->connect(this, &QSystemTrayIcon::activated, + [&](QSystemTrayIcon::ActivationReason reason) { + if (reason == QSystemTrayIcon::ActivationReason::Trigger) { + this->toggle_signal(); + } + }); this->menu.connect(&this->menu, &QMenu::triggered, [&](QAction *action) { if (action == this->app_toggle) { @@ -48,32 +47,32 @@ Tray::Tray() } else if (action == this->permissions.camera) { this->permission_changed_signal( - QWebEnginePage::Feature::MediaVideoCapture, + QWebEnginePermission::PermissionType::MediaVideoCapture, this->permissions.camera->isChecked()); } else if (action == this->permissions.microphone) { this->permission_changed_signal( - QWebEnginePage::Feature::MediaAudioCapture, + QWebEnginePermission::PermissionType::MediaAudioCapture, this->permissions.microphone->isChecked()); } else if (action == this->permissions.screenshare) { this->permission_changed_signal( - QWebEnginePage::Feature::DesktopAudioVideoCapture, + QWebEnginePermission::PermissionType::DesktopAudioVideoCapture, this->permissions.screenshare->isChecked()); } else if (action == this->permissions.notifications) { this->permission_changed_signal( - QWebEnginePage::Feature::Notifications, + QWebEnginePermission::PermissionType::Notifications, this->permissions.notifications->isChecked()); } else if (action == this->permissions.location) { this->permission_changed_signal( - QWebEnginePage::Feature::Geolocation, + QWebEnginePermission::PermissionType::Geolocation, this->permissions.location->isChecked()); } else if (action == this->permissions.lock_mouse) { this->permission_changed_signal( - QWebEnginePage::Feature::MouseLock, + QWebEnginePermission::PermissionType::MouseLock, this->permissions.lock_mouse->isChecked()); } }); @@ -101,7 +100,7 @@ Tray::connect_reset_cookies(std::function<void()> fn) void Tray::connect_permission_changed( - std::function<void(QWebEnginePage::Feature, bool)> fn) + std::function<void(QWebEnginePermission::PermissionType, bool)> fn) { this->permission_changed_signal = fn; } @@ -123,33 +122,34 @@ Tray::send_notification(std::unique_ptr<QWebEngineNotification> notification) } void -Tray::set_permission(QWebEnginePage::Feature feature, bool value) +Tray::set_permission(QWebEnginePermission::PermissionType feature, bool value) { switch (feature) { - case QWebEnginePage::Feature::MouseLock: + case QWebEnginePermission::PermissionType::MouseLock: this->permissions.lock_mouse->setChecked(value); break; - case QWebEnginePage::Feature::Geolocation: + case QWebEnginePermission::PermissionType::Geolocation: this->permissions.location->setChecked(value); break; - case QWebEnginePage::Feature::Notifications: + case QWebEnginePermission::PermissionType::Notifications: this->permissions.notifications->setChecked(value); break; - case QWebEnginePage::Feature::MediaAudioCapture: + case QWebEnginePermission::PermissionType::MediaAudioCapture: this->permissions.microphone->setChecked(value); break; - case QWebEnginePage::Feature::MediaVideoCapture: + case QWebEnginePermission::PermissionType::MediaVideoCapture: this->permissions.camera->setChecked(value); break; - case QWebEnginePage::Feature::MediaAudioVideoCapture: + case QWebEnginePermission::PermissionType::MediaAudioVideoCapture: this->permissions.microphone->setChecked(value); this->permissions.camera->setChecked(value); break; - case QWebEnginePage::Feature::DesktopVideoCapture: + case QWebEnginePermission::PermissionType::DesktopVideoCapture: this->permissions.screenshare->setChecked(value); break; - case QWebEnginePage::Feature::DesktopAudioVideoCapture: + case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture: this->permissions.screenshare->setChecked(value); break; + default: break; } } diff --git a/src/tray.hpp b/src/tray.hpp index 865c586..280c191 100644 --- a/src/tray.hpp +++ b/src/tray.hpp @@ -28,7 +28,7 @@ private: std::function<void()> toggle_signal; std::function<void()> quit_signal; std::function<void()> reset_cookies_signal; - std::function<void(QWebEnginePage::Feature, bool)> permission_changed_signal; + std::function<void(QWebEnginePermission::PermissionType, bool)> permission_changed_signal; public: Tray(); @@ -36,10 +36,10 @@ public: void connect_quit(std::function<void()> fn); void connect_reset_cookies(std::function<void()> fn); void connect_permission_changed( - std::function<void(QWebEnginePage::Feature, bool)> fn); + std::function<void(QWebEnginePermission::PermissionType, bool)> fn); void set_title(const QString &title); void send_notification(std::unique_ptr<QWebEngineNotification> notification); - void set_permission(QWebEnginePage::Feature feature, bool value); + void set_permission(QWebEnginePermission::PermissionType feature, bool value); }; #endif diff --git a/src/webwindow.cpp b/src/webwindow.cpp index 823eec7..54634ad 100644 --- a/src/webwindow.cpp +++ b/src/webwindow.cpp @@ -48,25 +48,22 @@ WebWindow::web_configure() this->profile->setPushServiceEnabled(true); - this->page->connect(this->page, - &QWebEnginePage::featurePermissionRequested, - [&](const QUrl origin, QWebEnginePage::Feature feature) { - this->permission_requested(origin, feature); - }); + this->page->connect(this->page, &QWebEnginePage::permissionRequested, + [&](QWebEnginePermission permission) { + this->permission_requested(permission); + } + ); - this->profile->connect(this->profile, - &QWebEngineProfile::downloadRequested, - [&](QWebEngineDownloadRequest *request) { - const QUrl url = QFileDialog::getSaveFileUrl( - this, - "", - QUrl(this->profile->downloadPath() + "/" + - request->downloadFileName())); - if (!url.isEmpty()) { - request->setDownloadFileName(url.path()); - request->accept(); - } - }); + this->profile->connect(this->profile, &QWebEngineProfile::downloadRequested, + [&](QWebEngineDownloadRequest *request) { + const QUrl path = QUrl(this->profile->downloadPath() + "/" + request->downloadFileName()); + const QUrl url = QFileDialog::getSaveFileUrl(this, "", path); + if (!url.isEmpty()) { + request->setDownloadFileName(url.path()); + request->accept(); + } + } + ); this->page->connect(this->page, &QWebEnginePage::newWindowRequested, @@ -87,18 +84,13 @@ WebWindow::web_configure() } void -WebWindow::permission_requested(const QUrl origin, - QWebEnginePage::Feature feature) +WebWindow::permission_requested(QWebEnginePermission permission) { - if (this->perm->get(feature)) { - this->page->setFeaturePermission( - origin, feature, QWebEnginePage::PermissionGrantedByUser); + if (this->perm->get(permission.permissionType())) { + permission.grant(); } else { - this->page->setFeaturePermission( - origin, feature, QWebEnginePage::PermissionDeniedByUser); + permission.deny(); } - this->page->setFeaturePermission( - origin, feature, QWebEnginePage::PermissionUnknown); } void diff --git a/src/webwindow.hpp b/src/webwindow.hpp index c29a953..a9183d7 100644 --- a/src/webwindow.hpp +++ b/src/webwindow.hpp @@ -20,7 +20,7 @@ private: PermissionManager *perm; void web_configure(); - void permission_requested(const QUrl origin, QWebEnginePage::Feature feature); + void permission_requested(QWebEnginePermission permission); void closeEvent(QCloseEvent *event); public: |