experimental-legacy/ecdb/trunk/src/ecdb_erase.c

100 lines
2.1 KiB
C
Raw Normal View History

2008-11-03 14:56:30 +00:00
#include "ecdb.h"
int ecdb_erase_project_init(Ecdb_Erase_Project *proj);
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));
}
int
ecdb_erase_disc(Ecdb_Erase_Project *proj)
{
BurnDriveStatus disc_state;
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");
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);
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;
}
}
static void
ecdb_erase_progress_handler(void *data, void *buffer, int nbyte)
{
BurnProgress *p = buffer;
Evas_Object *swallow;
char buf[1024];
swallow = evas_object_name_find(ecore_evas_get(em->main_win_ee),
"erase_page");
snprintf(buf, sizeof(buf), "%d/%d", p->sector, p->sectors);
edje_object_part_text_set(swallow, "progress_text", buf);
}