brasero r655 - in trunk: . po src src/plugins/cdrdao src/plugins/cdrkit src/plugins/cdrtools src/plugins/checksum src/plugins/dvdcss src/plugins/growisofs src/plugins/transcode



Author: philippr
Date: Fri Feb 29 14:04:05 2008
New Revision: 655
URL: http://svn.gnome.org/viewvc/brasero?rev=655&view=rev

Log:
2008-02-29  Philippe Rouquier  <philippr svn gnome org>

	Second patch toward ncb removal.
	Also, some small bug and memleaks fixed

	* src/Makefile.am:
	* src/brasero-blank-dialog.c: (brasero_blank_dialog_drive_changed),
	(brasero_blank_dialog_activate), (brasero_blank_dialog_init):
	* src/brasero-burn-dialog.c:
	(brasero_burn_dialog_wait_for_insertion),
	(brasero_burn_dialog_insert_disc_cb), (brasero_burn_dialog_init),
	(brasero_burn_dialog_notify_success), (brasero_burn_dialog_run):
	* src/brasero-data-disc.c: (brasero_data_disc_set_drive):
	* src/brasero-data-session.c: (brasero_data_session_add_last),
	(brasero_data_session_set_drive), (brasero_data_session_finalize):
	* src/brasero-data-session.h:
	* src/brasero-data-tree-model.c:
	(brasero_data_tree_model_get_value):
	* src/brasero-dest-selection.c:
	(brasero_dest_selection_check_same_src_dest),
	(brasero_dest_selection_drive_properties),
	(brasero_dest_selection_properties_button_cb),
	(brasero_dest_selection_set_drive_properties),
	(brasero_dest_selection_check_drive_settings),
	(brasero_dest_selection_caps_changed),
	(brasero_dest_selection_output_changed),
	(brasero_dest_selection_drive_changed),
	(brasero_dest_selection_init),
	(brasero_dest_selection_set_property):
	* src/brasero-disc-copy-dialog.c: (brasero_disc_copy_dialog_init):
	* src/brasero-disc-option-dialog.c:
	(brasero_disc_option_dialog_get_default_label),
	(brasero_disc_option_dialog_init):
	* src/brasero-disc-option-dialog.h:
	* src/brasero-disc.c: (brasero_disc_set_current_drive):
	* src/brasero-disc.h:
	* src/brasero-drive-info.c: (brasero_drive_info_update_info),
	(brasero_drive_info_set_same_src_dest),
	(brasero_drive_info_set_medium), (brasero_drive_info_init),
	(brasero_drive_info_finalize):
	* src/brasero-drive-info.h:
	* src/brasero-drive-properties.c:
	(brasero_drive_properties_set_tmpdir),
	(brasero_drive_properties_set_drive):
	* src/brasero-drive-properties.h:
	* src/brasero-drive-selection.c:
	(brasero_drive_selection_drive_changed_cb),
	(brasero_drive_selection_set_drive),
	(brasero_drive_selection_get_medium),
	(brasero_drive_selection_get_drive),
	(brasero_drive_selection_lock), (brasero_drive_selection_init),
	(brasero_drive_selection_finalize),
	(brasero_drive_selection_class_init):
	* src/brasero-drive-selection.h:
	* src/brasero-eject-dialog.c: (brasero_eject_dialog_drive_changed),
	(_eject_async), (brasero_eject_dialog_activate):
	* src/brasero-image-option-dialog.c:
	(brasero_image_option_dialog_set_formats),
	(brasero_image_option_dialog_init):
	* src/brasero-medium-selection.c:
	(brasero_medium_selection_show_type),
	(brasero_medium_selection_medium_added_cb),
	(brasero_medium_selection_init):
	* src/brasero-ncb.c:
	* src/brasero-ncb.h:
	* src/brasero-project-manager.c: (brasero_project_manager_burn),
	(brasero_project_manager_burn_disc):
	* src/brasero-project-size.c:
	(brasero_project_size_add_default_medias),
	(brasero_project_size_finalize),
	(brasero_project_size_get_ruler_min_width),
	(brasero_project_size_get_media_string),
	(brasero_project_size_expose),
	(brasero_project_size_disc_changed_cb),
	(brasero_project_size_build_menu),
	(brasero_project_size_scroll_event),
	(brasero_project_size_find_proper_drive),
	(brasero_project_size_set_context),
	(brasero_project_size_check_status),
	(brasero_project_size_disc_added_cb),
	(brasero_project_size_disc_removed_cb),
	(brasero_project_size_add_real_medias),
	(brasero_project_size_get_active_medium):
	* src/brasero-project-size.h:
	* src/brasero-project.c: (brasero_project_disc_changed_cb),
	(brasero_project_burn):
	* src/brasero-src-selection.c:
	(brasero_src_selection_drive_changed),
	(brasero_src_selection_init), (brasero_src_selection_set_property):
	* src/brasero-sum-dialog.c: (brasero_sum_dialog_get_disc_checksum),
	(brasero_sum_dialog_check_md5_file),
	(brasero_sum_dialog_check_disc_sum), (brasero_sum_dialog_activate):
	* src/brasero-tool-dialog.c: (brasero_tool_dialog_run),
	(brasero_tool_dialog_get_medium),
	(brasero_tool_dialog_drive_changed_cb):
	* src/brasero-tool-dialog.h:
	* src/brasero-utils.c:
	* src/burn-basics.c: (brasero_burn_library_init):
	* src/burn-caps.c:
	* src/burn-caps.h:
	* src/burn-drive.c: (brasero_drive_eject), (free_command_data),
	(command_done), (command_timeout), (try_hidden_locations),
	(create_command), (command_thread_start), (launch_command),
	(brasero_drive_mount), (brasero_drive_unmount),
	(brasero_drive_unmount_wait), (brasero_drive_get_gdrive),
	(brasero_drive_get_mount_point), (brasero_drive_is_mounted),
	(brasero_drive_is_door_open), (brasero_drive_lock),
	(brasero_drive_unlock), (brasero_drive_get_display_name),
	(brasero_drive_get_volume_label), (brasero_drive_get_device),
	(brasero_drive_get_medium), (brasero_drive_get_nautilus_drive),
	(brasero_drive_set_medium), (brasero_drive_can_write),
	(brasero_drive_can_rewrite), (brasero_drive_is_fake),
	(brasero_drive_init), (brasero_drive_finalize),
	(brasero_drive_set_property), (brasero_drive_get_property),
	(brasero_drive_class_init), (brasero_drive_new):
	* src/burn-drive.h:
	* src/burn-job.c: (brasero_job_check_output_disc_space),
	(brasero_job_check_output_volume_space), (brasero_job_get_device),
	(brasero_job_get_last_session_address),
	(brasero_job_get_next_writable_address),
	(brasero_job_get_max_rate), (brasero_job_get_max_speed):
	* src/burn-medium-monitor.c: (brasero_medium_monitor_get_media),
	(brasero_medium_monitor_inserted_cb),
	(brasero_medium_monitor_removed_cb),
	(brasero_burn_medium_monitor_add_file),
	(brasero_medium_monitor_init), (brasero_medium_monitor_finalize):
	* src/burn-medium-monitor.h:
	* src/burn-medium.c: (brasero_medium_get_status),
	(brasero_medium_init_real), (brasero_medium_retry_open),
	(brasero_medium_try_open), (brasero_medium_finalize),
	(brasero_medium_set_property), (brasero_medium_get_property),
	(brasero_medium_class_init), (brasero_medium_can_be_written),
	(brasero_medium_can_be_rewritten), (brasero_medium_get_label),
	(brasero_medium_new):
	* src/burn-medium.h:
	* src/burn-session.c: (brasero_session_settings_clean),
	(brasero_session_settings_copy),
	(brasero_burn_session_src_media_added),
	(brasero_burn_session_src_media_removed),
	(brasero_burn_session_start_src_drive_monitoring),
	(brasero_burn_session_stop_src_drive_monitoring),
	(brasero_burn_session_dest_media_added),
	(brasero_burn_session_dest_media_removed),
	(brasero_burn_session_set_burner), (brasero_burn_session_get_rate),
	(brasero_burn_session_set_image_output_full),
	(brasero_burn_session_pop_settings),
	(brasero_burn_session_get_dest_media),
	(brasero_burn_session_get_src_medium),
	(brasero_burn_session_same_src_dest_drive),
	(brasero_burn_session_start),
	(brasero_burn_session_get_config_key):
	* src/burn-session.h:
	* src/burn-track.c: (brasero_track_clean),
	(brasero_track_get_type), (brasero_track_disc_copy),
	(brasero_track_set_drive_source),
	(brasero_track_get_medium_source),
	(brasero_track_get_disc_capacity),
	(brasero_track_get_disc_data_size),
	(brasero_track_get_disc_free_space):
	* src/burn-track.h:
	* src/burn.c: (_eject_async), (brasero_burn_eject_async),
	(brasero_burn_eject_dest_media), (brasero_burn_eject_src_media),
	(brasero_burn_ask_for_media), (brasero_burn_ask_for_src_media),
	(brasero_burn_ask_for_dest_media), (brasero_burn_lock_src_media),
	(brasero_burn_lock_rewritable_media),
	(brasero_burn_lock_dest_media), (brasero_burn_mount_media),
	(brasero_burn_lock_checksum_media),
	(brasero_burn_unlock_src_media), (brasero_burn_unlock_dest_media),
	(brasero_burn_run_eraser), (brasero_burn_run_imager),
	(brasero_burn_run_recorder), (brasero_burn_check_real),
	(brasero_burn_check_session_consistency),
	(brasero_burn_record_session):
	* src/burn.h:
	* src/main.c: (main):
	* src/plugins/cdrdao/burn-cdrdao.c:
	(brasero_cdrdao_set_argv_record), (brasero_cdrdao_set_argv_image):
	* src/plugins/cdrkit/burn-readom.c:
	(brasero_readom_argv_set_iso_boundary), (brasero_readom_get_size),
	(brasero_readom_set_argv):
	* src/plugins/cdrkit/burn-wodim.c:
	* src/plugins/cdrtools/burn-cdrecord.c:
	* src/plugins/cdrtools/burn-mkisofs.c:
	* src/plugins/cdrtools/burn-readcd.c:
	(brasero_readcd_argv_set_iso_boundary), (brasero_readcd_get_size),
	(brasero_readcd_set_argv):
	* src/plugins/checksum/burn-md5sum-file.c:
	(brasero_md5sum_file_disc_files):
	* src/plugins/checksum/burn-md5sum.c: (brasero_md5sum_image):
	* src/plugins/dvdcss/burn-dvdcss.c:
	(brasero_dvdcss_write_image_thread):
	* src/plugins/growisofs/burn-dvd-rw-format.c:
	* src/plugins/growisofs/burn-growisofs.c:
	* src/plugins/transcode/burn-transcode.c:

Added:
   trunk/src/burn-drive.c
   trunk/src/burn-drive.h
Removed:
   trunk/src/brasero-ncb.c
   trunk/src/brasero-ncb.h
Modified:
   trunk/ChangeLog
   trunk/po/ChangeLog
   trunk/po/POTFILES.in
   trunk/src/Makefile.am
   trunk/src/brasero-blank-dialog.c
   trunk/src/brasero-burn-dialog.c
   trunk/src/brasero-data-disc.c
   trunk/src/brasero-data-session.c
   trunk/src/brasero-data-session.h
   trunk/src/brasero-data-tree-model.c
   trunk/src/brasero-dest-selection.c
   trunk/src/brasero-disc-copy-dialog.c
   trunk/src/brasero-disc-option-dialog.c
   trunk/src/brasero-disc-option-dialog.h
   trunk/src/brasero-disc.c
   trunk/src/brasero-disc.h
   trunk/src/brasero-drive-info.c
   trunk/src/brasero-drive-info.h
   trunk/src/brasero-drive-properties.c
   trunk/src/brasero-drive-properties.h
   trunk/src/brasero-drive-selection.c
   trunk/src/brasero-drive-selection.h
   trunk/src/brasero-eject-dialog.c
   trunk/src/brasero-image-option-dialog.c
   trunk/src/brasero-medium-selection.c
   trunk/src/brasero-project-manager.c
   trunk/src/brasero-project-size.c
   trunk/src/brasero-project-size.h
   trunk/src/brasero-project.c
   trunk/src/brasero-src-selection.c
   trunk/src/brasero-sum-dialog.c
   trunk/src/brasero-tool-dialog.c
   trunk/src/brasero-tool-dialog.h
   trunk/src/brasero-utils.c
   trunk/src/burn-basics.c
   trunk/src/burn-caps.c
   trunk/src/burn-caps.h
   trunk/src/burn-job.c
   trunk/src/burn-medium-monitor.c
   trunk/src/burn-medium-monitor.h
   trunk/src/burn-medium.c
   trunk/src/burn-medium.h
   trunk/src/burn-session.c
   trunk/src/burn-session.h
   trunk/src/burn-track.c
   trunk/src/burn-track.h
   trunk/src/burn.c
   trunk/src/burn.h
   trunk/src/main.c
   trunk/src/plugins/cdrdao/burn-cdrdao.c
   trunk/src/plugins/cdrkit/burn-readom.c
   trunk/src/plugins/cdrkit/burn-wodim.c
   trunk/src/plugins/cdrtools/burn-cdrecord.c
   trunk/src/plugins/cdrtools/burn-mkisofs.c
   trunk/src/plugins/cdrtools/burn-readcd.c
   trunk/src/plugins/checksum/burn-md5sum-file.c
   trunk/src/plugins/checksum/burn-md5sum.c
   trunk/src/plugins/dvdcss/burn-dvdcss.c
   trunk/src/plugins/growisofs/burn-dvd-rw-format.c
   trunk/src/plugins/growisofs/burn-growisofs.c
   trunk/src/plugins/transcode/burn-transcode.c

Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in	(original)
+++ trunk/po/POTFILES.in	Fri Feb 29 14:04:05 2008
@@ -30,7 +30,6 @@
 src/brasero-image-properties.c
 src/brasero-image-type-chooser.c
 src/brasero-layout.c
-src/brasero-ncb.c
 src/brasero-player.c
 src/brasero-project.c
 src/brasero-project-manager.c
@@ -97,3 +96,5 @@
 src/brasero-io.c
 src/brasero-medium-selection.c
 src/brasero-medium-selection.c
+src/burn-drive.c
+src/burn-drive.c

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Fri Feb 29 14:04:05 2008
@@ -102,8 +102,6 @@
 	brasero-sum-dialog.h         \
 	brasero-tool-dialog.c         \
 	brasero-tool-dialog.h         \
-	brasero-ncb.h         \
-	brasero-ncb.c         \
 	burn-task.c         \
 	burn-task.h         \
 	brasero-async-task-manager.c         \
@@ -235,7 +233,9 @@
 	brasero-medium-selection.h         \
 	brasero-medium-selection.c         \
 	burn-medium-monitor.c         \
-	burn-medium-monitor.h 
+	burn-medium-monitor.h         \
+	burn-drive.h         \
+	burn-drive.c 
 
 if BUILD_INOTIFY
 brasero_SOURCES += brasero-file-monitor.c brasero-file-monitor.h

Modified: trunk/src/brasero-blank-dialog.c
==============================================================================
--- trunk/src/brasero-blank-dialog.c	(original)
+++ trunk/src/brasero-blank-dialog.c	Fri Feb 29 14:04:05 2008
@@ -42,8 +42,6 @@
 #include <gtk/gtkmessagedialog.h>
 #include <gtk/gtkcheckbutton.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-session.h"
 #include "burn.h"
@@ -172,17 +170,20 @@
 
 static void
 brasero_blank_dialog_drive_changed (BraseroToolDialog *dialog,
-				    NautilusBurnDrive *drive)
+				    BraseroMedium *medium)
 {
 	BraseroBlankDialogPrivate *priv;
+	BraseroDrive *drive;
 
 	priv = BRASERO_BLANK_DIALOG_PRIVATE (dialog);
+
+	drive = brasero_medium_get_drive (medium);
 	brasero_burn_session_set_burner (priv->session, drive);
 }
 
 static gboolean
 brasero_blank_dialog_activate (BraseroToolDialog *dialog,
-			       NautilusBurnDrive *drive)
+			       BraseroMedium *medium)
 {
 	BraseroBlankDialogPrivate *priv;
 	BraseroBlankDialog *self;
@@ -348,7 +349,8 @@
 {
 	BraseroBlankDialogPrivate *priv;
 	BraseroPluginManager *manager;
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	priv = BRASERO_BLANK_DIALOG_PRIVATE (obj);
 
@@ -357,14 +359,15 @@
 					NULL,
 					"media-optical-blank");
 
-	drive = brasero_tool_dialog_get_drive (BRASERO_TOOL_DIALOG (obj));
+	medium = brasero_tool_dialog_get_medium (BRASERO_TOOL_DIALOG (obj));
+	drive = brasero_medium_get_drive (medium);
 
 	priv->session = brasero_burn_session_new ();
 	brasero_burn_session_set_flags (priv->session,
 				        BRASERO_BURN_FLAG_EJECT|
 				        BRASERO_BURN_FLAG_NOGRACE);
 	brasero_burn_session_set_burner (priv->session, drive);
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (drive);
 
 	priv->output_sig = g_signal_connect (priv->session,
 					     "output-changed",

Modified: trunk/src/brasero-burn-dialog.c
==============================================================================
--- trunk/src/brasero-burn-dialog.c	(original)
+++ trunk/src/brasero-burn-dialog.c	Fri Feb 29 14:04:05 2008
@@ -45,9 +45,6 @@
 #include <gtk/gtkstock.h>
 #include <gtk/gtklabel.h>
 
-#include <nautilus-burn-drive-monitor.h>
-#include <nautilus-burn-drive.h>
-
 #include "brasero-utils.h"
 #include "brasero-disc.h"
 #include "brasero-tray.h"
@@ -57,7 +54,7 @@
 #include "burn-medium.h"
 #include "brasero-drive-selection.h"
 #include "brasero-progress.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 static void brasero_burn_dialog_class_init (BraseroBurnDialogClass *klass);
 static void brasero_burn_dialog_init (BraseroBurnDialog *obj);
@@ -421,7 +418,8 @@
 }
 
 static void
-brasero_burn_dialog_wait_for_insertion (NautilusBurnDrive *drive,
+brasero_burn_dialog_wait_for_insertion (BraseroDrive *drive,
+					BraseroMedium *medium,
 					GtkDialog *message)
 {
 	/* we might have a dialog waiting for the 
@@ -431,7 +429,7 @@
 
 static BraseroBurnResult
 brasero_burn_dialog_insert_disc_cb (BraseroBurn *burn,
-				    NautilusBurnDrive *drive,
+				    BraseroDrive *drive,
 				    BraseroBurnError error,
 				    BraseroMedia type,
 				    BraseroBurnDialog *dialog)
@@ -441,6 +439,7 @@
 	gchar *drive_name;
 	GtkWindow *window;
 	GtkWidget *message;
+	BraseroMedium *medium;
 	gboolean hide = FALSE;
 	gchar *main_message = NULL, *secondary_message = NULL;
 
@@ -450,7 +449,7 @@
 	}
 
 	if (drive)
-		drive_name = nautilus_burn_drive_get_name_for_display (drive);
+		drive_name = brasero_drive_get_display_name (drive);
 	else
 		drive_name = NULL;
 
@@ -556,7 +555,7 @@
 
 	/* connect to signals to be warned when media is inserted */
 	added_id = g_signal_connect_after (drive,
-					   "media-added",
+					   "medium-added",
 					   G_CALLBACK (brasero_burn_dialog_wait_for_insertion),
 					   message);
 
@@ -566,20 +565,22 @@
 	gtk_widget_destroy (message);
 
 	/* see if we should update the infos */
+	medium = brasero_burn_session_get_src_medium (dialog->priv->session);
 	if (dialog->priv->input.type == BRASERO_TRACK_TYPE_DISC) {
-		NautilusBurnDrive *src;
+		BraseroMedium *medium;
+		BraseroDrive *src;
 
 		/* see if the drive is the source */
 		src = brasero_burn_session_get_src_drive (dialog->priv->session);
-		if (nautilus_burn_drive_equal (src, drive))
+		if (drive == src)
 			brasero_burn_dialog_update_info (dialog,
 							 dialog->priv->input.type, 
-							 NCB_MEDIA_GET_STATUS (drive));
+							 brasero_medium_get_status (medium));
 	}
 	else
 		brasero_burn_dialog_update_info (dialog,
 						 dialog->priv->input.type, 
-						 NCB_MEDIA_GET_STATUS (drive));
+						 brasero_medium_get_status (medium));
 
 	if (hide)
 		gtk_widget_hide (GTK_WIDGET (dialog));
@@ -1063,6 +1064,7 @@
 			  obj);
 
 	alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
+	gtk_widget_show (alignment);
 	gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 8, 6, 6);
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (obj)->vbox),
 			    alignment,
@@ -1071,20 +1073,25 @@
 			    0);
 
 	vbox = gtk_vbox_new (FALSE, 0);
+	gtk_widget_show (vbox);
 	gtk_container_add (GTK_CONTAINER (alignment), vbox);
 
 	box = gtk_hbox_new (FALSE, 0);
+	gtk_widget_show (box);
 	gtk_box_pack_start (GTK_BOX (vbox), box, TRUE, TRUE, 0);
 
 	obj->priv->header = gtk_label_new (NULL);
+	gtk_widget_show (obj->priv->header);
 	gtk_misc_set_alignment (GTK_MISC (obj->priv->header), 0.0, 0.5);
 	gtk_misc_set_padding (GTK_MISC (obj->priv->header), 0, 18);
 	gtk_box_pack_start (GTK_BOX (box), obj->priv->header, TRUE, TRUE, 0);
 
 	obj->priv->image = gtk_image_new ();
+	gtk_widget_show (obj->priv->image);
 	gtk_box_pack_start (GTK_BOX (box), obj->priv->image, FALSE, FALSE, 0);
 
 	obj->priv->progress = brasero_burn_progress_new ();
+	gtk_widget_show (obj->priv->progress);
 	gtk_box_pack_start (GTK_BOX (vbox),
 			    obj->priv->progress,
 			    FALSE,
@@ -1092,6 +1099,7 @@
 			    0);
 
 	obj->priv->close_check = gtk_check_button_new_with_mnemonic (_("_Close the application if the burn process is successful"));
