From 0d96657c33af13b7e8c40c9316173281ef1c24db Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Fri, 30 Apr 2021 06:53:39 +0400 Subject: [PATCH] Fix check for disconnected error --- .../platform/linux/linux_xdp_file_dialog.cpp | 20 ++++++++++++------- .../platform/linux/main_window_linux.cpp | 15 +++++++++++--- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp b/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp index 1d960593f..86e652ed3 100644 --- a/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_xdp_file_dialog.cpp @@ -71,8 +71,18 @@ auto MakeFilterList(const QString &filter) { std::optional FileChooserPortalVersion() { try { - const auto connection = Gio::DBus::Connection::get_sync( - Gio::DBus::BusType::BUS_TYPE_SESSION); + const auto connection = [] { + try { + return Gio::DBus::Connection::get_sync( + Gio::DBus::BusType::BUS_TYPE_SESSION); + } catch (...) { + return Glib::RefPtr(); + } + }(); + + if (!connection) { + return std::nullopt; + } auto reply = connection->call_sync( std::string(kXDGDesktopPortalObjectPath), @@ -90,7 +100,6 @@ std::optional FileChooserPortalVersion() { reply.get_child(0))); } catch (const Glib::Error &e) { static const auto NotSupportedErrors = { - "org.freedesktop.DBus.Error.Disconnected", "org.freedesktop.DBus.Error.ServiceUnknown", }; @@ -435,10 +444,7 @@ void XDPFileDialog::openPortal() { }, _cancellable, std::string(kXDGDesktopPortalService)); - } catch (const Glib::Error &e) { - LOG(("XDP File Dialog Error: %1").arg( - QString::fromStdString(e.what()))); - + } catch (...) { _reject.fire({}); } } diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 624e5107a..c6a9f6dae 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -430,8 +430,18 @@ bool UseUnityCounter() { bool IsSNIAvailable() { try { - const auto connection = Gio::DBus::Connection::get_sync( - Gio::DBus::BusType::BUS_TYPE_SESSION); + const auto connection = [] { + try { + return Gio::DBus::Connection::get_sync( + Gio::DBus::BusType::BUS_TYPE_SESSION); + } catch (...) { + return Glib::RefPtr(); + } + }(); + + if (!connection) { + return false; + } auto reply = connection->call_sync( std::string(kSNIWatcherObjectPath), @@ -448,7 +458,6 @@ bool IsSNIAvailable() { reply.get_child(0))); } catch (const Glib::Error &e) { static const auto NotSupportedErrors = { - "org.freedesktop.DBus.Error.Disconnected", "org.freedesktop.DBus.Error.ServiceUnknown", };