[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