[Goodies-commits] r4773 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Sat May 10 17:15:24 CEST 2008


Author: squisher
Date: 2008-05-10 15:15:24 +0000 (Sat, 10 May 2008)
New Revision: 4773

Modified:
   xfburn/trunk/xfburn/xfburn-blank-dialog.c
   xfburn/trunk/xfburn/xfburn-device-box.c
   xfburn/trunk/xfburn/xfburn-device-list.c
   xfburn/trunk/xfburn/xfburn-device-list.h
Log:
Retrieving profile no, and checking it for blanking

Modified: xfburn/trunk/xfburn/xfburn-blank-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-blank-dialog.c	2008-05-10 11:50:50 UTC (rev 4772)
+++ xfburn/trunk/xfburn/xfburn-blank-dialog.c	2008-05-10 15:15:24 UTC (rev 4773)
@@ -43,6 +43,16 @@
   GtkWidget *check_eject;
 } XfburnBlankDialogPrivate;
 
+enum XfburnBlankModes {
+  XFBURN_BLANK_FAST,      /* erase w/ fast flag */
+  XFBURN_BLANK_COMPLETE,  /* erase, no flag */
+  XFBURN_FORMAT_FAST,
+  XFBURN_FORMAT_COMPLETE,
+  XFBURN_DEFORMAT_FAST,
+  XFBURN_DEFORMAT_COMPLETE,
+};
+
+
 static void xfburn_blank_dialog_class_init (XfburnBlankDialogClass * klass);
 static void xfburn_blank_dialog_init (XfburnBlankDialog * sp);
 
@@ -50,6 +60,8 @@
 
 static XfceTitledDialogClass *parent_class = NULL;
 
+
+
 GtkType
 xfburn_blank_dialog_get_type ()
 {
@@ -237,15 +249,15 @@
   }
 
   /* check the libburn message queue for errors */
+  while ((ret = burn_msgs_obtain ("FAILURE", &error_code, msg_text, &os_errno, severity)) == 1) {
+    g_warning ("[%s] %d: %s (%d)", severity, error_code, msg_text, os_errno);
+    error = TRUE;
+  }
 #ifdef DEBUG
   while ((ret = burn_msgs_obtain ("ALL", &error_code, msg_text, &os_errno, severity)) == 1) {
     g_warning ("[%s] %d: %s (%d)", severity, error_code, msg_text, os_errno);
   }
 #endif
-  while ((ret = burn_msgs_obtain ("FAILURE", &error_code, msg_text, &os_errno, severity)) == 1) {
-    g_warning ("[%s] %d: %s (%d)", severity, error_code, msg_text, os_errno);
-    error = TRUE;
-  }
 
   if (ret < 0)
     g_warning ("Fatal error while trying to retrieve libburn message!");

Modified: xfburn/trunk/xfburn/xfburn-device-box.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-box.c	2008-05-10 11:50:50 UTC (rev 4772)
+++ xfburn/trunk/xfburn/xfburn-device-box.c	2008-05-10 15:15:24 UTC (rev 4773)
@@ -497,7 +497,8 @@
 check_disc_validity (XfburnDeviceBoxPrivate *priv)
 {
   enum burn_disc_status disc_status = xfburn_device_list_get_disc_status ();
-  //int media_no = xfburn_device_list_get_media_no ();
+  int profile_no = xfburn_device_list_get_profile_no ();
+  gboolean is_erasable = xfburn_device_list_disc_is_erasable ();
 
   if (!priv->blank_mode) {
     priv->valid_disc = (disc_status == BURN_DISC_BLANK) || (disc_status == BURN_DISC_APPENDABLE);
@@ -525,25 +526,38 @@
       }
     }
   } else {
-    priv->valid_disc = (disc_status == BURN_DISC_FULL) || (disc_status == BURN_DISC_APPENDABLE);
+    priv->valid_disc = is_erasable; // (disc_status == BURN_DISC_FULL) || (disc_status == BURN_DISC_APPENDABLE);
 
     if (!priv->valid_disc) {
-      switch (disc_status) {
-        case BURN_DISC_EMPTY:
-          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Drive is empty!</span>"));
+      switch (profile_no) {
+        case XFBURN_PROFILE_CDR:
+        case XFBURN_PROFILE_DVD_MINUS_R:
+        case XFBURN_PROFILE_DVD_MINUS_R_DL:
+        case XFBURN_PROFILE_DVD_PLUS_R:
+        case XFBURN_PROFILE_DVD_PLUS_R_DL:
+          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Write-once disc, no blanking possible</span>"));
           break;
-        case BURN_DISC_BLANK:
-          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is already blank!</span>"));
+        case XFBURN_PROFILE_DVD_PLUS_RW:
+          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">DVD+RW does not need blanking</span>"));
           break;
-        case BURN_DISC_UNSUITABLE:
-          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is unsuitable!</span>"));
-          break;
-        case BURN_DISC_UNGRABBED:
-          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">No access to drive (mounted?)</span>"));
-          break;
         default:
-          gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Error determining disc!</span>"));
-          DBG ("weird disc_status = %d", disc_status);
+          switch (disc_status) {
+            case BURN_DISC_EMPTY:
+              gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Drive is empty!</span>"));
+              break;
+            case BURN_DISC_BLANK:
+              gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is already blank!</span>"));
+              break;
+            case BURN_DISC_UNSUITABLE:
+              gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is unsuitable!</span>"));
+              break;
+            case BURN_DISC_UNGRABBED:
+              gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">No access to drive (mounted?)</span>"));
+              break;
+            default:
+              gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Error determining disc!</span>"));
+              DBG ("weird disc_status = %d", disc_status);
+          }
       }
     }
   }

Modified: xfburn/trunk/xfburn/xfburn-device-list.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-list.c	2008-05-10 11:50:50 UTC (rev 4772)
+++ xfburn/trunk/xfburn/xfburn-device-list.c	2008-05-10 15:15:24 UTC (rev 4773)
@@ -38,7 +38,8 @@
 
 static GList *devices = NULL;
 static enum burn_disc_status disc_status;
-static int media_no = 0;
+static int profile_no = 0;
+static int is_erasable = 0;
 
 #define CAN_BURN_CONDITION device->cdr || device->cdrw || device->dvdr || device->dvdram
 #define DEVICE_INFO_PRINTF "%s can burn: %d [cdr: %d, cdrw: %d, dvdr: %d, dvdram: %d]", device->name, CAN_BURN_CONDITION, device->cdr, device->cdrw, device->dvdr, device->dvdram