+	gtk_widget_show (obj->priv->close_check);
 	gtk_box_pack_end (GTK_BOX (obj->priv->progress),
 			  obj->priv->close_check,
 			  FALSE,
@@ -1100,6 +1108,7 @@
 
 	/* buttons */
 	obj->priv->cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+	gtk_widget_show (obj->priv->cancel);
 	gtk_dialog_add_action_widget (GTK_DIALOG (obj),
 				      obj->priv->cancel,
 				      GTK_RESPONSE_CANCEL);
@@ -1595,9 +1604,9 @@
 brasero_burn_dialog_notify_success (BraseroBurnDialog *dialog)
 {
 	BraseroMedia media;
+	BraseroDrive *drive;
 	gchar *primary = NULL;
 	gchar *secondary = NULL;
-	NautilusBurnDrive *drive;
 
 	drive = brasero_burn_session_get_burner (dialog->priv->session);
 	if (dialog->priv->input.type != BRASERO_TRACK_TYPE_DISC)
@@ -1612,7 +1621,7 @@
 					     brasero_burn_session_get_label (dialog->priv->session));
 		break;
 	case BRASERO_TRACK_TYPE_DISC:
-		if (NCB_DRIVE_GET_TYPE (drive) != NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+		if (!brasero_drive_is_fake (drive)) {
 			if (media & BRASERO_MEDIUM_DVD) {
 				primary = g_strdup (_("DVD successfully copied"));
 				secondary = g_strdup_printf (_("DVD is now ready for use"));
@@ -1634,7 +1643,7 @@
 		}
 		break;
 	case BRASERO_TRACK_TYPE_IMAGE:
-		if (NCB_DRIVE_GET_TYPE (drive) != NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+		if (!brasero_drive_is_fake (drive)) {
 			if (media & BRASERO_MEDIUM_DVD) {
 				primary = g_strdup (_("Image successfully burnt to DVD"));
 				secondary = g_strdup_printf (_("DVD is now ready for use"));
@@ -1646,7 +1655,7 @@
 		}
 		break;
 	default:
-		if (NCB_DRIVE_GET_TYPE (drive) != NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+		if (!brasero_drive_is_fake (drive)) {
 			if (media & BRASERO_MEDIUM_DVD) {
 				primary = g_strdup (_("Data DVD successfully burnt"));
 				secondary = g_strdup_printf (_("\"%s\" is now ready for use"),
@@ -1797,10 +1806,10 @@
 	else if (dialog->priv->input.type != BRASERO_TRACK_TYPE_DISC)
 		media = brasero_burn_session_get_dest_media (session);
 	else {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_burn_session_get_src_drive (dialog->priv->session);
-		media = NCB_MEDIA_GET_STATUS (drive);
+		medium = brasero_burn_session_get_src_medium (dialog->priv->session);
+		media = brasero_medium_get_status (medium);
 	}
 
 	brasero_burn_dialog_update_info (dialog, dialog->priv->input.type, media);
@@ -1809,17 +1818,10 @@
 	brasero_burn_dialog_activity_start (dialog);
 
 	result = brasero_burn_dialog_setup_session (dialog, &error);
-	if (result == BRASERO_BURN_OK) {
-		NautilusBurnDrive *drive;
-		BraseroBurnFlag flags;
-
-		drive = brasero_burn_session_get_burner (session);
-		flags = brasero_burn_session_get_flags (session);
-
+	if (result == BRASERO_BURN_OK)
 		result = brasero_burn_record (dialog->priv->burn,
 					      session,
 					      &error);
-	}
 
 	close_dialog = brasero_burn_dialog_end_session (dialog,
 							result,

Modified: trunk/src/brasero-data-disc.c
==============================================================================
--- trunk/src/brasero-data-disc.c	(original)
+++ trunk/src/brasero-data-disc.c	Fri Feb 29 14:04:05 2008
@@ -49,8 +49,6 @@
 #include <gtk/gtknotebook.h>
 #include <gtk/gtksizegroup.h>
 
-#include <nautilus-burn-drive.h>
-
 #ifdef HAVE_LIBNOTIFY
 
 #include <libnotify/notification.h>
@@ -1498,7 +1496,7 @@
 }
 
 static void
-brasero_data_disc_set_drive (BraseroDisc *disc, NautilusBurnDrive *drive)
+brasero_data_disc_set_drive (BraseroDisc *disc, BraseroDrive *drive)
 {
 	BraseroDataDiscPrivate *priv;
 

Modified: trunk/src/brasero-data-session.c
==============================================================================
--- trunk/src/brasero-data-session.c	(original)
+++ trunk/src/brasero-data-session.c	Fri Feb 29 14:04:05 2008
@@ -32,7 +32,7 @@
 #include "burn-basics.h"
 #include "burn-caps.h"
 
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 #include "brasero-data-session.h"
 #include "brasero-data-project.h"
@@ -41,7 +41,7 @@
 typedef struct _BraseroDataSessionPrivate BraseroDataSessionPrivate;
 struct _BraseroDataSessionPrivate
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	GSList *nodes;
 
 	guint multi_inserted:1;
@@ -115,6 +115,7 @@
 {
 	BraseroDataSessionPrivate *priv;
 	BraseroVolFile *volume;
+	BraseroMedium *medium;
 	const gchar *device;
 	gint64 block;
 	GList *iter;
@@ -130,9 +131,10 @@
 	}
 
 	/* get the address for the last track and retrieve the file list */
-	NCB_MEDIA_GET_LAST_DATA_TRACK_ADDRESS (priv->drive,
-					       NULL,
-					       &block);
+	medium = brasero_drive_get_medium (priv->drive);
+	brasero_medium_get_last_data_track_address (medium,
+						    NULL,
+						    &block);
 	if (block == -1) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
@@ -141,7 +143,7 @@
 		return FALSE;
 	}
 
-	device = NCB_DRIVE_GET_DEVICE (priv->drive);
+	device = brasero_drive_get_device (priv->drive);
 	volume = brasero_volume_get_files (device,
 					   block,
 					   NULL,
@@ -200,16 +202,17 @@
 
 void
 brasero_data_session_set_drive (BraseroDataSession *self,
-				NautilusBurnDrive *drive)
+				BraseroDrive *drive)
 {
 	BraseroDataSessionPrivate *priv;
 	BraseroMedia media_status;
+	BraseroMedium *medium;
 	BraseroBurnCaps *caps;
 	BraseroMedia media;
 
 	priv = BRASERO_DATA_SESSION_PRIVATE (self);
 
-	if (nautilus_burn_drive_equal (priv->drive, drive))
+	if (priv->drive == drive)
 		return;
 
 	/* Remove the old imported session if any */
@@ -217,15 +220,16 @@
 		brasero_data_session_remove_last (self);
 
 	if (priv->drive)
-		nautilus_burn_drive_unref (priv->drive);
+		g_object_unref (priv->drive);
 	
 	priv->drive = drive;
 
 	if (drive)
-		nautilus_burn_drive_ref (drive);
+		g_object_ref (drive);
 
 	/* Now test for a multisession medium inserted and signal */
-	media = NCB_MEDIA_GET_STATUS (priv->drive);
+	medium = brasero_drive_get_medium (priv->drive);
+	media = brasero_medium_get_status (medium);
 
 	caps = brasero_burn_caps_get_default ();
 	media_status = brasero_burn_caps_media_capabilities (caps, media);
@@ -233,7 +237,7 @@
 
 	priv->multi_inserted = (media_status & BRASERO_MEDIUM_WRITABLE) &&
 			       (media & BRASERO_MEDIUM_HAS_DATA) &&
-			       (NCB_MEDIA_GET_LAST_DATA_TRACK_ADDRESS (priv->drive, NULL, NULL) != -1);
+			       (brasero_medium_get_last_data_track_address (medium, NULL, NULL) != -1);
 
 	g_signal_emit (self,
 		       brasero_data_session_signals [AVAILABLE_SIGNAL],
@@ -241,7 +245,7 @@
 		       priv->multi_inserted);
 }
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_data_session_get_loaded_medium (BraseroDataSession *self)
 {
 	BraseroDataSessionPrivate *priv;
@@ -264,7 +268,7 @@
 
 	priv = BRASERO_DATA_SESSION_PRIVATE (object);
 	if (priv->drive) {
-		nautilus_burn_drive_unref (priv->drive);
+		g_object_unref (priv->drive);
 		priv->drive = NULL;
 	}
 

Modified: trunk/src/brasero-data-session.h
==============================================================================
--- trunk/src/brasero-data-session.h	(original)
+++ trunk/src/brasero-data-session.h	Fri Feb 29 14:04:05 2008
@@ -27,8 +27,7 @@
 
 #include <glib-object.h>
 
-#include <nautilus-burn-drive.h>
-
+#include "burn-drive.h"
 #include "brasero-data-project.h"
 
 G_BEGIN_DECLS
@@ -58,12 +57,12 @@
 gboolean
 brasero_data_session_add_last (BraseroDataSession *session,
 			       GError **error);
-NautilusBurnDrive *
+BraseroDrive *
 brasero_data_session_get_loaded_medium (BraseroDataSession *session);
 
 void
 brasero_data_session_set_drive (BraseroDataSession *session,
-				NautilusBurnDrive *drive);
+				BraseroDrive *drive);
 void
 brasero_data_session_remove_last (BraseroDataSession *session);
 

Modified: trunk/src/brasero-data-tree-model.c
==============================================================================
--- trunk/src/brasero-data-tree-model.c	(original)
+++ trunk/src/brasero-data-tree-model.c	Fri Feb 29 14:04:05 2008
@@ -526,7 +526,8 @@
 			if (G_IS_THEMED_ICON (icon))
 				icon_string = g_themed_icon_get_names (G_THEMED_ICON (icon));
 
-			g_value_set_string (value, icon_string?icon_string [0]:NULL);
+			g_value_set_string (value, icon_string?icon_string [2]:NULL);
+			g_object_unref (icon);
 		}
 		else
 			g_value_set_string (value, "image-loading");

Modified: trunk/src/brasero-dest-selection.c
==============================================================================
--- trunk/src/brasero-dest-selection.c	(original)
+++ trunk/src/brasero-dest-selection.c	Fri Feb 29 14:04:05 2008
@@ -42,8 +42,6 @@
 #include <gtk/gtkhbox.h>
 #include <gtk/gtkmessagedialog.h>
 
-#include <nautilus-burn-drive.h>
-
 #include <gconf/gconf-client.h>
 
 #include "burn-basics.h"
@@ -52,7 +50,7 @@
 #include "burn-medium.h"
 #include "burn-session.h"
 #include "burn-plugin-manager.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-drive-selection.h"
 #include "brasero-drive-properties.h"
 #include "brasero-image-properties.h"
@@ -142,7 +140,8 @@
 brasero_dest_selection_check_same_src_dest (BraseroDestSelection *self)
 {
 	BraseroDestSelectionPrivate *priv;
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 	BraseroMedia media;
 
 	priv = BRASERO_DEST_SELECTION_PRIVATE (self);
@@ -160,7 +159,8 @@
 	if (!drive)
 		return FALSE;
 
-	media = NCB_MEDIA_GET_STATUS (drive);
+	medium = brasero_drive_get_medium (drive);
+	media = brasero_medium_get_status (medium);;
 	g_object_unref (drive);
 
 	if (media == BRASERO_MEDIUM_NONE)
@@ -180,7 +180,7 @@
 	BraseroBurnFlag compulsory = 0;
 	BraseroBurnFlag supported = 0;
 	BraseroBurnFlag flags = 0;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	GtkWidget *toplevel;
 	const gchar *path;
 	gint result;
@@ -203,7 +203,7 @@
 	brasero_drive_properties_set_drive (BRASERO_DRIVE_PROPERTIES (priv->drive_prop),
 					    drive,
 					    rate);
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (drive);
 
 	flags = brasero_burn_session_get_flags (priv->session);
 	if (!brasero_dest_selection_check_same_src_dest (self)) {
@@ -231,7 +231,7 @@
 	gtk_widget_show_all (priv->drive_prop);
 	result = gtk_dialog_run (GTK_DIALOG (priv->drive_prop));
 	if (result != GTK_RESPONSE_ACCEPT) {
-		nautilus_burn_drive_unref (drive);
+		g_object_unref (drive);
 		gtk_widget_destroy (priv->drive_prop);
 		priv->drive_prop = NULL;
 		return;
@@ -684,7 +684,7 @@
 					     BraseroDestSelection *self)
 {
 	BraseroDestSelectionPrivate *priv;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 
 	priv = BRASERO_DEST_SELECTION_PRIVATE (self);
 
@@ -692,7 +692,7 @@
 	if (!drive)
 		return;
 
-	if (NCB_DRIVE_GET_TYPE (drive) == NAUTILUS_BURN_DRIVE_TYPE_FILE)
+	if (brasero_drive_is_fake (drive))
 		brasero_dest_selection_image_properties (self);
 	else
 		brasero_dest_selection_drive_properties (self);
@@ -797,9 +797,10 @@
 brasero_dest_selection_set_drive_properties (BraseroDestSelection *self)
 {
 	BraseroDestSelectionPrivate *priv;
-	NautilusBurnDrive *drive;
 	BraseroTrackType source;
 	BraseroBurnFlag flags;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 	GConfClient *client;
 	GConfValue *value;
 	gchar *path;
@@ -841,7 +842,8 @@
 		return;
 	}
 
-	if (NCB_MEDIA_GET_STATUS (drive) == BRASERO_MEDIUM_NONE) {
+	medium = brasero_drive_get_medium (drive);
+	if (!medium || brasero_medium_get_status (medium) == BRASERO_MEDIUM_NONE) {
 		g_signal_emit (self,
 			       brasero_dest_selection_signals [VALID_MEDIA_SIGNAL],
 			       0,
@@ -858,8 +860,8 @@
 	g_free (key);
 
 	if (!value)
-		rate = NCB_MEDIA_GET_MAX_WRITE_RATE (drive);
-	else if (NCB_MEDIA_GET_STATUS (drive) & BRASERO_MEDIUM_DVD) {
+		rate = brasero_medium_get_max_write_speed (medium);
+	else if (brasero_medium_get_status (medium) & BRASERO_MEDIUM_DVD) {
 		rate = BRASERO_SPEED_TO_RATE_DVD (gconf_value_get_int (value));
 		gconf_value_free (value);
 	}
@@ -962,7 +964,7 @@
 		gtk_widget_set_sensitive (priv->button, (result == BRASERO_BURN_OK));
 	}
 
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (drive);
 
 	key = g_strdup_printf ("%s/tmpdir", BRASERO_DRIVE_PROPERTIES_KEY);
 	path = gconf_client_get_string (client, key, NULL);
@@ -1110,7 +1112,7 @@
 
 static void
 brasero_dest_selection_check_drive_settings (BraseroDestSelection *self,
-					     NautilusBurnDrive *drive)
+					     BraseroDrive *drive)
 {
 	BraseroBurnFlag compulsory = BRASERO_BURN_FLAG_NONE;
 	BraseroBurnFlag supported = BRASERO_BURN_FLAG_NONE;
@@ -1187,7 +1189,7 @@
 brasero_dest_selection_caps_changed (BraseroPluginManager *manager,
 				     BraseroDestSelection *self)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroDestSelectionPrivate *priv;
 
 	/* In this case we are still in the same context (same src, dest) so we
@@ -1202,12 +1204,12 @@
 	if (!drive)
 		return;
 
-	if (NCB_DRIVE_GET_TYPE (drive) != NAUTILUS_BURN_DRIVE_TYPE_FILE)
+	if (!brasero_drive_is_fake (drive))
 		brasero_dest_selection_check_drive_settings (self, drive);
 	else
 		brasero_dest_selection_check_image_settings (self);
 
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (drive);
 }
 
 static void
@@ -1215,8 +1217,8 @@
 				       BraseroDestSelection *self)
 {
 	BraseroDestSelectionPrivate *priv;
-	NautilusBurnDrive *burner;
-	NautilusBurnDrive *drive;
+	BraseroDrive *burner;
+	BraseroDrive *drive;
 
 	priv = BRASERO_DEST_SELECTION_PRIVATE (self);
 
@@ -1229,14 +1231,13 @@
 
 	/* make sure the current displayed drive reflects that */
 	drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (self));
-	if (drive && burner && !nautilus_burn_drive_equal (burner, drive)) {
+	if (drive && burner && burner != drive)
 		brasero_drive_selection_set_drive (BRASERO_DRIVE_SELECTION (self), drive);
-	}
 
 	if (drive)
-		nautilus_burn_drive_unref (drive);
+		g_object_unref (drive);
 
-	if (NCB_DRIVE_GET_TYPE (burner) != NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+	if (!brasero_drive_is_fake (burner)) {
 		gint numcopies;
 
 		brasero_dest_selection_set_drive_properties (self);
@@ -1261,7 +1262,7 @@
 
 static void
 brasero_dest_selection_drive_changed (BraseroDriveSelection *selection,
-				      NautilusBurnDrive *drive)
+				      BraseroDrive *drive)
 {
 	BraseroDestSelectionPrivate *priv;
 
@@ -1312,7 +1313,7 @@
 			  object);
 
 	brasero_drive_selection_set_tooltip (BRASERO_DRIVE_SELECTION (object),
-					     _("Choose which drive holds the disc to write to"));
+					     _("Choose the disc to write to"));
 
 	brasero_drive_selection_set_button (BRASERO_DRIVE_SELECTION (object),
 					    priv->button);
@@ -1389,7 +1390,7 @@
 {
 	BraseroDestSelectionPrivate *priv;
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 
 	priv = BRASERO_DEST_SELECTION_PRIVATE (object);
 
@@ -1407,9 +1408,11 @@
 
 		drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (object));
 		brasero_burn_session_set_burner (session, drive);
-		nautilus_burn_drive_unref (drive);
+		g_object_unref (drive);
 
-		if (brasero_burn_session_is_dest_file (session))
+		if (brasero_burn_session_same_src_dest_drive (priv->session))
+			brasero_drive_selection_set_same_src_dest (BRASERO_DRIVE_SELECTION (object));
+		else if (brasero_burn_session_is_dest_file (session))
 			brasero_dest_selection_set_image_properties (BRASERO_DEST_SELECTION (object));
 		else
 			brasero_dest_selection_set_drive_properties (BRASERO_DEST_SELECTION (object));

Modified: trunk/src/brasero-disc-copy-dialog.c
==============================================================================
--- trunk/src/brasero-disc-copy-dialog.c	(original)
+++ trunk/src/brasero-disc-copy-dialog.c	Fri Feb 29 14:04:05 2008
@@ -46,7 +46,7 @@
 #include "burn-caps.h"
 #include "burn-medium.h"
 #include "brasero-utils.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-disc-copy-dialog.h"
 #include "brasero-dest-selection.h"
 #include "brasero-src-selection.h"
@@ -109,6 +109,7 @@
 	gtk_window_set_title (GTK_WINDOW (obj), _("CD/DVD copy options"));
 
 	button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+	gtk_widget_show (button);
 	gtk_dialog_add_action_widget (GTK_DIALOG (obj),
 				      button, 
 				      GTK_RESPONSE_CANCEL);
@@ -117,6 +118,7 @@
 						  NULL,
 						  "media-optical-burn",
 						    GTK_ICON_SIZE_BUTTON);
+	gtk_widget_show (priv->button);
 	gtk_dialog_add_action_widget (GTK_DIALOG (obj),
 				      priv->button,
 				      GTK_RESPONSE_OK);
@@ -133,13 +135,8 @@
 
 	/* take care of source media */
 	priv->source = brasero_src_selection_new (priv->session);
-
-	/* only show media with something to be read on them */
-	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->source),
-						BRASERO_MEDIA_TYPE_READABLE);
-
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (obj)->vbox),
-			    brasero_utils_pack_properties (_("<b>Select source drive to copy</b>"),
+			    brasero_utils_pack_properties (_("<b>Select disc to copy</b>"),
 							   priv->source,
 							   NULL),
 			    FALSE,
@@ -153,27 +150,36 @@
 			  G_CALLBACK (brasero_disc_copy_dialog_valid_media_cb),
 			  obj);
 
-	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->selection),
-						BRASERO_MEDIA_TYPE_WRITABLE|
-						BRASERO_MEDIA_TYPE_FILE);
-
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (obj)->vbox),
-			    brasero_utils_pack_properties (_("<b>Select a drive to write to</b>"),
+			    brasero_utils_pack_properties (_("<b>Select a disc to write to</b>"),
 							   priv->selection,
 							   NULL),
 			    FALSE,
 			    FALSE,
 			    6);
 
+	/* only show media with something to be read on them */
+	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->source),
+						BRASERO_MEDIA_TYPE_READABLE);
+
 	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->selection),
 						BRASERO_MEDIA_TYPE_WRITABLE|
 						BRASERO_MEDIA_TYPE_REWRITABLE|
-						BRASERO_MEDIA_TYPE_READABLE);
+						BRASERO_MEDIA_TYPE_FILE);
+
+	BraseroDrive *drive, *src_drive;
+
+	drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (priv->selection));
+	brasero_burn_session_set_burner (priv->session, drive);
+	g_print ("%p\n", drive);
+
+	src_drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (priv->source));
+	g_print ("%p\n", src_drive);
 
 	if (brasero_burn_session_same_src_dest_drive (priv->session)) {
 		BraseroMedia media;
 
-		media = NCB_MEDIA_GET_STATUS (brasero_burn_session_get_src_drive (priv->session));
+		media = brasero_medium_get_status (brasero_burn_session_get_src_medium (priv->session));
 
 		if (media == BRASERO_MEDIUM_NONE
 		|| (media & (BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA)) == 0)
@@ -181,11 +187,11 @@
 		else
 			valid = TRUE;
 	
-	} else if (brasero_burn_session_is_dest_file (priv->session)) {
-
+	}
+	else if (brasero_burn_session_is_dest_file (priv->session)) {
 	  	valid = TRUE;
-
-	} else {
+	}
+	else {
 		BraseroBurnCaps *caps;
 
 		caps = brasero_burn_caps_get_default ();

Modified: trunk/src/brasero-disc-option-dialog.c
==============================================================================
--- trunk/src/brasero-disc-option-dialog.c	(original)
+++ trunk/src/brasero-disc-option-dialog.c	Fri Feb 29 14:04:05 2008
@@ -47,7 +47,7 @@
 #include "burn-plugin-manager.h"
 #include "brasero-disc-option-dialog.h"
 #include "brasero-dest-selection.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-disc.h"
 
 G_DEFINE_TYPE (BraseroDiscOptionDialog, brasero_disc_option_dialog, GTK_TYPE_DIALOG);
@@ -137,10 +137,9 @@
 {
 	time_t t;
 	gchar buffer [128];
+	BraseroDrive *drive;
 	gchar *title_str = NULL;
 	BraseroTrackType source;
-	BraseroMedia media;
-	NautilusBurnDrive *drive;
 	BraseroDiscOptionDialogPrivate *priv;
 
 	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (dialog);
@@ -148,15 +147,16 @@
 	brasero_burn_session_get_input_type (priv->session, &source);
 
 	drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (priv->selection));
-	media = NCB_MEDIA_GET_STATUS (drive);
 
 	t = time (NULL);
 	strftime (buffer, sizeof (buffer), "%d %b %y", localtime (&t));
 
 	if (source.type == BRASERO_TRACK_TYPE_DATA) {
-		if ((media & BRASERO_MEDIUM_APPENDABLE)
-		&&  !brasero_burn_session_is_dest_file (priv->session))
-			title_str = nautilus_burn_drive_get_media_label (drive);
+		BraseroBurnFlag flags;
+
+		flags = brasero_burn_session_get_flags (priv->session);
+		if (flags & BRASERO_BURN_FLAG_MERGE)
+			title_str = brasero_drive_get_volume_label (drive);
 
 		if (!title_str || title_str [0] == '\0')
 			title_str = g_strdup_printf (_("Data disc (%s)"), buffer);
@@ -164,7 +164,7 @@
 	else if (source.type == BRASERO_TRACK_TYPE_AUDIO)
 		title_str = g_strdup_printf (_("Audio disc (%s)"), buffer);
 
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (drive);
 	return title_str;
 }
 
@@ -908,10 +908,10 @@
 			  G_CALLBACK (brasero_disc_option_dialog_valid_media_cb),
 			  obj);
 
-	options = brasero_utils_pack_properties (_("<b>Select a drive to write to</b>"),
+	options = brasero_utils_pack_properties (_("<b>Select a disc to write to</b>"),
 						 priv->selection,
 						 NULL);
-	gtk_widget_show_all (options);
+	gtk_widget_show (options);
 
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (obj)->vbox),
 			    options,

Modified: trunk/src/brasero-disc-option-dialog.h
==============================================================================
--- trunk/src/brasero-disc-option-dialog.h	(original)
+++ trunk/src/brasero-disc-option-dialog.h	Fri Feb 29 14:04:05 2008
@@ -31,8 +31,6 @@
 #include <gtk/gtkwidget.h>
 #include <gtk/gtkdialog.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-disc.h"
 #include "burn-session.h"
 

Modified: trunk/src/brasero-disc.c
==============================================================================
--- trunk/src/brasero-disc.c	(original)
+++ trunk/src/brasero-disc.c	Fri Feb 29 14:04:05 2008
@@ -41,8 +41,6 @@
 #include <gtk/gtklabel.h>
 #include <gtk/gtkmisc.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-marshal.h"
 #include "brasero-disc.h"
 #include "burn-session.h"
@@ -338,7 +336,8 @@
 }
 
 void
-brasero_disc_set_current_drive (BraseroDisc *disc, NautilusBurnDrive *drive)
+brasero_disc_set_current_drive (BraseroDisc *disc,
+				BraseroDrive *drive)
 {
 	BraseroDiscIface *iface;
 

Modified: trunk/src/brasero-disc.h
==============================================================================
--- trunk/src/brasero-disc.h	(original)
+++ trunk/src/brasero-disc.h	Fri Feb 29 14:04:05 2008
@@ -31,8 +31,6 @@
 #include <gtk/gtktoolbar.h>
 #include <gtk/gtkuimanager.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-session.h"
 
@@ -139,7 +137,7 @@
 							 GtkUIManager *manager);
 
 	void			(*set_drive)		(BraseroDisc *disc,
-							 NautilusBurnDrive *drive);
+							 BraseroDrive *drive);
 };
 
 GType brasero_disc_get_type ();
@@ -204,7 +202,7 @@
 
 void
 brasero_disc_set_current_drive (BraseroDisc *disc,
-				NautilusBurnDrive *drive);
+				BraseroDrive *drive);
 
 GtkWidget *
 brasero_disc_get_use_info_notebook (void);

Modified: trunk/src/brasero-drive-info.c
==============================================================================
--- trunk/src/brasero-drive-info.c	(original)
+++ trunk/src/brasero-drive-info.c	Fri Feb 29 14:04:05 2008
@@ -36,27 +36,25 @@
 #include <gtk/gtkvbox.h>
 #include <gtk/gtklabel.h>
 #include <gtk/gtknotebook.h>
-
-#include <nautilus-burn-drive.h>
+#include <gtk/gtkalignment.h>
 
 #include "brasero-drive-info.h"
 #include "burn-medium.h"
 #include "burn-caps.h"
-#include "brasero-ncb.h"
 
 typedef struct _BraseroDriveInfoPrivate BraseroDriveInfoPrivate;
 struct _BraseroDriveInfoPrivate
 {
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
 
 	GtkWidget *notebook;
 	GtkWidget *image;
 
-	GtkWidget *type;
 	GtkWidget *capacity;
-	GtkWidget *contents;
 	GtkWidget *status;
 
+	GtkWidget *table;
+	GtkWidget *warning;
 	GtkWidget *image_path;
 };
 
@@ -68,7 +66,7 @@
 
 static void
 brasero_drive_info_update_info (BraseroDriveInfo *self,
-				NautilusBurnDrive *drive)
+				BraseroMedium *medium)
 {
 	BraseroMedia media;
 	BraseroBurnCaps *caps;
@@ -77,20 +75,16 @@
 
 	priv = BRASERO_DRIVE_INFO_PRIVATE (self);
 
-	if (drive)
-		media = NCB_MEDIA_GET_STATUS (drive);
+	if (medium)
+		media = brasero_medium_get_status (medium);
 	else
 		media = BRASERO_MEDIUM_NONE;
 
-	gtk_label_set_text (GTK_LABEL (priv->type), "");
 	gtk_label_set_text (GTK_LABEL (priv->capacity), "");
-	gtk_label_set_text (GTK_LABEL (priv->contents), "");
 	gtk_label_set_text (GTK_LABEL (priv->status), "");
 
 	/* type */
 	if (media == BRASERO_MEDIUM_NONE) {
-		gtk_label_set_markup (GTK_LABEL (priv->type),
-				      _("<i>no disc</i>"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
 					      "gnome-dev-removable",
 					      GTK_ICON_SIZE_DIALOG);
@@ -98,8 +92,6 @@
 	}
 
 	if (media == BRASERO_MEDIUM_UNSUPPORTED) {
-		gtk_label_set_markup (GTK_LABEL (priv->type),
-				      _("<i>unknown type</i>"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
 					      "gnome-dev-removable",
 					      GTK_ICON_SIZE_DIALOG);
@@ -107,27 +99,12 @@
 	}
 
 	if (media == BRASERO_MEDIUM_BUSY) {
-		gtk_label_set_markup (GTK_LABEL (priv->type),
-				      _("<i>busy disc</i>"));
 		gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
 					      "gnome-dev-removable",
 					      GTK_ICON_SIZE_DIALOG);
 		return;
 	}
 
-	gtk_label_set_markup (GTK_LABEL (priv->type),
-			      NCB_MEDIA_GET_TYPE_STRING (drive));
-
-	/* contents */
-	if (media & BRASERO_MEDIUM_BLANK)
-		gtk_label_set_markup (GTK_LABEL (priv->contents), _("empty"));
-	else if (BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))
-		gtk_label_set_markup (GTK_LABEL (priv->contents), _("audio and data tracks"));
-	else if (media & BRASERO_MEDIUM_HAS_AUDIO)
-		gtk_label_set_markup (GTK_LABEL (priv->contents), _("audio tracks"));
-	else if (media & BRASERO_MEDIUM_HAS_DATA) 
-		gtk_label_set_markup (GTK_LABEL (priv->contents), _("data tracks"));
-
 	/* NOTE: we must not rely on the medium advertised info but on what the
 	 * library can do */
 	caps = brasero_burn_caps_get_default ();
@@ -138,7 +115,7 @@
 		gchar *data_size_string, *info;
 		gint64 data_size;
 
-		NCB_MEDIA_GET_CAPACITY (drive, &data_size, NULL);
+		brasero_medium_get_capacity (medium, &data_size, NULL);
 		data_size_string = g_format_size_for_display (data_size);
 		info = g_strdup_printf (_("%s of data"), data_size_string);
 		g_free (data_size_string);
@@ -164,7 +141,7 @@
 		gchar *remaining_string, *info;
 		gint64 remaining;
 
-		NCB_MEDIA_GET_CAPACITY (drive, &remaining, NULL);
+		brasero_medium_get_capacity (medium, &remaining, NULL);
 		remaining_string = g_format_size_for_display (remaining);
 		info = g_strdup_printf (_("%s free"), remaining_string);
 		g_free (remaining_string);
@@ -179,7 +156,7 @@
 		gchar *remaining_string, *info;
 		gint64 remaining;
 
-		NCB_MEDIA_GET_FREE_SPACE (drive, &remaining, NULL);
+		brasero_medium_get_free_space (medium, &remaining, NULL);
 		remaining_string = g_format_size_for_display (remaining);
 		info = g_strdup_printf (_("%s free"), remaining_string);
 		g_free (remaining_string);
@@ -193,8 +170,8 @@
 		gchar *remaining_string, *capacity_string, *info;
 		gint64 remaining, capacity;
 
-		NCB_MEDIA_GET_CAPACITY (drive, &capacity, NULL);
-		NCB_MEDIA_GET_FREE_SPACE (drive, &remaining, NULL);
+		brasero_medium_get_capacity (medium, &capacity, NULL);
+		brasero_medium_get_free_space (medium, &remaining, NULL);
 		remaining_string = g_format_size_for_display (remaining);
 		capacity_string = g_format_size_for_display (capacity);
 		info = g_strdup_printf (_("%s (%s free)"),
@@ -213,7 +190,7 @@
 		gchar *remaining_string, *info;
 		gint64 remaining;
 
-		NCB_MEDIA_GET_FREE_SPACE (drive, &remaining, NULL);
+		brasero_medium_get_free_space (medium, &remaining, NULL);
 		remaining_string = g_format_size_for_display (remaining);
 		info = g_strdup_printf (_("%s free"), remaining_string);
 		g_free (remaining_string);
@@ -226,7 +203,7 @@
 	}
 
 	gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
-				      NCB_MEDIA_GET_ICON (drive),
+				      brasero_medium_get_icon (medium),
 				      GTK_ICON_SIZE_DIALOG);
 }
 
