diff --git a/.cvsignore b/.cvsignore index 5ec7c29..5f2ae78 100644 --- a/.cvsignore +++ b/.cvsignore @@ -2,3 +2,4 @@ gnome-volume-manager-0.9.10.tar.gz gnome-volume-manager-1.0.0.tar.gz gnome-volume-manager-1.0.2.tar.gz gnome-volume-manager-1.1.0.tar.gz +gnome-volume-manager-1.1.3.tar.gz diff --git a/gnome-volume-manager-1.1.3-hal-api.patch b/gnome-volume-manager-1.1.3-hal-api.patch new file mode 100644 index 0000000..3a4009a --- /dev/null +++ b/gnome-volume-manager-1.1.3-hal-api.patch @@ -0,0 +1,652 @@ +--- gnome-volume-manager-1.1.3/src/manager.c.hal-api 2005-02-25 14:12:12.000000000 -0500 ++++ gnome-volume-manager-1.1.3/src/manager.c 2005-02-25 14:12:12.000000000 -0500 +@@ -301,6 +301,7 @@ + enum { IMPORT } action = -1; + GtkWidget *askme; + int retval = FALSE; ++ DBusError error; + + dcim_path = g_build_path (G_DIR_SEPARATOR_S, mount_point, "dcim", NULL); + +@@ -311,8 +312,14 @@ + dbg ("Photos detected: %s\n", dcim_path); + + /* add the "content.photos" capability to this device */ +- if (!hal_device_add_capability (hal_ctx, udi, "content.photos")) +- warn ("failed to set content.photos on %s\n", device); ++ dbus_error_init (&error); ++ if (!libhal_device_add_capability (hal_ctx, udi, ++ "content.photos", ++ &error)) { ++ warn ("failed to set content.photos on %s: %s\n", ++ device, error.message); ++ dbus_error_free (&error); ++ } + + if (config.autophoto) { + askme = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_WARNING, +@@ -355,9 +362,9 @@ + int retval = FALSE; + + /* see if it's a camera */ +- if (!hal_device_query_capability(hal_ctx, udi, "camera")) ++ if (!libhal_device_query_capability (hal_ctx, udi, "camera", NULL)) + goto out; +- ++ + retval = TRUE; + dbg ("Camera detected: %s\n", udi); + +@@ -395,17 +402,28 @@ + { + char *device = NULL, *mount_point = NULL; + gboolean autorun_succeeded = FALSE; ++ DBusError error; ++ ++ dbus_error_init (&error); ++ device = libhal_device_get_property_string (hal_ctx, udi, ++ "block.device", ++ &error); + +- device = hal_device_get_property_string (hal_ctx, udi, "block.device"); + if (!device) { +- warn ("cannot get block.device\n"); ++ warn ("cannot get block.device: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); + goto out; + } + +- mount_point = hal_device_get_property_string (hal_ctx, udi, +- "volume.mount_point"); ++ mount_point = libhal_device_get_property_string (hal_ctx, udi, ++ "volume.mount_point", ++ &error); + if (!mount_point) { +- warn ("cannot get volume.mount_point\n"); ++ warn ("cannot get volume.mount_point: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ + goto out; + } + +@@ -458,8 +476,8 @@ + } + + out: +- hal_free_string (device); +- hal_free_string (mount_point); ++ libhal_free_string (device); ++ libhal_free_string (mount_point); + } + + /* +@@ -541,10 +559,17 @@ + { + enum { MOUNT, PLAY } action = -1; + char *device = NULL, *mount_point = NULL; ++ DBusError error; + +- device = hal_device_get_property_string (hal_ctx, udi, "block.device"); ++ dbus_error_init (&error); ++ device = libhal_device_get_property_string (hal_ctx, udi, ++ "block.device", ++ &error); + if (!device) { +- warn ("cannot get block.device\n"); ++ warn ("cannot get block.device: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ + goto out; + } + +@@ -587,8 +612,8 @@ + } + + out: +- hal_free_string (device); +- hal_free_string (mount_point); ++ libhal_free_string (device); ++ libhal_free_string (mount_point); + } + + /* +@@ -608,12 +633,24 @@ + static gboolean + gvm_device_is_writer (const char *udi) + { +- if ((hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.cdr")) || +- (hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.cdrw")) || +- (hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.dvdr")) || +- (hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.dvdram")) || +- (hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.dvdplusr")) || +- (hal_device_get_property_bool (hal_ctx, udi, "storage.cdrom.dvdplusrw"))) ++ if ((libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.cdr", ++ NULL)) || ++ (libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.cdrw", ++ NULL)) || ++ (libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.dvdr", ++ NULL)) || ++ (libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.dvdram", ++ NULL)) || ++ (libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.dvdplusr", ++ NULL)) || ++ (libhal_device_get_property_bool (hal_ctx, udi, ++ "storage.cdrom.dvdplusrw", ++ NULL))) + return TRUE; + + return FALSE; +@@ -631,19 +668,33 @@ + dbus_bool_t has_audio; + dbus_bool_t has_data; + dbus_bool_t is_blank; ++ DBusError error; + +- has_audio = hal_device_get_property_bool (hal_ctx, udi, +- "volume.disc.has_audio"); +- has_data = hal_device_get_property_bool (hal_ctx, udi, +- "volume.disc.has_data"); +- is_blank = hal_device_get_property_bool (hal_ctx, udi, +- "volume.disc.is_blank"); +- drive_udi = hal_device_get_property_string(hal_ctx, udi, +- "info.parent"); +- +- device = hal_device_get_property_string (hal_ctx, udi, "block.device"); ++ dbus_error_init (&error); ++ has_audio = libhal_device_get_property_bool (hal_ctx, udi, ++ "volume.disc.has_audio", ++ NULL); ++ ++ has_data = libhal_device_get_property_bool (hal_ctx, udi, ++ "volume.disc.has_data", ++ NULL); ++ ++ is_blank = libhal_device_get_property_bool (hal_ctx, udi, ++ "volume.disc.is_blank", ++ NULL); ++ ++ drive_udi = libhal_device_get_property_string (hal_ctx, udi, ++ "info.parent", ++ NULL); ++ ++ device = libhal_device_get_property_string (hal_ctx, udi, ++ "block.device", ++ &error); + if (!device) { +- warn ("cannot get block.device\n"); ++ warn ("cannot get block.device: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ + goto out; + } + +@@ -664,8 +715,8 @@ + /** @todo enforce policy for all the new disc types now supported */ + + out: +- hal_free_string (device); +- hal_free_string (drive_udi); ++ libhal_free_string (device); ++ libhal_free_string (drive_udi); + } + + /* +@@ -683,25 +734,34 @@ + const char *device) + { + char *media_type; ++ DBusError error; + + /* Refuse to enforce policy on removable media if drive is locked */ +- if (hal_device_property_exists ( +- hal_ctx, storage_device, "info.locked") && +- hal_device_get_property_bool ( +- hal_ctx, storage_device, "info.locked")) { ++ dbus_error_init (&error); ++ if (libhal_device_property_exists (hal_ctx, storage_device, ++ "info.locked", ++ NULL) && ++ libhal_device_get_property_bool (hal_ctx, storage_device, ++ "info.locked", ++ NULL)) { + dbg ("Drive with udi %s is locked through hal; " + "skipping policy\n", storage_device); + return; +- } ++ } + + /* + * Get HAL's interpretation of our media type. Note that we must check + * the storage device and not this UDI + */ +- media_type = hal_device_get_property_string (hal_ctx, storage_device, +- "storage.drive_type"); ++ ++ media_type = libhal_device_get_property_string (hal_ctx, storage_device, ++ "storage.drive_type", ++ &error); + if (!media_type) { +- warn ("cannot get storage.drive_type\n"); ++ warn ("cannot get storage.drive_type: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ + return; + } + +@@ -716,7 +776,7 @@ + } + } + +- hal_free_string (media_type); ++ libhal_free_string (media_type); + } + + /** Invoked when a device is added to the Global Device List. +@@ -729,33 +789,37 @@ + const char *udi) + { + char *device = NULL, *storage_device = NULL; ++ DBusError error; + + dbg ("New Device: %s\n", udi); + + gvm_check_camera (udi); + +- if (!hal_device_query_capability(hal_ctx, udi, "block")) ++ dbus_error_init (&error); ++ if (!libhal_device_query_capability(hal_ctx, udi, "block", NULL)) + goto out; + + /* is this a mountable volume ? */ +- if (!hal_device_get_property_bool (hal_ctx, udi, +- "block.is_volume")) ++ if (!libhal_device_get_property_bool (hal_ctx, udi, ++ "block.is_volume", ++ NULL)) + goto out; + + /* if it is a volume, it must have a device node */ +- device = hal_device_get_property_string (hal_ctx, udi, +- "block.device"); ++ device = libhal_device_get_property_string (hal_ctx, udi, ++ "block.device", ++ &error); + if (!device) { +- dbg ("cannot get block.device\n"); ++ dbg ("cannot get block.device: %s\n", error.message); + goto out; + } + + /* get the backing storage device */ +- storage_device = hal_device_get_property_string ( +- hal_ctx, udi, +- "block.storage_device"); ++ storage_device = libhal_device_get_property_string (hal_ctx, udi, ++ "block.storage_device", ++ &error); + if (!storage_device) { +- dbg ("cannot get block.storage_device\n"); ++ dbg ("cannot get block.storage_device: %s\n", error.message); + goto out; + } + +@@ -763,13 +827,14 @@ + * Does this device support removable media? Note that we + * check storage_device and not our own UDI + */ +- if (hal_device_get_property_bool (hal_ctx, storage_device, +- "storage.removable")) { ++ 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); + goto out; +- } ++ } + + /* folks, we have a new device! */ + dbg ("Added: %s\n", device); +@@ -780,8 +845,11 @@ + } + + out: +- hal_free_string (device); +- hal_free_string (storage_device); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ ++ libhal_free_string (device); ++ libhal_free_string (storage_device); + } + + /** Invoked when a device is removed from the Global Device List. +@@ -843,7 +911,8 @@ + if (g_strcasecmp (key, "volume.is_mounted") != 0) + return; + +- val = hal_device_get_property_bool (hal_ctx, udi, key); ++ val = libhal_device_get_property_bool (hal_ctx, udi, key, NULL); ++ + if (val == TRUE) { + GSList *policy_udi; + +@@ -898,40 +967,82 @@ + { + } + +-/** Invoked by libhal for integration with our mainloop. ++/** Integrate a dbus mainloop. + * + * @param ctx LibHal context +- * @param dbus_connection D-BUS connection to integrate ++ * @param error pointer to a D-BUS error object ++ * ++ * @return TRUE if we connected to the bus + */ +-static void +-hal_mainloop_integration (LibHalContext *ctx __attribute__((__unused__)), +- DBusConnection * dbus_connection) ++static dbus_bool_t ++hal_mainloop_integration (LibHalContext *ctx, ++ DBusError *error) + { +- dbus_connection_setup_with_g_main (dbus_connection, NULL); ++ DBusConnection *dbus_connection; ++ ++ dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, error); ++ ++ if (dbus_error_is_set (error)) ++ return FALSE; ++ ++ dbus_connection_setup_with_g_main (dbus_connection, NULL); ++ ++ libhal_ctx_set_dbus_connection (ctx, dbus_connection); ++ ++ return TRUE; + } + + /** Internal HAL initialization function + * +- * @functions The LibHalFunctions to register as callbacks. + * @return The LibHalContext of the HAL connection or + * NULL on error. + */ + static LibHalContext * +-gvm_do_hal_init (LibHalFunctions *functions) ++gvm_do_hal_init () + { + LibHalContext *ctx; ++ DBusError error; + char **devices; + int nr; + +- ctx = hal_initialize (functions, FALSE); ++ ctx = libhal_ctx_new (); + if (!ctx) { + warn ("failed to initialize HAL!\n"); + return NULL; + } + +- if (hal_device_property_watch_all (ctx)) { +- warn ("failed to watch all HAL properties!\n"); +- hal_shutdown (ctx); ++ dbus_error_init (&error); ++ if (!hal_mainloop_integration (ctx, ++ &error)) { ++ g_warning ("hal_initialize failed: %s\n", error.message); ++ dbus_error_free (&error); ++ return NULL; ++ } ++ ++ libhal_ctx_set_device_added (ctx, ++ hal_device_added); ++ libhal_ctx_set_device_removed (ctx, ++ hal_device_removed); ++ libhal_ctx_set_device_new_capability (ctx, ++ hal_device_new_capability); ++ libhal_ctx_set_device_lost_capability (ctx, ++ hal_device_lost_capability); ++ libhal_ctx_set_device_property_modified (ctx, ++ hal_property_modified); ++ libhal_ctx_set_device_condition (ctx, ++ hal_device_condition); ++ ++ if (!libhal_device_property_watch_all (ctx, &error)) { ++ warn ("failed to watch all HAL properties!: %s\n", error.message); ++ dbus_error_free (&error); ++ libhal_ctx_free (ctx); ++ return NULL; ++ } ++ ++ if (!libhal_ctx_init (ctx, &error)) { ++ warn ("hal_initialize failed: %s\n", error.message); ++ dbus_error_free (&error); ++ libhal_ctx_free (ctx); + return NULL; + } + +@@ -941,13 +1052,21 @@ + * want to exit silently if hald is not running, to behave on + * pre-2.6 systems. + */ +- devices = hal_get_all_devices (ctx, &nr); ++ devices = libhal_get_all_devices (ctx, &nr, &error); + if (!devices) { +- warn ("seems that HAL is not running\n"); +- hal_shutdown (ctx); ++ warn ("seems that HAL is not running: %s\n", error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ ++ libhal_ctx_shutdown (ctx, &error); ++ ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ ++ libhal_ctx_free (ctx); + return NULL; + } +- hal_free_string_array (devices); ++ libhal_free_string_array (devices); + + return ctx; + } +@@ -963,31 +1082,45 @@ + char **volumes; + char *udi; + char *device_file; ++ DBusError error; + + if (!config.automount_media) + return; + +- volumes = hal_find_device_by_capability (ctx, "volume", &num_volumes); ++ dbus_error_init (&error); ++ volumes = libhal_find_device_by_capability (ctx, "volume", ++ &num_volumes, &error); ++ if (dbus_error_is_set (&error)) { ++ warn ("%s", error.message); ++ dbus_error_free (&error); ++ return; ++ } ++ + for (i = 0; i < num_volumes; i++) { + udi = volumes [i]; + + /* don't attempt to mount already mounted volumes */ +- if (!hal_device_property_exists (ctx, udi, +- "volume.is_mounted") || +- hal_device_get_property_bool (ctx, udi, +- "volume.is_mounted")) ++ if (!libhal_device_property_exists (ctx, udi, ++ "volume.is_mounted", ++ NULL) || ++ libhal_device_get_property_bool (ctx, udi, ++ "volume.is_mounted", ++ NULL)) + continue; + + /* only mount if the block device got a sensible filesystem */ +- if (!hal_device_property_exists (ctx, udi, +- "volume.fsusage") || +- strcmp (hal_device_get_property_string (ctx, udi, +- "volume.fsusage"), +- "filesystem") != 0) ++ if (!libhal_device_property_exists (ctx, udi, ++ "volume.fsusage", ++ NULL) || ++ strcmp (libhal_device_get_property_string (ctx, udi, ++ "volume.fsusage", ++ NULL), ++ "filesystem") != 0) + continue; + +- device_file = hal_device_get_property_string (ctx, udi, +- "block.device"); ++ device_file = libhal_device_get_property_string (ctx, udi, ++ "block.device", ++ &error); + + if (device_file != NULL ) { + +@@ -995,12 +1128,15 @@ + + gvm_device_mount (device_file); + +- hal_free_string (device_file); +- } else +- warn ("no device_file for udi=%s\n", udi); ++ libhal_free_string (device_file); ++ } else { ++ warn ("no device_file for udi=%s: %s\n", udi, error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); ++ } + } + +- hal_free_string_array (volumes); ++ libhal_free_string_array (volumes); + } + + /** Unmount all volumes that were mounted during the lifetime of this +@@ -1014,23 +1150,27 @@ + GSList *i; + char *device_file; + char *udi; ++ DBusError error; + + dbg ("unmounting all volumes that we saw mounted in our life\n"); +- ++ dbus_error_init (&error); + for (i = all_mounted_volumes; i != NULL; i = g_slist_next (i)) { + + udi = i->data; + +- device_file = hal_device_get_property_string (ctx, udi, +- "block.device"); ++ device_file = libhal_device_get_property_string (ctx, udi, ++ "block.device", ++ &error); + if (device_file != NULL ) { + + dbg ("unmount_all: unmounting %s\n", device_file); + + gvm_device_unmount (device_file); +- hal_free_string (device_file); ++ libhal_free_string (device_file); + } else { +- warn ("no device_file for udi=%s\n", udi); ++ warn ("no device_file for udi=%s: %s\n", udi, error.message); ++ if (dbus_error_is_set (&error)) ++ dbus_error_free (&error); + } + } + } +@@ -1091,13 +1231,6 @@ + main (int argc, char *argv[]) + { + GnomeClient *client; +- LibHalFunctions hal_functions = { hal_mainloop_integration, +- hal_device_added, +- hal_device_removed, +- hal_device_new_capability, +- hal_device_lost_capability, +- hal_property_modified, +- hal_device_condition }; + + gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, + argc, argv, GNOME_PARAM_NONE); +@@ -1118,7 +1251,7 @@ + gtk_signal_connect (GTK_OBJECT (client), "die", + GTK_SIGNAL_FUNC (gvm_die), NULL); + +- hal_ctx = gvm_do_hal_init (&hal_functions); ++ hal_ctx = gvm_do_hal_init (); + if (!hal_ctx) + return 1; + +--- gnome-volume-manager-1.1.3/src/properties.c.hal-api 2005-01-23 17:11:02.000000000 -0500 ++++ gnome-volume-manager-1.1.3/src/properties.c 2005-03-07 11:01:26.792806000 -0500 +@@ -329,25 +329,45 @@ + LibHalContext *ctx; + char **devices; + int nr; ++ DBusError error; ++ DBusConnection *conn; + +- ctx = hal_initialize (NULL, FALSE); ++ ctx = libhal_ctx_new (); + if (!ctx) + return FALSE; + ++ dbus_error_init (&error); ++ ++ conn = dbus_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (dbus_error_is_set (&error)) { ++ dbus_error_free (&error); ++ return FALSE; ++ } ++ ++ libhal_ctx_set_dbus_connection (ctx, conn); ++ ++ if(!libhal_ctx_init (ctx, &error)) { ++ dbus_error_free (&error); ++ return FALSE; ++ } ++ + /* + * Do something to ping the HAL daemon - the above functions will + * succeed even if hald is not running, so long as DBUS is. But we + * want to exit silently if hald is not running, to behave on + * pre-2.6 systems. + */ +- devices = hal_get_all_devices (ctx, &nr); ++ devices = libhal_get_all_devices (ctx, &nr, &error); + if (!devices) { +- hal_shutdown (ctx); ++ libhal_ctx_shutdown (ctx, NULL); ++ libhal_ctx_free (ctx); ++ dbus_error_free (&error); + return FALSE; + } +- hal_free_string_array (devices); ++ libhal_free_string_array (devices); + +- hal_shutdown (ctx); ++ libhal_ctx_shutdown (ctx, NULL); ++ libhal_ctx_free (ctx); + return TRUE; + } + diff --git a/gnome-volume-manager.spec b/gnome-volume-manager.spec index ca3a5f8..96823c2 100644 --- a/gnome-volume-manager.spec +++ b/gnome-volume-manager.spec @@ -1,7 +1,7 @@ Summary: The GNOME Volume Manager Name: gnome-volume-manager -Version: 1.1.0 -Release: 5 +Version: 1.1.3 +Release: 3 License: GPL Group: Applications/System Source0: gnome-volume-manager-%{version}.tar.gz @@ -10,14 +10,15 @@ Source2: gthumb-import Source3: gnome-cdda-handler Source4: cdda-url-handler.schemas Patch0: gnome-volume-manager-0.9.10.add-to-base.patch -Patch2: gnome-volume-manager-1.0.2-add-locking.patch Patch3: gnome-volume-manager-1.1.0.addheader.patch Patch4: gnome-volume-manager-1.1.0-rh-defaults.patch -Patch5: gnome-volume-manager-1.1.0-policy-after-explicit-mount-only.patch +#send upstream +Patch6: gnome-volume-manager-1.1.3-hal-api.patch BuildRoot: /var/tmp/%{name}-root -BuildPrereq: libgnomeui-devel, libglade2-devel, hal-devel, dbus-devel >= 0.22 -Requires: gnome-mime-data, hal >= 0.2.97, kernel >= 2.6, control-center >= 2.0 -Requires: dbus >= 0.22 +BuildPrereq: libgnomeui-devel, libglade2-devel, dbus-devel >= 0.31 +BuildPrereq: hal-devel >= 0.5.0 +Requires: gnome-mime-data, hal >= 0.5.0, kernel >= 2.6, control-center >= 2.0 +Requires: dbus >= 0.31 Requires: gthumb Requires: gnome-media Obsoletes: magicdev @@ -40,10 +41,9 @@ applications. %prep %setup -q %patch0 -p1 -b .add-to-base -%patch2 -p0 -b .add-locking %patch3 -p1 -b .addheader %patch4 -p1 -b .rh-defaults -%patch5 -p1 -b .policy-after-explicit-mount-only +%patch6 -p1 -b .hal-api %build %configure make @@ -74,12 +74,27 @@ done %defattr(-,root,root) %doc AUTHORS ChangeLog COPYING INSTALL NEWS README TODO %{_bindir}/* -%{_datadir}/control-center-2.0/capplets/* +%{_datadir}/applications/gnome-volume-properties.desktop %{_datadir}/gnome-volume-manager %{_sysconfdir}/gconf/schemas/*.schemas %{_libexecdir}/gnome-cdda-handler %changelog +* Mon Mar 07 2005 John (J5) Palmieri - 1.1.3-3 +- Fixed up hal-api patch + +* Fri Feb 25 2005 John (J5) Palmieri - 1.1.3-2 +- Reenable BuildPrereq for hal-devel + +* Wed Feb 23 2005 John (J5) Palmieri - 1.1.3-1 +- Update to upstream version +- add patch to update to the new hal-0.5.0 API +- took out locking patch as it was added upstream +- took out policy-after-explicit-mount-only patch as it was added + upstream +- removed %{_datadir}/control-center-2.0/capplets/* glob +- added %{_datadir}/applications/gnome-volume-properties.desktop + * Mon Oct 18 2004 John (J5) Palmieri - 1.1.0-5 - Merged the photo-defaults patch with a new rh-defaults patch - Shut off autorun by default as it is a security concern and we diff --git a/sources b/sources index 6691e4b..00c600b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0332bfc6b172ec22867ba4593d95db78 gnome-volume-manager-1.1.0.tar.gz +4ae805084366207e820057228dc34ceb gnome-volume-manager-1.1.3.tar.gz