Index: bk_manager/trunk/functions/functions.py
===================================================================
diff --git a/bk_manager/trunk/functions/functions.py b/bk_manager/trunk/functions/functions.py
--- a/bk_manager/trunk/functions/functions.py (revision 59)
+++ b/bk_manager/trunk/functions/functions.py (revision 60)
@@ -8,9 +8,10 @@
import os
import subprocess
import commands
-
-
-#Entero a cadena agregando ceros delante
+import shutil
+
+#--------------------------------------------- Entero a cadena agregando ceros delante -------------------------------------------------
+
def i2s(var_n, var_length=4):
var_n2=str(var_n)
while len(var_n2) < var_length:
@@ -18,19 +19,8 @@
return var_n2
-#Crea directorios en la ruta indicada
-def make_dirs(list_dirs, self):
- var_cmd="mkdir -p "+str(self.var_Rpath)
- for var_dir in list_dirs:
- var_output=commands.getstatusoutput(var_cmd+'/'+var_dir)[0]
- if var_output != 0:
- self.txtInfo.append("Error al crear el directorio "+var_dir+", output_error:" + str(var_output))
- return False
- self.txtInfo.append('Carpetas creadas correctamente')
- return True
-
-
-#Se verifica que la ruta exista y sea un directorio
+#----------------------------------------- Se verifica que la ruta exista y sea un directorio -------------------------------------------------
+
def dir_exists(var_dir, self):
if os.path.isdir(var_dir):
self.txtInfo.append("Ruta valida, sin error:" + str(var_dir))
@@ -40,7 +30,8 @@
return False
-#Se buscan los archivos del tipo especificado
+#-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas -----------------------------
+
def load_days(self):
self.var_list=[]
@@ -74,33 +65,50 @@
get_sub_list(self)
self.btnGbkp.setEnabled(True)
-
-
-#Verifica que los parametros
-def validate_parameters(self):
- #Verifica que las rutas sean validas
- if self.statusRpath == False:
- self.txtInfo.append("Ruta de proyecto no valida")
- return False
-
- #Verifica la etiqueta
- if len(self.var_Elabel) == 0:
- self.txtInfo.append("Debe ingresar el nombre de la etiqueta")
- return False
-
- return True
-
-
-#Obtiene el rango de las fechas seleccionadas
+
+
+#-------------------------------------------------- Obtiene el rango de las fechas seleccionadas -----------------------------------------
+
def get_sub_list(self):
self.var_sublist=[]
for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
self.var_sublist.append(i)
if len(self.var_sublist) == 0:
- self.txtInfo.append("No existen archivos encontrados")
-
-
-#Busca los archivos con los parametros de busqueda
+ self.txtInfo.append("No existen archivos encontrados")
+
+
+#----------------------------------------------------- Verifica los parametros faltantes -----------------------------------------------------------
+
+def validate_parameters(self):
+ #Verifica que las ruta del proyecto sea valida
+ if self.statusRpath == False:
+ self.txtInfo.append("Ruta de proyecto no valida")
+ return False
+
+ #Verifica la etiqueta
+ if len(self.var_Elabel) == 0:
+ self.txtInfo.append("Debe ingresar el nombre de la etiqueta")
+ return False
+
+ return True
+
+
+#------------------------------------------------- Crea directorios en la ruta indicada -----------------------------------------------------------
+
+def make_dirs(list_dirs, self):
+
+ for var_dir in list_dirs:
+ shutil.rmtree(self.var_Rpath+'/'+var_dir, True)
+ var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)[0]
+ if var_output != 0:
+ self.txtInfo.append("Error al crear el directorio "+var_dir+", output_error:" + str(var_output))
+ return False
+ self.txtInfo.append('Carpetas creadas correctamente')
+ return True
+
+
+#-------------------------------------------- Busca los archivos con los parametros de busqueda ---------------------------------------
+
def list_files(self):
var_files_list=[]
for var_doy in self.var_sublist:
@@ -111,7 +119,8 @@
return var_files_list
-#Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD
+#--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD -----------------------
+
def make_files_dat(var_files_list, self):
var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
var_n=1 #Numero del DVD actual
@@ -119,7 +128,7 @@
var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
for i in var_files_list: #Se asignan en i los archivos de la lista
- self.txtInfo.append(i)
+
var_size_i=os.path.getsize(i)/1024+1 #tamaño en KB del archivo de la lista, se suma 1 KB para evitar problemas al momento de sumar
var_tmp += var_size_i #Se acumulan el tamaño de los archivos de la lista
@@ -146,23 +155,25 @@
var_tmp_path=line.split(self.var_Dpath)[1][:-13]
var_file.write(var_tmp_path+'='+line+'\n')
var_file.close()
-
+
+ self.txtInfo.append("Archivos .dat creados")
return var_n
-#Genera los archivos .print con los cuales se creara los postscript
+#------------------------------ Genera los archivos .print con los cuales se creara los postscript -----------------------------------
+
def make_files_print(self):
var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar
# Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print
- for var_n in range(1, self.var_n_discs + 1):
+ for var_n in range(1, self.var_Discs + 1):
#se abren los archivos .dat en modo lectura
var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r")
lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
# Se crea el archivo .print
var_file_print = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".print","w")
- var_file_print.write(self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_n_discs)+"\n")
+ var_file_print.write(self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n")
var_file_print.write("Year Doy Folder Set Time range\n")
var_first_folder = lines[0].split('=')[0]
@@ -195,7 +206,7 @@
var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
if var_first_folder == '/':
- var_folder = self.txtElabel.text()
+ var_folder = self.var_Elabel
else:
var_folder = var_first_folder.split('/')[-2]
Index: bk_manager/trunk/functions/functions2.py
===================================================================
diff --git a/bk_manager/trunk/functions/functions2.py b/bk_manager/trunk/functions/functions2.py
--- a/bk_manager/trunk/functions/functions2.py (revision 59)
+++ b/bk_manager/trunk/functions/functions2.py (revision 60)
@@ -7,6 +7,7 @@
import subprocess
import commands
+#----------------------------------------------------- Deteccion de los dispositivos de grabacion ---------------------------------------------------------------
def detect_devices(self):
"""
@@ -48,6 +49,28 @@
self.chkDevD.setChecked(False)
self.chkDevD.setEnabled(False)
+
+#----------------------------------- listado de los dispositivos de grabacion seleccionados --------------------------------------------
+
+def selected_devices(self):
+ self.var_devices=[]
+ if self.chkDevA.isChecked():
+ self.var_devices.append(str(self.txtDeviceA.text()))
+ if self.chkDevB.isChecked():
+ self.var_devices.append(str(self.txtDeviceB.text()))
+ if self.chkDevC.isChecked():
+ self.var_devices.append(str(self.txtDeviceC.text()))
+ if self.chkDevD.isChecked():
+ self.var_devices.append(str(self.txtDeviceD.text()))
+
+ if len(self.var_devices) == 0:
+ return False
+ else:
+ return True
+
+
+#----------------------------------------------------- Inicializacion para pruebas---------------------------------------------------------------
+
def set_parameters_test(self):
"""
Se usa para inicializar ciertos parametros para pruebas
@@ -60,19 +83,25 @@
self.txtDcapacity.setReadOnly(False)
+#----------------------------------------------------- crea parameters.conf ---------------------------------------------------------------
+
def make_parameters_conf(self):
var_file = open("parameters.conf","w")
- var_file.write(self.var_Dpath+"\n") #0
- var_file.write(self.var_Rpath+"\n") #1
- var_file.write(str(self.var_lstDtype)+"\n") #2
- var_file.write(self.var_Dtype+"\n") #3
- var_file.write(self.var_Elabel+"\n") #4
- var_file.write(str(self.var_Copys)+"\n") #5
- var_file.write(str(self.var_lstDcapacity)+"\n") #6
- var_file.write(str(self.var_Dcapacity)+"\n") #7
- var_file.write(str(self.var_n_discs)) #8
+ var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos
+ var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto
+ var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type
+ var_file.write(self.var_Dtype+"\n") #3 extension Data Type
+ var_file.write(self.var_Elabel+"\n") #4 etiqueta
+ var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias
+ var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity
+ var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaño Device Capacity
+ var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar
+# var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial
+# var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final
+
var_file.close()
+#----------------------------------------------------- carga parameters.conf ---------------------------------------------------------------
def get_parameters_conf(self):
var_file = open("parameters.conf","r")
@@ -85,20 +114,27 @@
self.txtCopys.setValue(int(lines[5][:-1])) #5
self.lstDcapacity.setCurrentIndex(int(lines[6])) #6
self.txtDcapacity.setValue(float(lines[7])) #7
- self.var_n_discs = int(lines[8]) # 8
+ self.var_Discs = int(lines[8]) #8
+# var_StartDay = int(lines[6]) #9
+# var_StopDay = int(lines[7]) #10
var_file.close()
+
+#-------------------------- actualiza el valor de las variables con los parametros seleccionados -----------------------------
+
def set_vars(self):
- self.var_Dpath = self.txtDpath.text() #0
- self.var_Rpath = self.txtRpath.text() #1
+ self.var_Dpath = str(self.txtDpath.text()) #0
+ self.var_Rpath = str(self.txtRpath.text()) #1
self.var_lstDtype = self.lstDtype.currentIndex() #2
- self.var_Dtype = self.txtDtype.text() #3
- self.var_Elabel = self.txtElabel.text() #4
+ self.var_Dtype = str(self.txtDtype.text()) #3
+ self.var_Elabel = str(self.txtElabel.text()) #4
self.var_Copys = self.txtCopys.value() #5
self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6
self.var_Dcapacity = self.txtDcapacity.value() #7
+ self.var_Discs = self.var_Discs #8
+#---------------------------------------------- Habilitacion y deshabilitacion de items -------------------------------------------------------
def enabled_items1(var_bool, self):
self.tabParameters.setEnabled(not(var_bool))
Index: bk_manager/trunk/ui/MainWindow.py
===================================================================
diff --git a/bk_manager/trunk/ui/MainWindow.py b/bk_manager/trunk/ui/MainWindow.py
--- a/bk_manager/trunk/ui/MainWindow.py (revision 59)
+++ b/bk_manager/trunk/ui/MainWindow.py (revision 60)
@@ -32,18 +32,25 @@
functions2.detect_devices(self) #busca los dispositivos de grabacion
- self.var_n_discs=0
- self.var_disc=0
+ self.var_Discs = 0 #Numero de discos del proyecto
+ self.var_Copys = 0 #Numero de copias
+ self.var_disc_n = 0
+ self.var_copy_n = 0
+
self.var_list=[]
self.var_sublist=[]
- self.bool_iso = False
- self.bool_burn = False
+
+ self.var_devices=[]
+
+ self.var_step = 0
+ self.bool_state_burning = False
+
#Revisa si existe el archivo de confirguracion
if os.path.isfile("parameters.conf"):
self.txtInfo.append("Archivo de configuracion encontrado")
functions2.get_parameters_conf(self)
- self.txtInfo.append("El proyecto creara "+str(self.var_n_discs)+" DVDs")
+ self.txtInfo.append("El proyecto es de "+str(self.var_Discs)+" discos")
else:
self.txtInfo.append("Elija los parametros de configuracion")
functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas
@@ -53,7 +60,11 @@
self.statusDpath = functions.dir_exists(self.var_Dpath, self)
self.statusRpath = functions.dir_exists(self.var_Rpath, self)
functions.load_days(self)
-
+
+ if os.path.isfile("parameters.conf"):
+ functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion
+
+
self.var_process = QtCore.QProcess()
self.connect(self.var_process, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput)
self.connect(self.var_process, QtCore.SIGNAL('readyReadStandardError()'), self.readError)
@@ -74,18 +85,18 @@
def finished(self):
self.txtInfo.append("proceso terminado finished() "+QtCore.QString(self.var_process.exitCode()))
- if self.var_disc <= self.var_n_discs:
+ if self.var_disc_n <= self.var_Discs and self.bool_state_burning:
self.burning()
-#----------------------------------------------------- Obtencion de las ruta de los datos ---------------------------------------------------------------
+#----------------------------------------------------- Obtencion de la ruta de los datos ---------------------------------------------------------------
@pyqtSignature("")
def on_btnDpath_clicked(self):
"""
Permite seleccionar graficamente el direcorio de los datos a grabar
"""
- self.var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
+ self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
self.txtDpath.setText(self.var_Dpath)
self.statusDpath = functions.dir_exists(self.var_Dpath, self)
functions.load_days(self)
@@ -96,7 +107,7 @@
"""
Carga la ruta editada y verifica que sea correcta y carga la lista de dias
"""
- self.var_Dpath=self.txtDpath.text() #Se carga la variable con la ruta recien editada
+ self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada
self.statusDpath = functions.dir_exists(self.var_Dpath, self)
functions.load_days(self)
@@ -108,7 +119,7 @@
"""
Permite seleccionar graficamente el direcorio del proyecto
"""
- self.var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
+ self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
self.txtRpath.setText(self.var_Rpath)
self.statusRpath = functions.dir_exists(self.var_Rpath, self)
@@ -118,7 +129,7 @@
"""
Valida la ruta del proyecto
"""
- self.var_Rpath=self.txtRpath.text() #Se carga la variable con la ruta recien editada
+ self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada
self.statusRpath = functions.dir_exists(self.var_Rpath, self)
@@ -145,7 +156,7 @@
@pyqtSignature("")
def on_txtDtype_editingFinished(self):
- self.var_Dtype=self.txtDtype.text()
+ self.var_Dtype=str(self.txtDtype.text())
functions.load_days(self) #llamada a funcion
@@ -153,7 +164,7 @@
@pyqtSignature("")
def on_txtElabel_editingFinished(self):
- self.var_Elabel = self.txtElabel.text()
+ self.var_Elabel = str(self.txtElabel.text())
#----------------------------------------------------- Numero de copias ---------------------------------------------------------------
@pyqtSignature("")
@@ -223,6 +234,7 @@
self.txtDcapacity.setValue(100.0)
self.txtDcapacity.setReadOnly(False)
+ self.var_lstDcapacity = self.lstDcapacity.currentIndex()
self.var_Dcapacity = self.txtDcapacity.value()
@@ -248,12 +260,13 @@
return
var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar
- self.var_n_discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
+ self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat
functions.make_files_print(self) # Se crean los archivos .print
functions2.make_parameters_conf(self) # se crea el archivo parameters.conf
#Se bloquean los parametros de configuracion
functions2.enabled_items1(True, self)
+
#----------------------------------------------------- Permite reiniciar la configuracion ---------------------------------------------------------------
@@ -274,58 +287,72 @@
"""
Se inicia el proceso de grabacion
"""
- functions2.enabled_items2(True, self)
-
- sys.stdout = self
-# #sys.stderr = self
-# print "stdout_!!!"
-
- self.var_devices=[]
- if self.chkDevA.isChecked():
- self.var_devices.append(self.txtDeviceA.text())
- if self.chkDevB.isChecked():
- self.var_devices.append(self.txtDeviceB.text())
- if self.chkDevC.isChecked():
- self.var_devices.append(self.txtDeviceC.text())
- if self.chkDevD.isChecked():
- self.var_devices.append(self.txtDeviceD.text())
-
- if len(self.var_devices) ==0:
+
+ #Verifica que exista algun dispositivo de grabacion seleccionado
+ if not(functions2.selected_devices(self)):
+ self.txtInfo.append("No hay ningun dispositivo de grabacion seleccionado ")
return
+ #Lista los dispositivos de grabacion a usar
for dev in self.var_devices:
self.txtInfo.append("dispositivo :"+dev)
- self.var_disc = 1
+ #Asigna las variables con los valores iniciales
+ self.var_disc_n = 0 # numero de disco actual para grabacion
+ self.var_copy_n = 0
+ self.var_step = 0
+ self.bool_state_burning = True
+
+ functions2.enabled_items2(True, self)
self.burning()
def burning(self):
var_Rpath_ppath=self.var_Rpath+"/ppath"
var_Rpath_iso=self.var_Rpath+"/iso"
- file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc)+".iso"
-
- if not(self.bool_iso):
-# self.bool_iso = True
- self.bool_burn = False
- file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc)+".iso"
- file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+functions.i2s(self.var_disc)+".dat"
+ file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso"
+
+ #Creacion del archivo.iso para la grabacion
+ if self.var_step == 0:
+ self.var_disc_n += 1 # numero de disco actual para grabacion
+ self.txtInfo.append("Creando el iso del disco numero: "+self.var_disc_n)
+
+ #Si ya se grabaron todos los discos
+ if self.var_disc_n > self.var_Discs:
+ self.bool_state_burning = False
+ self.txtInfo.append("GRABACION TERMINADA")
+ return
+
+ #comando para la creacion del archivo.iso
+ file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+functions.i2s(self.var_disc_n)+".dat"
var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel
var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
-
- elif not(self.bool_burn):
- self.bool_iso = False
- self.bool_burn = True
- var_dev_tmp=self.var_devices[ (self.var_disc-1) % len(self.var_devices) ]
+ self.var_step = 1 #Se ira al paso de la grabacion en la siguiente llamada
+
+ #Grabacion de los DVDs
+ elif self.var_step == 1:
+ self.var_copy_n += 1 # numero de copia actual
+ self.txtInfo.append("Grabando la copia numero: "+self.var_copy_n)
+
+ #Si esta es la ultima copia se pasara al siguiente disco en la siguiente llamada a la funcion
+ if self.var_copy_n == self.var_Copys:
+ self.var_step = 0
+
+ var_index = (((self.var_disc_n - 1) * self.var_Discs) + self.var_copy_n) % len(self.var_devices)
+
+ if var_index == 0:
+ self.txtInfo.append("EXPULSANDO BANDEJAS")
+
+ var_dev_tmp=self.var_devices[var_index]
var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso
- self.var_disc += 1
-
-# self.var_process.start('ls')
-# self.txtInfo.append(var_cmd)
-
- self.txtInfo.append("creando iso")
- self.var_process.start(var_cmd)
+
+
+ self.var_process.start('ls')
+ self.txtInfo.append(var_cmd)
+
+# self.txtInfo.append("creando iso")
+# self.var_process.start(var_cmd)
#----------------------------------------------------- Detener proceso de grabacion ---------------------------------------------------------------
@@ -335,8 +362,9 @@
"""
Slot documentation goes here.
"""
-# self.var_process.terminate() #Termina el proceso, si puede
- self.var_process.kill() #Termina el proceso, si puede
+ self.bool_state_burning = False
+ self.var_process.terminate() #Termina el proceso, si puede
+# self.var_process.kill() #Mata el proceso, no es la forma adecuada
functions2.enabled_items2(False, self)
Index: bk_manager/trunk/ui/MainWindow.ui
===================================================================
diff --git a/bk_manager/trunk/ui/MainWindow.ui b/bk_manager/trunk/ui/MainWindow.ui
--- a/bk_manager/trunk/ui/MainWindow.ui (revision 59)
+++ b/bk_manager/trunk/ui/MainWindow.ui (revision 60)
@@ -833,7 +833,7 @@
0
0
809
- 25
+ 21