@@ -256,32 +233,40 @@
 
 	/* This is to handle a special case when copying a media using same 
 	 * drive as source and destination */
-	gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), 0);
+	gtk_widget_show (priv->warning);
+	gtk_widget_hide (priv->image_path);
+	gtk_widget_hide (priv->table);
 }
 
 void
-brasero_drive_info_set_drive (BraseroDriveInfo *self,
-			      NautilusBurnDrive *drive)
+brasero_drive_info_set_medium (BraseroDriveInfo *self,
+			       BraseroMedium *medium)
 {
 	BraseroDriveInfoPrivate *priv;
 
 	priv = BRASERO_DRIVE_INFO_PRIVATE (self);
 
-	if (priv->drive) {
-		nautilus_burn_drive_unref (priv->drive);
-		priv->drive = NULL;
+	if (priv->medium) {
+		g_object_ref (priv->medium);
+		priv->medium = NULL;
 	}
 
-	if (drive && NCB_DRIVE_GET_TYPE (drive) == NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+	gtk_widget_hide (priv->warning);
+	if (medium && (brasero_medium_get_status (medium) & BRASERO_MEDIUM_FILE)) {
+		gtk_widget_show (priv->image_path);
+		gtk_widget_hide (priv->warning);
+		gtk_widget_hide (priv->table);
+
 		gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
 					      "iso-image-new",
 					      GTK_ICON_SIZE_DIALOG);
-		gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), 2);
 		return;
 	}
 
-	brasero_drive_info_update_info (self, drive);
-	gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), 1);
+	brasero_drive_info_update_info (self, medium);
+	gtk_widget_show (priv->table);
+	gtk_widget_hide (priv->warning);
+	gtk_widget_hide (priv->image_path);
 }
 
 static void
@@ -289,6 +274,7 @@
 {
 	GtkWidget *table;
 	GtkWidget *label;
+	GtkWidget *alignment;
 	BraseroDriveInfoPrivate *priv;
 
 	priv = BRASERO_DRIVE_INFO_PRIVATE (object);
@@ -297,73 +283,66 @@
 
 	priv->image = gtk_image_new ();
 	gtk_box_pack_start (GTK_BOX (object), priv->image, FALSE, FALSE, 0);
+	gtk_widget_show (priv->image);
+
+	alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+	gtk_widget_show (alignment);
+	gtk_box_pack_start (GTK_BOX (object), alignment, FALSE, FALSE, 0);
 
 	priv->notebook = gtk_notebook_new ();
+	gtk_widget_show (priv->notebook);
+	gtk_container_add (GTK_CONTAINER (alignment), priv->notebook);
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
 	gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE);
-	gtk_box_pack_start (GTK_BOX (object), priv->notebook, FALSE, FALSE, 0);
 
 	label = gtk_label_new (_("<b><i>The drive that holds the source media will also be the one used to record.\n\n</i></b>"
 				 "<i>A new recordable media will be required once the one currently loaded has been copied.</i>"));
+	priv->warning = label;
 	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
 	gtk_label_set_line_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD);
 	gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
-	gtk_widget_show (label);
 	gtk_notebook_prepend_page (GTK_NOTEBOOK (priv->notebook),
-				   label,
+				   priv->warning,
 				   NULL);
 
-	table = gtk_table_new (4, 2, FALSE);
+	table = gtk_table_new (2, 2, FALSE);
+	priv->table = table;
 	gtk_table_set_row_spacings (GTK_TABLE (table), 4);
 	gtk_table_set_col_spacings (GTK_TABLE (table), 8);
 
-	label = gtk_label_new (_("<b>Type:</b>"));
-	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
-	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
-
-	priv->type = gtk_label_new ("");
-	gtk_misc_set_alignment (GTK_MISC (priv->type), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), priv->type, 1, 2, 0, 1);
-
 	label = gtk_label_new (_("<b>Size:</b>"));
+	gtk_widget_show (label);
 	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
 	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
+	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
+			  GTK_FILL, GTK_FILL, 0, 0);
 
 	priv->capacity = gtk_label_new ("");
+	gtk_widget_show (priv->capacity);
 	gtk_misc_set_alignment (GTK_MISC (priv->capacity), 0.0, 0.0);
-	gtk_table_attach (GTK_TABLE (table), priv->capacity, 1, 2, 1, 2,
-			  GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0);
-
-	label = gtk_label_new (_("<b>Contents:</b>"));
-	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
-	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);
-
-	priv->contents = gtk_label_new ("");
-	gtk_misc_set_alignment (GTK_MISC (priv->contents), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), priv->contents, 1, 2, 2, 3);
+	gtk_table_attach (GTK_TABLE (table), priv->capacity, 1, 2, 0, 1,
+			  GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
 
 	label = gtk_label_new (_("<b>Status:</b>"));
+	gtk_widget_show (label);
 	gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
 	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);
+	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
+			  GTK_FILL, GTK_FILL, 0, 0);
 
 	priv->status = gtk_label_new ("");
+	gtk_widget_show (priv->status);
 	gtk_misc_set_alignment (GTK_MISC (priv->status), 0.0, 0.0);
-	gtk_table_attach_defaults (GTK_TABLE (table), priv->status, 1, 2, 3, 4);
+	gtk_table_attach (GTK_TABLE (table), priv->status, 1, 2, 1, 2,
+			  GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
 
 	gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), table, NULL);
 
 	/* that's for the image */
 	priv->image_path = gtk_label_new ("");
 	gtk_misc_set_alignment (GTK_MISC (priv->image_path), 0.0, 0.5);
-
 	gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), priv->image_path, NULL);
-
-	gtk_widget_show_all (GTK_WIDGET (object));
 }
 
 static void
@@ -372,9 +351,9 @@
 	BraseroDriveInfoPrivate *priv;
 
 	priv = BRASERO_DRIVE_INFO_PRIVATE (object);
-	if (priv->drive) {
-		nautilus_burn_drive_unref (priv->drive);
-		priv->drive = NULL;
+	if (priv->medium) {
+		g_object_unref (priv->medium);
+		priv->medium = NULL;
 	}
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);

Modified: trunk/src/brasero-drive-info.h
==============================================================================
--- trunk/src/brasero-drive-info.h	(original)
+++ trunk/src/brasero-drive-info.h	Fri Feb 29 14:04:05 2008
@@ -28,6 +28,8 @@
 #include <glib-object.h>
 #include <gtk/gtkhbox.h>
 
+#include "burn-medium.h"
+
 G_BEGIN_DECLS
 
 #define BRASERO_TYPE_DRIVE_INFO            	(brasero_drive_info_get_type ())
@@ -56,8 +58,8 @@
 brasero_drive_info_new ();
 
 void
-brasero_drive_info_set_drive (BraseroDriveInfo *self,
-			      NautilusBurnDrive *drive);
+brasero_drive_info_set_medium (BraseroDriveInfo *self,
+			       BraseroMedium *medium);
 
 void
 brasero_drive_info_set_image_path (BraseroDriveInfo *self,

Modified: trunk/src/brasero-drive-properties.c
==============================================================================
--- trunk/src/brasero-drive-properties.c	(original)
+++ trunk/src/brasero-drive-properties.c	Fri Feb 29 14:04:05 2008
@@ -43,12 +43,10 @@
 #include <gtk/gtkstock.h>
 #include <gtk/gtkbox.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-medium.h"
 #include "burn-debug.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-utils.h"
 #include "brasero-drive-properties.h"
 
@@ -154,7 +152,7 @@
 
 	/* get the volume free space */
 	directory = g_path_get_dirname (path);
-	file = g_file_new_for_path (directory);
+	file = g_file_new_for_commandline_arg (directory);
 	g_free (directory);
 
 	if (file == NULL) {
@@ -163,11 +161,10 @@
 		return;
 	}
 
-	info = g_file_query_info (file,
-				  G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
-				  G_FILE_QUERY_INFO_NONE,
-				  NULL,
-				  &error);
+	info = g_file_query_filesystem_info (file,
+					     G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
+					     NULL,
+					     &error);
 	g_object_unref (file);
 
 	if (error) {
@@ -264,10 +261,11 @@
 
 void
 brasero_drive_properties_set_drive (BraseroDriveProperties *self,
-				    NautilusBurnDrive *drive,
+				    BraseroDrive *drive,
 				    gint64 default_rate)
 {
 	BraseroDrivePropertiesPrivate *priv;
+	BraseroMedium *medium;
 	BraseroMedia media;
 	GtkTreeModel *model;
 	gchar *display_name;
@@ -282,7 +280,7 @@
 	priv = BRASERO_DRIVE_PROPERTIES_PRIVATE (self);
 
 	/* set the header of the dialog */
-	display_name = nautilus_burn_drive_get_name_for_display (drive);
+	display_name = brasero_drive_get_display_name (drive);
 	header = g_strdup_printf (_("Properties of %s"), display_name);
 	g_free (display_name);
 
@@ -290,8 +288,9 @@
 	g_free (header);
 
 	/* Speed combo */
-	media = NCB_MEDIA_GET_STATUS (drive);
-	max_rate = NCB_MEDIA_GET_MAX_WRITE_RATE (drive);
+	medium = brasero_drive_get_medium (drive);
+	media = brasero_medium_get_status (medium);
+	max_rate = brasero_medium_get_max_write_speed (medium);
 	if (media & BRASERO_MEDIUM_CD)
 		step = CD_RATE;
 	else

Modified: trunk/src/brasero-drive-properties.h
==============================================================================
--- trunk/src/brasero-drive-properties.h	(original)
+++ trunk/src/brasero-drive-properties.h	Fri Feb 29 14:04:05 2008
@@ -61,7 +61,7 @@
 
 void
 brasero_drive_properties_set_drive (BraseroDriveProperties *props,
-				    NautilusBurnDrive *drive,
+				    BraseroDrive *drive,
 				    gint64 rate);
 void
 brasero_drive_properties_set_flags (BraseroDriveProperties *props,

Modified: trunk/src/brasero-drive-selection.c
==============================================================================
--- trunk/src/brasero-drive-selection.c	(original)
+++ trunk/src/brasero-drive-selection.c	Fri Feb 29 14:04:05 2008
@@ -34,10 +34,8 @@
 #include <gtk/gtkvbox.h>
 #include <gtk/gtkhbox.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-medium.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-medium-selection.h"
 #include "brasero-drive-selection.h"
 #include "brasero-drive-info.h"
@@ -50,7 +48,7 @@
 	GtkWidget *button;
 	GtkWidget *selection;
 
-	NautilusBurnDrive *locked_drive;
+	BraseroDrive *locked_drive;
 };
 
 #define BRASERO_DRIVE_SELECTION_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE_SELECTION, BraseroDriveSelectionPrivate))
@@ -70,19 +68,23 @@
 					  BraseroDriveSelection *self)
 {
 	BraseroDriveSelectionPrivate *priv;
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
 
-	drive = brasero_drive_selection_get_drive (self);
+	medium = brasero_medium_selection_get_active (BRASERO_MEDIUM_SELECTION (priv->selection));
+	if (medium)
+		drive = brasero_medium_get_drive (medium);
+	else
+		drive = NULL;
 
-	brasero_drive_info_set_drive (BRASERO_DRIVE_INFO (priv->info), drive);
+	brasero_drive_info_set_medium (BRASERO_DRIVE_INFO (priv->info), medium);
 
-	if (priv->locked_drive
-	&& !nautilus_burn_drive_equal (priv->locked_drive, drive)) {
+	if (priv->locked_drive && priv->locked_drive != drive) {
 	    	gtk_widget_set_sensitive (priv->selection, TRUE);
-		nautilus_burn_drive_unlock (priv->locked_drive);
-		nautilus_burn_drive_unref (priv->locked_drive);
+		brasero_drive_unlock (priv->locked_drive);
+		g_object_unref (priv->locked_drive);
 		priv->locked_drive = NULL;
 	}
 
@@ -95,7 +97,7 @@
 		return;
 	}
 
-	if (NCB_DRIVE_GET_TYPE (drive) == NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+	if (brasero_medium_get_status (medium) & BRASERO_MEDIUM_FILE) {
 		g_signal_emit (self,
 			       brasero_drive_selection_signals [DRIVE_CHANGED_SIGNAL],
 			       0,
@@ -130,7 +132,7 @@
 
 void
 brasero_drive_selection_set_drive (BraseroDriveSelection *self,
-				   NautilusBurnDrive *drive)
+				   BraseroDrive *drive)
 {
 	BraseroDriveSelectionPrivate *priv;
 	BraseroMedium *medium;
@@ -139,15 +141,25 @@
 	if (priv->locked_drive)
 		return;
 
-	medium = NCB_DRIVE_GET_MEDIUM (drive);
+	medium = brasero_drive_get_medium (drive);
 	brasero_medium_selection_set_active (BRASERO_MEDIUM_SELECTION (priv->selection), medium);
 }
 
-NautilusBurnDrive *
+BraseroMedium *
+brasero_drive_selection_get_medium (BraseroDriveSelection *self)
+{
+	BraseroDriveSelectionPrivate *priv;
+
+	priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
+
+	return brasero_medium_selection_get_active (BRASERO_MEDIUM_SELECTION (priv->selection));
+}
+
+BraseroDrive *
 brasero_drive_selection_get_drive (BraseroDriveSelection *self)
 {
+	BraseroDrive *drive;
 	BraseroMedium *medium;
-	NautilusBurnDrive *drive;
 	BraseroDriveSelectionPrivate *priv;
 
 	priv = BRASERO_DRIVE_SELECTION_PRIVATE (self);
@@ -172,17 +184,17 @@
 
 	gtk_widget_queue_draw (priv->selection);
 	if (priv->locked_drive) {
-		nautilus_burn_drive_unlock (priv->locked_drive);
-		nautilus_burn_drive_unref (priv->locked_drive);
+		brasero_drive_unlock (priv->locked_drive);
+		g_object_unref (priv->locked_drive);
 	}
 
 	if (locked) {
-		NautilusBurnDrive *drive;
+		BraseroDrive *drive;
 
 		drive = brasero_drive_selection_get_drive (self);
 		priv->locked_drive = drive;
 		if (priv->locked_drive)
-			nautilus_burn_drive_lock (priv->locked_drive,
+			brasero_drive_lock (priv->locked_drive,
 						  _("ongoing burning process"),
 						  NULL);
 	}
@@ -228,7 +240,6 @@
 brasero_drive_selection_init (BraseroDriveSelection *object)
 {
 	BraseroDriveSelectionPrivate *priv;
-	NautilusBurnDrive *drive;
 
 	priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
 	gtk_box_set_spacing (GTK_BOX (object), 12);
@@ -254,10 +265,6 @@
 			    FALSE,
 			    0);
 
-	drive = brasero_drive_selection_get_drive (object);
-	brasero_drive_info_set_drive (BRASERO_DRIVE_INFO (priv->info), drive);
-	nautilus_burn_drive_unref (drive);
-
 	gtk_widget_show_all (GTK_WIDGET (object));
 }
 
@@ -269,8 +276,8 @@
 	priv = BRASERO_DRIVE_SELECTION_PRIVATE (object);
 
 	if (priv->locked_drive) {
-		nautilus_burn_drive_unlock (priv->locked_drive);
-		nautilus_burn_drive_unref (priv->locked_drive);
+		brasero_drive_unlock (priv->locked_drive);
+		g_object_unref (priv->locked_drive);
 	}
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -296,7 +303,7 @@
 			  g_cclosure_marshal_VOID__OBJECT,
 			  G_TYPE_NONE,
 			  1,
-			  NAUTILUS_BURN_TYPE_DRIVE);
+			  BRASERO_TYPE_DRIVE);
 }
 
 GtkWidget *

Modified: trunk/src/brasero-drive-selection.h
==============================================================================
--- trunk/src/brasero-drive-selection.h	(original)
+++ trunk/src/brasero-drive-selection.h	Fri Feb 29 14:04:05 2008
@@ -28,10 +28,9 @@
 #include <glib-object.h>
 #include <gtk/gtkvbox.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-medium-monitor.h"
 #include "burn-medium.h"
+#include "burn-drive.h"
 
 G_BEGIN_DECLS
 
@@ -50,7 +49,7 @@
 	GtkVBoxClass parent_class;
 
 	void	(*drive_changed)	(BraseroDriveSelection *selection,
-					 NautilusBurnDrive *drive);
+					 BraseroDrive *drive);
 };
 
 struct _BraseroDriveSelection
@@ -69,15 +68,18 @@
 
 void
 brasero_drive_selection_set_drive (BraseroDriveSelection *selection,
-				   NautilusBurnDrive *drive);
+				   BraseroDrive *drive);
 
 void
 brasero_drive_selection_set_tooltip (BraseroDriveSelection *selection,
 				     const gchar *tooltip);
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_drive_selection_get_drive (BraseroDriveSelection *selection);
 
+BraseroMedium *
+brasero_drive_selection_get_medium (BraseroDriveSelection *selection);
+
 void
 brasero_drive_selection_set_image_path (BraseroDriveSelection *selection,
 					const gchar *path);

Modified: trunk/src/brasero-eject-dialog.c
==============================================================================
--- trunk/src/brasero-eject-dialog.c	(original)
+++ trunk/src/brasero-eject-dialog.c	Fri Feb 29 14:04:05 2008
@@ -32,11 +32,9 @@
 
 #include <gtk/gtk.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-eject-dialog.h"
 #include "brasero-tool-dialog.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-debug.h"
 #include "brasero-utils.h"
 #include "burn.h"
@@ -45,28 +43,28 @@
 
 static void
 brasero_eject_dialog_drive_changed (BraseroToolDialog *dialog,
-				    NautilusBurnDrive *drive)
+				    BraseroMedium *medium)
 {
-	brasero_tool_dialog_set_valid (dialog, BRASERO_MEDIUM_VALID (NCB_MEDIA_GET_STATUS (drive)));
+	brasero_tool_dialog_set_valid (dialog, BRASERO_MEDIUM_VALID (brasero_medium_get_status (medium)));
 }
 
 static gpointer
 _eject_async (gpointer data)
 {
-	NautilusBurnDrive *drive = NAUTILUS_BURN_DRIVE (data);
+	BraseroDrive *drive = BRASERO_DRIVE (data);
 
-	nautilus_burn_drive_eject (drive);
-	nautilus_burn_drive_unref (drive);
+	brasero_drive_eject (drive);
+	g_object_unref (drive);
 
 	return NULL;
 }
 
 static gboolean
 brasero_eject_dialog_activate (BraseroToolDialog *dialog,
-			       NautilusBurnDrive *drive)
+			       BraseroMedium *medium)
 {
 	/* In here we could also remove the lock held by any app (including 
-	 * brasero) through nautilus_burn_drive_unlock. We'd need a warning
+	 * brasero) through brasero_drive_unlock. We'd need a warning
 	 * dialog though which would identify why the lock is held and even
 	 * better which application is holding the lock so the user does know
 	 * if he can take the risk to remove the lock. */
@@ -76,16 +74,19 @@
 	 * cdrecord/cdrdao seem to be. */
 
 	GError *error = NULL;
+	BraseroDrive *drive;
 
 	BRASERO_BURN_LOG ("Asynchronous ejection");
-	nautilus_burn_drive_ref (drive);
+
+	drive = brasero_medium_get_drive (medium);
+	g_object_ref (drive);
 	g_thread_create (_eject_async, drive, FALSE, &error);
 	if (error) {
 		g_warning ("Could not create thread %s\n", error->message);
 		g_error_free (error);
 
-		nautilus_burn_drive_unref (drive);
-		nautilus_burn_drive_eject (drive);
+		g_object_unref (drive);
+		g_object_ref (drive);
 	}
 
 
@@ -96,7 +97,7 @@
 	 * closed now as ejection is not instantaneous.
 	 * A message box announcing the results of the operation would be a good
 	 * thing as well probably. */
-	if (nautilus_burn_drive_door_is_open (drive)) {
+	if (brasero_drive_is_door_open (drive)) {
 		//gtk_message_dialog_new ();
 	}
 	

Modified: trunk/src/brasero-image-option-dialog.c
==============================================================================
--- trunk/src/brasero-image-option-dialog.c	(original)
+++ trunk/src/brasero-image-option-dialog.c	Fri Feb 29 14:04:05 2008
@@ -43,7 +43,7 @@
 #include "brasero-image-option-dialog.h"
 #include "brasero-image-type-chooser.h"
 #include "brasero-dest-selection.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-io.h"
  
 G_DEFINE_TYPE (BraseroImageOptionDialog, brasero_image_option_dialog, GTK_TYPE_DIALOG);
@@ -246,9 +246,10 @@
 	BraseroImageOptionDialogPrivate *priv;
 	BraseroImageFormat formats;
 	BraseroImageFormat format;
-	NautilusBurnDrive *drive;
 	BraseroTrackType output;
 	BraseroTrackType input;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	priv = BRASERO_IMAGE_OPTION_DIALOG_PRIVATE (dialog);
 
@@ -258,7 +259,8 @@
 	/* get the available image types */
 	output.type = BRASERO_TRACK_TYPE_DISC;
 	drive = brasero_burn_session_get_burner (priv->session);
-	output.subtype.media = NCB_MEDIA_GET_STATUS (drive);
+	medium = brasero_drive_get_medium (drive);
+	output.subtype.media = brasero_medium_get_status (medium);
 
 	input.type = BRASERO_TRACK_TYPE_IMAGE;
 	formats = BRASERO_IMAGE_FORMAT_NONE;
@@ -521,11 +523,11 @@
 			  G_CALLBACK (brasero_image_option_dialog_valid_media_cb),
 			  obj);
 
-	options = brasero_utils_pack_properties (_("<b>Select a drive to write to</b>"),
+	options = brasero_utils_pack_properties (_("<b>Select a disc to write to</b>"),
 						 priv->selection,
 						 NULL);
 
-	gtk_widget_show_all (options);
+	gtk_widget_show (options);
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (obj)->vbox),
 			    options,
 			    FALSE,

Modified: trunk/src/brasero-medium-selection.c
==============================================================================
--- trunk/src/brasero-medium-selection.c	(original)
+++ trunk/src/brasero-medium-selection.c	Fri Feb 29 14:04:05 2008
@@ -180,7 +180,7 @@
 
 			medium = item->data;
 
-			medium_name = brasero_medium_get_display_name (medium);
+			medium_name = brasero_medium_get_label (medium, TRUE);
 			medium_icon = brasero_medium_get_icon (medium);
 
 			gtk_list_store_append (GTK_LIST_STORE (model), &iter);
@@ -261,7 +261,7 @@
 			gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
 	}
 
-	medium_name = brasero_medium_get_display_name (medium);
+	medium_name = brasero_medium_get_label (medium, TRUE);
 	medium_icon = brasero_medium_get_icon (medium);
 	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
 	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
@@ -356,13 +356,13 @@
 
 	gtk_combo_box_set_model (GTK_COMBO_BOX (object), GTK_TREE_MODEL (model));
 
-	renderer = gtk_cell_renderer_pixbuf_new ();
+/*	renderer = gtk_cell_renderer_pixbuf_new ();
 	g_object_set (renderer, "follow-state", TRUE, NULL);
 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, FALSE);
 	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer,
 					"icon-name", ICON_COL,
 					NULL);
-
+*/
 	renderer = gtk_cell_renderer_text_new ();
 	g_object_set (renderer, "xpad", 8, NULL);
 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE);

Modified: trunk/src/brasero-project-manager.c
==============================================================================
--- trunk/src/brasero-project-manager.c	(original)
+++ trunk/src/brasero-project-manager.c	Fri Feb 29 14:04:05 2008
@@ -391,7 +391,7 @@
 	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
 
 	gtk_widget_hide (toplevel);
-	gtk_widget_show_all (dialog);
+	gtk_widget_show (dialog);
 
 	destroy = brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog),
 					   session);
@@ -460,7 +460,7 @@
 	gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
 	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
 	gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
-	gtk_widget_show_all (dialog);
+	gtk_widget_show (dialog);
 
 	result = gtk_dialog_run (GTK_DIALOG (dialog));
 	if (result != GTK_RESPONSE_OK) {

Modified: trunk/src/brasero-project-size.c
==============================================================================
--- trunk/src/brasero-project-size.c	(original)
+++ trunk/src/brasero-project-size.c	Fri Feb 29 14:04:05 2008
@@ -36,14 +36,12 @@
 #include <gtk/gtkmenu.h>
 #include <gtk/gtkcontainer.h>
 
-#include <nautilus-burn-drive.h>
-#include <nautilus-burn-drive-monitor.h>
-
 #include "brasero-project-size.h"
-#include "brasero-ncb.h"
 #include "burn-caps.h"
 #include "burn-volume.h"
 #include "brasero-utils.h"
+#include "burn-medium-monitor.h"
+#include "burn-medium.h"
 
 static void brasero_project_size_class_init (BraseroProjectSizeClass *klass);
 static void brasero_project_size_init (BraseroProjectSize *sp);
@@ -84,13 +82,13 @@
 				      GtkCallback callback,
 				      gpointer callback_data);
 
