diff --git a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp index 5c4576207..ac29d65ad 100644 --- a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp @@ -49,9 +49,10 @@ bool ServiceRegistered = false; std::optional CurrentServerInformation; QStringList CurrentCapabilities; -void Noexcept(Fn callback) noexcept { +void Noexcept(Fn callback, Fn failed = nullptr) noexcept { try { callback(); + return; } catch (const Glib::Error &e) { LOG(("Native Notification Error: %1").arg( QString::fromStdString(e.what()))); @@ -59,6 +60,10 @@ void Noexcept(Fn callback) noexcept { LOG(("Native Notification Error: %1").arg( QString::fromStdString(e.what()))); } + + if (failed) { + failed(); + } } std::unique_ptr CreateServiceWatcher() { @@ -206,18 +211,14 @@ void GetServerInformation( QString::fromStdString(specVersion)), }); }); - - return; + }, [&] { + crl::on_main([=] { callback(std::nullopt); }); }); - - crl::on_main([=] { callback(std::nullopt); }); }, std::string(kService)); - - return; + }, [&] { + crl::on_main([=] { callback(std::nullopt); }); }); - - crl::on_main([=] { callback(std::nullopt); }); } void GetCapabilities(Fn callback) { @@ -244,18 +245,14 @@ void GetCapabilities(Fn callback) { crl::on_main([=] { callback(value); }); - - return; + }, [&] { + crl::on_main([=] { callback({}); }); }); - - crl::on_main([=] { callback({}); }); }, std::string(kService)); - - return; + }, [&] { + crl::on_main([=] { callback({}); }); }); - - crl::on_main([=] { callback({}); }); } void GetInhibited(Fn callback) { @@ -287,18 +284,14 @@ void GetInhibited(Fn callback) { crl::on_main([=] { callback(value); }); - - return; + }, [&] { + crl::on_main([=] { callback(false); }); }); - - crl::on_main([=] { callback(false); }); }, std::string(kService)); - - return; + }, [&] { + crl::on_main([=] { callback(false); }); }); - - crl::on_main([=] { callback(false); }); } ServerInformation CurrentServerInformationValue() { @@ -586,12 +579,11 @@ void NotificationData::show() { crl::on_main(weak, [=] { _notificationId = notificationId; }); - }); - if (!_notificationId) { + }, [&] { crl::on_main(weak, [=] { _manager->clearNotification(_id); }); - } + }); }, std::string(kService)); }));