#include #include #include #include #include "permissionmanager.hpp" #include "tray.hpp" #include "webwindow.hpp" #include "dbus.hpp" 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 extract_url(const QStringList arguments, QString *url, QString *icon) { int index = 0; for (const auto &argument : arguments) { if (!argument.endsWith("webtray") && !argument.startsWith("--")) { if (index == 0) { *url = argument; } else { *icon = argument; } index += 1; } } } int main(int argc, char **argv) { QApplication *app = new QApplication(argc, argv); app->setQuitOnLastWindowClosed(false); QString url, iconpath; extract_url(app->arguments(), &url, &iconpath); if (url.isEmpty()) { std::cerr << "webtray [--open-at-startup] \n"; return -1; } WebWindow *webwindow = new WebWindow(url); Tray *tray = new Tray(); bool start_hidden = not app->arguments().contains("--open-at-startup"); for (auto permission: permissions) { tray->set_permission(permission, webwindow->permissions().get(permission)); } webwindow->connect_icon_changed([&](auto icon) { if (iconpath.isEmpty()) { tray->setIcon(icon); } else { tray->setIcon(QIcon(iconpath)); } tray->show(); }); webwindow->connect_title_changed([&](auto title) { tray->set_title(title); }); webwindow->connect_notification([&](auto notification) { tray->send_notification(std::move(notification)); }); tray->connect_toggle([&]() { webwindow->toggle_visibility(); }); tray->connect_quit([&]() { webwindow->quit(); }); 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(); } return app->exec(); }