2008-11-03 14:56:30 +00:00
|
|
|
#include "ecdb.h"
|
|
|
|
|
|
|
|
int ecdb_erase_project_init(Ecdb_Erase_Project *proj);
|
2008-11-03 15:56:34 +00:00
|
|
|
static void ecdb_erase_progress_handler(void *data, void *buffer, int nbyte);
|
2008-11-03 14:56:30 +00:00
|
|
|
|
|
|
|
Ecdb_Erase_Project *
|
|
|
|
ecdb_erase_project_new(void)
|
|
|
|
{
|
|
|
|
Ecdb_Erase_Project *proj;
|
|
|
|
|
|
|
|
proj = calloc(1, sizeof(Ecdb_Erase_Project));
|
|
|
|
if (!proj)
|
|
|
|
return NULL;
|
|
|
|
if (!ecdb_erase_project_init(proj))
|
|
|
|
{
|
|
|
|
FREE(proj);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return proj;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
ecdb_erase_project_init(Ecdb_Erase_Project *proj)
|
|
|
|
{
|
|
|
|
if (!ecdb_project_init(ECDB_PROJECT(proj)))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* Proper defaults */
|
|
|
|
ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_ERASE_PROJECT);
|
|
|
|
proj->quick = TRUE;
|
|
|
|
proj->format = FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ecdb_erase_project_destroy(Ecdb_Erase_Project *proj)
|
|
|
|
{
|
|
|
|
ecdb_project_destroy(ECDB_PROJECT(proj));
|
|
|
|
free(proj);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
ecdb_erase_disc(Ecdb_Erase_Project *proj)
|
|
|
|
{
|
|
|
|
BurnDriveStatus disc_state;
|
2008-11-03 15:56:34 +00:00
|
|
|
pthread_t progress_update;
|
2008-11-03 14:56:30 +00:00
|
|
|
|
|
|
|
disc_state = burn_disc_get_status(ECDB_PROJECT(proj)->drive->
|
|
|
|
tangible[0].drive);
|
|
|
|
if (disc_state == BURN_DISC_BLANK)
|
|
|
|
{
|
|
|
|
printf("Disc is already blank!\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else if (disc_state == BURN_DISC_EMPTY)
|
|
|
|
{
|
|
|
|
printf("No disc!\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else if (!burn_disc_erasable(ECDB_PROJECT(proj)->drive->
|
|
|
|
tangible[0].drive))
|
|
|
|
{
|
|
|
|
printf("Not able to erase!\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else if (disc_state == BURN_DISC_FULL || BURN_DISC_APPENDABLE)
|
|
|
|
{
|
|
|
|
printf("Beginning to erase disc!\n");
|
2008-11-03 15:56:34 +00:00
|
|
|
ECDB_PROJECT(proj)->pipe = ecore_pipe_add
|
|
|
|
(ecdb_erase_progress_handler,
|
|
|
|
NULL);
|
2008-11-03 14:56:30 +00:00
|
|
|
burn_disc_erase(ECDB_PROJECT(proj)->drive->
|
|
|
|
tangible[0].drive, proj->quick);
|
|
|
|
|
2008-11-03 15:56:34 +00:00
|
|
|
pthread_create(&progress_update, NULL,
|
|
|
|
ecdb_drive_progress_update, proj);
|
2008-11-03 14:56:30 +00:00
|
|
|
pthread_detach(progress_update);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("Not of erasable type\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-11-03 15:56:34 +00:00
|
|
|
static void
|
|
|
|
ecdb_erase_progress_handler(void *data, void *buffer, int nbyte)
|
|
|
|
{
|
|
|
|
BurnProgress *p = buffer;
|
|
|
|
|
|
|
|
printf("Sector %d of %d\n", p->sector, p->sectors);
|
|
|
|
}
|