def read(deviceFile, mountingPoint, fileToBurn): """Lê o MD5 CRC do arquivo local fileToBurn e do arquivo gravado e armazena o resultado da comparação entre eles em __readStatus""" executor = ApplicationExecutor() result = False outputStr, errorStr, returnCode = executor.executeCommandAndWait( True, None, "mount %s %s" % (deviceFile, mountingPoint) ) if returnCode == 0: outputStr1, errorStr1, returnCode1 = executor.executeCommandAndWait( False, None, ["md5sum", "%s" % fileToBurn], ["awk", "{print $1}"] ) outputStr2, errorStr2, returnCode2 = executor.executeCommandAndWait( False, None, ["md5sum", "%s/%s" % (mountingPoint, fileToBurn.split("/")[-1])], ["awk", "{print $1}"] ) outputStr3, errorStr3, returnCode3 = executor.executeCommandAndWait(True, None, "umount %s" % deviceFile) originalMD5 = outputStr1.rstrip() burnedMD5 = outputStr2.rstrip() result = (returnCode1 == 0) and (returnCode2 == 0) and (originalMD5 == burnedMD5) return result
def isEmpty(deviceFile): """Funcao que verifica se a midia inserida no dispositivo 'deviceFile' esta vazia.""" cmd0 = ['cdrecord', '-media-info', 'dev=%s' % deviceFile, '2>', '/dev/null'] cmd1 = ['grep', 'disk status:'] cmd2 = ['awk', '{print $3}'] o_str, e_str, ret_code = ApplicationExecutor().executeCommandAndWait(False, None, cmd0, cmd1, cmd2) ret = (ret_code == 0) and (o_str.rstrip() == "empty") return ret
def isEmpty(deviceFile): """Funcao que verifica se a midia inserida no dispositivo 'deviceFile' esta vazia.""" cmd0 = ["cdrecord", "-media-info", "dev=%s" % deviceFile, "2>", "/dev/null"] cmd1 = ["grep", "disk status:"] cmd2 = ["awk", "{print $3}"] o_str, e_str, ret_code = ApplicationExecutor().executeCommandAndWait(False, None, cmd0, cmd1, cmd2) ret = (ret_code == 0) and (o_str.rstrip() == "empty") return ret
def getMediaInfo(deviceFile): """ Verifica qual o tipo de mídia inserida no dispositivo deviceFile Este método retorna um dicionario com as chaves 'Type', 'Rewritable' e 'Empty', onde Type é 'CD', 'DVD' ou None, Rewritable é um booleano, indicando se a mídia é regravável e Empty é outro booleano, indicando se a mídia esta vazia. """ # Current: CD-RW # Current: DVD-R sequential recording # Current: DVD-RW sequential recording mediaType = None rewritable = False empty = False cmd0 = ["cdrecord", "-prcap", "dev=%s" % deviceFile] cmd1 = ["grep", "Current:"] cmd2 = ["awk", "{print $2}"] o_str, e_str, ret_code = ApplicationExecutor().executeCommandAndWait(False, None, cmd0, cmd1, cmd2) if ret_code == 0: o_str = o_str.rstrip() knownMedia = False if o_str in ["CD-R", "CD-RW", "DVD-R", "DVD+R", "DVD-RW", "DVD+RW"]: knownMedia = True rewritable = False if o_str.__contains__("RW"): rewritable = True else: print "ERRO : Tipo de midia desconhecido (%s)" % o_str if knownMedia: split_char = "-" if o_str.__contains__("+"): split_char = "+" mediaType = o_str.split(split_char)[0] if mediaType: empty = isEmpty(deviceFile) return {"Type": mediaType, "Rewritable": rewritable, "Empty": empty}
def formatMedia(deviceFile, media): """Formata a mídia no dispositivo""" outputStr = None errorStr = None returnCode = None if (media['Type'] == 'DVD'): outputStr, errorStr, returnCode = ApplicationExecutor().executeCommandAndWait(True, None, "dvd+rw-format -force %s" % deviceFile) elif (media['Type'] == 'CD'): outputStr, errorStr, returnCode = ApplicationExecutor().executeCommandAndWait(True, None, "cdrecord -v gracetime=2 dev=%s blank=fast -force" % deviceFile) else: print "ERRO : Tipo de midia desconhecido" return (returnCode == 0)
def burn(deviceFile, tempDir, fileToBurn, media): """Grava o arquivo fileToBurn na mídia inserida""" outputStr = None errorStr = None returnCode = None createBurnFileCmd = __file__.split("/") del (createBurnFileCmd[-1]) createBurnFileCmd.append("create_burn_file.sh") createBurnFileCmd = "/".join(createBurnFileCmd) createBurnFileCmd = "/bin/sh " + createBurnFileCmd executor = ApplicationExecutor() outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, createBurnFileCmd) if returnCode == 0: if media["Type"] == "DVD": outputStr, errorStr, returnCode = executor.executeCommandAndWait( True, None, "growisofs -dvd-compat -input-charset=ISO-8859-1 -Z %s -R -J -pad %s" % (deviceFile, fileToBurn), ) elif media["Type"] == "CD": outputStr, errorStr, returnCode = executor.executeCommandAndWait( True, None, "mkisofs -r -R -J -l -L -allow-multidot -o %s/ldc_tmp.iso -graft-points %s=%s" % (tempDir, fileToBurn, fileToBurn), ) outputStr, errorStr, returnCode = executor.executeCommandAndWait( True, None, "cdrecord dev=%s -v --eject speed=4" % deviceFile ) else: print "ERRO : Tipo de midia desconhecido" return returnCode == 0
def burn(deviceFile, tempDir, fileToBurn, media): """Grava o arquivo fileToBurn na mídia inserida""" outputStr = None errorStr = None returnCode = None createBurnFileCmd = __file__.split("/") del(createBurnFileCmd[-1]) createBurnFileCmd.append("create_burn_file.sh") createBurnFileCmd = "/".join(createBurnFileCmd) createBurnFileCmd = "/bin/sh " + createBurnFileCmd executor = ApplicationExecutor() outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, createBurnFileCmd) if (returnCode == 0): if (media['Type'] == 'DVD'): outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, "growisofs -dvd-compat -input-charset=ISO-8859-1 -Z %s -R -J -pad %s" % (deviceFile, fileToBurn)) elif (media['Type'] == 'CD'): outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, "mkisofs -r -R -J -l -L -allow-multidot -o %s/ldc_tmp.iso -graft-points %s=%s" % (tempDir, fileToBurn, fileToBurn)) outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, "cdrecord dev=%s -v --eject speed=4" % deviceFile) else: print "ERRO : Tipo de midia desconhecido" return (returnCode == 0)
def getMediaInfo(deviceFile): """ Verifica qual o tipo de mídia inserida no dispositivo deviceFile Este método retorna um dicionario com as chaves 'Type', 'Rewritable' e 'Empty', onde Type é 'CD', 'DVD' ou None, Rewritable é um booleano, indicando se a mídia é regravável e Empty é outro booleano, indicando se a mídia esta vazia. """ # Current: CD-RW # Current: DVD-R sequential recording # Current: DVD-RW sequential recording mediaType = None rewritable = False empty = False cmd0 = ['cdrecord', '-prcap', 'dev=%s' % deviceFile] cmd1 = ['grep', 'Current:'] cmd2 = ['awk', '{print $2}'] o_str, e_str, ret_code = ApplicationExecutor().executeCommandAndWait(False, None, cmd0, cmd1, cmd2) if (ret_code == 0): o_str = o_str.rstrip() knownMedia = False if (o_str in ['CD-R', 'CD-RW', 'DVD-R', 'DVD+R', 'DVD-RW', 'DVD+RW']): knownMedia = True rewritable = False if (o_str.__contains__("RW")): rewritable = True else: print "ERRO : Tipo de midia desconhecido (%s)" % o_str if (knownMedia): split_char = "-" if (o_str.__contains__("+")): split_char = "+" mediaType = o_str.split(split_char)[0] if (mediaType): empty = isEmpty(deviceFile) return {'Type': mediaType, 'Rewritable': rewritable, 'Empty': empty}
def __init__(self, parent, info, expectedMedia): """ parent - Objeto pai. deviceFile - Endereço do dispositivo a ser testado. Ex: /dev/hdc expectedMedia - Dicionario que representa o tipo de mídia esperado, no dispositivo, para gravação. info - Instancia contendo as informacoes do dispositivo. """ QtGui.QWizard.__init__(self, parent) Ui_WizardDiagDVDCD.__init__(self) self.setupUi(self) self.__executor = ApplicationExecutor() self.__info = info self.__deviceFile = info.deviceFile self.__expectedMedia = expectedMedia self.__backButton = self.button(QtGui.QWizard.BackButton); self.__nextButton = self.button(QtGui.QWizard.NextButton); self.__cancelButton = self.button(QtGui.QWizard.CancelButton); self.__finishButton = self.button(QtGui.QWizard.FinishButton); self.__adjusts()
def read(deviceFile, mountingPoint, fileToBurn): """Lê o MD5 CRC do arquivo local fileToBurn e do arquivo gravado e armazena o resultado da comparação entre eles em __readStatus""" executor = ApplicationExecutor() result = False outputStr, errorStr, returnCode = executor.executeCommandAndWait(True, None, "mount %s %s" % (deviceFile, mountingPoint)) if (returnCode == 0): outputStr1, errorStr1, returnCode1 = executor.executeCommandAndWait(False, None, ['md5sum', "%s" % fileToBurn], ['awk', '{print $1}']) outputStr2, errorStr2, returnCode2 = executor.executeCommandAndWait(False, None, ['md5sum', "%s/%s" % (mountingPoint, fileToBurn.split("/")[-1])], ['awk', '{print $1}']) outputStr3, errorStr3, returnCode3 = executor.executeCommandAndWait(True, None, "umount %s" % deviceFile) originalMD5 = outputStr1.rstrip() burnedMD5 = outputStr2.rstrip() result = (returnCode1 == 0) and (returnCode2 == 0) and (originalMD5 == burnedMD5) return result
def closeTray(deviceFile): """Utiliza a aplicação eject para fechar a gaveta do DVD/CD especificado por deviceFile""" outputStr, errorStr, returnCode = ApplicationExecutor().executeCommandAndWait(True, None, "cdrecord -load dev=%s" % deviceFile) return returnCode