#include "ecdb.h" int ecdb_erase_project_init(Ecdb_Erase_Project *proj); static void ecdb_erase_progress_handler(void *data, void *buffer, int nbyte); 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; 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); burn_disc_erase(ECDB_PROJECT(proj)->drive-> tangible[0].drive, proj->quick); pthread_create(&progress_update, NULL, ecdb_drive_progress_update, proj); 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); }