SOURCES: gnome-volume-manager-automount_enabled_hint.patch (NEW), ...

freetz freetz at pld-linux.org
Thu Aug 4 20:22:38 CEST 2005


Author: freetz                       Date: Thu Aug  4 18:22:38 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- misc fixes (thx ubuntu dudes)

---- Files affected:
SOURCES:
   gnome-volume-manager-automount_enabled_hint.patch (NONE -> 1.1)  (NEW), gnome-volume-manager-camera_detection.patch (NONE -> 1.1)  (NEW), gnome-volume-manager-fix_nonmountable_media.patch (NONE -> 1.1)  (NEW), gnome-volume-manager-mount_at_start.patch (NONE -> 1.1)  (NEW), gnome-volume-manager-reconnect_on_dbus_exit.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gnome-volume-manager-automount_enabled_hint.patch
diff -u /dev/null SOURCES/gnome-volume-manager-automount_enabled_hint.patch:1.1
--- /dev/null	Thu Aug  4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-automount_enabled_hint.patch	Thu Aug  4 20:22:33 2005
@@ -0,0 +1,47 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c	2005-07-04 16:51:55.233715000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c	2005-07-04 16:52:29.355527760 +0200
+@@ -1134,6 +1134,31 @@
+ 	libhal_free_string (media_type);
+ }
+ 
++/** Return the value of storage.automount_enabled_hint. First check the given
++ * volume's parent (which is the drive), then the volume itself. Default to
++ * true if the property is not set on either node.
++ */
++static gboolean
++gvm_get_automount_enabled_hint (const char* udi)
++{
++    gchar *parent;
++    gboolean ret = TRUE;
++
++    parent = libhal_device_get_property_string(hal_ctx, udi, "info.parent", NULL);
++    if (libhal_device_property_exists (hal_ctx, parent,
++		"storage.automount_enabled_hint", NULL)) {
++	ret = libhal_device_get_property_bool (hal_ctx, parent,
++		    "storage.automount_enabled_hint", NULL);
++    }
++    if (libhal_device_property_exists (hal_ctx, udi,
++		"storage.automount_enabled_hint", NULL)) {
++	ret = libhal_device_get_property_bool (hal_ctx, udi,
++		    "storage.automount_enabled_hint", NULL);
++    }
++    libhal_free_string (parent);
++    return ret;
++}
++
+ /** Invoked when a device is added to the Global Device List. 
+  *
+  *  @param  ctx                 LibHal context
+@@ -1190,7 +1215,10 @@
+ 		
+ #ifndef ASSUME_SUBMOUNT
+ 		if (config.automount_drives && mountable) {
+-			gvm_device_mount (udi, device, NULL);
++			if (gvm_get_automount_enabled_hint (udi))
++			    gvm_device_mount (udi, device, NULL);
++			else
++			    dbg("%s has storage.automount_enabled_hint == false, not mounting\n", udi);
+ 			mounted_volumes_policy_queue = g_slist_append (mounted_volumes_policy_queue, g_strdup (udi));
+ 		}
+ #else

================================================================
Index: SOURCES/gnome-volume-manager-camera_detection.patch
diff -u /dev/null SOURCES/gnome-volume-manager-camera_detection.patch:1.1
--- /dev/null	Thu Aug  4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-camera_detection.patch	Thu Aug  4 20:22:33 2005
@@ -0,0 +1,25 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c	2005-07-29 17:02:13.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c	2005-07-29 17:02:13.000000000 +0200
+@@ -614,15 +614,13 @@
+ static gboolean
+ gvm_udi_is_camera (const char *udi, gboolean check_libgphoto2)
+ {
+-	if (!libhal_device_query_capability (hal_ctx, udi, "camera", NULL))
+-		return FALSE;
+-	
+-	if (check_libgphoto2 && !libhal_device_get_property_bool (hal_ctx, udi, "camera.libgphoto2_support", NULL))
+-		return FALSE;
+-	
+-	dbg ("Camera detected: %s\n", udi);
++	if (libhal_device_query_capability (hal_ctx, udi, "camera", NULL) ||
++            (check_libgphoto2 && libhal_device_get_property_bool (hal_ctx, udi, "camera.libgphoto2_support", NULL))) {
++                dbg ("Camera detected: %s\n", udi);
++                return TRUE;
++        }
+ 	
+-	return TRUE;
++	return FALSE;
+ }
+ 
+ /*

================================================================
Index: SOURCES/gnome-volume-manager-fix_nonmountable_media.patch
diff -u /dev/null SOURCES/gnome-volume-manager-fix_nonmountable_media.patch:1.1
--- /dev/null	Thu Aug  4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-fix_nonmountable_media.patch	Thu Aug  4 20:22:33 2005
@@ -0,0 +1,12 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c	2005-06-30 22:12:29.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c	2005-07-04 17:11:08.779349472 +0200
+@@ -1180,7 +1180,7 @@
+ 		 * Does this device support removable media?  Note that we
+ 		 * check storage_device and not our own UDI
+ 		 */
+-		if (mountable && libhal_device_get_property_bool (hal_ctx, storage_device, "storage.removable", NULL)) {
++		if (libhal_device_get_property_bool (hal_ctx, storage_device, "storage.removable", NULL)) {
+ 			/* we handle media change events separately */
+ 			dbg ("Changed: %s\n", device);
+ 			gvm_media_changed (udi, storage_device, device);

================================================================
Index: SOURCES/gnome-volume-manager-mount_at_start.patch
diff -u /dev/null SOURCES/gnome-volume-manager-mount_at_start.patch:1.1
--- /dev/null	Thu Aug  4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-mount_at_start.patch	Thu Aug  4 20:22:33 2005
@@ -0,0 +1,24 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c	2005-07-04 14:44:53.636373000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c	2005-07-04 14:49:45.811956536 +0200
+@@ -1533,6 +1533,20 @@
+ 			continue;
+ 		}
+ 		libhal_free_string (prop);
++ 
++		/* Check if configured policy disables mounting */
++                gboolean do_mount = TRUE;
++		gchar* drive_udi = libhal_device_get_property_string(ctx, udi, "info.parent", NULL);
++                if (libhal_device_property_exists(ctx, drive_udi, "storage.hotpluggable", NULL) &&
++                                libhal_device_get_property_bool(ctx, drive_udi, "storage.hotpluggable", NULL)) {
++                        do_mount = config.automount_drives;
++                } else if (
++                        libhal_device_property_exists(ctx, drive_udi, "storage.removable", NULL) &&
++                        libhal_device_get_property_bool(ctx, drive_udi, "storage.removable", NULL)) {
++                        do_mount = config.automount_media;
++                }
++                libhal_free_string(drive_udi);
++                if (!do_mount) continue;
+ 		
+ 		/* mount the device */
+ 		if (!(dev = libhal_device_get_property_string (ctx, udi, "block.device", &error))) {

================================================================
Index: SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch
diff -u /dev/null SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch:1.1
--- /dev/null	Thu Aug  4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch	Thu Aug  4 20:22:33 2005
@@ -0,0 +1,116 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c	2005-06-30 22:12:29.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c	2005-07-04 14:43:15.822243984 +0200
+@@ -48,7 +48,8 @@
+ #define NAUTILUS_COMMAND	 BIN_NAUTILUS" -n --no-desktop %m"
+ 
+ static struct gvm_configuration config;
+-static LibHalContext *hal_ctx;
++static LibHalContext *hal_ctx = NULL;
++static DBusConnection *dbus_connection = NULL;
+ 
+ #ifndef ASSUME_SUBMOUNT
+ /** List of UDI's for volumes mounted by g-v-m that we need to apply policy to*/
+@@ -1332,6 +1333,73 @@
+ {
+ }
+ 
++static LibHalContext * gvm_do_hal_init ();
++
++/** Invoked by gvm_do_filter_dbus_msg in response to a D-BUS disconnect event.
++ *
++ * @param  data                 Context pointer
++ * @return true if it should be tried again, false if success or failure.
++ */
++static gboolean
++gvm_reconnect_to_hal (gpointer data __attribute__((__unused__)))
++{
++       static unsigned int retries = 0;
++       DBusError error;
++
++       dbg ("Trying a reconnect ...\n");
++       hal_ctx = gvm_do_hal_init ();
++       if (hal_ctx != NULL) {
++               dbg ("Reconnected OK.\n");
++               retries = 0;
++               return FALSE;
++       } else if (dbus_connection){
++               /* shut down dbus connection to try it again */
++               dbus_connection_unref (dbus_connection);
++               dbus_connection = NULL;
++       }
++
++       /* Retry later if it failed. */
++       if (retries++ < 100)
++               return TRUE;
++
++       /* Too many retries; clean up and bail. */
++       warn("gvm_reconnect_to_hal: no reconnection after 100 retries, exiting\n");
++       libhal_ctx_shutdown (hal_ctx, &error);
++       libhal_ctx_free (hal_ctx);
++       hal_ctx = NULL;
++       gtk_main_quit ();
++       return FALSE;
++}
++
++/** Invoked by D-BUS to filter messages.
++ *
++ * @param  connection  D-BUS connection
++ * @param  message     D-BUS message
++ * @param  user_data   Context pointer
++ */
++static DBusHandlerResult
++gvm_do_filter_dbus_msg (DBusConnection *connection __attribute__((__unused__)),
++                        DBusMessage *message,
++                        void *user_data __attribute__((__unused__)))
++{
++       DBusError error;
++       
++       if (dbus_message_is_signal (message,
++                                   DBUS_INTERFACE_LOCAL,
++                                   "Disconnected")) {
++               dbg("gvm_do_filter_dbus_msg: received Disconnected message\n");
++               g_timeout_add(500, gvm_reconnect_to_hal, NULL);
++               libhal_ctx_shutdown (hal_ctx, &error);
++               libhal_ctx_free (hal_ctx);
++               hal_ctx = NULL;
++               dbus_connection_unref (dbus_connection);
++               dbus_connection = NULL;
++               return DBUS_HANDLER_RESULT_HANDLED;
++       }
++       else
++               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
++}
++
+ /** Integrate a dbus mainloop. 
+  *
+  *  @param  ctx                 LibHal context
+@@ -1342,14 +1410,15 @@
+ static dbus_bool_t 
+ hal_mainloop_integration (LibHalContext *ctx, DBusError *error)
+ {
+-	DBusConnection *dbus_connection;
+-
+ 	dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, error);
+ 
+ 	if (dbus_error_is_set (error))
+ 		return FALSE;
++
++        dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+ 	
+         dbus_connection_setup_with_g_main (dbus_connection, NULL);
++        dbus_connection_add_filter (dbus_connection, gvm_do_filter_dbus_msg, NULL, NULL);
+ 
+ 	libhal_ctx_set_dbus_connection (ctx, dbus_connection);
+ 	
+@@ -1492,6 +1561,10 @@
+ 	DBusError error;
+ 	GSList *l;
+ 	
++        if (ctx == NULL) {
++            warn("unmount_all: No hal connection! can't unmount volumes\n");
++            return;
++        }
+ 	dbg ("unmounting all volumes that we saw mounted in our life\n");
+ 	dbus_error_init (&error);
+ 	for (l = all_mounted_volumes; l != NULL; l = g_slist_next (l)) {
================================================================



More information about the pld-cvs-commit mailing list