-struct _BraseroDrive {
+struct _BraseroDriveSize {
 	gint64 sectors;
 	gint64 free_space;
 	BraseroMedia media;
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
 };
-typedef struct _BraseroDrive BraseroDrive;
+typedef struct _BraseroDriveSize BraseroDriveSize;
 
 struct _BraseroProjectSizePrivate {
 	GtkWidget *menu;
@@ -107,7 +105,7 @@
 
 	gint64 sectors;
 	GList *drives;
-	BraseroDrive *current;
+	BraseroDriveSize *current;
 
 	guint is_audio_context:1;
 	guint was_chosen:1;
@@ -204,20 +202,20 @@
 static void
 brasero_project_size_add_default_medias (BraseroProjectSize *self)
 {
-	const BraseroDrive drives [] =  { {333000, 333000, BRASERO_MEDIUM_CDR|BRASERO_MEDIUM_BLANK, NULL},
+	const BraseroDriveSize drives [] =  { {333000, 333000, BRASERO_MEDIUM_CDR|BRASERO_MEDIUM_BLANK, NULL},
 					  {360000, 360000, BRASERO_MEDIUM_CDR|BRASERO_MEDIUM_BLANK, NULL},
 					  {405000, 405000, BRASERO_MEDIUM_CDR|BRASERO_MEDIUM_BLANK, NULL},
 					  {450000, 450000, BRASERO_MEDIUM_CDR|BRASERO_MEDIUM_BLANK, NULL},
 					  {2295104, 2295104, BRASERO_MEDIUM_DVDR|BRASERO_MEDIUM_BLANK, NULL},
 					  {4150390, 4150390, BRASERO_MEDIUM_DVDR_DL|BRASERO_MEDIUM_BLANK, NULL},
 					  { 0 } };
-	const BraseroDrive *iter;
+	const BraseroDriveSize *iter;
 
 	for (iter = drives; iter->sectors; iter ++) {
-		BraseroDrive *drive;
+		BraseroDriveSize *drive;
 
-		drive = g_new0 (BraseroDrive, 1);
-	    	memcpy (drive, iter, sizeof (BraseroDrive));
+		drive = g_new0 (BraseroDriveSize, 1);
+	    	memcpy (drive, iter, sizeof (BraseroDriveSize));
 		self->priv->drives = g_list_prepend (self->priv->drives, drive);
 	}
 }
@@ -302,11 +300,11 @@
 	}
 
 	for (iter = cobj->priv->drives; iter; iter = iter->next) {
-		BraseroDrive *drive;
+		BraseroDriveSize *drive;
 
 		drive = iter->data;
-		if (drive->drive)
-			nautilus_burn_drive_unref (drive->drive);
+		if (drive->medium)
+			g_object_unref (drive->medium);
 
 		g_free (drive);
 	}
@@ -404,7 +402,7 @@
 	PangoRectangle extents = { 0 };
 	PangoLayout *layout;
 
-	BraseroDrive *drive;
+	BraseroDriveSize *drive;
 
 	gint max_width, max_height, total;
 	gint interval_size;
@@ -437,8 +435,8 @@
 	 * rewritable and multisession is off. That also applies to the widget
 	 * to select recorders.	 
 	 */
-	if (drive->drive
-	&& (NCB_MEDIA_GET_STATUS (drive->drive) & BRASERO_MEDIUM_REWRITABLE)
+	if (drive->medium
+	&& (brasero_medium_get_status (drive->medium) & BRASERO_MEDIUM_REWRITABLE)
 	&& !self->priv->multi)
 		total = drive->sectors > self->priv->sectors ? drive->sectors:self->priv->sectors;
 	else
@@ -485,7 +483,7 @@
 {
 	gint64 disc_size;
 	gchar *text = NULL;
-	BraseroDrive *drive;
+	BraseroDriveSize *drive;
 	BraseroMedia status;
 	gchar *drive_name = NULL;
 	gchar *disc_sectors_str = NULL;
@@ -495,8 +493,8 @@
 	if (!drive)
 		return NULL;
 
-	status = NCB_MEDIA_GET_STATUS (drive->drive);
-	if (drive->drive
+	status = brasero_medium_get_status (drive->medium);
+	if (drive->medium
 	&& (status & BRASERO_MEDIUM_REWRITABLE)
 	&& !self->priv->multi)
 		disc_size = drive->sectors;
@@ -513,7 +511,7 @@
 		gchar *name;
 
 		/* this is a busy drive */
-		name = nautilus_burn_drive_get_name_for_display (drive->drive);
+		name = brasero_medium_get_label (drive->medium, FALSE);
 		disc_sectors_str = g_strdup_printf (_("<i>%s</i> is busy"), name);
 		g_free (name);
 
@@ -524,7 +522,7 @@
 		gchar *name;
 
 		/* this is a drive probably not fully supported by brasero */
-		name = nautilus_burn_drive_get_name_for_display (drive->drive);
+		name = brasero_medium_get_label (drive->medium, FALSE);
 		disc_sectors_str = g_strdup_printf (_("<i>%s</i> not properly supported"), name);
 		g_free (name);
 
@@ -535,7 +533,7 @@
 		gchar *name;
 
 		/* this is an unsupported medium */
-		name = nautilus_burn_drive_get_name_for_display (drive->drive);
+		name = brasero_medium_get_label (drive->medium, FALSE);
 		disc_sectors_str = g_strdup_printf (_("The disc in <i>%s</i> is not supported"), name);
 		g_free (name);
 
@@ -547,18 +545,18 @@
 							     TRUE,
 							     TRUE);
 
-	if (drive->drive) {
+	if (drive->medium) {
 		/* we ellipsize to max characters to avoid having
 		 * a too long string with the drive full name. */
-		drive_name = nautilus_burn_drive_get_name_for_display (drive->drive);
-		if (strlen (drive_name) > 19) {
+		drive_name = brasero_medium_get_label (drive->medium, TRUE);
+/*		if (strlen (drive_name) > 19) {
 			gchar *tmp;
 
 			tmp = g_strdup_printf ("%.16s...", drive_name);
 			g_free (drive_name);
 			drive_name = tmp;
 		}
-	}
+*/	}
 
 	selection_size_str = brasero_utils_get_sectors_string (self->priv->sectors,
 							       self->priv->is_audio_context,
@@ -578,17 +576,15 @@
 	}
 	else if (self->priv->sectors == 0) {
 		if (drive_name)
-			text = g_strdup_printf (_("<b>Empty</b> (%s / %s in <i>%s</i>)"),
-						selection_size_str,
+			text = g_strdup_printf (_("<b>Empty</b> (%s free for <i>%s</i>)"),
 						disc_sectors_str,
 						drive_name);
 		else
-			text = g_strdup_printf (_("<b>Empty</b> (%s / %s)"),
-						selection_size_str,
+			text = g_strdup_printf (_("<b>Empty</b> (%s free)"),
 						disc_sectors_str);
 	}
 	else if (drive_name)
-		text = g_strdup_printf ("%s / %s (in <i>%s</i>)",
+		text = g_strdup_printf ("%s / %s (for <i>%s</i>)",
 					selection_size_str,
 					disc_sectors_str,
 					drive_name);
@@ -712,7 +708,7 @@
 	BraseroProjectSize *self;
 	gdouble fraction = 0.0;
 	gint text_height = 0;
-	BraseroDrive *drive;
+	BraseroDriveSize *drive;
 
 	gint bar_width, bar_height;
 	gchar *markup;
@@ -830,8 +826,8 @@
 
 	bar_height = widget->allocation.height - text_height;
 
-	if (drive->drive
-	&& (NCB_MEDIA_GET_STATUS (drive->drive) & BRASERO_MEDIUM_REWRITABLE)
+	if (drive->medium
+	&& (brasero_medium_get_status (drive->medium) & BRASERO_MEDIUM_REWRITABLE)
 	&& !self->priv->multi)	
 		disc_size = drive->sectors;
 	else
@@ -971,7 +967,7 @@
 brasero_project_size_disc_changed_cb (GtkMenuItem *item,
 				      BraseroProjectSize *self)
 {
-	BraseroDrive *drive;
+	BraseroDriveSize *drive;
 
 	drive = g_object_get_data (G_OBJECT (item), DRIVE_STRUCT);
 	self->priv->current = drive;
@@ -1032,7 +1028,7 @@
 
 	separator = TRUE;
 	for (iter = self->priv->drives; iter; iter = iter->next) {
-		BraseroDrive *drive;
+		BraseroDriveSize *drive;
 		GtkWidget *image;
 		gchar *size_str;
 		gchar *label;
@@ -1051,16 +1047,16 @@
 		&& (drive->media & BRASERO_MEDIUM_DVD))
 			continue;
 
-		if (!drive->drive && !separator) {
+		if (!drive->medium && !separator) {
 			item = gtk_separator_menu_item_new ();
 			gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
 			separator = TRUE;
 		}
-		else if (drive->drive)
+		else if (drive->medium)
 			separator = FALSE;
 
-		if (drive->drive
-		&& (NCB_MEDIA_GET_STATUS (drive->drive) & BRASERO_MEDIUM_REWRITABLE)
+		if (drive->medium
+		&& (brasero_medium_get_status (drive->medium) & BRASERO_MEDIUM_REWRITABLE)
 		&& !self->priv->multi)
 			disc_size = drive->sectors;
 		else
@@ -1071,11 +1067,13 @@
 		else
 			size_str = brasero_utils_get_size_string (disc_size * DATA_SECTOR_SIZE, TRUE, TRUE); 
 
-		if (drive->drive)
-			label = g_strdup_printf (_("%s (%s) inserted in %s"),
-						 size_str,
-						 NCB_MEDIA_GET_TYPE_STRING (drive->drive),
-						 nautilus_burn_drive_get_name_for_display (drive->drive));
+		if (drive->medium) {
+			gchar *name;
+
+			name = brasero_medium_get_label (drive->medium, FALSE);
+			label = g_strdup_printf ("%s %s", size_str, name);
+			g_free (name);
+		}
 		else if (drive->media & BRASERO_MEDIUM_DL)
 			label = g_strdup_printf (_("%s (DVD-R Dual Layer)"),
 						 size_str);
@@ -1112,7 +1110,7 @@
 			g_free (label);
 		}
 
-		if (!drive->drive)
+		if (!drive->medium)
 			image = gtk_image_new_from_icon_name ("drive-optical", GTK_ICON_SIZE_MENU);
 		else if (drive->media & BRASERO_MEDIUM_DVD)
 			image = gtk_image_new_from_icon_name ("gnome-dev-disc-dvdr", GTK_ICON_SIZE_MENU);
@@ -1212,7 +1210,7 @@
 		}
 
 		while (iter != node) {
-			BraseroDrive *drive;
+			BraseroDriveSize *drive;
 			BraseroMedia media_status;
 
 			drive = iter->data;
@@ -1255,7 +1253,7 @@
 		}
 
 		while (iter != node) {
-			BraseroDrive *drive;
+			BraseroDriveSize *drive;
 			BraseroMedia media_status;
 
 			drive = iter->data;
@@ -1340,12 +1338,12 @@
 	GList *iter;
 	BraseroBurnCaps *caps;
 	BraseroMedia media_status;
-	BraseroDrive *candidate = NULL;
+	BraseroDriveSize *candidate = NULL;
 
 	caps = brasero_burn_caps_get_default ();
 
 	if (self->priv->current) {
-		BraseroDrive *current;
+		BraseroDriveSize *current;
 
 		/* we check the current drive to see if it is suitable */
 		current = self->priv->current;
@@ -1367,7 +1365,7 @@
 			/* if we are in an audio context no drive with data */
 			current = NULL;
 		}
-		else if (current->sectors >= self->priv->sectors && current->drive) {
+		else if (current->sectors >= self->priv->sectors && current->medium) {
 			/* The current drive is still a perfect fit keep it */
 			g_object_unref (caps);
 			return;
@@ -1390,7 +1388,7 @@
 
 	/* Try to find the first best candidate */
 	for (iter = self->priv->drives; iter; iter = iter->next) {
-		BraseroDrive *drive;
+		BraseroDriveSize *drive;
 
 		drive = iter->data;
 
@@ -1421,18 +1419,18 @@
 			continue;
 
 		if (candidate->sectors < self->priv->sectors) {
-			if (!candidate->drive) {
+			if (!candidate->medium) {
 				candidate = drive;
 
-				if (drive->drive)
+				if (drive->medium)
 					break;
 			}
-			else if (drive->drive) {
+			else if (drive->medium) {
 				candidate = drive;
 				break;
 			}
 		}
-		else if (drive->drive) {
+		else if (drive->medium) {
 			candidate = drive;
 			break;
 		}
@@ -1446,7 +1444,7 @@
 brasero_project_size_set_context (BraseroProjectSize *self,
 				  gboolean is_audio)
 {
-	BraseroDrive *current;
+	BraseroDriveSize *current;
 
 	self->priv->sectors = 0;
 	self->priv->is_audio_context = is_audio;
@@ -1464,7 +1462,7 @@
 	current = self->priv->current;
 	if (!current)
 		brasero_project_size_find_proper_drive (self);
-	else if (!current->drive)
+	else if (!current->medium)
 		brasero_project_size_find_proper_drive (self);
 	else if (is_audio
 	     && (current->media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_APPENDABLE)))
@@ -1491,8 +1489,8 @@
 	if (!self->priv->current)
 		return FALSE;
 
-	if (self->priv->current->drive
-	&& (NCB_MEDIA_GET_STATUS (self->priv->current->drive) & BRASERO_MEDIUM_REWRITABLE)
+	if (self->priv->current->medium
+	&& (brasero_medium_get_status (self->priv->current->medium) & BRASERO_MEDIUM_REWRITABLE)
 	&& !self->priv->multi)
 		disc_size = self->priv->current->sectors;
 	else
@@ -1538,27 +1536,27 @@
 
 /********************************* real drives *********************************/
 static void
-brasero_project_size_disc_added_cb (NautilusBurnDriveMonitor *monitor,
-				    NautilusBurnDrive *ndrive,
+brasero_project_size_disc_added_cb (BraseroMediumMonitor *monitor,
+				    BraseroMedium *medium,
 				    BraseroProjectSize *self)
 {
 	GList *iter;
 
 	for (iter = self->priv->drives; iter; iter = iter->next) {
-		BraseroDrive *bdrive;
+		BraseroDriveSize *drive;
 
-		bdrive = iter->data;
-		if (bdrive->drive
-		&&  nautilus_burn_drive_equal (ndrive, bdrive->drive)) {
+		drive = iter->data;
+		if (drive->medium
+		&&  medium == drive->medium) {
 
-			bdrive->media = NCB_MEDIA_GET_STATUS (bdrive->drive);
+			drive->media = brasero_medium_get_status (drive->medium);
 
 			/* If there is an appendable session we just ignore it,
 			 * the size of this session will simply be added to the
 			 * size of the project if the user decides to merge them
 			 */
-			NCB_MEDIA_GET_CAPACITY (ndrive, NULL, &bdrive->sectors);
-			NCB_MEDIA_GET_FREE_SPACE (ndrive, NULL, &bdrive->free_space);
+			brasero_medium_get_capacity (medium, NULL, &drive->sectors);
+			brasero_medium_get_free_space (medium, NULL, &drive->free_space);
 
 			brasero_project_size_find_proper_drive (self);
 			brasero_project_size_disc_changed (self);
@@ -1571,21 +1569,21 @@
 }
 
 static void
-brasero_project_size_disc_removed_cb (NautilusBurnDriveMonitor *monitor,
-				      NautilusBurnDrive *ndrive,
+brasero_project_size_disc_removed_cb (BraseroMediumMonitor *monitor,
+				      BraseroMedium *medium,
 				      BraseroProjectSize *self)
 {
 	GList *iter;
 
 	for (iter = self->priv->drives; iter; iter = iter->next) {
-		BraseroDrive *bdrive;
+		BraseroDriveSize *drive;
 
-		bdrive = iter->data;
-		if (bdrive->drive
-		&&  nautilus_burn_drive_equal (ndrive, bdrive->drive)) {
-			bdrive->media = BRASERO_MEDIUM_NONE;
-			bdrive->sectors = 0;
-			bdrive->free_space = 0;
+		drive = iter->data;
+		if (drive->medium
+		&&  medium == drive->medium) {
+			drive->media = BRASERO_MEDIUM_NONE;
+			drive->sectors = 0;
+			drive->free_space = 0;
 
 			brasero_project_size_find_proper_drive (self);
 			brasero_project_size_disc_changed (self);
@@ -1600,37 +1598,43 @@
 static void
 brasero_project_size_add_real_medias (BraseroProjectSize *self)
 {
-	GList *iter, *list;
+	GSList *iter, *list;
+	BraseroMediumMonitor *monitor;
+
+	monitor = brasero_medium_monitor_get_default ();
+	list = brasero_medium_monitor_get_media (monitor,
+						 BRASERO_MEDIA_TYPE_WRITABLE|
+						 BRASERO_MEDIA_TYPE_REWRITABLE);
+	g_object_unref (monitor);
 
-	NCB_DRIVE_GET_LIST (list, TRUE, FALSE);
 	for (iter = list; iter; iter = iter->next) {
-		NautilusBurnDriveMonitor *monitor;
-		BraseroDrive *drive;
+		BraseroMediumMonitor *monitor;
+		BraseroDriveSize *drive;
 
-		drive = g_new0 (BraseroDrive, 1);
-		drive->drive = iter->data;
+		drive = g_new0 (BraseroDriveSize, 1);
+		drive->medium = iter->data;
 		self->priv->drives = g_list_prepend (self->priv->drives, drive);
 
 		/* add a callback if media changes */
-		monitor = nautilus_burn_get_drive_monitor ();
+		monitor = brasero_medium_monitor_get_default ();
 		g_signal_connect (monitor,
-				  "media-added",
+				  "medium-added",
 				  G_CALLBACK (brasero_project_size_disc_added_cb),
 				  self);
 		g_signal_connect (monitor,
-				  "media-removed",
+				  "medium-removed",
 				  G_CALLBACK (brasero_project_size_disc_removed_cb),
 				  self);
 
 		/* get all the information about the current media */
-		drive->media = NCB_MEDIA_GET_STATUS (drive->drive);
+		drive->media = brasero_medium_get_status (drive->medium);
 		if (!BRASERO_MEDIUM_VALID (drive->media))
 			continue;
 
-		NCB_MEDIA_GET_CAPACITY (drive->drive, NULL, &drive->sectors);
-		NCB_MEDIA_GET_FREE_SPACE (drive->drive, NULL, &drive->free_space);
+		brasero_medium_get_capacity (drive->medium, NULL, &drive->sectors);
+		brasero_medium_get_free_space (drive->medium, NULL, &drive->free_space);
 	}
-	g_list_free (list);
+	g_slist_free (list);
 
 	brasero_project_size_find_proper_drive (self);
 	brasero_project_size_disc_changed (self);
@@ -1642,18 +1646,18 @@
 	return self->priv->ruler_height;
 }
 
-NautilusBurnDrive *
-brasero_project_size_get_active_drive (BraseroProjectSize *self)
+BraseroMedium *
+brasero_project_size_get_active_medium (BraseroProjectSize *self)
 {
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
 
 	if (!self->priv->current)
 		return NULL;
 
-	if (!self->priv->current->drive)
+	if (!self->priv->current->medium)
 		return NULL;
 
-	drive = self->priv->current->drive;
-	nautilus_burn_drive_ref (drive);
-	return drive;
+	medium = self->priv->current->medium;
+	g_object_ref (medium);
+	return medium;
 }

Modified: trunk/src/brasero-project-size.h
==============================================================================
--- trunk/src/brasero-project-size.h	(original)
+++ trunk/src/brasero-project-size.h	Fri Feb 29 14:04:05 2008
@@ -31,7 +31,7 @@
 #include <gtk/gtkwidget.h>
 #include <gtk/gtkcontainer.h>
 
-#include <nautilus-burn-drive.h>
+#include "burn-medium.h"
 
 G_BEGIN_DECLS
 
@@ -79,8 +79,8 @@
 brasero_project_size_check_status (BraseroProjectSize *self,
 				   gboolean *overburn);
 
-NautilusBurnDrive *
-brasero_project_size_get_active_drive (BraseroProjectSize *self);
+BraseroMedium *
+brasero_project_size_get_active_medium (BraseroProjectSize *self);
 
 G_END_DECLS
 

Modified: trunk/src/brasero-project.c
==============================================================================
--- trunk/src/brasero-project.c	(original)
+++ trunk/src/brasero-project.c	Fri Feb 29 14:04:05 2008
@@ -621,15 +621,22 @@
 brasero_project_disc_changed_cb (BraseroProjectSize *size,
 				 BraseroProject *project)
 {
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	brasero_project_check_size (project);
 
 	/* get the current device name and set it for the disc project in
 	 * case that is a multisession disc and a data project */
-	drive = brasero_project_size_get_active_drive (size);
+	medium = brasero_project_size_get_active_medium (size);
+	if (!medium) {
+		brasero_disc_set_current_drive (project->priv->current, NULL);
+		return;
+	}
+
+	drive = brasero_medium_get_drive (medium);
 	brasero_disc_set_current_drive (project->priv->current, drive);
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (medium);
 }
 
 /***************************** URIContainer ************************************/
@@ -890,7 +897,7 @@
 	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
 
 	gtk_widget_hide (toplevel);
-	gtk_widget_show_all (dialog);
+	gtk_widget_show (dialog);
 
 	destroy = brasero_burn_dialog_run (BRASERO_BURN_DIALOG (dialog), session);
 	g_object_unref (session);

Modified: trunk/src/brasero-src-selection.c
==============================================================================
--- trunk/src/brasero-src-selection.c	(original)
+++ trunk/src/brasero-src-selection.c	Fri Feb 29 14:04:05 2008
@@ -28,13 +28,11 @@
 
 #include <glib/gi18n-lib.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-src-selection.h"
 #include "brasero-drive-selection.h"
 #include "burn-track.h"
 #include "burn-session.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 typedef struct _BraseroSrcSelectionPrivate BraseroSrcSelectionPrivate;
 struct _BraseroSrcSelectionPrivate
@@ -56,17 +54,20 @@
 
 static void
 brasero_src_selection_drive_changed (BraseroDriveSelection *selection,
-				     NautilusBurnDrive *drive)
+				     BraseroDrive *drive)
 {
 	BraseroSrcSelectionPrivate *priv;
 
 	priv = BRASERO_SRC_SELECTION_PRIVATE (selection);
 
+	if (!priv->session)
+		return;
+
 	if (priv->track)
 		brasero_track_unref (priv->track);
 
 	priv->track = brasero_track_new (BRASERO_TRACK_TYPE_DISC);
-	if (drive && NCB_DRIVE_GET_TYPE (drive) == NAUTILUS_BURN_DRIVE_TYPE_FILE)
+	if (drive && brasero_drive_is_fake (drive))
 		brasero_track_set_drive_source (priv->track, NULL);
 	else
 		brasero_track_set_drive_source (priv->track, drive);
@@ -87,7 +88,7 @@
 brasero_src_selection_init (BraseroSrcSelection *object)
 {
 	brasero_drive_selection_set_tooltip (BRASERO_DRIVE_SELECTION (object),
-					     _("Choose which drive holds the disc to read from"));
+					     _("Choose the disc to read from"));
 
 	/* only show media with something to be read on them */
 	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (object),
@@ -122,7 +123,7 @@
 {
 	BraseroSrcSelectionPrivate *priv;
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 
 	priv = BRASERO_SRC_SELECTION_PRIVATE (object);
 
@@ -136,14 +137,10 @@
 		if (priv->track)
 			brasero_track_unref (priv->track);
 
-		priv->track = brasero_track_new (BRASERO_TRACK_TYPE_DISC);
-		brasero_track_set_drive_source (priv->track, NULL);
-		brasero_burn_session_add_track (priv->session, priv->track);
-
 		drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (object));
 		if (drive) {
 			brasero_src_selection_drive_changed (BRASERO_DRIVE_SELECTION (object), drive);
-			nautilus_burn_drive_unref (drive);
+			g_object_unref (drive);
 		}
 
 		break;

Modified: trunk/src/brasero-sum-dialog.c
==============================================================================
--- trunk/src/brasero-sum-dialog.c	(original)
+++ trunk/src/brasero-sum-dialog.c	Fri Feb 29 14:04:05 2008
@@ -49,11 +49,9 @@
 #include <gtk/gtkdialog.h>
 #include <gtk/gtkmessagedialog.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-sum-dialog.h"
 #include "brasero-tool-dialog.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-xfer.h"
 #include "burn-basics.h"
 #include "burn-debug.h"
@@ -433,7 +431,7 @@
 
 static BraseroBurnResult
 brasero_sum_dialog_get_disc_checksum (BraseroSumDialog *self,
-				      NautilusBurnDrive *drive,
+				      BraseroDrive *drive,
 				      gchar *checksum,
 				      GError **error)
 {
@@ -458,7 +456,7 @@
 
 static gboolean
 brasero_sum_dialog_check_md5_file (BraseroSumDialog *self,
-				   NautilusBurnDrive *drive)
+				   BraseroMedium *medium)
 {
 	BraseroBurnResult result;
 	gchar *file_sum = NULL;
@@ -492,7 +490,10 @@
 		return retval;
 	}
 
-	result = brasero_sum_dialog_get_disc_checksum (self, drive, file_sum, &error);
+	result = brasero_sum_dialog_get_disc_checksum (self,
+						       brasero_medium_get_drive (medium),
+						       file_sum,
+						       &error);
 	if (result == BRASERO_BURN_CANCEL) {
 		g_free (file_sum);
 		return FALSE;
@@ -514,7 +515,7 @@
 
 static gboolean
 brasero_sum_dialog_check_disc_sum (BraseroSumDialog *self,
-				   NautilusBurnDrive *drive)
+				   BraseroDrive *drive)
 {
 	GSList *wrong_sums = NULL;
 	BraseroBurnResult result;
@@ -569,7 +570,7 @@
 
 static gboolean
 brasero_sum_dialog_activate (BraseroToolDialog *dialog,
-			     NautilusBurnDrive *drive)
+			     BraseroMedium *medium)
 {
 	BraseroSumDialog *self;
 	gboolean result;
@@ -577,9 +578,9 @@
 	self = BRASERO_SUM_DIALOG (dialog);
 
 	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->priv->md5_check)))
-		result = brasero_sum_dialog_check_disc_sum (self, drive);
+		result = brasero_sum_dialog_check_disc_sum (self, brasero_medium_get_drive (medium));
 	else
-		result = brasero_sum_dialog_check_md5_file (self, drive);
+		result = brasero_sum_dialog_check_md5_file (self, medium);
 
 	brasero_tool_dialog_set_valid (dialog, TRUE);
 	return result;

Modified: trunk/src/brasero-tool-dialog.c
==============================================================================
--- trunk/src/brasero-tool-dialog.c	(original)
+++ trunk/src/brasero-tool-dialog.c	Fri Feb 29 14:04:05 2008
@@ -40,8 +40,6 @@
 #include <gtk/gtkprogressbar.h>
 #include <gtk/gtkmessagedialog.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-utils.h"
 #include "brasero-progress.h"
 #include "brasero-drive-selection.h"
@@ -49,7 +47,7 @@
 #include "burn-session.h"
 #include "burn.h"
 #include "burn-medium.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 G_DEFINE_TYPE (BraseroToolDialog, brasero_tool_dialog, GTK_TYPE_DIALOG);
 
@@ -206,12 +204,12 @@
 brasero_tool_dialog_run (BraseroToolDialog *self)
 {
 	BraseroToolDialogClass *klass;
-	NautilusBurnDrive *drive;
-	BraseroMedia media;
 	gboolean close = FALSE;
+	BraseroMedium *medium;
+	BraseroMedia media;
 	GdkCursor *cursor;
 
-	drive = brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (self->priv->selector));
+	medium = brasero_drive_selection_get_medium (BRASERO_DRIVE_SELECTION (self->priv->selector));
 
 	/* set up */
 	gtk_widget_set_sensitive (self->priv->upper_box, FALSE);
@@ -225,7 +223,7 @@
 	gtk_button_set_label (GTK_BUTTON (self->priv->cancel), GTK_STOCK_CANCEL);
 
 	/* check the contents of the drive */
-	media = NCB_MEDIA_GET_STATUS (drive);
+	media = brasero_medium_get_status (medium);
 	if (media == BRASERO_MEDIUM_NONE) {
 		brasero_tool_dialog_no_media (self);
 		gtk_widget_set_sensitive (GTK_WIDGET (self->priv->button), TRUE);
@@ -246,10 +244,10 @@
 	self->priv->running = TRUE;
 	klass = BRASERO_TOOL_DIALOG_GET_CLASS (self);
 	if (klass->activate)
-		close = klass->activate (self, drive);
+		close = klass->activate (self, medium);
 	self->priv->running = FALSE;
 
-	nautilus_burn_drive_unref (drive);
+	g_object_unref (medium);
 
 	if (close || self->priv->close) {
 		gtk_widget_destroy (GTK_WIDGET (self));
@@ -331,22 +329,22 @@
 	gtk_widget_set_sensitive (self->priv->button, valid);
 }
 
-NautilusBurnDrive *
-brasero_tool_dialog_get_drive (BraseroToolDialog *self)
+BraseroMedium *
+brasero_tool_dialog_get_medium (BraseroToolDialog *self)
 {
-	return brasero_drive_selection_get_drive (BRASERO_DRIVE_SELECTION (self->priv->selector));
+	return brasero_drive_selection_get_medium (BRASERO_DRIVE_SELECTION (self->priv->selector));
 }
 
 static void
 brasero_tool_dialog_drive_changed_cb (BraseroDriveSelection *selection,
-				      NautilusBurnDrive *drive,
+				      BraseroMedium *medium,
 				      BraseroToolDialog *self)
 {
 	BraseroToolDialogClass *klass;
 
 	klass = BRASERO_TOOL_DIALOG_GET_CLASS (self);
 	if (klass->drive_changed)
-		klass->drive_changed (self, drive);
+		klass->drive_changed (self, medium);
 }
 
 static gboolean

Modified: trunk/src/brasero-tool-dialog.h
==============================================================================
--- trunk/src/brasero-tool-dialog.h	(original)
+++ trunk/src/brasero-tool-dialog.h	Fri Feb 29 14:04:05 2008
@@ -58,9 +58,9 @@
 	GtkDialogClass parent_class;
 
 	gboolean	(*activate)		(BraseroToolDialog *dialog,
-						 NautilusBurnDrive *drive);
+						 BraseroMedium *medium);
 	void		(*drive_changed)	(BraseroToolDialog *dialog,
-						 NautilusBurnDrive *drive);
+						 BraseroMedium *medium);
 };
 
 GType brasero_tool_dialog_get_type ();
@@ -92,8 +92,8 @@
 BraseroBurn *
 brasero_tool_dialog_get_burn (BraseroToolDialog *dialog);
 
-NautilusBurnDrive *
-brasero_tool_dialog_get_drive (BraseroToolDialog *dialog);
+BraseroMedium *
+brasero_tool_dialog_get_medium (BraseroToolDialog *dialog);
 
 G_END_DECLS
 

Modified: trunk/src/brasero-utils.c
==============================================================================
--- trunk/src/brasero-utils.c	(original)
+++ trunk/src/brasero-utils.c	Fri Feb 29 14:04:05 2008
@@ -38,8 +38,6 @@
 
 #include <libgnomeui/libgnomeui.h>
 
-#include <nautilus-burn-drive.h>
-
 #include <gst/gst.h>
 
 #include "brasero-utils.h"

Modified: trunk/src/burn-basics.c
==============================================================================
--- trunk/src/burn-basics.c	(original)
+++ trunk/src/burn-basics.c	Fri Feb 29 14:04:05 2008
@@ -38,7 +38,7 @@
 #include "burn-plugin-manager.h"
 #include "burn-medium-monitor.h"
 #include "burn-plugin-private.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 static BraseroPluginManager *plugin_manager = NULL;
 static BraseroMediumMonitor *medium_manager = NULL;
@@ -81,9 +81,6 @@
 brasero_burn_library_init (void)
 {
 	/* initialize all device list */
-	
-	nautilus_burn_init ();
-
 	if (!medium_manager)
 		medium_manager = brasero_medium_monitor_get_default ();
 

Modified: trunk/src/burn-caps.c
==============================================================================
--- trunk/src/burn-caps.c	(original)
+++ trunk/src/burn-caps.c	Fri Feb 29 14:04:05 2008
@@ -34,11 +34,9 @@
 
 #include <gconf/gconf-client.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-debug.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-medium.h"
 #include "burn-session.h"
 #include "burn-plugin.h"

Modified: trunk/src/burn-caps.h
==============================================================================
--- trunk/src/burn-caps.h	(original)
+++ trunk/src/burn-caps.h	Fri Feb 29 14:04:05 2008
@@ -28,8 +28,6 @@
 #include <glib.h>
 #include <glib-object.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-medium.h"
 #include "burn-session.h"

Added: trunk/src/burn-drive.c
==============================================================================
--- (empty file)
+++ trunk/src/burn-drive.c	Fri Feb 29 14:04:05 2008
@@ -0,0 +1,772 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * trunk
+ * Copyright (C) Philippe Rouquier 2008 <bonfire-app wanadoo fr>
+ * 
+ * trunk is free software.
+ * 
+ * You may redistribute it and/or modify it under the terms of the
+ * GNU General Public License, as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ * 
+ * trunk is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with trunk.  If not, write to:
+ * 	The Free Software Foundation, Inc.,
+ * 	51 Franklin Street, Fifth Floor
+ * 	Boston, MA  02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <unistd.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+
+#include <gio/gio.h>
+
+#include <nautilus-burn-drive-monitor.h>
+
+#include "burn-basics.h"
+#include "burn-medium.h"
+#include "burn-drive.h"
+
+typedef struct _BraseroDrivePrivate BraseroDrivePrivate;
+struct _BraseroDrivePrivate
+{
+	BraseroMedium *medium;
+	NautilusBurnDrive *ndrive;
+};
+
+#define BRASERO_DRIVE_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE, BraseroDrivePrivate))
+
+enum {
+	MEDIUM_REMOVED,
+	MEDIUM_INSERTED,
+	LAST_SIGNAL
+};
+static gulong drive_signals [LAST_SIGNAL] = {0, };
+
+enum {
+	PROP_NONE	= 0,
+	PROP_DRIVE
+};
+
+G_DEFINE_TYPE (BraseroDrive, brasero_drive, G_TYPE_OBJECT);
+
+gboolean
+brasero_drive_eject (BraseroDrive *drive)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (drive);
+	return nautilus_burn_drive_eject (priv->ndrive);
+}
+
+typedef struct {
+	gboolean    timeout;
+	gboolean    command_ok;
+	guint       timeout_tag;
+	GMainLoop  *loop;
+	GPtrArray  *argv;
+	GError     *error;
+} CommandData;
+
+static void
+free_command_data (CommandData *unmount_data)
+{
+	g_ptr_array_add (unmount_data->argv, NULL);
+	g_strfreev ((gchar**) unmount_data->argv->pdata);
+	g_ptr_array_free (unmount_data->argv, FALSE);
+
+	g_free (unmount_data);
+}
+
+static gboolean
+command_done (gpointer data)
+{
+	CommandData *unmount_data;
+	unmount_data = data;
+
+	if (unmount_data->timeout_tag != 0) {
+		g_source_remove (unmount_data->timeout_tag);
+	}
+
+	if (unmount_data->loop != NULL &&
+	    g_main_loop_is_running (unmount_data->loop)) {
+		g_main_loop_quit (unmount_data->loop);
+	}
+
+	if (unmount_data->timeout) {
+		/* We timed out, so unmount_data wasn't freed
+		   at mainloop exit. */
+		free_command_data (unmount_data);
+	}
+
+	return FALSE;
+}
+
+static gboolean
+command_timeout (gpointer data)
+{
+	CommandData *unmount_data;
+	unmount_data = data;
+
+	/* We're sure, the callback hasn't been run, so just say
+	   we were interrupted and return from the mainloop */
+
+	unmount_data->command_ok = FALSE;
+	unmount_data->timeout_tag = 0;
+	unmount_data->timeout = TRUE;
+
+	if (g_main_loop_is_running (unmount_data->loop)) {
+		g_main_loop_quit (unmount_data->loop);
+	}
+
+	return FALSE;
+}
+
+/* Returns the full command */
+static const gchar *locations [] = {
+	"/bin",
+	"/sbin",
+	"/usr/sbin",
+	NULL
+};
+
+static gchar *
+try_hidden_locations (const gchar *name) {
+	int i;
+
+	for (i = 0; locations [i]; i++) {
+		gchar *path;
+
+		path = g_build_path (G_DIR_SEPARATOR_S,
+				     locations [i],
+				     name,
+				     NULL);
+		if (g_file_test (path, G_FILE_TEST_EXISTS))
+			return path;
+
+		g_free (path);
+	}
+
+	return NULL;
+}
+
+static gboolean
+create_command (const gchar *device,
+		GPtrArray *argv,
+		gboolean mount)
+{
+	gchar *gnome_mount_path;
+	gchar *pmount_path;
+	gchar *str;
+
+	/* try to see if gnome-mount is available */
+	gnome_mount_path = g_find_program_in_path ("gnome-mount");
+	if (gnome_mount_path) {
+		g_ptr_array_add (argv, gnome_mount_path);
+		str = g_strdup_printf ("--device=%s", device);
+		g_ptr_array_add (argv, str);
+
+		if (!mount) {
+			str = g_strdup ("--unmount");
+			g_ptr_array_add (argv, str);
+		}
+
+		str = g_strdup ("--no-ui");
+		g_ptr_array_add (argv, str);
+
+		str = g_strdup ("-t");
+		g_ptr_array_add (argv, str);
+
+		g_ptr_array_add (argv, NULL);
+		return TRUE;
+	}
+
+	/* see if pmount or pumount are on the file system (used by ubuntu) */
+	if (mount)
+		pmount_path = g_find_program_in_path ("pmount");
+	else
+		pmount_path = g_find_program_in_path ("pumount");
+
+	if (pmount_path) {
+		g_ptr_array_add (argv, pmount_path);
+		g_ptr_array_add (argv, g_strdup (device));
+	}
+	else if (!mount) {
+		/* try to use traditional ways */
+		str = g_find_program_in_path ("umount");
+
+		if (!str)
+			str = try_hidden_locations ("umount");
+
+		if (!str) {
+			g_ptr_array_add (argv, NULL);
+			g_strfreev ((gchar**) argv->pdata);
+			g_ptr_array_free (argv, FALSE);
+			return FALSE;
+		}
+
+		g_ptr_array_add (argv, str);
+		g_ptr_array_add (argv, g_strdup (device));
+	}
+	else {
+		/* try to use traditional ways */
+		str = g_find_program_in_path ("mount");
+
+		if (!str)
+			str = try_hidden_locations ("mount");
+
+		if (!str) {
+			g_ptr_array_add (argv, NULL);
+			g_strfreev ((gchar**) argv->pdata);
+			g_ptr_array_free (argv, FALSE);
+			return FALSE;
+		}
+
+		g_ptr_array_add (argv, str);
+		g_ptr_array_add (argv, g_strdup (device));
+	}
+
+	g_ptr_array_add (argv, NULL);
+
+	return TRUE;
+}
+
+static void *
+command_thread_start (void *arg)
+{
+	GError      *error;
+	CommandData *data;
+	gint         exit_status;
+
+	data = arg;
+
+	data->command_ok = TRUE;
+
+	error = NULL;
+	if (g_spawn_sync (NULL,
+			  (char **) data->argv->pdata,
+			  NULL,
+			  0,
+			  NULL, NULL,
+			  NULL,
+			  NULL,
+			  &exit_status,
+			  &error)) {
+		if (exit_status == 0) {
+			data->command_ok = TRUE;
+		} else {
+			data->command_ok = FALSE;
+		}
+
+		/* Delay a bit to make sure unmount finishes */
+		sleep (2);
+	} else {
+		/* spawn failure */
+		if (error)
+			g_propagate_error (&data->error, error);
+
+		data->command_ok = FALSE;
+	}
+
+	g_idle_add (command_done, data);
+
+	g_thread_exit (NULL);
+
+	return NULL;
+}
+
+static gboolean
+launch_command (NautilusBurnDrive *drive,
+		gboolean mount,
+		GError **error)
+{
+	GPtrArray *argv;
+	CommandData *data;
+	gboolean command_ok;
+	const gchar *device;
+
+	g_return_val_if_fail (drive != NULL, FALSE);
+
+	/* fetches the device for the drive */
+	device = nautilus_burn_drive_get_device (drive);
+	if (device == NULL)
+		return FALSE;
+
+	/* create the appropriate command */
+	argv = g_ptr_array_new ();
+	if (!create_command (device, argv, mount)) {
+		g_set_error (error,
+			     G_SPAWN_ERROR,
+			     G_SPAWN_ERROR_NOENT,
+			     _("(u)mount command could not be found in the path"));
+		return FALSE;
+	}
+
+	command_ok = FALSE;
+
+	data = g_new0 (CommandData, 1);
+	data->loop = g_main_loop_new (NULL, FALSE);
+	data->argv = argv;
+	data->timeout_tag = g_timeout_add (5 * 1000, command_timeout, data);
+
+	g_thread_create (command_thread_start,
+			 data,
+			 FALSE,
+			 NULL);
+
+	g_main_loop_run (data->loop);
+	g_main_loop_unref (data->loop);
+	data->loop = NULL;
+
+	/* WORKAROUND: on my system (fedora 6/7) gnome-mount manages to unmount
+	 * a volume but returns an error since it can't remove the mount point
+	 * directory. So to avoid that (after all we don't care about this kind
+	 * of error since in the end the volume gets unmounted) we only error
+	 * out if the volume wasn't unmounted (which makes it our only criterium
+	 * for success/failure) */
+	if (mount != nautilus_burn_drive_is_mounted (drive)) {
+		command_ok = FALSE;
+
+		if (data->error)
+			g_propagate_error (error, data->error);
+		else
+			g_set_error (error,
+				     BRASERO_BURN_ERROR,
+				     BRASERO_BURN_ERROR_GENERAL,
+				     _("the drive could not be mounted"));
+	}
+	else
+		command_ok = TRUE;
+
+	/* Don't free data if mount operation still running. */
+	if (!data->timeout)
+		free_command_data (data);
+
+	return command_ok;
+}
+
+gboolean
+brasero_drive_mount (BraseroDrive *drive, GError **error)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (drive);
+
+	return launch_command (priv->ndrive, TRUE, error);
+}
+
+gboolean
+brasero_drive_unmount (BraseroDrive *drive, GError **error)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (drive);
+
+	return launch_command (priv->ndrive, FALSE, error);
+}
+
+gboolean
+brasero_drive_unmount_wait (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+
+	return nautilus_burn_drive_unmount (priv->ndrive);
+}
+
+static GDrive *
+brasero_drive_get_gdrive (BraseroDrive *drive)
+{
+	BraseroDrivePrivate *priv;
+	GVolumeMonitor *monitor;
+	GList *drives;
+	GList *iter;
+
+	priv = BRASERO_DRIVE_PRIVATE (drive);
+
+	monitor = g_volume_monitor_get ();
+	drives = g_volume_monitor_get_connected_drives (monitor);
+	for (iter = drives; iter; iter = iter->next) {
+		GDrive *vfs_drive;
+		GList *vol_iter;
+		GList *volumes;
+
+		vfs_drive = iter->data;
+		if (!g_drive_has_media (vfs_drive))
+			continue;
+
+		/* FIXME: try to see if we can get the identifier for drive */
+		volumes = g_drive_get_volumes (vfs_drive);
+		for (vol_iter = volumes; vol_iter; vol_iter = vol_iter->next) {
+			GVolume *volume;
+			gchar *device_path;
+
+			volume = vol_iter->data;
+			device_path = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
+			if (!strcmp (device_path, nautilus_burn_drive_get_device (priv->ndrive))) {
+
+				g_object_ref (vfs_drive);
+
+				g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
+				g_list_free (volumes);
+
+				g_list_foreach (drives, (GFunc) g_object_unref, NULL);
+				g_list_free (drives);
+
+				g_free (device_path);
+				return vfs_drive;
+			}
+			g_free (device_path);
+		}
+		g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
+		g_list_free (volumes);
+	}
+	g_list_foreach (drives, (GFunc) g_object_unref, NULL);
+	g_list_free (drives);
+
+	return NULL;
+}
+
+gchar *
+brasero_drive_get_mount_point (BraseroDrive *drive,
+			       GError **error)
+{
+	gchar *mount_point = NULL;
+	gchar *local_path = NULL;
+	GDrive *vfsdrive = NULL;
+	GList *iter, *volumes;
+
+	/* get the uri for the mount point */
+	vfsdrive = brasero_drive_get_gdrive (drive);
+	volumes = g_drive_get_volumes (vfsdrive);
+	g_object_unref (vfsdrive);
+
+	for (iter = volumes; iter; iter = iter->next) {
+		GVolume *volume;
+		GMount *mount;
+		GFile *root;
+
+		volume = iter->data;
+
+		mount = g_volume_get_mount (volume);
+		if (!mount)
+			continue;
+
+		root = g_mount_get_root (mount);
+		g_object_unref (mount);
+
+		mount_point = g_file_get_uri (root);
+		g_object_unref (root);
+
+		if (mount_point)
+			break;
+	}
+	g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
+	g_list_free (volumes);
+
+	if (!mount_point || strncmp (mount_point, "file://", 7)) {
+		/* mount point won't be usable */
+		if (mount_point) {
+			g_free (mount_point);
+			mount_point = NULL;
+		}
+
+		g_set_error (error,
+			     BRASERO_BURN_ERROR,
+			     BRASERO_BURN_ERROR_GENERAL,
+			     _("the disc mount point could not be retrieved."));
+	}
+	else {
+		gchar *tmp;
+
+		local_path = g_filename_from_uri (mount_point, NULL, NULL);
+		tmp = local_path;
+		local_path = g_strdup (local_path);
+		g_free (tmp);
+		
+		g_free (mount_point);
+	}
+
+	return local_path;
+}
+
+gboolean
+brasero_drive_is_mounted (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_is_mounted (priv->ndrive);
+}
+
+gboolean
+brasero_drive_is_door_open (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_door_is_open (priv->ndrive);	
+}
+
+gboolean
+brasero_drive_lock (BraseroDrive *self,
+		    const gchar *reason,
+		    gchar **reason_for_failure)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_lock (priv->ndrive, reason, reason_for_failure);
+}
+
+gboolean
+brasero_drive_unlock (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_unlock (priv->ndrive);
+}
+
+gchar *
+brasero_drive_get_display_name (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_get_name_for_display (priv->ndrive);
+}
+
+gchar *
+brasero_drive_get_volume_label (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+	gchar *label;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	label = nautilus_burn_drive_get_media_label (priv->ndrive);
+	if (label && label [0] == '\0') {
+		g_free (label);
+		return NULL;
+	}
+
+	return label;
+}
+
+const gchar *
+brasero_drive_get_device (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_get_device (priv->ndrive);
+}
+
+BraseroMedium *
+brasero_drive_get_medium (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	if (!self)
+		return NULL;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return priv->medium;
+}
+
+NautilusBurnDrive *
+brasero_drive_get_nautilus_drive (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	if (!self)
+		return NULL;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return priv->ndrive;
+}
+
+void
+brasero_drive_set_medium (BraseroDrive *self,
+			  BraseroMedium *medium)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+
+	if (priv->medium) {
+		g_signal_emit (self,
+			       drive_signals [MEDIUM_REMOVED],
+			       0,
+			       priv->medium);
+
+		g_object_unref (priv->medium);
+		priv->medium = NULL;
+	}
+
+	priv->medium = medium;
+
+	if (medium) {
+		g_object_ref (medium);
+		g_signal_emit (self,
+			       drive_signals [MEDIUM_INSERTED],
+			       0,
+			       priv->medium);
+	}
+}
+
+gboolean
+brasero_drive_can_write (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_can_write (priv->ndrive);
+}
+
+gboolean
+brasero_drive_can_rewrite (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return nautilus_burn_drive_can_rewrite (priv->ndrive);
+}
+
+gboolean
+brasero_drive_is_fake (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+	return (nautilus_burn_drive_get_drive_type (priv->ndrive) == NAUTILUS_BURN_DRIVE_TYPE_FILE);
+}
+
+static void
+brasero_drive_init (BraseroDrive *object)
+{ }
+
+static void
+brasero_drive_finalize (GObject *object)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (object);
+
+	if (priv->ndrive) {
+		g_object_unref (priv->ndrive);
+		priv->ndrive = NULL;
+	}
+
+	if (priv->medium) {
+		g_object_unref (priv->medium);
+		priv->medium = NULL;
+	}
+
+	G_OBJECT_CLASS (brasero_drive_parent_class)->finalize (object);
+}
+
+static void
+brasero_drive_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+	BraseroDrivePrivate *priv;
+
+	g_return_if_fail (BRASERO_IS_DRIVE (object));
+
+	priv = BRASERO_DRIVE_PRIVATE (object);
+
+	switch (prop_id)
+	{
+	case PROP_DRIVE:
+		priv->ndrive = g_value_get_object (value);
+		g_object_ref (priv->ndrive);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+brasero_drive_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+	BraseroDrivePrivate *priv;
+
+	g_return_if_fail (BRASERO_IS_DRIVE (object));
+
+	priv = BRASERO_DRIVE_PRIVATE (object);
+
+	switch (prop_id)
+	{
+	case PROP_DRIVE:
+		g_object_ref (priv->ndrive);
+		g_value_set_object (value, priv->ndrive);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+brasero_drive_class_init (BraseroDriveClass *klass)
+{
+	GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (BraseroDrivePrivate));
+
+	object_class->finalize = brasero_drive_finalize;
+	object_class->set_property = brasero_drive_set_property;
+	object_class->get_property = brasero_drive_get_property;
+
+	drive_signals[MEDIUM_INSERTED] =
+		g_signal_new ("medium_added",
+		              G_OBJECT_CLASS_TYPE (klass),
+		              G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_ACTION,
+		              0,
+		              NULL, NULL,
+		              g_cclosure_marshal_VOID__OBJECT,
+		              G_TYPE_NONE, 1,
+		              BRASERO_TYPE_MEDIUM);
+
+	drive_signals[MEDIUM_REMOVED] =
+		g_signal_new ("medium_removed",
+		              G_OBJECT_CLASS_TYPE (klass),
+		              G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_ACTION,
+		              0,
+		              NULL, NULL,
+		              g_cclosure_marshal_VOID__OBJECT,
+		              G_TYPE_NONE, 1,
+		              BRASERO_TYPE_MEDIUM);
+
+	g_object_class_install_property (object_class,
+	                                 PROP_DRIVE,
+	                                 g_param_spec_object ("drive",
+	                                                      "drive",
+	                                                      "drive in which medium is inserted",
+	                                                      NAUTILUS_BURN_TYPE_DRIVE,
+	                                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+BraseroDrive *
+brasero_drive_new (NautilusBurnDrive *drive)
+{
+	return g_object_new (BRASERO_TYPE_DRIVE,
+			     "drive", drive,
+			     NULL);
+}

Added: trunk/src/burn-drive.h
==============================================================================
--- (empty file)
+++ trunk/src/burn-drive.h	Fri Feb 29 14:04:05 2008
@@ -0,0 +1,121 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * trunk
+ * Copyright (C) Philippe Rouquier 2008 <bonfire-app wanadoo fr>
+ * 
+ * trunk is free software.
+ * 
+ * You may redistribute it and/or modify it under the terms of the
+ * GNU General Public License, as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ * 
+ * trunk is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with trunk.  If not, write to:
+ * 	The Free Software Foundation, Inc.,
+ * 	51 Franklin Street, Fifth Floor
+ * 	Boston, MA  02110-1301, USA.
+ */
+
+#include <glib-object.h>
+
+#include <nautilus-burn-drive.h>
+
+#ifndef _BURN_DRIVE_H_
+#define _BURN_DRIVE_H_
+
+#include "burn-medium.h"
+
+G_BEGIN_DECLS
+
+#define BRASERO_TYPE_DRIVE             (brasero_drive_get_type ())
+#define BRASERO_DRIVE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_DRIVE, BraseroDrive))
+#define BRASERO_DRIVE_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_DRIVE, BraseroDriveClass))
+#define BRASERO_IS_DRIVE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BRASERO_TYPE_DRIVE))
+#define BRASERO_IS_DRIVE_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_DRIVE))
+#define BRASERO_DRIVE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), BRASERO_TYPE_DRIVE, BraseroDriveClass))
+
+typedef struct _BraseroDriveClass BraseroDriveClass;
+
+struct _BraseroDriveClass
+{
+	GObjectClass parent_class;
+};
+
+struct _BraseroDrive
+{
+	GObject parent_instance;
+};
+
+GType brasero_drive_get_type (void) G_GNUC_CONST;
+
+BraseroDrive *
+brasero_drive_new (NautilusBurnDrive *drive);
+
+NautilusBurnDrive *
+brasero_drive_get_nautilus_drive (BraseroDrive *drive);
+
+void
+brasero_drive_set_medium (BraseroDrive *drive,
+			  BraseroMedium *medium);
+
+BraseroMedium *
+brasero_drive_get_medium (BraseroDrive *drive);
+
+gboolean
+brasero_drive_is_fake (BraseroDrive *self);
+
+gchar *
+brasero_drive_get_display_name (BraseroDrive *self);
+
+gchar *
+brasero_drive_get_volume_label (BraseroDrive *self);
+
+const gchar *
+brasero_drive_get_device (BraseroDrive *self);
+
+gboolean
+brasero_drive_can_write (BraseroDrive *self);
+
+gboolean
+brasero_drive_can_rewrite (BraseroDrive *self);
+
+gboolean
+brasero_drive_eject (BraseroDrive *drive);
+
+gboolean
+brasero_drive_mount (BraseroDrive *drive,
+		     GError **error);
+
+gboolean
+brasero_drive_unmount (BraseroDrive *drive,
+		       GError **error);
+
+gboolean
+brasero_drive_unmount_wait (BraseroDrive *drive);
+
+gboolean
+brasero_drive_is_mounted (BraseroDrive *self);
+
+gboolean
+brasero_drive_is_door_open (BraseroDrive *self);
+
+gchar *
+brasero_drive_get_mount_point (BraseroDrive *drive,
+			       GError **error);
+
+gboolean
+brasero_drive_lock (BraseroDrive *self,
+		    const gchar *reason,
+		    gchar **reason_for_failure);
+gboolean
+brasero_drive_unlock (BraseroDrive *self);
+
+G_END_DECLS
+
+#endif /* _BURN_DRIVE_H_ */

Modified: trunk/src/burn-job.c
==============================================================================
--- trunk/src/burn-job.c	(original)
+++ trunk/src/burn-job.c	Fri Feb 29 14:04:05 2008
@@ -46,7 +46,7 @@
 #include "burn-task-ctx.h"
 #include "burn-task-item.h"
 #include "brasero-marshal.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-medium.h"
 
 typedef struct _BraseroJobOutput {
@@ -362,11 +362,12 @@
 				     GError **error)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	gint64 output_blocks = 0;
 	gint64 media_blocks = 0;
 	BraseroJobPrivate *priv;
 	BraseroBurnFlag flags;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	priv = BRASERO_JOB_PRIVATE (self);
 
@@ -376,6 +377,7 @@
 
 	session = brasero_task_ctx_get_session (priv->ctx);
 	drive = brasero_burn_session_get_burner (session);
+	medium = brasero_drive_get_medium (drive);
 	flags = brasero_burn_session_get_flags (session);
 
 	/* FIXME: if we can't recover the size of the medium 
@@ -384,9 +386,9 @@
 
 	/* see if we are appending or not */
 	if (flags & (BRASERO_BURN_FLAG_APPEND|BRASERO_BURN_FLAG_MERGE))
-		NCB_MEDIA_GET_FREE_SPACE (drive, NULL, &media_blocks);
+		brasero_medium_get_free_space (medium, NULL, &media_blocks);
 	else
-		NCB_MEDIA_GET_CAPACITY (drive, NULL, &media_blocks);
+		brasero_medium_get_capacity (medium, NULL, &media_blocks);
 
 	/* this is not really an error, we'll probably ask the 
 	 * user to load a new disc */
@@ -433,11 +435,10 @@
 	if (file == NULL)
 		goto error;
 
-	info = g_file_query_info (file,
-				  G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
-				  G_FILE_QUERY_INFO_NONE,
-				  NULL,
-				  error);
+	info = g_file_query_filesystem_info (file,
+					     G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
+					     NULL,
+					     error);
 	if (!info)
 		goto error;
 
@@ -1286,8 +1287,8 @@
 brasero_job_get_device (BraseroJob *self, gchar **device)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	BraseroJobPrivate *priv;
+	BraseroDrive *drive;
 	const gchar *path;
 
 	BRASERO_JOB_DEBUG (self);
@@ -1298,7 +1299,7 @@
 	session = brasero_task_ctx_get_session (priv->ctx);
 
 	drive = brasero_burn_session_get_burner (session);
-	path = NCB_DRIVE_GET_DEVICE (drive);
+	path = brasero_drive_get_device (drive);
 	*device = g_strdup (path);
 
 	return BRASERO_BURN_OK;
@@ -1325,8 +1326,9 @@
 brasero_job_get_last_session_address (BraseroJob *self, gint64 *address)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	BraseroJobPrivate *priv;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	BRASERO_JOB_DEBUG (self);
 
@@ -1335,7 +1337,8 @@
 	priv = BRASERO_JOB_PRIVATE (self);
 	session = brasero_task_ctx_get_session (priv->ctx);
 	drive = brasero_burn_session_get_burner (session);
-	NCB_MEDIA_GET_LAST_DATA_TRACK_ADDRESS (drive, NULL, address);
+	medium = brasero_drive_get_medium (drive);
+	brasero_medium_get_last_data_track_address (medium, NULL, address);
 
 	return BRASERO_BURN_OK;
 }
@@ -1344,8 +1347,9 @@
 brasero_job_get_next_writable_address (BraseroJob *self, gint64 *address)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	BraseroJobPrivate *priv;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	BRASERO_JOB_DEBUG (self);
 
@@ -1354,7 +1358,8 @@
 	priv = BRASERO_JOB_PRIVATE (self);
 	session = brasero_task_ctx_get_session (priv->ctx);
 	drive = brasero_burn_session_get_burner (session);
-	*address = NCB_MEDIA_GET_NEXT_WRITABLE_ADDRESS (drive);
+	medium = brasero_drive_get_medium (drive);
+	*address = brasero_medium_get_next_writable_address (medium);
 
 	return BRASERO_BURN_OK;
 }
@@ -1403,8 +1408,9 @@
 brasero_job_get_max_rate (BraseroJob *self, guint64 *rate)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	BraseroJobPrivate *priv;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 
 	BRASERO_JOB_DEBUG (self);
 
@@ -1414,7 +1420,9 @@
 	session = brasero_task_ctx_get_session (priv->ctx);
 
 	drive = brasero_burn_session_get_burner (session);
-	*rate = NCB_MEDIA_GET_MAX_WRITE_RATE  (drive);
+	medium = brasero_drive_get_medium (drive);
+
+	*rate = brasero_medium_get_max_write_speed (medium);
 
 	return BRASERO_BURN_OK;
 }
@@ -1423,8 +1431,9 @@
 brasero_job_get_max_speed (BraseroJob *self, guint *speed)
 {
 	BraseroBurnSession *session;
-	NautilusBurnDrive *drive;
 	BraseroJobPrivate *priv;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 	BraseroMedia media;
 	guint64 rate;
 
@@ -1436,8 +1445,8 @@
 	session = brasero_task_ctx_get_session (priv->ctx);
 
 	drive = brasero_burn_session_get_burner (session);
-	rate = NCB_MEDIA_GET_MAX_WRITE_RATE  (drive);
-	media = NCB_MEDIA_GET_STATUS (drive);
+	rate = brasero_medium_get_max_write_speed (medium);
+	media = brasero_medium_get_status (medium);
 	if (media & BRASERO_MEDIUM_DVD)
 		*speed = NAUTILUS_BURN_DRIVE_DVD_SPEED (rate);
 	else 

Modified: trunk/src/burn-medium-monitor.c
==============================================================================
--- trunk/src/burn-medium-monitor.c	(original)
+++ trunk/src/burn-medium-monitor.c	Fri Feb 29 14:04:05 2008
@@ -28,9 +28,10 @@
 #include <glib.h>
 #include <glib/gi18n-lib.h>
 
+#include <nautilus-burn-init.h>
 #include <nautilus-burn-drive-monitor.h>
 
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 #include "burn-medium.h"
 #include "burn-medium-monitor.h"
@@ -38,8 +39,9 @@
 typedef struct _BraseroMediumMonitorPrivate BraseroMediumMonitorPrivate;
 struct _BraseroMediumMonitorPrivate
 {
-	GSList * media;
-	BraseroMedium *file_medium;
+	GSList *media;
+	GSList *drives;
+
 	NautilusBurnDriveMonitor *monitor;
 };
 
@@ -58,24 +60,6 @@
 
 G_DEFINE_TYPE (BraseroMediumMonitor, brasero_medium_monitor, G_TYPE_OBJECT);
 
-static BraseroMedium *
-brasero_burn_medium_get_file (BraseroMediumMonitor *self)
-{
-	BraseroMediumMonitorPrivate *priv;
-
-	priv = BRASERO_MEDIUM_MONITOR_PRIVATE (self);
-
-	if (priv->file_medium) {
-		g_object_ref (priv->file_medium);
-		return priv->file_medium;
-	}
-
-	priv->file_medium = g_object_new (BRASERO_TYPE_MEDIUM,
-					  "drive", nautilus_burn_drive_monitor_get_drive_for_image (priv->monitor),
-					  NULL);
-	g_object_ref (priv->file_medium);
-	return priv->file_medium;
-}
 
 GSList *
 brasero_medium_monitor_get_media (BraseroMediumMonitor *self,
@@ -92,6 +76,7 @@
 
 		medium = iter->data;
 		if ((type & BRASERO_MEDIA_TYPE_READABLE)
+		&& !(brasero_medium_get_status (medium) & BRASERO_MEDIUM_FILE)
 		&&  (brasero_medium_get_status (medium) & (BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))) {
 			list = g_slist_prepend (list, medium);
 			g_object_ref (medium);
@@ -110,32 +95,56 @@
 			if (brasero_medium_can_be_rewritten (medium)) {
 				list = g_slist_prepend (list, medium);
 				g_object_ref (medium);
+				continue;
 			}
 		}
-	}
 
-	if (type & BRASERO_MEDIA_TYPE_FILE)
-		list = g_slist_append (list, brasero_burn_medium_get_file (self));
+		if (type & BRASERO_MEDIA_TYPE_FILE) {
+			if (brasero_medium_get_status (medium) & BRASERO_MEDIUM_FILE) {
+				list = g_slist_prepend (list, medium);
+				g_object_ref (medium);
+			}
+		}
+	}
 
 	return list;
 }
 
 static void
 brasero_medium_monitor_inserted_cb (NautilusBurnDriveMonitor *monitor,
-				    NautilusBurnDrive *drive,
-				    BraseroMedium *self)
+				    NautilusBurnDrive *ndrive,
+				    BraseroMediumMonitor *self)
 {
 	BraseroMediumMonitorPrivate *priv;
+	BraseroDrive *drive = NULL;
 	BraseroMedium *medium;
+	GSList *iter;
 
 	priv = BRASERO_MEDIUM_MONITOR_PRIVATE (self);
 
+	/* the drive must have been created first */
+	for (iter = priv->drives; iter; iter = iter->next) {
+		BraseroDrive *tmp;
+
+		tmp = iter->data;
+		if (nautilus_burn_drive_equal (brasero_drive_get_nautilus_drive (tmp), ndrive)) {
+			drive = tmp;
+			break;
+		}
+	}
+
+	if (!drive) {
+		drive = brasero_drive_new (ndrive);
+		priv->drives = g_slist_prepend (priv->drives, drive);
+	}
+
 	medium = brasero_medium_new (drive);
-	NCB_DRIVE_SET_MEDIUM (drive, medium);
 
 	priv->media = g_slist_prepend (priv->media, medium);
 	g_object_ref (medium);
 
+	brasero_drive_set_medium (drive, medium);
+
 	g_signal_emit (self,
 		       medium_monitor_signals [MEDIUM_INSERTED],
 		       0,
@@ -144,27 +153,57 @@
 
 static void
 brasero_medium_monitor_removed_cb (NautilusBurnDriveMonitor *monitor,
-				   NautilusBurnDrive *drive,
-				   BraseroMedium *self)
+				   NautilusBurnDrive *ndrive,
+				   BraseroMediumMonitor *self)
 {
 	BraseroMediumMonitorPrivate *priv;
-	BraseroMedium *medium;
+	GSList *iter;
 
 	priv = BRASERO_MEDIUM_MONITOR_PRIVATE (self);
+	for (iter = priv->drives; iter; iter = iter->next) {
+		BraseroDrive *drive;
+
+		drive = iter->data;
+		if (nautilus_burn_drive_equal (brasero_drive_get_nautilus_drive (drive), ndrive)) {
+			BraseroMedium *medium;
 
-	medium = NCB_DRIVE_GET_MEDIUM (drive);
-	NCB_DRIVE_SET_MEDIUM (drive, NULL);
+			medium = brasero_drive_get_medium (drive);
+			brasero_drive_set_medium (drive, NULL);
 
-	if (!medium)
-		return;
+			if (!medium)
+				return;
 
-	priv->media = g_slist_remove (priv->media, medium);
-	g_signal_emit (self,
-		       medium_monitor_signals [MEDIUM_REMOVED],
-		       0,
-		       medium);
+			priv->media = g_slist_remove (priv->media, medium);
+			g_signal_emit (self,
+				       medium_monitor_signals [MEDIUM_REMOVED],
+				       0,
+				       medium);
+
+			g_object_unref (medium);
+
+			break;
+		}
+	}
+}
+
+static void
+brasero_burn_medium_monitor_add_file (BraseroMediumMonitor *self)
+{
+	BraseroMediumMonitorPrivate *priv;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
+
+	priv = BRASERO_MEDIUM_MONITOR_PRIVATE (self);
 
-	g_object_unref (medium);
+	drive = brasero_drive_new (nautilus_burn_drive_monitor_get_drive_for_image (priv->monitor));
+	priv->drives = g_slist_prepend (priv->drives, drive);
+	g_object_ref (drive);
+	
+	medium = g_object_new (BRASERO_TYPE_MEDIUM,
+			       "drive", drive,
+			       NULL);
+	priv->media = g_slist_prepend (priv->media, medium);
+	g_object_ref (medium);
 }
 
 static void
@@ -175,29 +214,33 @@
 
 	priv = BRASERO_MEDIUM_MONITOR_PRIVATE (object);
 
+	nautilus_burn_init ();
 	priv->monitor = nautilus_burn_get_drive_monitor ();
 
 	list = nautilus_burn_drive_monitor_get_drives (priv->monitor);
 	for (iter = list; iter; iter = iter->next) {
+		BraseroDrive *drive;
 		BraseroMedium *medium;
-		NautilusBurnDrive *drive;
+		NautilusBurnDrive *ndrive;
 
-		drive = iter->data;
-		medium = brasero_medium_new (drive);
+		ndrive = iter->data;
 
-		if (nautilus_burn_drive_get_media_type (drive) < NAUTILUS_BURN_MEDIA_TYPE_CD)
+		drive = brasero_drive_new (ndrive);
+		priv->drives = g_slist_prepend (priv->drives, drive);
+		if (nautilus_burn_drive_get_media_type (ndrive) < NAUTILUS_BURN_MEDIA_TYPE_CD)
 			continue;
 
+		medium = brasero_medium_new (drive);
 		if (!medium)
 			continue;
 
+		brasero_drive_set_medium (drive, medium);
 		priv->media = g_slist_prepend (priv->media, medium);
-		g_object_ref (medium);
-
-		NCB_DRIVE_SET_MEDIUM (drive, medium);
 	}
 	g_list_free (list);
 
+	brasero_burn_medium_monitor_add_file (object);
+
 	g_signal_connect (priv->monitor,
 			  "media-added",
 			  G_CALLBACK (brasero_medium_monitor_inserted_cb),
@@ -220,17 +263,14 @@
 		priv->monitor = NULL;
 	}
 
-	if (priv->file_medium) {
-		g_object_unref (priv->file_medium);
-		priv->file_medium = NULL;
-	}
-
 	if (priv->media) {
 		g_slist_foreach (priv->media, (GFunc) g_object_unref, NULL);
 		g_slist_free (priv->media);
 		priv->media = NULL;
 	}
 
+	nautilus_burn_shutdown ();
+
 	G_OBJECT_CLASS (brasero_medium_monitor_parent_class)->finalize (object);
 }
 

Modified: trunk/src/burn-medium-monitor.h
==============================================================================
--- trunk/src/burn-medium-monitor.h	(original)
+++ trunk/src/burn-medium-monitor.h	Fri Feb 29 14:04:05 2008
@@ -39,6 +39,7 @@
 typedef struct _BraseroMediumMonitorClass BraseroMediumMonitorClass;
 typedef struct _BraseroMediumMonitor BraseroMediumMonitor;
 
+
 struct _BraseroMediumMonitorClass
 {
 	GObjectClass parent_class;

Modified: trunk/src/burn-medium.c
==============================================================================
--- trunk/src/burn-medium.c	(original)
+++ trunk/src/burn-medium.c	Fri Feb 29 14:04:05 2008
@@ -34,11 +34,10 @@
 #include <glib.h>
 #include <glib/gi18n-lib.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-debug.h"
 #include "burn-medium.h"
+#include "burn-drive.h"
 
 #include "scsi-device.h"
 #include "scsi-mmc1.h"
@@ -51,7 +50,7 @@
 #include "scsi-q-subchannel.h"
 #include "scsi-dvd-structures.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 const gchar *icons [] = { 	"iso-image-new",
 				"gnome-dev-cdrom",
@@ -103,7 +102,7 @@
 
 	guint64 next_wr_add;
 	BraseroMedia info;
-	NautilusBurnDrive * drive;
+	BraseroDrive * drive;
 };
 
 #define BRASERO_MEDIUM_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_MEDIUM, BraseroMediumPrivate))
@@ -148,6 +147,9 @@
 {
 	BraseroMediumPrivate *priv;
 
+	if (!medium)
+		return BRASERO_MEDIUM_NONE;
+
 	priv = BRASERO_MEDIUM_PRIVATE (medium);
 	return priv->info;
 }
@@ -1955,7 +1957,7 @@
 
 	priv = BRASERO_MEDIUM_PRIVATE (object);
 
-	name = nautilus_burn_drive_get_name_for_display (priv->drive);
+	name = brasero_drive_get_display_name (priv->drive);
 	BRASERO_BURN_LOG ("Initializing information for medium in %s", name);
 	g_free (name);
 
@@ -1988,7 +1990,7 @@
 
 	self = BRASERO_MEDIUM (object);
 	priv = BRASERO_MEDIUM_PRIVATE (object);
-	path = nautilus_burn_drive_get_device (priv->drive);
+	path = brasero_drive_get_device (priv->drive);
 
 	BRASERO_BURN_LOG ("Retrying to open device %s", path);
 	handle = brasero_device_handle_open (path, &code);
@@ -2026,7 +2028,7 @@
 	BraseroDeviceHandle *handle;
 
 	priv = BRASERO_MEDIUM_PRIVATE (self);
-	path = nautilus_burn_drive_get_device (priv->drive);
+	path = brasero_drive_get_device (priv->drive);
 
 	/* the drive might be busy (a burning is going on) so we don't block
 	 * but we re-try to open it every second */
@@ -2097,7 +2099,7 @@
 	g_slist_free (priv->tracks);
 	priv->tracks = NULL;
 
-	nautilus_burn_drive_unref (priv->drive);
+	g_object_unref (priv->drive);
 	priv->drive = NULL;
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -2116,9 +2118,9 @@
 	{
 	case PROP_DRIVE:
 		priv->drive = g_value_get_object (value);
-		nautilus_burn_drive_ref (priv->drive);
+		g_object_ref (priv->drive);
 
-		if (nautilus_burn_drive_get_drive_type (priv->drive) == NAUTILUS_BURN_DRIVE_TYPE_FILE) {
+		if (brasero_drive_is_fake (priv->drive)) {
 			brasero_medium_init_file (BRASERO_MEDIUM (object));
 			break;
 		}
@@ -2143,7 +2145,7 @@
 	switch (prop_id)
 	{
 	case PROP_DRIVE:
-		nautilus_burn_drive_ref (priv->drive);
+		g_object_ref (priv->drive);
 		g_value_set_object (value, priv->drive);
 		break;
 	default:
@@ -2169,7 +2171,7 @@
 	                                 g_param_spec_object ("drive",
 	                                                      "drive",
 	                                                      "drive in which medium is inserted",
-	                                                      NAUTILUS_BURN_TYPE_DRIVE,
+	                                                      BRASERO_TYPE_DRIVE,
 	                                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 }
 
@@ -2184,7 +2186,10 @@
 	&&   (priv->info & BRASERO_MEDIUM_CLOSED))
 		return FALSE;
 
-	return nautilus_burn_drive_can_write (priv->drive);
+	if (priv->info & BRASERO_MEDIUM_FILE)
+		return FALSE;
+
+	return brasero_drive_can_write (priv->drive);
 }
 
 gboolean
@@ -2194,30 +2199,125 @@
 
 	priv = BRASERO_MEDIUM_PRIVATE (self);
 
-	if (!(priv->info & BRASERO_MEDIUM_REWRITABLE))
+	if (!(priv->info & BRASERO_MEDIUM_REWRITABLE)
+	||   (priv->info & BRASERO_MEDIUM_FILE))
 		return FALSE;
 
-	return nautilus_burn_drive_can_rewrite (priv->drive);
+	return brasero_drive_can_rewrite (priv->drive);
 }
 
 gchar *
-brasero_medium_get_display_name (BraseroMedium *self)
+brasero_medium_get_label (BraseroMedium *self,
+			  gboolean with_markup)
 {
-	BraseroMediumPrivate *priv;
+	const gchar *type;
 	gchar *label;
+	gchar *name;
+
+	BraseroMediumPrivate *priv;
 
 	priv = BRASERO_MEDIUM_PRIVATE (self);
-	if (priv->info & BRASERO_MEDIUM_FILE)
-		return g_strdup (_("Image file"));
 
-	label = nautilus_burn_drive_get_media_label (priv->drive);
-	if (label && label [0] != '\0')
+	if (priv->info & BRASERO_MEDIUM_FILE) {
+		label = g_strdup (_("File Image"));
+		if (!with_markup)
+			return label;
+
+		name = label;
+		label = g_strdup_printf ("<b>%s</b>", label);
+		g_free (name);
+
 		return label;
+	}
 
-	return nautilus_burn_drive_get_name_for_display (priv->drive);
+	name = brasero_drive_get_volume_label (priv->drive);
+	type = brasero_medium_get_type_string (self);
+
+	if (name && name [0] != '\0') {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the label of the already existing session on this disc. */
+		if (with_markup)
+			label = g_strdup_printf ("<b>Data %s</b>: \"%s\"",
+						 type,
+						 name);
+		else
+			label = g_strdup_printf ("Data %s: \"%s\"",
+						 type,
+						 name);
+
+		g_free (name);
+		return label;
+	}
+
+	g_free (name);
+	name = brasero_drive_get_display_name (priv->drive);
+
+	if (priv->info & BRASERO_MEDIUM_BLANK) {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the name of the drive this disc is in. */
+		if (with_markup)
+			label = g_strdup_printf (_("<b>Blank %s</b> in %s"),
+						 type,
+						 name);
+		else
+			label = g_strdup_printf (_("Blank %s in %s"),
+						 type,
+						 name);
+	}
+	else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA)) {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the name of the drive this disc is in. */
+		if (with_markup)
+			label = g_strdup_printf (_("<b>Audio and data %s</b> in %s"),
+						 type,
+						 name);
+		else
+			label = g_strdup_printf (_("Audio and data %s in %s"),
+						 type,
+						 name);
+	}
+	else if (priv->info & BRASERO_MEDIUM_HAS_AUDIO) {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the name of the drive this disc is in. */
+		if (with_markup)
+			label = g_strdup_printf (_("<b>Audio %s</b> in %s"),
+						 type,
+						 name);
+		else
+			label = g_strdup_printf (_("Audio %s in %s"),
+						 type,
+						 name);
+	}
+	else if (priv->info & BRASERO_MEDIUM_HAS_DATA) {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the name of the drive this disc is in. */
+		if (with_markup)
+			label = g_strdup_printf (_("<b>Data %s</b> in %s"),
+						 type,
+						 name);
+		else
+			label = g_strdup_printf (_("Data %s in %s"),
+						 type,
+						 name);
+	}
+	else {
+		/* NOTE for translators: the first is the disc type and the
+		 * second the name of the drive this disc is in. */
+		if (with_markup)
+			label = g_strdup_printf (_("<b>%s</b> in %s"),
+						 type,
+						 name);
+		else
+			label = g_strdup_printf (_("%s in %s"),
+						 type,
+						 name);
+	}
+
+	g_free (name);
+	return label;
 }
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_medium_get_drive (BraseroMedium *self)
 {
 	BraseroMediumPrivate *priv;
@@ -2256,7 +2356,7 @@
 }
 
 BraseroMedium *
-brasero_medium_new (NautilusBurnDrive *drive)
+brasero_medium_new (BraseroDrive *drive)
 {
 	g_return_val_if_fail (drive != NULL, NULL);
 	return BRASERO_MEDIUM (g_object_new (BRASERO_TYPE_MEDIUM,

Modified: trunk/src/burn-medium.h
==============================================================================
--- trunk/src/burn-medium.h	(original)
+++ trunk/src/burn-medium.h	Fri Feb 29 14:04:05 2008
@@ -22,12 +22,10 @@
  * 	Boston, MA  02110-1301, USA.
  */
 
-#ifndef _BURN_MEDIUM_H_
-#define _BURN_MEDIUM_H_
-
 #include <glib-object.h>
 
-#include <nautilus-burn-drive.h>
+#ifndef _BURN_MEDIUM_H_
+#define _BURN_MEDIUM_H_
 
 G_BEGIN_DECLS
 
@@ -35,6 +33,8 @@
 #define CD_RATE 153600
 #define DVD_RATE 1385000
 
+typedef struct _BraseroDrive BraseroDrive;
+
 #define BRASERO_SPEED_TO_RATE_CD(speed)		(guint) ((speed) * CD_RATE)
 #define BRASERO_SPEED_TO_RATE_DVD(speed)	(guint) ((speed) * DVD_RATE)
 #define BRASERO_RATE_TO_SPEED_CD(rate)		(guint) ((rate) / CD_RATE)
@@ -63,7 +63,7 @@
 GType brasero_medium_get_type (void) G_GNUC_CONST;
 
 BraseroMedium *
-brasero_medium_new (NautilusBurnDrive *drive);
+brasero_medium_new (BraseroDrive *drive);
 
 typedef enum {
 	BRASERO_MEDIUM_UNSUPPORTED		= -2,
@@ -260,16 +260,17 @@
 gboolean
 brasero_medium_can_be_written (BraseroMedium *medium);
 
-gchar *
-brasero_medium_get_display_name (BraseroMedium *medium);
-
 const gchar *
 brasero_medium_get_type_string (BraseroMedium *medium);
 
 const gchar *
 brasero_medium_get_icon (BraseroMedium *medium);
 
-NautilusBurnDrive *
+gchar *
+brasero_medium_get_label (BraseroMedium *medium,
+			  gboolean with_markup);
+
+BraseroDrive *
 brasero_medium_get_drive (BraseroMedium *self);
 
 G_END_DECLS

Modified: trunk/src/burn-session.c
==============================================================================
--- trunk/src/burn-session.c	(original)
+++ trunk/src/burn-session.c	Fri Feb 29 14:04:05 2008
@@ -42,13 +42,14 @@
 #include "burn-debug.h"
 #include "burn-track.h"
 #include "burn-medium.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
+#include "burn-medium-monitor.h"
 
 G_DEFINE_TYPE (BraseroBurnSession, brasero_burn_session, G_TYPE_OBJECT);
 #define BRASERO_BURN_SESSION_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_BURN_SESSION, BraseroBurnSessionPrivate))
 
 struct _BraseroSessionSetting {
-	NautilusBurnDrive *burner;
+	BraseroDrive *burner;
 
 	guint num_copies;
 
@@ -95,11 +96,9 @@
 typedef struct _BraseroBurnSessionPrivate BraseroBurnSessionPrivate;
 
 #define BRASERO_BURN_SESSION_WRITE_TO_DISC(priv)	(priv->settings->burner			\
-							&& NCB_DRIVE_GET_TYPE (priv->settings->burner) \
-							!= NAUTILUS_BURN_DRIVE_TYPE_FILE)
+							&& !brasero_drive_is_fake (priv->settings->burner))
 #define BRASERO_BURN_SESSION_WRITE_TO_FILE(priv)	(priv->settings->burner			\
-							&& NCB_DRIVE_GET_TYPE (priv->settings->burner) \
-							== NAUTILUS_BURN_DRIVE_TYPE_FILE)
+							&& brasero_drive_is_fake (priv->settings->burner))
 #define BRASERO_STR_EQUAL(a, b)	((!(a) && !(b)) || ((a) && (b) && !strcmp ((a), (b))))
 
 typedef enum {
@@ -127,7 +126,7 @@
 		g_free (settings->label);
 
 	if (settings->burner)
-		nautilus_burn_drive_unref (settings->burner);
+		g_object_unref (settings->burner);
 
 	memset (settings, 0, sizeof (BraseroSessionSetting));
 }
@@ -140,7 +139,7 @@
 
 	memcpy (dest, original, sizeof (BraseroSessionSetting));
 
-	nautilus_burn_drive_ref (dest->burner);
+	g_object_ref (dest->burner);
 	dest->image = g_strdup (original->image);
 	dest->toc = g_strdup (original->toc);
 	dest->label = g_strdup (original->label);
@@ -155,7 +154,8 @@
 }
 
 static void
-brasero_burn_session_src_media_added (NautilusBurnDrive *drive,
+brasero_burn_session_src_media_added (BraseroDrive *drive,
+				      BraseroMedium *medium,
 				      BraseroBurnSession *self)
 {
 	g_signal_emit (self,
@@ -164,7 +164,8 @@
 }
 
 static void
-brasero_burn_session_src_media_removed (NautilusBurnDrive *drive,
+brasero_burn_session_src_media_removed (BraseroDrive *drive,
+					BraseroMedium *medium,
 					BraseroBurnSession *self)
 {
 	g_signal_emit (self,
@@ -175,7 +176,7 @@
 static void
 brasero_burn_session_start_src_drive_monitoring (BraseroBurnSession *self)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroBurnSessionPrivate *priv;
 
 	if (brasero_burn_session_get_input_type (self, NULL) != BRASERO_TRACK_TYPE_DISC)
@@ -187,11 +188,11 @@
 
 	priv = BRASERO_BURN_SESSION_PRIVATE (self);
 	priv->src_added_sig = g_signal_connect (drive,
-						"media-added",
+						"medium-added",
 						G_CALLBACK (brasero_burn_session_src_media_added),
 						self);
 	priv->src_removed_sig = g_signal_connect (drive,
-						  "media-removed",
+						  "medium-removed",
 						  G_CALLBACK (brasero_burn_session_src_media_removed),
 						  self);
 }
@@ -199,7 +200,7 @@
 static void
 brasero_burn_session_stop_src_drive_monitoring (BraseroBurnSession *self)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroBurnSessionPrivate *priv;
 
 	if (brasero_burn_session_get_input_type (self, NULL) != BRASERO_TRACK_TYPE_DISC)
@@ -353,7 +354,8 @@
  */
 
 static void
-brasero_burn_session_dest_media_added (NautilusBurnDrive *drive,
+brasero_burn_session_dest_media_added (BraseroDrive *drive,
+				       BraseroMedium *medium,
 				       BraseroBurnSession *self)
 {
 	g_signal_emit (self,
@@ -362,7 +364,8 @@
 }
 
 static void
-brasero_burn_session_dest_media_removed (NautilusBurnDrive *drive,
+brasero_burn_session_dest_media_removed (BraseroDrive *drive,
+					 BraseroMedium *medium,
 					 BraseroBurnSession *self)
 {
 	g_signal_emit (self,
@@ -372,7 +375,7 @@
 
 void
 brasero_burn_session_set_burner (BraseroBurnSession *self,
-				 NautilusBurnDrive *drive)
+				 BraseroDrive *drive)
 {
 	BraseroBurnSessionPrivate *priv;
 
@@ -380,7 +383,7 @@
 
 	priv = BRASERO_BURN_SESSION_PRIVATE (self);
 
-	if (nautilus_burn_drive_equal (drive, priv->settings->burner))
+	if (drive == priv->settings->burner)
 		return;
 
 	if (priv->settings->burner) {
@@ -396,19 +399,19 @@
 			priv->dest_removed_sig = 0;	
 		}
 
-		nautilus_burn_drive_unref (priv->settings->burner);
+		g_object_unref (priv->settings->burner);
 	}
 
 	if (drive) {
 		priv->dest_added_sig = g_signal_connect (drive,
-							 "media-added",
+							 "medium-added",
 							 G_CALLBACK (brasero_burn_session_dest_media_added),
 							 self);
 		priv->dest_removed_sig = g_signal_connect (drive,
-							   "media-removed",
+							   "medium-removed",
 							   G_CALLBACK (brasero_burn_session_dest_media_removed),
 							   self);
-		nautilus_burn_drive_ref (drive);
+		g_object_ref (drive);
 	}
 
 	priv->settings->burner = drive;
@@ -418,7 +421,7 @@
 		       0);
 }
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_burn_session_get_burner (BraseroBurnSession *self)
 {
 	BraseroBurnSessionPrivate *priv;
@@ -449,6 +452,7 @@
 brasero_burn_session_get_rate (BraseroBurnSession *self)
 {
 	BraseroBurnSessionPrivate *priv;
+	BraseroMedium *medium;
 	gint64 max_rate;
 
 	g_return_val_if_fail (BRASERO_IS_BURN_SESSION (self), 0);
@@ -458,7 +462,8 @@
 	if (!BRASERO_BURN_SESSION_WRITE_TO_DISC (priv))
 		return 0;
 
-	max_rate = NCB_MEDIA_GET_MAX_WRITE_RATE (priv->settings->burner);
+	medium = brasero_drive_get_medium (priv->settings->burner);
+	max_rate = brasero_medium_get_max_write_speed (medium);
 	if (priv->settings->rate <= 0)
 		return max_rate;
 	else
@@ -714,15 +719,20 @@
 					    const gchar *toc)
 {
 	BraseroBurnSessionPrivate *priv;
-	NautilusBurnDriveMonitor *monitor;
+	BraseroMediumMonitor *monitor;
+	GSList *list;
 
 	g_return_val_if_fail (BRASERO_IS_BURN_SESSION (self), BRASERO_BURN_ERR);
 
 	priv = BRASERO_BURN_SESSION_PRIVATE (self);
-	monitor = nautilus_burn_get_drive_monitor ();
+	monitor = brasero_medium_monitor_get_default ();
 
+	list = brasero_medium_monitor_get_media (monitor, BRASERO_MEDIA_TYPE_FILE);
 	if (!BRASERO_BURN_SESSION_WRITE_TO_FILE (priv))
-		brasero_burn_session_set_burner (self, nautilus_burn_drive_monitor_get_drive_for_image (monitor));
+		brasero_burn_session_set_burner (self, list->data);
+
+	g_slist_free (list);
+	g_object_unref (monitor);
 
 	if (priv->settings->format == format
 	&&  BRASERO_STR_EQUAL (image, priv->settings->image)
@@ -1105,11 +1115,11 @@
 
 	if (priv->settings->burner) {
 		priv->dest_added_sig = g_signal_connect (priv->settings->burner,
-							 "media-added",
+							 "medium-added",
 							 G_CALLBACK (brasero_burn_session_dest_media_added),
 							 self);
 		priv->dest_removed_sig = g_signal_connect (priv->settings->burner,
-							   "media-removed",
+							   "medium-removed",
 							   G_CALLBACK (brasero_burn_session_dest_media_removed),
 							   self);
 	}
@@ -1197,6 +1207,7 @@
 brasero_burn_session_get_dest_media (BraseroBurnSession *self)
 {
 	BraseroBurnSessionPrivate *priv;
+	BraseroMedium *medium;
 
 	g_return_val_if_fail (BRASERO_IS_BURN_SESSION (self), BRASERO_MEDIUM_NONE);
 
@@ -1204,10 +1215,38 @@
 	if (BRASERO_BURN_SESSION_WRITE_TO_FILE (priv))
 		return BRASERO_MEDIUM_FILE;
 
-	return NCB_MEDIA_GET_STATUS (priv->settings->burner);
+	medium = brasero_drive_get_medium (priv->settings->burner);
+	return brasero_medium_get_status (medium);
 }
 
-NautilusBurnDrive *
+BraseroMedium *
+brasero_burn_session_get_src_medium (BraseroBurnSession *self)
+{
+	BraseroTrack *track;
+	BraseroBurnSessionPrivate *priv;
+
+	g_return_val_if_fail (BRASERO_IS_BURN_SESSION (self), NULL);
+
+	priv = BRASERO_BURN_SESSION_PRIVATE (self);
+
+	/* to be able to burn to a DVD we must:
+	 * - have only one track
+	 * - not have any audio track */
+
+	if (!priv->tracks)
+		return NULL;
+
+	if (g_slist_length (priv->tracks) != 1)
+		return NULL;
+
+	track = priv->tracks->data;
+	if (brasero_track_get_type (track, NULL) != BRASERO_TRACK_TYPE_DISC)
+		return NULL;
+
+	return brasero_track_get_medium_source (track);
+}
+
+BraseroDrive *
 brasero_burn_session_get_src_drive (BraseroBurnSession *self)
 {
 	BraseroTrack *track;
@@ -1238,7 +1277,7 @@
 brasero_burn_session_same_src_dest_drive (BraseroBurnSession *self)
 {
 	BraseroTrack *track;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroBurnSessionPrivate *priv;
 
 	g_return_val_if_fail (BRASERO_IS_BURN_SESSION (self), FALSE);
@@ -1264,7 +1303,7 @@
 	if (!drive)
 		return FALSE;
 
-	return nautilus_burn_drive_equal (priv->settings->burner, drive);
+	return (priv->settings->burner == drive);
 }
 
 
@@ -1420,7 +1459,10 @@
 	BRASERO_BURN_LOG_FLAGS (priv->settings->flags, "flags\t=");
 
 	if (!brasero_burn_session_is_dest_file (self)) {
-		BRASERO_BURN_LOG_DISC_TYPE (NCB_MEDIA_GET_STATUS (priv->settings->burner), "media type\t=");
+		BraseroMedium *medium;
+
+		medium = brasero_drive_get_medium (priv->settings->burner);
+		BRASERO_BURN_LOG_DISC_TYPE (brasero_medium_get_status (medium), "media type\t=");
 		BRASERO_BURN_LOG ("speed\t= %i", priv->settings->rate);
 		BRASERO_BURN_LOG ("number of copies\t= %i", priv->settings->num_copies);
 	}
@@ -1455,7 +1497,8 @@
 brasero_burn_session_get_config_key (BraseroBurnSession *self,
 				     const gchar *property)
 {
-	NautilusBurnDrive *drive;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 	gchar *display_name;
 	gchar *key = NULL;
 	gchar *disc_type;
@@ -1464,14 +1507,15 @@
 	if (!drive)
 		return NULL;
 
-	if (NCB_MEDIA_GET_STATUS (drive) == BRASERO_MEDIUM_NONE)
+	medium = brasero_drive_get_medium (drive);
+	if (brasero_medium_get_status (medium) == BRASERO_MEDIUM_NONE)
 		return NULL;
 	
 	/* make sure display_name doesn't contain any forbidden characters */
-	display_name = nautilus_burn_drive_get_name_for_display (drive);
+	display_name = brasero_drive_get_display_name (drive);
 	g_strdelimit (display_name, " +()", '_');
 
-	disc_type = g_strdup (NCB_MEDIA_GET_TYPE_STRING (drive));
+	disc_type = g_strdup (brasero_medium_get_type_string (medium));
 	if (!disc_type) {
 		g_free (display_name);
 		return NULL;

Modified: trunk/src/burn-session.h
==============================================================================
--- trunk/src/burn-session.h	(original)
+++ trunk/src/burn-session.h	Fri Feb 29 14:04:05 2008
@@ -28,10 +28,9 @@
 #include <glib.h>
 #include <glib-object.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-track.h"
+#include "burn-drive.h"
 
 G_BEGIN_DECLS
 
@@ -115,7 +114,7 @@
 guint
 brasero_burn_session_get_num_copies (BraseroBurnSession *session);
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_burn_session_get_burner (BraseroBurnSession *session);
 
 
@@ -125,7 +124,7 @@
 
 void
 brasero_burn_session_set_burner (BraseroBurnSession *session,
-				 NautilusBurnDrive *burner);
+				 BraseroDrive *burner);
 
 BraseroBurnResult
 brasero_burn_session_set_image_output (BraseroBurnSession *session,
@@ -225,9 +224,12 @@
 BraseroMedia
 brasero_burn_session_get_dest_media (BraseroBurnSession *session);
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_burn_session_get_src_drive (BraseroBurnSession *session);
 
+BraseroMedium *
+brasero_burn_session_get_src_medium (BraseroBurnSession *session);
+
 gboolean
 brasero_burn_session_is_dest_file (BraseroBurnSession *session);
 

Modified: trunk/src/burn-track.c
==============================================================================
--- trunk/src/burn-track.c	(original)
+++ trunk/src/burn-track.c	Fri Feb 29 14:04:05 2008
@@ -39,7 +39,7 @@
 #include "burn-debug.h"
 #include "burn-medium.h"
 #include "burn-image-format.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-mkisofs-base.h"
 
 struct _BraseroTrack {
@@ -61,7 +61,7 @@
 
 typedef struct {
 	BraseroTrack track;
-	NautilusBurnDrive *disc;
+	BraseroDrive *disc;
 	guint num;
 } BraseroTrackDisc;
 
@@ -238,7 +238,8 @@
 	else if (track->type.type == BRASERO_TRACK_TYPE_DISC) {
 		BraseroTrackDisc *drive = (BraseroTrackDisc *) track;
 
-		nautilus_burn_drive_unref (drive->disc);
+		if (drive->disc)
+			g_object_unref (drive->disc);
 	}
 	else if (track->type.type == BRASERO_TRACK_TYPE_IMAGE) {
 		BraseroTrackImage *image = (BraseroTrackImage *) track;
@@ -318,7 +319,15 @@
 		BraseroTrackDisc *disc;
 
 		disc = (BraseroTrackDisc *) track;
-		type->subtype.media = NCB_MEDIA_GET_STATUS (disc->disc);
+
+		if (disc->disc) {
+			BraseroMedium *medium;
+
+			medium = brasero_drive_get_medium (disc->disc);
+			type->subtype.media = brasero_medium_get_status (medium);
+		}
+		else
+			type->subtype.media = BRASERO_MEDIUM_NONE;
 	}
 
 	return track->type.type;
@@ -349,7 +358,7 @@
 static void
 brasero_track_disc_copy (BraseroTrackDisc *track, BraseroTrackDisc *copy)
 {
-	nautilus_burn_drive_ref (track->disc);
+	g_object_ref (track->disc);
 	copy->disc = track->disc;
 }
 
@@ -407,7 +416,7 @@
 }
 
 BraseroBurnResult
-brasero_track_set_drive_source (BraseroTrack *track, NautilusBurnDrive *drive)
+brasero_track_set_drive_source (BraseroTrack *track, BraseroDrive *drive)
 {
 	BraseroTrackDisc *disc;
 
@@ -417,11 +426,13 @@
 	disc = (BraseroTrackDisc *) track;
 
 	if (disc->disc)
-		nautilus_burn_drive_unref (disc->disc);
+		g_object_unref (disc->disc);
 
-	nautilus_burn_drive_ref (drive);
 	disc->disc = drive;
 
+	if (drive)
+		g_object_ref (drive);
+
 	return BRASERO_BURN_OK;
 }
 
@@ -786,7 +797,7 @@
 	return result;
 }
 
-NautilusBurnDrive *
+BraseroDrive *
 brasero_track_get_drive_source (BraseroTrack *track)
 {
 	BraseroTrackDisc *drive;
@@ -799,6 +810,19 @@
 	return drive->disc;
 }
 
+BraseroMedium *
+brasero_track_get_medium_source (BraseroTrack *track)
+{
+	BraseroTrackDisc *drive;
+
+	if (track->type.type != BRASERO_TRACK_TYPE_DISC)
+		return NULL;
+
+	drive = (BraseroTrackDisc *) track;
+
+	return brasero_drive_get_medium (drive->disc);
+}
+
 gint
 brasero_track_get_drive_track (BraseroTrack *track)
 {
@@ -923,13 +947,15 @@
 				 gint64 *blocks,
 				 gint64 *size)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
+	BraseroMedium *medium;
 
 	drive = brasero_track_get_drive_source (track);
 	if (!drive)
 		return BRASERO_BURN_ERR;
 
-	NCB_MEDIA_GET_CAPACITY (drive, size, blocks);
+	medium = brasero_drive_get_medium (drive);
+	brasero_medium_get_capacity (medium, size, blocks);
 	return BRASERO_BURN_OK;
 }
 
@@ -938,13 +964,15 @@
 				  gint64 *blocks,
 				  gint64 *size)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
+	BraseroMedium *medium;
 
 	drive = brasero_track_get_drive_source (track);
 	if (!drive)
 		return BRASERO_BURN_ERR;
 
-	NCB_MEDIA_GET_DATA_SIZE (drive, size, blocks);
+	medium = brasero_drive_get_medium (drive);
+	brasero_medium_get_data_size (medium, size, blocks);
 	return BRASERO_BURN_OK;
 }
 
@@ -953,13 +981,15 @@
 				   gint64 *blocks,
 				   gint64 *size)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
+	BraseroMedium *medium;
 
 	drive = brasero_track_get_drive_source (track);
 	if (!drive)
 		return BRASERO_BURN_ERR;
 
-	NCB_MEDIA_GET_FREE_SPACE (drive, size, blocks);
+	medium = brasero_drive_get_medium (drive);
+	brasero_medium_get_free_space (medium, size, blocks);
 	return BRASERO_BURN_OK;
 }
 

Modified: trunk/src/burn-track.h
==============================================================================
--- trunk/src/burn-track.h	(original)
+++ trunk/src/burn-track.h	Fri Feb 29 14:04:05 2008
@@ -25,6 +25,7 @@
 #include <glib.h>
 
 #include "burn-basics.h"
+#include "burn-drive.h"
 #include "burn-medium.h"
 #include "burn-image-format.h"
 
@@ -190,7 +191,7 @@
 
 BraseroBurnResult
 brasero_track_set_drive_source (BraseroTrack *track,
-				NautilusBurnDrive *drive);
+				BraseroDrive *drive);
 BraseroBurnResult
 brasero_track_set_drive_track (BraseroTrack *track,
 			       guint num);
@@ -217,7 +218,9 @@
 BraseroSongInfo *
 brasero_track_get_audio_info (BraseroTrack *track);
 
-NautilusBurnDrive *
+BraseroMedium *
+brasero_track_get_medium_source (BraseroTrack *track);
+BraseroDrive *
 brasero_track_get_drive_source (BraseroTrack *track);
 gint
 brasero_track_get_drive_track (BraseroTrack *track);

Modified: trunk/src/burn.c
==============================================================================
--- trunk/src/burn.c	(original)
+++ trunk/src/burn.c	Fri Feb 29 14:04:05 2008
@@ -35,8 +35,6 @@
 #include <glib/gi18n-lib.h>
 #include <glib/gstdio.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "brasero-marshal.h"
 #include "burn-basics.h"
 #include "burn-debug.h"
@@ -48,7 +46,7 @@
 #include "burn-task.h"
 #include "burn-caps.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 #ifdef BUILD_DBUS
   #include "burn-dbus.h"
@@ -67,8 +65,8 @@
 	guint task_nb;
 	BraseroTask *task;
 
-	NautilusBurnDrive *src;
-	NautilusBurnDrive *dest;
+	BraseroDrive *src;
+	BraseroDrive *dest;
 
 #ifdef BUILD_DBUS
 	gint appcookie;
@@ -236,28 +234,28 @@
 static gpointer
 _eject_async (gpointer data)
 {
-	NautilusBurnDrive *drive = NAUTILUS_BURN_DRIVE (data);
+	BraseroDrive *drive = BRASERO_DRIVE (data);
 
-	nautilus_burn_drive_eject (drive);
-	nautilus_burn_drive_unref (drive);
+	brasero_drive_eject (drive);
+	g_object_unref (drive);
 
 	return NULL;
 }
 
 static void
-brasero_burn_eject_async (NautilusBurnDrive *drive)
+brasero_burn_eject_async (BraseroDrive *drive)
 {
 	GError *error = NULL;
 
 	BRASERO_BURN_LOG ("Asynchronous ejection");
-	nautilus_burn_drive_ref (drive);
+	g_object_ref (drive);
 	g_thread_create (_eject_async, drive, FALSE, &error);
 	if (error) {
 		g_warning ("Could not create thread %s\n", error->message);
 		g_error_free (error);
 
-		nautilus_burn_drive_unref (drive);
-		nautilus_burn_drive_eject (drive);
+		g_object_unref (drive);
+		brasero_drive_eject (drive);
 	}
 }
 
@@ -266,6 +264,7 @@
 			       GError **error)
 {
 	BraseroBurnPrivate *priv;
+	BraseroMedium *medium;
 	guint elapsed = 0;
 
 	priv = BRASERO_BURN_PRIVATE (self);
@@ -274,15 +273,15 @@
 	if (!priv->dest)
 		return BRASERO_BURN_OK;
 
-	if (nautilus_burn_drive_is_mounted (priv->dest))
-		nautilus_burn_drive_unmount (priv->dest);
+	if (brasero_drive_is_mounted (priv->dest))
+		brasero_drive_unmount (priv->dest, NULL);
 
 	if (priv->dest_locked) {
 		priv->dest_locked = 0;
-		if (!nautilus_burn_drive_unlock (priv->dest)) {
+		if (!brasero_drive_unlock (priv->dest)) {
 			gchar *name;
 
-			name = nautilus_burn_drive_get_name_for_display (priv->dest);
+			name = brasero_drive_get_display_name (priv->dest);
 			g_set_error (error,
 				     BRASERO_BURN_ERROR,
 				     BRASERO_BURN_ERROR_GENERAL,
@@ -296,7 +295,8 @@
 	brasero_burn_eject_async (priv->dest);
 
 	/* sleep here to make sure that we got time to eject */
-	while (NCB_MEDIA_GET_STATUS (priv->dest) != BRASERO_MEDIUM_NONE) {
+	medium = brasero_drive_get_medium (priv->dest);
+	while (brasero_medium_get_status (medium) != BRASERO_MEDIUM_NONE) {
 		brasero_burn_sleep (self, 500);
 		elapsed += 500;
 
@@ -304,10 +304,10 @@
 			break;
 	}
 
-	if (NCB_MEDIA_GET_STATUS (priv->dest) != BRASERO_MEDIUM_NONE) {
+	if (!medium || brasero_medium_get_status (medium) != BRASERO_MEDIUM_NONE) {
 		gchar *name;
 
-		name = nautilus_burn_drive_get_name_for_display (priv->dest);
+		name = brasero_drive_get_display_name (priv->dest);
 
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
@@ -329,6 +329,7 @@
 			      GError **error)
 {
 	BraseroBurnPrivate *priv;
+	BraseroMedium *medium;
 	guint elapsed = 0;
 
 	priv = BRASERO_BURN_PRIVATE (self);
@@ -336,20 +337,20 @@
 	if (!priv->src)
 		return BRASERO_BURN_OK;
 
-	if (nautilus_burn_drive_is_mounted (priv->src)) {
+	if (brasero_drive_is_mounted (priv->src)) {
 		BraseroBurnResult result;
 
-		result = NCB_DRIVE_UNMOUNT (priv->src, error);
+		result = brasero_drive_unmount (priv->src, error);
 		if (result != BRASERO_BURN_OK)
 			return result;
 	}
 
 	if (priv->src_locked) {
 		priv->src_locked = 0;
-		if (!nautilus_burn_drive_unlock (priv->src)) {
+		if (!brasero_drive_unlock (priv->src)) {
 			gchar *name;
 
-			name = nautilus_burn_drive_get_name_for_display (priv->src);
+			name = brasero_drive_get_display_name (priv->src);
 			g_set_error (error,
 				     BRASERO_BURN_ERROR,
 				     BRASERO_BURN_ERROR_GENERAL,
@@ -363,7 +364,8 @@
 	brasero_burn_eject_async (priv->src);
 
 	/* sleep here to make sure that we got time to eject */
-	while (NCB_MEDIA_GET_STATUS (priv->src) != BRASERO_MEDIUM_NONE) {
+	medium = brasero_drive_get_medium (priv->src);
+	while (brasero_medium_get_status (medium) != BRASERO_MEDIUM_NONE) {
 		brasero_burn_sleep (self, 500);
 		elapsed += 500;
 
@@ -371,10 +373,10 @@
 			break;
 	}
 
-	if (NCB_MEDIA_GET_STATUS (priv->src) != BRASERO_MEDIUM_NONE) {
+	if (brasero_medium_get_status (medium) != BRASERO_MEDIUM_NONE) {
 		gchar *name;
 
-		name = nautilus_burn_drive_get_name_for_display (priv->src);
+		name = brasero_drive_get_display_name (priv->src);
 
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
@@ -394,7 +396,7 @@
 
 static BraseroBurnResult
 brasero_burn_ask_for_media (BraseroBurn *burn,
-			    NautilusBurnDrive *drive,
+			    BraseroDrive *drive,
 			    BraseroBurnError error_type,
 			    BraseroMedia required_media,
 			    GError **error)
@@ -440,9 +442,11 @@
 				GError **error)
 {
 	BraseroMedia media;
+	BraseroMedium *medium;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
 
-	media = NCB_MEDIA_GET_STATUS (priv->src);
+	medium = brasero_drive_get_medium (priv->src);
+	media = brasero_medium_get_status (medium);
 	if (media != BRASERO_MEDIUM_NONE) {
 		BraseroBurnResult result;
 		result = brasero_burn_eject_src_media (burn, error);
@@ -464,9 +468,11 @@
 				 GError **error)
 {
 	BraseroMedia media;
+	BraseroMedium *medium;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
 
-	media = NCB_MEDIA_GET_STATUS (priv->dest);
+	medium = brasero_drive_get_medium (priv->src);
+	media = brasero_medium_get_status (medium);
 	if (media != BRASERO_MEDIUM_NONE) {
 		BraseroBurnResult result;
 
@@ -488,6 +494,7 @@
 {
 	gchar *failure;
 	BraseroMedia media;
+	BraseroMedium *medium;
 	BraseroBurnResult result;
 	BraseroBurnError error_type;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
@@ -503,15 +510,16 @@
 
 
 again:
-	if (nautilus_burn_drive_is_mounted (priv->src)) {
-		if (!NCB_DRIVE_UNMOUNT (priv->src, NULL))
+	if (brasero_drive_is_mounted (priv->src)) {
+		if (!brasero_drive_unmount_wait (priv->src))
 			g_warning ("Couldn't unmount volume in drive: %s",
-				   NCB_DRIVE_GET_DEVICE (priv->src));
+				   brasero_drive_get_device (priv->src));
 	}
 
 	/* NOTE: we used to unmount the media before now we shouldn't need that
 	 * get any information from the drive */
-	media = NCB_MEDIA_GET_STATUS (priv->src);
+	medium = brasero_drive_get_medium (priv->src);
+	media = brasero_medium_get_status (medium);
 	if (media == BRASERO_MEDIUM_NONE)
 		error_type = BRASERO_BURN_ERROR_MEDIA_NONE;
 	else if (media == BRASERO_MEDIUM_BUSY)
@@ -535,7 +543,7 @@
 	}
 
 	if (!priv->src_locked
-	&&  !nautilus_burn_drive_lock (priv->src, _("ongoing copying process"), &failure)) {
+	&&  !brasero_drive_lock (priv->src, _("ongoing copying process"), &failure)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -569,10 +577,11 @@
 
 static BraseroBurnResult
 brasero_burn_lock_rewritable_media (BraseroBurn *burn,
-					GError **error)
+				    GError **error)
 {
 	gchar *failure;
 	BraseroMedia media;
+	BraseroMedium *medium;
 	BraseroBurnResult result;
 	BraseroBurnError error_type;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
@@ -586,7 +595,7 @@
 		return BRASERO_BURN_NOT_SUPPORTED;
 	}
 
-	if (!nautilus_burn_drive_can_rewrite (priv->dest)) {
+	if (!brasero_drive_can_rewrite (priv->dest)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -596,13 +605,14 @@
 
  again:
 
-	if (nautilus_burn_drive_is_mounted (priv->dest)) {
-		if (!NCB_DRIVE_UNMOUNT (priv->dest, NULL))
+	if (brasero_drive_is_mounted (priv->dest)) {
+		if (!brasero_drive_unmount (priv->dest, NULL))
 			g_warning ("Couldn't unmount volume in drive: %s",
-				   NCB_DRIVE_GET_DEVICE (priv->dest));
+				   brasero_drive_get_device (priv->dest));
 	}
 
-	media = NCB_MEDIA_GET_STATUS (priv->dest);
+	medium = brasero_drive_get_medium (priv->dest);
+	media = brasero_medium_get_status (medium);
 	if (media == BRASERO_MEDIUM_NONE)
 		error_type = BRASERO_BURN_ERROR_MEDIA_NONE;
 	else if (media == BRASERO_MEDIUM_BUSY)
@@ -628,7 +638,7 @@
 	}
 
 	if (!priv->dest_locked
-	&&  !nautilus_burn_drive_lock (priv->dest, _("ongoing blanking process"), &failure)) {
+	&&  !brasero_drive_lock (priv->dest, _("ongoing blanking process"), &failure)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -719,6 +729,7 @@
 	gboolean must_blank;
 	BraseroBurnFlag flags;
 	BraseroTrackType input;
+	BraseroMedium *medium;
 	BraseroBurnError berror;
 	BraseroBurnResult result;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
@@ -734,7 +745,7 @@
 
 	brasero_burn_session_get_input_type (priv->session, &input);
 	flags = brasero_burn_session_get_flags (priv->session);
-	if (!nautilus_burn_drive_can_write (priv->dest)) {
+	if (!brasero_drive_can_write (priv->dest)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -746,14 +757,16 @@
 again:
 
 	/* if drive is mounted then unmount before checking anything */
-	if (nautilus_burn_drive_is_mounted (priv->dest)) {
-		if (!NCB_DRIVE_UNMOUNT (priv->dest, NULL))
+	if (brasero_drive_is_mounted (priv->dest)) {
+		if (!brasero_drive_unmount (priv->dest, NULL))
 			g_warning ("Couldn't unmount volume in drive: %s",
-				   NCB_DRIVE_GET_DEVICE (priv->dest));
+				   brasero_drive_get_device (priv->dest));
 	}
 
 	berror = BRASERO_BURN_ERROR_NONE;
-	media = NCB_MEDIA_GET_STATUS (priv->dest);
+
+	medium = brasero_drive_get_medium (priv->dest);
+	media = brasero_medium_get_status (medium);
 
 	BRASERO_BURN_LOG_WITH_FULL_TYPE (BRASERO_TRACK_TYPE_DISC,
 					 media,
@@ -858,7 +871,7 @@
 	}
 
 	if (!priv->dest_locked
-	&&  !nautilus_burn_drive_lock (priv->dest, _("ongoing burning process"), &failure)) {
+	&&  !brasero_drive_lock (priv->dest, _("ongoing burning process"), &failure)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -887,7 +900,7 @@
 
 	if (result != BRASERO_BURN_OK) {
 		priv->dest_locked = 0;
-		nautilus_burn_drive_unlock (priv->dest);
+		brasero_drive_unlock (priv->dest);
 	}
 
 	return result;
@@ -938,7 +951,7 @@
 		       0,
 		       BRASERO_BURN_ACTION_CHECKSUM);
 
-	while (!nautilus_burn_drive_is_mounted (priv->dest)) {
+	while (!brasero_drive_is_mounted (priv->dest)) {
 		if (retries++ > MAX_MOUNT_ATTEMPS) {
 			g_set_error (error,
 				     BRASERO_BURN_ERROR,
@@ -948,7 +961,7 @@
 		}
 
 		/* NOTE: we don't really care about the return value */
-		NCB_DRIVE_MOUNT (priv->dest, error);
+		brasero_drive_mount (priv->dest, error);
 		priv->mounted_by_us = TRUE;
 
 		brasero_burn_sleep (self, MOUNT_TIMEOUT);
@@ -963,6 +976,7 @@
 {
 	gchar *failure;
 	BraseroMedia media;
+	BraseroMedium *medium;
 	BraseroBurnResult result;
 	BraseroBurnError error_type;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
@@ -971,7 +985,8 @@
 
 again:
 
-	media = NCB_MEDIA_GET_STATUS (priv->dest);
+	medium = brasero_drive_get_medium (priv->dest);
+	media = brasero_medium_get_status (medium);
 	error_type = BRASERO_BURN_ERROR_NONE;
 	BRASERO_BURN_LOG_DISC_TYPE (media, "Waiting for media to checksum");
 
@@ -1005,7 +1020,7 @@
 	}
 
 	if (!priv->dest_locked
-	&&  !nautilus_burn_drive_lock (priv->dest, _("ongoing checksuming operation"), &failure)) {
+	&&  !brasero_drive_lock (priv->dest, _("ongoing checksuming operation"), &failure)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
@@ -1015,10 +1030,10 @@
 	}
 
 	/* if drive is mounted then unmount before checking anything */
-	if (nautilus_burn_drive_is_mounted (priv->dest)
-	&& !NCB_DRIVE_UNMOUNT (priv->dest, NULL))
+	if (brasero_drive_is_mounted (priv->dest)
+	&& !brasero_drive_unmount (priv->dest, NULL))
 		g_warning ("Couldn't unmount volume in drive: %s",
-			   NCB_DRIVE_GET_DEVICE (priv->dest));
+			   brasero_drive_get_device (priv->dest));
 
 	priv->dest_locked = 1;
 
@@ -1039,12 +1054,12 @@
 	}
 
 	if (priv->mounted_by_us) {
-		nautilus_burn_drive_unmount (priv->src);
+		brasero_drive_unmount (priv->src, NULL);
 		priv->mounted_by_us = 0;
 	}
 
 	priv->src_locked = 0;
-	nautilus_burn_drive_unlock (priv->src);
+	brasero_drive_unlock (priv->src);
 
 	if (BRASERO_BURN_SESSION_EJECT (priv->session))
 		brasero_burn_eject_async (priv->src);
@@ -1067,7 +1082,7 @@
 	}
 
 	priv->dest_locked = 0;
-	nautilus_burn_drive_unlock (priv->dest);
+	brasero_drive_unlock (priv->dest);
 
 	if (BRASERO_BURN_SESSION_EJECT (priv->session))
 		brasero_burn_eject_async (priv->dest);
@@ -1225,14 +1240,14 @@
 static BraseroBurnResult
 brasero_burn_run_eraser (BraseroBurn *burn, GError **error)
 {
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroBurnPrivate *priv;
 
 	priv = BRASERO_BURN_PRIVATE (burn);
 
 	drive = brasero_burn_session_get_burner (priv->session);
-	if (nautilus_burn_drive_is_mounted (drive)
-	&& !NCB_DRIVE_UNMOUNT (drive, NULL)) {
+	if (brasero_drive_is_mounted (drive)
+	&& !brasero_drive_unmount_wait (drive)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_BUSY_DRIVE,
@@ -1252,7 +1267,7 @@
 	BraseroBurnError error_code;
 	BraseroBurnResult result;
 	GError *ret_error = NULL;
-	NautilusBurnDrive *src;
+	BraseroDrive *src;
 
 	src = brasero_burn_session_get_src_drive (priv->session);
 
@@ -1260,8 +1275,8 @@
 
 	/* this is just in case */
 	if (src
-	&&  nautilus_burn_drive_is_mounted (src)
-	&& !NCB_DRIVE_UNMOUNT (src, NULL)) {
+	&&  brasero_drive_is_mounted (src)
+	&& !brasero_drive_unmount_wait (src)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_BUSY_DRIVE,
@@ -1343,11 +1358,11 @@
 brasero_burn_run_recorder (BraseroBurn *burn, GError **error)
 {
 	gint error_code;
+	BraseroDrive *src;
 	gboolean has_slept;
-	NautilusBurnDrive *src;
+	BraseroDrive *burner;
 	GError *ret_error = NULL;
 	BraseroBurnResult result;
-	NautilusBurnDrive *burner;
 	BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
 
 	has_slept = FALSE;
@@ -1359,16 +1374,16 @@
 	/* this is just in case */
 	if (BRASERO_BURN_SESSION_NO_TMP_FILE (priv->session)
 	&&  src
-	&&  nautilus_burn_drive_is_mounted (src)
-	&& !NCB_DRIVE_UNMOUNT (src, NULL)) {
+	&&  brasero_drive_is_mounted (src)
+	&& !brasero_drive_unmount_wait (src)) {
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_BUSY_DRIVE,
 			     _("the drive seems to be busy"));
 		return BRASERO_BURN_ERR;
 	}
-	else if (nautilus_burn_drive_is_mounted (burner)
-	     && !NCB_DRIVE_UNMOUNT (burner, NULL)) {
+	else if (brasero_drive_is_mounted (burner)
+	     && !brasero_drive_unmount_wait (burner)) {
 		ret_error = g_error_new (BRASERO_BURN_ERROR,
 					 BRASERO_BURN_ERROR_BUSY_DRIVE,
 					 _("the drive seems to be busy"));
@@ -1638,7 +1653,7 @@
 	/* if the input is a DISC, ask/mount/unmount and lock it (as dest) */
 	if (type.type == BRASERO_TRACK_TYPE_DISC
 	&&  checksum_type == BRASERO_CHECKSUM_MD5_FILE
-	&& !nautilus_burn_drive_is_mounted (priv->dest)) {
+	&& !brasero_drive_is_mounted (priv->dest)) {
 		result = brasero_burn_mount_media (self, error);
 		if (result != BRASERO_BURN_OK)
 			return result;
@@ -1665,8 +1680,8 @@
 		 * checksum type is NOT FILE_MD5 */
 		if (priv->dest
 		&&  checksum_type == BRASERO_CHECKSUM_MD5
-		&&  nautilus_burn_drive_is_mounted (priv->dest)
-		&& !NCB_DRIVE_UNMOUNT (priv->dest, NULL)) {
+		&&  brasero_drive_is_mounted (priv->dest)
+		&& !brasero_drive_unmount_wait (priv->dest)) {
 			g_set_error (error,
 				     BRASERO_BURN_ERROR,
 				     BRASERO_BURN_ERROR_BUSY_DRIVE,
@@ -1725,7 +1740,7 @@
 
 	/* make sure there is a drive set as burner */
 	if (!brasero_burn_session_is_dest_file (priv->session)) {
-		NautilusBurnDrive *burner;
+		BraseroDrive *burner;
 
 		burner = brasero_burn_session_get_burner (priv->session);
 		if (!burner) {
@@ -1999,9 +2014,14 @@
 
 	if (type == BRASERO_CHECKSUM_MD5) {
 		guint track_num;
+		BraseroDrive *drive;
+		BraseroMedium *medium;
 
 		/* get the last track number */
-		track_num = NCB_MEDIA_GET_TRACK_NUM (brasero_burn_session_get_burner (priv->session));
+		drive = brasero_burn_session_get_burner (priv->session);
+		medium = brasero_drive_get_medium (drive);
+		track_num = brasero_medium_get_track_num (medium);
+
 		BRASERO_BURN_LOG ("Last written track num == %i", track_num);
 		brasero_track_set_drive_track (track, track_num);
 	}

Modified: trunk/src/burn.h
==============================================================================
--- trunk/src/burn.h	(original)
+++ trunk/src/burn.h	Fri Feb 29 14:04:05 2008
@@ -28,8 +28,6 @@
 #include <glib.h>
 #include <glib-object.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-caps.h"
 #include "burn-session.h"

Modified: trunk/src/main.c
==============================================================================
--- trunk/src/main.c	(original)
+++ trunk/src/main.c	Fri Feb 29 14:04:05 2008
@@ -40,8 +40,6 @@
 
 #include <libgnomeui/libgnomeui.h>
 
-#include <nautilus-burn-init.h>
-
 #include <gconf/gconf-client.h>
 
 #ifdef HAVE_LIBNOTIFY
@@ -56,7 +54,7 @@
 #include "brasero-eject-dialog.h"
 #include "brasero-session.h"
 #include "brasero-project-manager.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "brasero-pref.h"
 #include "burn-debug.h"
 #include "burn.h"
@@ -775,8 +773,6 @@
 	g_free (app);
 	gst_deinit ();
 
-	nautilus_burn_shutdown ();
-
 	g_object_unref (client);
 	client = NULL;
 

Modified: trunk/src/plugins/cdrdao/burn-cdrdao.c
==============================================================================
--- trunk/src/plugins/cdrdao/burn-cdrdao.c	(original)
+++ trunk/src/plugins/cdrdao/burn-cdrdao.c	Fri Feb 29 14:04:05 2008
@@ -37,15 +37,13 @@
 #include <glib/gstdio.h>
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-cdrdao-common.h"
 #include "burn-cdrdao.h"
 #include "burn-basics.h"
 #include "burn-plugin.h"
 #include "burn-job.h"
 #include "burn-process.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-medium.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroCdrdao, brasero_cdrdao, BRASERO_TYPE_PROCESS, BraseroProcess);
@@ -282,7 +280,7 @@
 
 	brasero_job_get_input_type (BRASERO_JOB (cdrdao), &type);
         if (type.type == BRASERO_TRACK_TYPE_DISC) {
-		NautilusBurnDrive *drive;
+		BraseroDrive *drive;
 		BraseroBurnFlag flags;
 		BraseroTrack *track;
 
@@ -299,7 +297,7 @@
 
 		brasero_job_get_current_track (BRASERO_JOB (cdrdao), &track);
 		drive = brasero_track_get_drive_source (track);
-		g_ptr_array_add (argv, g_strdup (NCB_DRIVE_GET_DEVICE (drive)));
+		g_ptr_array_add (argv, g_strdup (brasero_drive_get_device (drive)));
 	}
 	else if (type.type == BRASERO_TRACK_TYPE_IMAGE) {
 		gchar *cuepath;
@@ -369,7 +367,7 @@
 {
 	gchar *image = NULL, *toc = NULL;
 	BraseroBurnResult result;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroJobAction action;
 	BraseroTrackType output;
 	BraseroTrack *track;
@@ -380,7 +378,7 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (cdrdao), &track);
 	drive = brasero_track_get_drive_source (track);
-	g_ptr_array_add (argv, g_strdup (NCB_DRIVE_GET_DEVICE (drive)));
+	g_ptr_array_add (argv, g_strdup (brasero_drive_get_device (drive)));
 
 	g_ptr_array_add (argv, g_strdup ("--read-raw"));
 

Modified: trunk/src/plugins/cdrkit/burn-readom.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-readom.c	(original)
+++ trunk/src/plugins/cdrkit/burn-readom.c	Fri Feb 29 14:04:05 2008
@@ -34,8 +34,6 @@
 #include <glib/gstdio.h>
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-cdrkit.h"
 #include "burn-readom.h"
@@ -43,7 +41,7 @@
 #include "burn-job.h"
 #include "burn-plugin.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroReadom, brasero_readom, BRASERO_TYPE_PROCESS, BraseroProcess);
 static GObjectClass *parent_class = NULL;
@@ -128,17 +126,17 @@
 	/* 0 means all disc, -1 problem */
 	if (brasero_track_get_drive_track (track) > 0) {
 		gint64 start;
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_TRACK_SPACE (drive,
-					   brasero_track_get_drive_track (track),
-					   NULL,
-					   &nb_blocks);
-		NCB_MEDIA_GET_TRACK_ADDRESS (drive,
-					     brasero_track_get_drive_track (track),
-					     NULL,
-					     &start);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_track_space (medium,
+						brasero_track_get_drive_track (track),
+						NULL,
+						&nb_blocks);
+		brasero_medium_get_track_address (medium,
+						  brasero_track_get_drive_track (track),
+						  NULL,
+						  &start);
 
 		BRASERO_JOB_LOG (readom,
 				 "reading %i from sector %lli to %lli",
@@ -152,15 +150,15 @@
 	/* if it's BIN output just read the last track */
 	else if (output.subtype.img_format == BRASERO_IMAGE_FORMAT_BIN) {
 		gint64 start;
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_SPACE (drive,
-						     NULL,
-						     &nb_blocks);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_ADDRESS (drive,
-						       NULL,
-						       &start);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_last_data_track_space (medium,
+							  NULL,
+							  &nb_blocks);
+		brasero_medium_get_last_data_track_address (medium,
+							    NULL,
+							    &start);
 		BRASERO_JOB_LOG (readom,
 				 "reading last track from sector %lli to %lli",
 				 start,
@@ -189,21 +187,21 @@
 	brasero_job_get_output_type (BRASERO_JOB (self), &output);
 
 	if (brasero_track_get_drive_track (track) > 0) {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_TRACK_SPACE (drive, 
-					   brasero_track_get_drive_track (track),
-					   NULL,
-					   &blocks);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_track_space (medium,
+						brasero_track_get_drive_track (track),
+						NULL,
+						&blocks);
 	}
 	else if (output.subtype.img_format == BRASERO_IMAGE_FORMAT_BIN) {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_SPACE (drive,
-						     NULL,
-						     &blocks);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_last_data_track_space (medium,
+							  NULL,
+							  &blocks);
 	}
 	else
 		brasero_track_get_disc_data_size (track, &blocks, NULL);
@@ -234,10 +232,11 @@
 			 GError **error)
 {
 	BraseroBurnResult result = FALSE;
-	NautilusBurnDrive *drive;
 	BraseroJobAction action;
 	BraseroTrackType output;
 	BraseroReadom *readom;
+	BraseroMedium *medium;
+	BraseroDrive *drive;
 	BraseroTrack *track;
 	BraseroMedia media;
 	gchar *outfile_arg;
@@ -254,15 +253,16 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (readom), &track);
 	drive = brasero_track_get_drive_source (track);
-	if (!NCB_DRIVE_GET_DEVICE (drive))
+	if (!brasero_drive_get_device (drive))
 		return BRASERO_BURN_ERR;
 
-	dev_str = g_strdup_printf ("dev=%s", NCB_DRIVE_GET_DEVICE (drive));
+	dev_str = g_strdup_printf ("dev=%s", brasero_drive_get_device (drive));
 	g_ptr_array_add (argv, dev_str);
 
 	g_ptr_array_add (argv, g_strdup ("-nocorr"));
 
-	media = NCB_MEDIA_GET_STATUS (drive);
+	medium = brasero_drive_get_medium (drive);
+	media = brasero_medium_get_status (medium);
 	brasero_job_get_output_type (BRASERO_JOB (readom), &output);
 
 	if ((media & BRASERO_MEDIUM_DVD)

Modified: trunk/src/plugins/cdrkit/burn-wodim.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-wodim.c	(original)
+++ trunk/src/plugins/cdrkit/burn-wodim.c	Fri Feb 29 14:04:05 2008
@@ -43,8 +43,6 @@
 
 #include <gconf/gconf-client.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-job.h"
 #include "burn-process.h"

Modified: trunk/src/plugins/cdrtools/burn-cdrecord.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-cdrecord.c	(original)
+++ trunk/src/plugins/cdrtools/burn-cdrecord.c	Fri Feb 29 14:04:05 2008
@@ -43,8 +43,6 @@
 
 #include <gconf/gconf-client.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-job.h"
 #include "burn-process.h"

Modified: trunk/src/plugins/cdrtools/burn-mkisofs.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-mkisofs.c	(original)
+++ trunk/src/plugins/cdrtools/burn-mkisofs.c	Fri Feb 29 14:04:05 2008
@@ -38,8 +38,6 @@
 #include <glib/gstdio.h>
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-debug.h"
 #include "burn-job.h"

Modified: trunk/src/plugins/cdrtools/burn-readcd.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-readcd.c	(original)
+++ trunk/src/plugins/cdrtools/burn-readcd.c	Fri Feb 29 14:04:05 2008
@@ -34,8 +34,6 @@
 #include <glib/gstdio.h>
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-cdrtools.h"
 #include "burn-readcd.h"
@@ -43,7 +41,7 @@
 #include "burn-job.h"
 #include "burn-plugin.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroReadcd, brasero_readcd, BRASERO_TYPE_PROCESS, BraseroProcess);
 static GObjectClass *parent_class = NULL;
@@ -128,17 +126,17 @@
 	/* 0 means all disc, -1 problem */
 	if (brasero_track_get_drive_track (track) > 0) {
 		gint64 start;
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_TRACK_SPACE (drive,
-					   brasero_track_get_drive_track (track),
-					   NULL,
-					   &nb_blocks);
-		NCB_MEDIA_GET_TRACK_ADDRESS (drive,
-					     brasero_track_get_drive_track (track),
-					     NULL,
-					     &start);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_track_space (medium,
+						brasero_track_get_drive_track (track),
+						NULL,
+						&nb_blocks);
+		brasero_medium_get_track_address (medium,
+						  brasero_track_get_drive_track (track),
+						  NULL,
+						  &start);
 
 		BRASERO_JOB_LOG (readcd,
 				 "reading %i from sector %lli to %lli",
@@ -152,15 +150,15 @@
 	/* if it's BIN output just read the last track */
 	else if (output.subtype.img_format == BRASERO_IMAGE_FORMAT_BIN) {
 		gint64 start;
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_SPACE (drive,
-						     NULL,
-						     &nb_blocks);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_ADDRESS (drive,
-						       NULL,
-						       &start);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_last_data_track_space (medium,
+							  NULL,
+							  &nb_blocks);
+		brasero_medium_get_last_data_track_address (medium,
+							    NULL,
+							    &start);
 		BRASERO_JOB_LOG (readcd,
 				 "reading last track from sector %lli to %lli",
 				 start,
@@ -189,21 +187,21 @@
 	brasero_job_get_output_type (BRASERO_JOB (self), &output);
 
 	if (brasero_track_get_drive_track (track) > 0) {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_TRACK_SPACE (drive, 
-					   brasero_track_get_drive_track (track),
-					   NULL,
-					   &blocks);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_track_space (medium,
+						brasero_track_get_drive_track (track),
+						NULL,
+						&blocks);
 	}
 	else if (output.subtype.img_format == BRASERO_IMAGE_FORMAT_BIN) {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_SPACE (drive,
-						     NULL,
-						     &blocks);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_last_data_track_space (medium,
+							  NULL,
+							  &blocks);
 	}
 	else
 		brasero_track_get_disc_data_size (track, &blocks, NULL);
@@ -234,11 +232,12 @@
 			 GError **error)
 {
 	BraseroBurnResult result = FALSE;
-	NautilusBurnDrive *drive;
 	BraseroJobAction action;
 	BraseroTrackType output;
 	BraseroReadcd *readcd;
+	BraseroMedium *medium;
 	BraseroTrack *track;
+	BraseroDrive *drive;
 	BraseroMedia media;
 	gchar *outfile_arg;
 	gchar *dev_str;
@@ -254,15 +253,16 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (readcd), &track);
 	drive = brasero_track_get_drive_source (track);
-	if (!NCB_DRIVE_GET_DEVICE (drive))
+	if (!brasero_drive_get_device (drive))
 		return BRASERO_BURN_ERR;
 
-	dev_str = g_strdup_printf ("dev=%s", NCB_DRIVE_GET_DEVICE (drive));
+	dev_str = g_strdup_printf ("dev=%s", brasero_drive_get_device (drive));
 	g_ptr_array_add (argv, dev_str);
 
 	g_ptr_array_add (argv, g_strdup ("-nocorr"));
 
-	media = NCB_MEDIA_GET_STATUS (drive);
+	medium = brasero_drive_get_medium (drive);
+	media = brasero_medium_get_status (medium);
 	brasero_job_get_output_type (BRASERO_JOB (readcd), &output);
 
 	if ((media & BRASERO_MEDIUM_DVD)

Modified: trunk/src/plugins/checksum/burn-md5sum-file.c
==============================================================================
--- trunk/src/plugins/checksum/burn-md5sum-file.c	(original)
+++ trunk/src/plugins/checksum/burn-md5sum-file.c	Fri Feb 29 14:04:05 2008
@@ -44,7 +44,7 @@
 #include "burn-md5.h"
 #include "burn-md5sum-file.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroMd5sumFile, brasero_md5sum_file, BRASERO_TYPE_JOB, BraseroJob);
 
@@ -372,7 +372,7 @@
 	const gchar *name;
 	BraseroTrack *track;
 	gboolean has_wrongsums;
-	NautilusBurnDrive *drive;
+	BraseroDrive *drive;
 	BraseroMd5sumFilePrivate *priv;
 	gchar filename [MAXPATHLEN + 1];
 	BraseroBurnResult result = BRASERO_BURN_OK;
@@ -383,7 +383,7 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (self), &track);
 	drive = brasero_track_get_drive_source (track);
-	root = NCB_VOLUME_GET_MOUNT_POINT (drive, error);
+	root = brasero_drive_get_mount_point (drive, error);
 	if (!root)
 		return BRASERO_BURN_ERR;
 

Modified: trunk/src/plugins/checksum/burn-md5sum.c
==============================================================================
--- trunk/src/plugins/checksum/burn-md5sum.c	(original)
+++ trunk/src/plugins/checksum/burn-md5sum.c	Fri Feb 29 14:04:05 2008
@@ -45,7 +45,7 @@
 #include "burn-md5.h"
 #include "burn-md5sum.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroMd5sum, brasero_md5sum, BRASERO_TYPE_JOB, BraseroJob);
 
@@ -303,12 +303,12 @@
 
 	/* see if another plugin is sending us data to checksum */
 	if (brasero_job_get_fd_in (BRASERO_JOB (self), NULL) == BRASERO_BURN_OK) {
-		NautilusBurnDrive *drive;
+		BraseroMedium *medium;
 
 		/* we're only able to checksum ISO format at the moment so that
 		 * means we can only handle last session */
-		drive = brasero_track_get_drive_source (track);
-		NCB_MEDIA_GET_LAST_DATA_TRACK_SPACE (drive, &priv->total, NULL);
+		medium = brasero_track_get_medium_source (track);
+		brasero_medium_get_last_data_track_space (medium, &priv->total, NULL);
 
 		BRASERO_JOB_LOG (self,
 				 "Starting checksuming (live) (size = %i)",

Modified: trunk/src/plugins/dvdcss/burn-dvdcss.c
==============================================================================
--- trunk/src/plugins/dvdcss/burn-dvdcss.c	(original)
+++ trunk/src/plugins/dvdcss/burn-dvdcss.c	Fri Feb 29 14:04:05 2008
@@ -38,8 +38,6 @@
 #include <glib/gi18n-lib.h>
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-debug.h"
 #include "burn-job.h"
@@ -47,7 +45,7 @@
 #include "burn-dvdcss.h"
 #include "burn-dvdcss-private.h"
 #include "burn-volume.h"
-#include "brasero-ncb.h"
+#include "burn-medium.h"
 
 BRASERO_PLUGIN_BOILERPLATE (BraseroDvdcss, brasero_dvdcss, BRASERO_TYPE_JOB, BraseroJob);
 
@@ -287,9 +285,10 @@
 {
 	guchar buf [DVDCSS_BLOCK_SIZE * BRASERO_DVDCSS_I_BLOCKS];
 	BraseroScrambledSectorRange *range = NULL;
-	NautilusBurnDrive *drive = NULL;
+	BraseroMedium *medium = NULL;
 	BraseroVolFile *files = NULL;
 	dvdcss_handle *handle = NULL;
+	BraseroDrive *drive = NULL;
 	BraseroDvdcssPrivate *priv;
 	gint64 written_sectors = 0;
 	BraseroDvdcss *self = data;
@@ -311,7 +310,7 @@
 	/* get the contents of the DVD */
 	brasero_job_get_current_track (BRASERO_JOB (self), &track);
 	drive = brasero_track_get_drive_source (track);
-	files = brasero_volume_get_files (NCB_DRIVE_GET_DEVICE (drive),
+	files = brasero_volume_get_files (brasero_drive_get_device (drive),
 					  0,
 					  NULL,
 					  NULL,
@@ -320,7 +319,8 @@
 	if (!files)
 		goto end;
 
-	NCB_MEDIA_GET_DATA_SIZE (drive, NULL, &volume_size);
+	medium = brasero_track_get_medium_source (track);
+	brasero_medium_get_data_size (medium, NULL, &volume_size);
 	if (volume_size == -1) {
 		priv->error = g_error_new (BRASERO_BURN_ERROR,
 					   BRASERO_BURN_ERROR_GENERAL,
@@ -329,7 +329,7 @@
 	}
 
 	/* create a handle/open DVD */
-	handle = dvdcss_open (NCB_DRIVE_GET_DEVICE (drive));
+	handle = dvdcss_open (brasero_drive_get_device (drive));
 	if (!handle) {
 		priv->error = g_error_new (BRASERO_BURN_ERROR,
 					   BRASERO_BURN_ERROR_GENERAL,

Modified: trunk/src/plugins/growisofs/burn-dvd-rw-format.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-dvd-rw-format.c	(original)
+++ trunk/src/plugins/growisofs/burn-dvd-rw-format.c	Fri Feb 29 14:04:05 2008
@@ -35,8 +35,6 @@
 
 #include <gmodule.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
 #include "burn-plugin.h"
 #include "burn-job.h"

Modified: trunk/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-growisofs.c	(original)
+++ trunk/src/plugins/growisofs/burn-growisofs.c	Fri Feb 29 14:04:05 2008
@@ -41,7 +41,7 @@
 #include "burn-plugin.h"
 #include "burn-job.h"
 #include "burn-process.h"
-#include "brasero-ncb.h"
+#include "burn-drive.h"
 #include "burn-growisofs.h"
 #include "burn-growisofs-common.h"
 

Modified: trunk/src/plugins/transcode/burn-transcode.c
==============================================================================
--- trunk/src/plugins/transcode/burn-transcode.c	(original)
+++ trunk/src/plugins/transcode/burn-transcode.c	Fri Feb 29 14:04:05 2008
@@ -38,9 +38,8 @@
 
 #include <gst/gst.h>
 
-#include <nautilus-burn-drive.h>
-
 #include "burn-basics.h"
+#include "burn-medium.h"
 #include "burn-job.h"
 #include "burn-plugin.h"
 #include "burn-transcode.h"



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