From 7825c6a29c87adfa546f3b71eae78332d53add98 Mon Sep 17 00:00:00 2001 From: Jaime Thomas Date: Sun, 19 Apr 2009 23:24:53 +0000 Subject: [PATCH] Use known data for burning disc initialization, helps to not block the interface. --- ecdb/trunk/src/ecdb_burn_data_gui.c | 43 ++++++++++++++++++++++------ ecdb/trunk/src/ecdb_burn_image_gui.c | 41 ++++++++++++++++++++------ ecdb/trunk/src/ecdb_drives.c | 31 +++++++++++++++----- ecdb/trunk/src/ecdb_drives.h | 3 +- ecdb/trunk/src/ecdb_erase_gui.c | 17 ++++++----- ecdb/trunk/src/ecdb_image.c | 2 +- 6 files changed, 103 insertions(+), 34 deletions(-) diff --git a/ecdb/trunk/src/ecdb_burn_data_gui.c b/ecdb/trunk/src/ecdb_burn_data_gui.c index b5454df..42f5d4d 100644 --- a/ecdb/trunk/src/ecdb_burn_data_gui.c +++ b/ecdb/trunk/src/ecdb_burn_data_gui.c @@ -139,7 +139,7 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, { Ecdb_Data_Project *proj; Ecdb_Page *page; - char buf[1024]; + char *buf; Ecdb_Burn_Result burn_result; int drive, speed, idx; @@ -163,9 +163,32 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, while (ECDB_BURN(proj)->files->parent) ECDB_BURN(proj)->files = ECDB_BURN(proj)->files->parent; - snprintf(buf, sizeof(buf), "Commencing..."); - edje_object_part_text_set(page->data, "progress_text", buf); - if (!ecdb_aquire_drive(ECDB_PROJECT(proj), drive)) + if (!ecdb_set_project_drive(ECDB_PROJECT(proj), drive)) + { + EINA_ERROR_PWARN("Drive index doesn't exist!\n"); + edje_object_part_text_set(page->data, "progress_text", + "Drive doesn't exist!"); + return; + } + + if (!ECDB_PROJECT(proj)->drive->fresh_info) + { + EINA_ERROR_PDBG("Insert a disc into the drive!\n"); + edje_object_part_text_set(page->data, "progress_text", + "Insert a disc into the drive!"); + return; + } + + if (!((ECDB_PROJECT(proj)->drive->status & ECDB_DISC_BLANK) || + (ECDB_PROJECT(proj)->drive->status & ECDB_DISC_APPENDABLE))) + { + EINA_ERROR_PDBG("Disc is not blank or appendable!\n"); + edje_object_part_text_set(page->data, "progress_text", + "Disc is not blank or appendable!"); + return; + } + + if (!ecdb_aquire_drive(ECDB_PROJECT(proj))) { EINA_ERROR_PWARN("Couldn't grab drive!\n"); edje_object_part_text_set(page->data, "progress_text", @@ -173,6 +196,8 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, return; } + edje_object_part_text_set(page->data, "progress_text", "Commencing..."); + burn_result = ecdb_burn_project(ECDB_BURN(proj), page); switch (burn_result) { @@ -191,23 +216,23 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, return; case ECDB_ERROR_IMAGE_CREATE: - snprintf(buf, sizeof(buf), "Invalid file!"); + buf = "Invalid file!"; break; case ECDB_ERROR_SOURCE_ATTACH: - snprintf(buf, sizeof(buf), "Couldn't attach source data!"); + buf = "Couldn't attach source data!"; break; case ECDB_ERROR_WRITE_MODE: - snprintf(buf, sizeof(buf), "No suitable burn mode!"); + buf = "No suitable burn mode!"; break; default: - snprintf(buf, sizeof(buf), "Unknown error :-("); + buf = "Unknown error :-("; } edje_object_part_text_set(page->data, "progress_text", buf); - burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 1); + burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 0); burn_drive_info_free(ECDB_PROJECT(proj)->drive->tangible); } diff --git a/ecdb/trunk/src/ecdb_burn_image_gui.c b/ecdb/trunk/src/ecdb_burn_image_gui.c index d26cc9d..f8dcb4d 100644 --- a/ecdb/trunk/src/ecdb_burn_image_gui.c +++ b/ecdb/trunk/src/ecdb_burn_image_gui.c @@ -62,7 +62,7 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, Ecdb_Image_Project *proj; Ecdb_Page *page; Ecdb_Source *iso_file; - char *file, buf[1024]; + char *file, *buf; Ecdb_Burn_Result burn_result; int drive, speed, idx; @@ -100,9 +100,31 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, else ECDB_BURN(proj)->speed = speed; - snprintf(buf, sizeof(buf), "Commencing..."); - edje_object_part_text_set(page->image, "progress_text", buf); - if (!ecdb_aquire_drive(ECDB_PROJECT(proj), drive)) + if (!ecdb_set_project_drive(ECDB_PROJECT(proj), drive)) + { + EINA_ERROR_PWARN("Drive index doesn't exist!\n"); + edje_object_part_text_set(page->image, "progress_text", + "Drive index doesn't exist!"); + return; + } + + if (!ECDB_PROJECT(proj)->drive->fresh_info) + { + EINA_ERROR_PDBG("Insert a disc into the drive!\n"); + edje_object_part_text_set(page->image, "progress_text", + "Insert a disc into the drive!"); + return; + } + + if (!(ECDB_PROJECT(proj)->drive->status & ECDB_DISC_BLANK)) + { + EINA_ERROR_PDBG("Insert a blank disc!\n"); + edje_object_part_text_set(page->image, "progress_text", + "Insert a blank disc!"); + return; + } + + if (!ecdb_aquire_drive(ECDB_PROJECT(proj))) { EINA_ERROR_PWARN("Couldn't grab drive!\n"); edje_object_part_text_set(page->image, "progress_text", @@ -110,6 +132,7 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, return; } + edje_object_part_text_set(page->image, "progress_text", "Commencing..."); burn_result = ecdb_burn_project(ECDB_BURN(proj), page); switch (burn_result) { @@ -124,23 +147,23 @@ _button_cb_begin(void *data, Evas_Object *obj __UNUSED__, return; case ECDB_ERROR_IMAGE_CREATE: - snprintf(buf, sizeof(buf), "Invalid file!"); + buf = "Invalid file!"; break; case ECDB_ERROR_SOURCE_ATTACH: - snprintf(buf, sizeof(buf), "Couldn't attach source data!"); + buf = "Couldn't attach source data!"; break; case ECDB_ERROR_WRITE_MODE: - snprintf(buf, sizeof(buf), "No suitable burn mode!"); + buf = "No suitable burn mode!"; break; default: - snprintf(buf, sizeof(buf), "Unknown error :-("); + buf = "Unknown error :-("; } edje_object_part_text_set(page->image, "progress_text", buf); - burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 1); + burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 0); burn_drive_info_free(ECDB_PROJECT(proj)->drive->tangible); } diff --git a/ecdb/trunk/src/ecdb_drives.c b/ecdb/trunk/src/ecdb_drives.c index 6f090c6..c97c4c9 100644 --- a/ecdb/trunk/src/ecdb_drives.c +++ b/ecdb/trunk/src/ecdb_drives.c @@ -140,6 +140,10 @@ ecdb_print_drive_info(void) printf("Write HDDVD-R: %d, Write HDDVD-RW: %d\n", drive->write_hddvdr, drive->write_hddvdrw); + printf("Status: %d, Type: %s, Capacity: %llu\n", + drive->status, + drive->type, + drive->capacity); j = drive->write_speeds[0]; @@ -151,27 +155,40 @@ ecdb_print_drive_info(void) } int -ecdb_aquire_drive(Ecdb_Project *proj, unsigned int idx) +ecdb_aquire_drive(Ecdb_Project *proj) { - Ecdb_Drive_Info *info; char adr[BURN_DRIVE_ADR_LEN]; - info = eina_list_nth(em->drives, idx); - if (burn_drive_convert_fs_adr(info->location, adr) <= 0) + if (burn_drive_convert_fs_adr(proj->drive->location, adr) <= 0) { EINA_ERROR_PWARN("Error: Address doesn't provide cd burner!\n"); return FALSE; } - if (burn_drive_scan_and_grab(&info->tangible, adr, 1) > 0) + if (burn_drive_scan_and_grab(&proj->drive->tangible, adr, 1) > 0) { - proj->drive = info; return TRUE; } else { - info->tangible = NULL; + proj->drive->tangible = NULL; return FALSE; } } + +int +ecdb_set_project_drive(Ecdb_Project *proj, unsigned int idx) +{ + Ecdb_Drive_Info *info; + info = eina_list_nth(em->drives, idx); + if (!info) + { + EINA_ERROR_PERR("Drive index does not exist!\n"); + return FALSE; + } + + proj->drive = info; + return TRUE; +} + diff --git a/ecdb/trunk/src/ecdb_drives.h b/ecdb/trunk/src/ecdb_drives.h index f829c94..e770ee0 100644 --- a/ecdb/trunk/src/ecdb_drives.h +++ b/ecdb/trunk/src/ecdb_drives.h @@ -7,7 +7,8 @@ int ecdb_aquire_drive_info(E_Hal_Device_Get_All_Properties_Return *ret, int ecdb_update_drive_info(Ecdb_Drive_Info *drive, E_Hal_Device_Get_All_Properties_Return *ret); void ecdb_print_drive_info(void); -int ecdb_aquire_drive(Ecdb_Project *proj, unsigned int idx); +int ecdb_aquire_drive(Ecdb_Project *proj); +int ecdb_set_project_drive(Ecdb_Project *proj, unsigned int idx); void ecdb_drive_info_list_free(Eina_List *list); #endif diff --git a/ecdb/trunk/src/ecdb_erase_gui.c b/ecdb/trunk/src/ecdb_erase_gui.c index f24305f..5d6a154 100644 --- a/ecdb/trunk/src/ecdb_erase_gui.c +++ b/ecdb/trunk/src/ecdb_erase_gui.c @@ -71,11 +71,11 @@ _button_cb_begin(void *data, Evas_Object *o __UNUSED__, return; } - if (!ecdb_aquire_drive(ECDB_PROJECT(proj), idx)) + if (!ecdb_set_project_drive(ECDB_PROJECT(proj), idx)) { - EINA_ERROR_PDBG("Couldn't grab drive!\n"); + EINA_ERROR_PWARN("Drive index doesn't exists!\n"); edje_object_part_text_set(page->erase, "progress_text", - "Couldn't grab the drive!"); + "Drive doesn't exist!"); return; } @@ -84,8 +84,6 @@ _button_cb_begin(void *data, Evas_Object *o __UNUSED__, EINA_ERROR_PDBG("Insert a disc into the drive!\n"); edje_object_part_text_set(page->erase, "progress_text", "Insert a disc into the drive!"); - burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 0); - burn_drive_info_free(ECDB_PROJECT(proj)->drive->tangible); return; } @@ -94,11 +92,16 @@ _button_cb_begin(void *data, Evas_Object *o __UNUSED__, EINA_ERROR_PDBG("Disc is already blank!\n"); edje_object_part_text_set(page->erase, "progress_text", "Disc is already blank!"); - burn_drive_release(ECDB_PROJECT(proj)->drive->tangible[0].drive, 0); - burn_drive_info_free(ECDB_PROJECT(proj)->drive->tangible); return; } + if (!ecdb_aquire_drive(ECDB_PROJECT(proj))) + { + EINA_ERROR_PWARN("Couldn't grab the drive!\n"); + edje_object_part_text_set(page->erase, "progress_text", + "Couldn't grab the drive!"); + } + proj->quick = ecdb_check_checked_get(proj->speed); // TODO: Error Messages here if (!ecdb_erase_disc(proj, page)) diff --git a/ecdb/trunk/src/ecdb_image.c b/ecdb/trunk/src/ecdb_image.c index 5a4e3a0..070d08f 100644 --- a/ecdb/trunk/src/ecdb_image.c +++ b/ecdb/trunk/src/ecdb_image.c @@ -307,7 +307,7 @@ ecdb_image_project(Ecdb_Burn_Project *bp) data_src = burn_file_source_new(c->dst, NULL); goto FIFO_CREATE; } - else if (ECDB_PROJECT(bp)->type == ECDB_IMAGE_PROJECT) + else { EINA_ERROR_PWARN("Supplied file is not an image!\n"); efreet_mime_shutdown();