""" Interface to cdrdao """ from tools import cmdoutput, striplist, which, TRUE, FALSE from string import split, join, digits, find, strip, letters, atoi, lower from types import StringType from log4py import Logger, LOGLEVEL_NORMAL from tempfile import mktemp import os class cdrdao: speed = 1 dummy_mode = FALSE eject = FALSE overburn = FALSE multisession = FALSE swap_byte_order = FALSE toc_file = "" def __init__(self, bus, target, lun, device, loglevel = LOGLEVEL_NORMAL): self.__cdrdao_logger = Logger().get_instance(self) self.__cdrdao_logger.set_loglevel(loglevel) self.__cdrdao_command = which("cdrdao") if (type(bus) == StringType): bus = atoi(bus) if (type(target) == StringType): target = atoi(target) if (type(lun) == StringType): lun = atoi(lun) self.__cdrdao_bus = bus self.__cdrdao_target = target self.__cdrdao_lun = lun self.__cdrdao_device = device self.__cdrdao_tracks = [] self.__cdrdao_read_version() def version(self): """ Returns the version string of cdrdao. """ if (self.__cdrdao_version_micro != None): return "%d.%d.%d" % (self.__cdrdao_version_major, self.__cdrdao_version_minor, self.__cdrdao_version_micro) else: return "%d.%d" % (self.__cdrdao_version_major, self.__cdrdao_version_minor) def device(self): return self.__cdrdao_device def add_track(self, value): self.__cdrdao_tracks.append("\"%s\"" % value) def command_line(self): cmdline = self.__cdrdao_command if (self.dummy_mode): cmdline ="%s simulate -n -v 2" % cmdline else: cmdline ="%s write -n -v 2" % cmdline if (self.eject): cmdline = "%s --eject" % cmdline if (self.overburn): cmdline = "%s --overburn" % cmdline if (self.multisession): cmdline = "%s --multi" % cmdline if (self.swap_byte_order): cmdline = "%s --swap" % cmdline cmdline = "%s --device %d,%d,%d" % (cmdline, self.__cdrdao_bus, self.__cdrdao_target, self.__cdrdao_lun) if (type(self.speed) == StringType): self.speed = atoi(self.speed) cmdline = "%s --speed %d" % (cmdline, self.speed) if (self.toc_file == ""): cmdline = "%s %s" % (cmdline, self.__cdrdao_create_toc_file()) else: cmdline = "%s \"%s\"" % (cmdline, self.toc_file) return cmdline # Private methods of the cdrecord class def __cdrdao_read_version(self): """ Reads the version string by executing "cdrdao". """ output = cmdoutput("%s 2>&1" % self.__cdrdao_command, strip = TRUE) versionLine = output[1] splitted = split(versionLine, " ") version = split(splitted[2], ".") self.__cdrdao_version_major = atoi(version[0]) self.__cdrdao_version_minor = atoi(version[1]) self.__cdrdao_version_micro = atoi(version[2]) def __cdrdao_create_toc_file(self): """ Creates a temporary toc file. """ filename = mktemp("_eroaster.toc") file = open(filename, "w") if (self.multisession): file.write("CD_ROM_XA\n\n") else: file.write("CD_DA\n\n") for i in range(len(self.__cdrdao_tracks)): file.write("TRACK AUDIO\n") trackname = "FILE %s 0\n\n" % self.__cdrdao_tracks[i] file.write(trackname) file.close() return filename