DBus goodness! Drive detection is more reliable now, need to implement some detection of the volume characteristics now.
This commit is contained in:
@@ -1,87 +1,92 @@
|
||||
/* vim: set sw=3 ts=3 sts=3 expandtab: */
|
||||
#include "ecdb.h"
|
||||
|
||||
int
|
||||
ecdb_aquire_drive_info(void)
|
||||
void
|
||||
_ecdb_drive_set_capabilities(Ecdb_Drive_Info *drive,
|
||||
E_Hal_Device_Get_All_Properties_Return *ret)
|
||||
{
|
||||
int ret, i;
|
||||
unsigned int drive_num;
|
||||
struct burn_drive_info *drives_current;
|
||||
struct burn_speed_descriptor *speeds;
|
||||
Eina_List *write_speeds, *l;
|
||||
char *val;
|
||||
int i;
|
||||
|
||||
ret = 0;
|
||||
if (em->drives)
|
||||
/* Drive Capabilities */
|
||||
drive->write_cdr = e_hal_property_bool_get(ret, "storage.cdrom.cdr", NULL);
|
||||
drive->write_cdrw = e_hal_property_bool_get(ret, "storage.cdrom.cdrw", NULL);
|
||||
drive->write_dvdr = e_hal_property_bool_get(ret, "storage.cdrom.dvdr", NULL);
|
||||
drive->write_dvdrw = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.dvdrw", NULL);
|
||||
drive->write_dvdram = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.dvdram", NULL);
|
||||
drive->write_dvdplusrw = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.dvdplusrw", NULL);
|
||||
drive->write_dvdplusrwdl = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.dvdplusrwdl", NULL);
|
||||
drive->write_dvdplusrdl = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.dvdplusrdl", NULL);
|
||||
drive->write_bdr = e_hal_property_bool_get(ret, "storage.cdrom.bdr", NULL);
|
||||
drive->write_bdre = e_hal_property_bool_get(ret, "storage.cdrom.bdre", NULL);
|
||||
drive->write_hddvdr = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.hddvdr", NULL);
|
||||
drive->write_hddvdrw = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.hddvdrw", NULL);
|
||||
drive->support_multisession = e_hal_property_bool_get(ret,
|
||||
"storage.cdrom.support_multisession",
|
||||
NULL);
|
||||
|
||||
/* Write speeds */
|
||||
write_speeds = e_hal_property_strlist_get(ret, "storage.cdrom.write_speeds",
|
||||
NULL);
|
||||
drive->write_speeds = calloc(eina_list_count(write_speeds) + 1, sizeof(int));
|
||||
drive->write_speeds[0] = eina_list_count(write_speeds) + 1;
|
||||
|
||||
i = 1;
|
||||
EINA_LIST_FOREACH(write_speeds, l, val)
|
||||
{
|
||||
ecdb_drive_info_list_free(em->drives);
|
||||
drive->write_speeds[i] = atoi(val);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
ecdb_update_drive_info(Ecdb_Drive_Info *drive,
|
||||
E_Hal_Device_Get_All_Properties_Return *ret,
|
||||
char *udi)
|
||||
{
|
||||
/* Assume that nothing about the physical hardware has changed */
|
||||
drive->udi = udi;
|
||||
|
||||
/* Update the drive directories */
|
||||
FREE(drive->write_speeds);
|
||||
_ecdb_drive_set_capabilities(drive, ret);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
ecdb_aquire_drive_info(E_Hal_Device_Get_All_Properties_Return *ret,
|
||||
char *mnt, char *udi)
|
||||
{
|
||||
Ecdb_Drive_Info *drive;
|
||||
|
||||
drive = calloc(1, sizeof(Ecdb_Drive_Info));
|
||||
if (!drive)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while (!ret)
|
||||
{
|
||||
ret = burn_drive_scan(&drives_current, &drive_num);
|
||||
}
|
||||
|
||||
for (i = 0; i < drive_num; i++)
|
||||
{
|
||||
Ecdb_Drive_Info *drive;
|
||||
|
||||
drive = calloc(1, sizeof(Ecdb_Drive_Info));
|
||||
|
||||
if (!drive)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
drive->product = eina_stringshare_add(drives_current[i].product);
|
||||
drive->vendor = eina_stringshare_add(drives_current[i].vendor);
|
||||
drive->revision = eina_stringshare_add(drives_current[i].revision);
|
||||
drive->location = strdup(drives_current[i].location);
|
||||
drive->read_dvdram = drives_current[i].read_dvdram;
|
||||
drive->read_dvdr = drives_current[i].read_dvdr;
|
||||
drive->read_dvdrom = drives_current[i].read_dvdrom;
|
||||
drive->read_cdr = drives_current[i].read_cdr;
|
||||
drive->read_cdrw = drives_current[i].read_cdrw;
|
||||
drive->write_dvdram = drives_current[i].write_dvdram;
|
||||
drive->write_dvdr = drives_current[i].write_dvdr;
|
||||
drive->write_cdr = drives_current[i].write_cdr;
|
||||
drive->write_simulate = drives_current[i].write_simulate;
|
||||
|
||||
burn_drive_get_speedlist(drives_current[i].drive, &speeds);
|
||||
|
||||
drive->profile_name = eina_stringshare_add(speeds->profile_name);
|
||||
drive->profile_loaded = speeds->profile_loaded;
|
||||
|
||||
if (burn_drive_grab(drives_current[i].drive, 1))
|
||||
{
|
||||
drive->capacity = burn_disc_available_space(drives_current[i].drive,
|
||||
NULL);
|
||||
burn_drive_release(drives_current[i].drive, 0);
|
||||
}
|
||||
|
||||
while (speeds->next)
|
||||
{
|
||||
i++;
|
||||
speeds = speeds->next;
|
||||
}
|
||||
|
||||
drive->read_speeds = calloc(i + 2, sizeof(int));
|
||||
drive->write_speeds = calloc(i + 2, sizeof(int));
|
||||
|
||||
drive->read_speeds[0] = i + 1;
|
||||
drive->write_speeds[0] = i + 1;
|
||||
|
||||
for (ret = 1; ret <= i; ret++)
|
||||
{
|
||||
drive->write_speeds[ret] = speeds->write_speed;
|
||||
drive->read_speeds[ret] = speeds->read_speed;
|
||||
speeds = speeds->prev;
|
||||
}
|
||||
|
||||
burn_drive_free_speedlist(&speeds);
|
||||
em->drives = eina_list_append(em->drives, drive);
|
||||
}
|
||||
|
||||
burn_drive_info_free(drives_current);
|
||||
/* General Info */
|
||||
drive->vendor = e_hal_property_string_get(ret, "storage.vendor", NULL);
|
||||
drive->product = e_hal_property_string_get(ret, "storage.model", NULL);
|
||||
drive->revision = e_hal_property_string_get(ret,
|
||||
"storage.firmware_revision", NULL);
|
||||
drive->location = mnt;
|
||||
drive->udi = udi;
|
||||
|
||||
/* Update current directories */
|
||||
_ecdb_drive_set_capabilities(drive, ret);
|
||||
|
||||
em->drives = eina_list_append(em->drives, drive);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -92,14 +97,16 @@ ecdb_drive_info_list_free(Eina_List *list)
|
||||
|
||||
EINA_LIST_FREE(list, info)
|
||||
{
|
||||
FREE(info->read_speeds);
|
||||
if (!info)
|
||||
continue;
|
||||
|
||||
FREE(info->write_speeds);
|
||||
FREE(info->vendor);
|
||||
FREE(info->product);
|
||||
FREE(info->revision);
|
||||
FREE(info->location);
|
||||
eina_stringshare_del(info->vendor);
|
||||
eina_stringshare_del(info->product);
|
||||
eina_stringshare_del(info->revision);
|
||||
eina_stringshare_del(info->profile_name);
|
||||
FREE(info);
|
||||
FREE(info->udi);
|
||||
free(info);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +115,7 @@ ecdb_print_drive_info(void)
|
||||
{
|
||||
Eina_List *l;
|
||||
Ecdb_Drive_Info *drive;
|
||||
int j, i, h;
|
||||
int j, i;
|
||||
|
||||
em->drives = eina_list_nth_list(em->drives, 0);
|
||||
EINA_LIST_FOREACH(em->drives, l, drive)
|
||||
@@ -118,35 +125,31 @@ ecdb_print_drive_info(void)
|
||||
"Location: %s\n",
|
||||
drive->vendor, drive->product,
|
||||
drive->revision, drive->location);
|
||||
printf("Profile name: %s, Loaded: %d\n",
|
||||
drive->profile_name,
|
||||
drive->profile_loaded);
|
||||
printf("Read DVDRAM: %d, Read DVDR: %d, Read DVDROM: %d, "
|
||||
"Read CDR: %d, Read CDRW: %d\n",
|
||||
drive->read_dvdram,
|
||||
drive->read_dvdr,
|
||||
drive->read_dvdrom,
|
||||
drive->read_cdr,
|
||||
drive->read_cdrw);
|
||||
printf("Write DVDRAM: %d, Write DVDR: %d, Write CDR: %d, "
|
||||
"Write Simulate: %d\n",
|
||||
drive->write_dvdram,
|
||||
drive->write_dvdr,
|
||||
printf("Write CD-R: %d, Write CD-RW: %d\n",
|
||||
drive->write_cdr,
|
||||
drive->write_simulate);
|
||||
drive->write_cdrw);
|
||||
printf("Write DVD-R: %d, Write DVD-RW: %d, Write DVD-RAM: %d\n",
|
||||
drive->write_dvdr,
|
||||
drive->write_dvdrw,
|
||||
drive->write_dvdram);
|
||||
printf("Write DVD+R: %d, Write DVD+RW: %d, Write DVD+RWDL: %d\n",
|
||||
drive->write_dvdplusr,
|
||||
drive->write_dvdplusrw,
|
||||
drive->write_dvdplusrwdl);
|
||||
printf("Write DVD+DL: %d\n",
|
||||
drive->write_dvdplusrdl);
|
||||
printf("Write BR-R: %d, Write BR-RW: %d\n",
|
||||
drive->write_bdr,
|
||||
drive->write_bdre);
|
||||
printf("Write HDDVD-R: %d, Write HDDVD-RW: %d\n",
|
||||
drive->write_hddvdr,
|
||||
drive->write_hddvdrw);
|
||||
|
||||
j = drive->read_speeds[0];
|
||||
j = drive->write_speeds[0];
|
||||
|
||||
for (i = 1; i < j; i ++)
|
||||
{
|
||||
if ((h = drive->write_speeds[i]))
|
||||
{
|
||||
printf("Write: %d\n", h);
|
||||
}
|
||||
if ((h = drive->read_speeds[i]))
|
||||
{
|
||||
printf("Read: %d\n", h);
|
||||
}
|
||||
printf("Write: %d\n", drive->write_speeds[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user