[gvfs] GProxyVolume: extend the protocol so the volume monitor can force a call to Mount
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs] GProxyVolume: extend the protocol so the volume monitor can force a call to Mount
- Date: Thu, 13 Jun 2013 19:06:30 +0000 (UTC)
commit 97a4246ba7f620ee348711b21cba8a1b67e8a056
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Sun Jun 2 20:08:17 2013 +0200
GProxyVolume: extend the protocol so the volume monitor can force a call to Mount
Some volume monitors, like gnome-online-accounts, want their
mount implementation to be called even though the volume has an
activation root. Allow them to advertise so using the expansion
fields of the volume DBus representation.
https://bugzilla.gnome.org/show_bug.cgi?id=696279
monitor/proxy/gproxyvolume.c | 20 ++++++++++++++------
monitor/proxy/gvfsproxyvolumemonitordaemon.c | 13 ++++++++++++-
monitor/proxy/gvfsproxyvolumemonitordaemon.h | 2 ++
3 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/monitor/proxy/gproxyvolume.c b/monitor/proxy/gproxyvolume.c
index a3d41a1..f0cfa11 100644
--- a/monitor/proxy/gproxyvolume.c
+++ b/monitor/proxy/gproxyvolume.c
@@ -62,6 +62,7 @@ struct _GProxyVolume {
gboolean can_mount;
gboolean should_automount;
+ gboolean always_call_mount;
GProxyShadowMount *shadow_mount;
@@ -356,7 +357,7 @@ update_shadow_mount_in_idle (GProxyVolume *volume)
* a{sv} expansion
*/
-#define VOLUME_STRUCT_TYPE "(&s&s&s&s&s&sbb&s&sa{ss}&sa{sv})"
+#define VOLUME_STRUCT_TYPE "(&s&s&s&s&s&sbb&s&sa{ss}&s a{sv})"
void g_proxy_volume_update (GProxyVolume *volume,
GVariant *iter)
@@ -374,7 +375,7 @@ void g_proxy_volume_update (GProxyVolume *volume,
GHashTable *identifiers;
const gchar *sort_key;
GVariantIter *iter_identifiers;
- GVariantIter *iter_expansion;
+ GVariant *expansion;
sort_key = NULL;
g_variant_get (iter, VOLUME_STRUCT_TYPE,
@@ -385,7 +386,7 @@ void g_proxy_volume_update (GProxyVolume *volume,
&drive_id, &mount_id,
&iter_identifiers,
&sort_key,
- &iter_expansion);
+ &expansion);
identifiers = _get_identifiers (iter_identifiers);
@@ -439,14 +440,20 @@ void g_proxy_volume_update (GProxyVolume *volume,
volume->identifiers = identifiers != NULL ? g_hash_table_ref (identifiers) : NULL;
volume->sort_key = g_strdup (sort_key);
- /* TODO: decode expansion, once used */
+ if (volume->activation_uri)
+ {
+ if (!g_variant_lookup (expansion, "always-call-mount", "b", &volume->always_call_mount))
+ volume->always_call_mount = FALSE;
+ }
+ else
+ volume->always_call_mount = FALSE;
/* this calls into the union monitor; do it in idle to avoid locking issues */
update_shadow_mount_in_idle (volume);
out:
g_variant_iter_free (iter_identifiers);
- g_variant_iter_free (iter_expansion);
+ g_variant_unref (expansion);
g_hash_table_unref (identifiers);
}
@@ -876,7 +883,8 @@ g_proxy_volume_mount (GVolume *volume,
GProxyVolume *proxy_volume = G_PROXY_VOLUME (volume);
G_LOCK (proxy_volume);
- if (proxy_volume->activation_uri != NULL)
+ if (proxy_volume->activation_uri != NULL &&
+ !proxy_volume->always_call_mount)
{
ForeignMountOp *data;
GFile *root;
diff --git a/monitor/proxy/gvfsproxyvolumemonitordaemon.c b/monitor/proxy/gvfsproxyvolumemonitordaemon.c
index 8e65d9f..0201cf2 100644
--- a/monitor/proxy/gvfsproxyvolumemonitordaemon.c
+++ b/monitor/proxy/gvfsproxyvolumemonitordaemon.c
@@ -41,6 +41,7 @@ static const char *the_dbus_name = NULL;
static GList *outstanding_ops = NULL;
static GList *outstanding_mount_op_objects = NULL;
static GHashTable *unique_names_being_watched = NULL;
+static gboolean always_call_mount = FALSE;
static GVfsRemoteVolumeMonitor *monitor_daemon = NULL;
@@ -760,8 +761,12 @@ volume_to_dbus (GVolume *volume)
g_free (id_value);
}
- expansion_builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT);
/* left for future expansion without ABI breaks */
+ expansion_builder = g_variant_builder_new (G_VARIANT_TYPE_VARDICT);
+
+ if (always_call_mount)
+ g_variant_builder_add (expansion_builder, "{sv}",
+ "always-call-mount", g_variant_new_boolean (TRUE));
result = g_variant_new (VOLUME_STRUCT_TYPE,
id,
@@ -2012,3 +2017,9 @@ g_vfs_proxy_volume_monitor_daemon_main (int argc,
return 0;
}
+
+void
+g_vfs_proxy_volume_monitor_daemon_set_always_call_mount (gboolean value)
+{
+ always_call_mount = value;
+}
diff --git a/monitor/proxy/gvfsproxyvolumemonitordaemon.h b/monitor/proxy/gvfsproxyvolumemonitordaemon.h
index 3aed153..77895dd 100644
--- a/monitor/proxy/gvfsproxyvolumemonitordaemon.h
+++ b/monitor/proxy/gvfsproxyvolumemonitordaemon.h
@@ -32,4 +32,6 @@ int g_vfs_proxy_volume_monitor_daemon_main (int argc,
const char *dbus_name,
GType volume_monitor_type);
+void g_vfs_proxy_volume_monitor_daemon_set_always_call_mount (gboolean always_call_mount);
+
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]