forked from AuroraMiddleware/gtk
Handle lack of file transfer portal
Don't block for 25 seconds trying to get a bus connection. Give up after 1 second.
This commit is contained in:
parent
794ee0b8c0
commit
806e159b8b
@ -42,6 +42,40 @@
|
|||||||
#include "filetransferportalprivate.h"
|
#include "filetransferportalprivate.h"
|
||||||
|
|
||||||
static GDBusProxy *file_transfer_proxy = NULL;
|
static GDBusProxy *file_transfer_proxy = NULL;
|
||||||
|
static gboolean done;
|
||||||
|
static guint timeout_id;
|
||||||
|
|
||||||
|
static void
|
||||||
|
got_proxy (GObject *source,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
file_transfer_proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
|
||||||
|
if (!file_transfer_proxy)
|
||||||
|
{
|
||||||
|
g_message ("failed to get file transfer portal proxy: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
done = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
give_up_on_proxy (gpointer data)
|
||||||
|
{
|
||||||
|
GCancellable *cancellable = data;
|
||||||
|
|
||||||
|
g_cancellable_cancel (cancellable);
|
||||||
|
|
||||||
|
timeout_id = 0;
|
||||||
|
done = TRUE;
|
||||||
|
|
||||||
|
g_main_context_wakeup (NULL);
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
static GDBusProxy *
|
static GDBusProxy *
|
||||||
ensure_file_transfer_portal (void)
|
ensure_file_transfer_portal (void)
|
||||||
@ -49,16 +83,29 @@ ensure_file_transfer_portal (void)
|
|||||||
if (file_transfer_proxy == NULL)
|
if (file_transfer_proxy == NULL)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
GCancellable *cancellable;
|
||||||
|
|
||||||
file_transfer_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
|
cancellable = g_cancellable_new ();
|
||||||
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES
|
|
||||||
| G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS
|
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
|
||||||
| G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES
|
||||||
NULL,
|
| G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS
|
||||||
"org.freedesktop.portal.Documents",
|
| G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
"/org/freedesktop/portal/documents",
|
NULL,
|
||||||
"org.freedesktop.portal.FileTransfer",
|
"org.freedesktop.portal.Documents",
|
||||||
NULL, &error);
|
"/org/freedesktop/portal/documents",
|
||||||
|
"org.freedesktop.portal.FileTransfer",
|
||||||
|
cancellable,
|
||||||
|
got_proxy,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
timeout_id = g_timeout_add_full (1000, 0, give_up_on_proxy, cancellable, g_object_unref);
|
||||||
|
|
||||||
|
while (!done)
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
|
||||||
|
if (timeout_id)
|
||||||
|
g_source_remove (timeout_id);
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user