[PATCH] Make nautilus-cd-burner use new NautilusFileInfo API



The attached patch ensures that we use the new NautilusFileInfo API to
determine whether a particular file refers to a CD.

-- 
Christian Neumair <chris gnome-de org>
Index: burn-extension.c
===================================================================
RCS file: /cvs/gnome/nautilus-cd-burner/burn-extension.c,v
retrieving revision 1.18
diff -u -p -r1.18 burn-extension.c
--- burn-extension.c	13 Jun 2005 14:46:27 -0000	1.18
+++ burn-extension.c	6 Oct 2005 18:41:23 -0000
@@ -153,32 +153,6 @@ write_cue_activate_cb (NautilusMenuItem 
 	g_free (image_name);
 }
 
-static int
-desktop_uri_get_drive_id (const char *uri)
-{
-        GnomeVFSResult result;
-        int            file_size;
-	char          *file_contents;
-	GKeyFile      *key_file;	
-	char *         id;
-	int            drive_id = -1;
-
-	key_file = g_key_file_new ();
-	result = eel_read_entire_file (uri, &file_size, &file_contents);
-	g_key_file_load_from_data (key_file, file_contents, file_size, G_KEY_FILE_NONE, NULL);
-
-	id = g_key_file_get_string (key_file, "Desktop Entry", "X-Gnome-Drive", NULL);
-	if (id) {
-                drive_id = atol (id);
-	}
-
-	g_free (id);
-	g_free (file_contents);
-	g_key_file_free (key_file);
-
-	return drive_id;
-}
-
 static void
 copy_disc_activate_cb (NautilusMenuItem *item,
 		       gpointer          user_data)
@@ -216,12 +190,13 @@ nautilus_burn_get_file_items (NautilusMe
 	NautilusMenuItem *item;
 	NautilusFileInfo *file;
 	GnomeVFSFileInfo *info;
+	GnomeVFSVolume   *volume;
+	GnomeVFSDrive    *drive;
+	char             *device_path;
 	char             *mime_type;
 	gboolean          is_local;
 	gboolean          is_iso;
 	gboolean          is_cue;
-	gboolean          is_desktop_file;
-	char             *uri;
 
 	if (!selection || selection->next != NULL) {
 		return NULL;
@@ -249,7 +224,6 @@ nautilus_burn_get_file_items (NautilusMe
 
 	is_iso = (strcmp (mime_type, "application/x-iso-image") == 0)
 		|| (strcmp (mime_type, "application/x-cd-image") == 0);
-	is_desktop_file = strcmp (mime_type, "application/x-desktop") == 0;
 	is_cue          = strcmp (mime_type, "application/x-cue") == 0;
 
 	if (is_iso && is_local) {
@@ -274,43 +248,31 @@ nautilus_burn_get_file_items (NautilusMe
 		items = g_list_append (items, item);
 	}
 
-	uri = nautilus_file_info_get_uri (file);
-	
-	if (is_desktop_file) {
-		int drive_id;
-
-		drive_id = desktop_uri_get_drive_id (uri);
-
-		if (drive_id >= 0) {
-			GnomeVFSVolumeMonitor *monitor;
-			GnomeVFSDrive         *drive;
-			GnomeVFSDeviceType     device_type;
-
-			device_type = GNOME_VFS_DEVICE_TYPE_UNKNOWN;
-
-			monitor = gnome_vfs_get_volume_monitor ();
-			drive = gnome_vfs_volume_monitor_get_drive_by_id (monitor, drive_id);
-			device_type = gnome_vfs_drive_get_device_type (drive);
+	drive = nautilus_file_info_get_drive (file);
+	if (drive == NULL) {
+		volume = nautilus_file_info_get_volume (file);
+		if (volume != NULL) {
+			drive = gnome_vfs_volume_get_drive (volume);
 			gnome_vfs_drive_unref (drive);
-
-			if (device_type == GNOME_VFS_DEVICE_TYPE_CDROM) {
-				char *device_path = gnome_vfs_drive_get_device_path (drive);
-
-				item = nautilus_menu_item_new ("NautilusBurn::copy_disc",
-							       _("_Copy Disc..."),
-							       _("Create a copy of this CD or DVD disc"),
-							       "gnome-dev-cdrom");
-				g_object_set_data (G_OBJECT (item), "file", file);
-				g_object_set_data (G_OBJECT (item), "window", window);
-				g_object_set_data_full (G_OBJECT (item), "drive_device_path", device_path, g_free);
-				g_signal_connect (item, "activate", 
-						  G_CALLBACK (copy_disc_activate_cb), NULL);
-				items = g_list_append (items, item);
-			}
 		}
 	}
 
-	g_free (uri);
+	if (drive != NULL
+	    && (gnome_vfs_drive_get_device_type (drive) == GNOME_VFS_DEVICE_TYPE_CDROM)) {
+		device_path = gnome_vfs_drive_get_device_path (drive);
+
+		item = nautilus_menu_item_new ("NautilusBurn::copy_disc",
+					       _("_Copy Disc..."),
+					       _("Create a copy of this CD or DVD disc"),
+					       "gnome-dev-cdrom");
+		g_object_set_data (G_OBJECT (item), "file", file);
+		g_object_set_data (G_OBJECT (item), "window", window);
+		g_object_set_data_full (G_OBJECT (item), "drive_device_path", device_path, g_free);
+		g_signal_connect (item, "activate", 
+				  G_CALLBACK (copy_disc_activate_cb), NULL);
+		items = g_list_append (items, item);
+	}
+
 	g_free (mime_type);
 
 	return items;

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]