@@ -84,19 +85,21 @@
 refresh_supported_speeds (XfburnDevice * device, struct burn_drive_info *drive_info)
 {
   struct burn_speed_descriptor *speed_list = NULL;
-  char media_name[80];
+  char profile_name[80];
   int factor;
   gint ret;
+  /*
   int status, num_formats;
   off_t size;
   unsigned bl_sas;
   int i;
+  */
 
   /* empty previous list */
   g_slist_free (device->supported_cdr_speeds);
   device->supported_cdr_speeds = NULL;
 
-  /* check if there is media in the drive */
+  /* check if there is a disc in the drive */
   while ((disc_status = burn_disc_get_status (drive_info->drive)) == BURN_DISC_UNREADY)
     usleep(100001);
 
@@ -110,18 +113,28 @@
   */
   DBG ("disc_status = %d", disc_status);
 
-  if ((ret = burn_disc_get_profile(drive_info->drive, &media_no, media_name)) != 1) {
+  if ((ret = burn_disc_get_profile(drive_info->drive, &profile_no, profile_name)) != 1) {
     g_warning ("no profile could be retrieved");
-    media_no = 0;
+    profile_no = 0;
   }
-  DBG ("media_no = %d (%s), %s erasable", media_no, media_name, (burn_disc_erasable (drive_info->drive) ? "" : "NOT"));
+  is_erasable = burn_disc_erasable (drive_info->drive);
+  DBG ("profile_no = 0x%x (%s), %s erasable", profile_no, profile_name, (is_erasable ? "" : "NOT"));
+
+  if (ret == 1 && profile_no == 0 && is_erasable && disc_status == 6) {
+    DBG ("work around bug in my drive or libburn: disc is a full DVD-RW sequential");
+    profile_no = XFBURN_PROFILE_DVD_MINUS_RW_SEQUENTIAL;
+    disc_status = BURN_DISC_FULL;
+  }
+
+  /*
   ret = burn_disc_get_formats (drive_info->drive, &status, &size, &bl_sas, &num_formats);
-  DBG ("_get_formats (%d) = %d, %lu, %d, %d", ret, status, size, bl_sas, num_formats);
+  DBG ("_get_formats (%d) = %d, %llu, %d, %d", ret, status, size, bl_sas, num_formats);
   for (i=0; i<num_formats; i++) {
     int type;
     ret = burn_disc_get_format_descr (drive_info->drive, i, &type, &size, &bl_sas);
-    DBG ("_get_format_descr (%d) = 0x%x, %lu, %u", ret, type, size, bl_sas);
+    DBG ("_get_format_descr (%d) = 0x%x, %llu, %u", ret, type, size, bl_sas);
   }
+  */
 
 
   if (!(disc_status == BURN_DISC_BLANK || disc_status == BURN_DISC_APPENDABLE)) {
@@ -135,10 +148,10 @@
 
   if (ret > 0 && speed_list != NULL) {
     struct burn_speed_descriptor *el = speed_list;
-    /* retrieve media type, so we can convert from 'kb/s' into 'x' rating */
-    if (media_no != 0) {
+    /* check profile, so we can convert from 'kb/s' into 'x' rating */
+    if (profile_no != 0) {
       /* this will fail if newer disk types get supported */
-      if (media_no <= 0x0a)
+      if (profile_no <= 0x0a)
         factor = CDR_1X_SPEED;
       else
         /* assume DVD for now */
@@ -186,12 +199,18 @@
 }
 
 int
-xfburn_device_list_get_media_no ()
+xfburn_device_list_get_profile_no ()
 {
-  return media_no;
+  return profile_no;
 }
 
 gboolean
+xfburn_device_list_disc_is_erasable ()
+{
+  return is_erasable != 0;
+}
+
+gboolean
 xfburn_device_refresh_supported_speeds (XfburnDevice * device)
 {
   struct burn_drive_info *drive_info = NULL;

Modified: xfburn/trunk/xfburn/xfburn-device-list.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-list.h	2008-05-10 11:50:50 UTC (rev 4772)
+++ xfburn/trunk/xfburn/xfburn-device-list.h	2008-05-10 15:15:24 UTC (rev 4773)
@@ -27,7 +27,8 @@
 #include <libburn.h>
 
 /* what kind of recordable discs are there */
-enum XfburnDiscTypes{
+/* usused so far */
+enum XfburnDiscTypes {
   /* record-once types */
   XFBURN_CDR,
   XFBURN_DVD_R, /* we don't need a distinction for record once between + / - */
@@ -38,6 +39,20 @@
   XFBURN_DVD_PLUS_RW,
 };
 
+enum XfburnDiscProfiles {
+  XFBURN_PROFILE_CDR = 0x09,
+  XFBURN_PROFILE_CDRW = 0x0a,
+  XFBURN_PROFILE_DVD_MINUS_R = 0x11,
+  XFBURN_PROFILE_DVDRAM = 0x12,
+  XFBURN_PROFILE_DVD_MINUS_RW_OVERWRITE = 0x13,
+  XFBURN_PROFILE_DVD_MINUS_RW_SEQUENTIAL = 0x14,
+  XFBURN_PROFILE_DVD_MINUS_R_DL = 0x15,
+  XFBURN_PROFILE_DVD_PLUS_RW = 0x1a,
+  XFBURN_PROFILE_DVD_PLUS_R = 0x1b,
+  XFBURN_PROFILE_DVD_PLUS_R_DL = 0x2b,
+  XFBURN_PROFILE_BD_RE = 0x43,
+};
+
 typedef struct
 {
   gchar *name;
@@ -64,7 +79,8 @@
 XfburnDevice * xfburn_device_lookup_by_name (const gchar * name);
 GList * xfburn_device_list_get_list ();
 enum burn_disc_status xfburn_device_list_get_disc_status ();
-int xfburn_device_list_get_media_no ();
+int xfburn_device_list_get_profile_no ();
+gboolean xfburn_device_list_disc_is_erasable ();
 void xfburn_device_list_free ();
 
 gboolean xfburn_device_refresh_supported_speeds (XfburnDevice * device);




More information about the Goodies-commits mailing list