Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. from PyQt4.QtCore import *
  2. from PyQt4.QtGui import *
  3. import sys
  4. import findNetPcs as lan
  5. import networkFileTransferB as nft
  6. import os.path
  7. import thread
  8.  
  9. from mainwindow import Ui_MainWindow
  10.  
  11. var_cancelar = False
  12.  
  13.  
  14. class window(QMainWindow, Ui_MainWindow):
  15.  
  16.     model = QDirModel()
  17.     pcModel = QStandardItemModel()
  18.     contas = [ ('', ''), ('', ''), ('', ''), ('', '') ]
  19.  
  20.     def __init__(self, parent = None):
  21.         QWidget.__init__(self, parent)
  22.         self.setupUi(self)
  23.         self.lsPastas.setModel(self.model)
  24.         self.lsComputadores.setModel(self.pcModel)
  25.        
  26.  
  27.         self.connect(self.btCopiar, SIGNAL("clicked()"), self.transferir)
  28.         self.connect(self.btRefresh, SIGNAL('clicked()'), self.getPcs)
  29.         self.connect(self.btCancelar, SIGNAL('clicked()'), self.cancelar)
  30.  
  31.         self.getPcs()
  32.        
  33.    
  34.     def printa(self, msg='', cor=QColor(0,0,0)):
  35.         self.txtSaida.setTextColor(cor)
  36.         self.txtSaida.append(msg)
  37.         self.txtSaida.moveCursor(QTextCursor.NextRow)
  38.         self.txtSaida.moveCursor(QTextCursor.StartOfLine)
  39.  
  40.     def lockui(self, lock=False):
  41.         self.btCancelar.setEnabled(lock)
  42.         self.btCancelar.setFlat(not lock)
  43.         if lock:
  44.             self.btCancelar.setText('Cancelar')
  45.         else:
  46.             self.btCancelar.setText('')
  47.        
  48.         self.frame.setEnabled(not lock)
  49.         self.btFechar.setEnabled(not lock)
  50.         QApplication.processEvents()
  51.  
  52.        
  53.     def getPcs(self):
  54.         self.pcModel.clear()
  55.         count = 0
  56.         for i in lan.getPcs():
  57.             sItem = QStandardItem()
  58.             sItem.setText(i)
  59.             sItem.setEditable(False)
  60.             sItem.setCheckable(True)
  61.             sItem.setCheckState(Qt.Checked)
  62.             self.pcModel.insertRow(count, sItem)
  63.             ds = lan.diskEnum()
  64.  
  65.             for j in range(len(ds)):
  66.                 sItem2 = QStandardItem()
  67.                 sItem2.setText(ds[j])
  68.                 sItem2.setCheckable(True)
  69.                 sItem2.setEditable(False)
  70.                 if ds[j]=='C:':
  71.                     sItem2.setCheckState(Qt.Checked)
  72.                 sItem.insertRow(j, sItem2)
  73.  
  74.             count += 1
  75.  
  76.  
  77.  
  78.     def getSource(self):
  79.         return self.model.filePath(self.lsPastas.currentIndex())
  80.  
  81.  
  82.     def getDestinos(self):
  83.         hosts=[]
  84.  
  85.         for i in range(self.pcModel.rowCount()):
  86.             item = self.pcModel.item(i,0)
  87.             if item.checkState():
  88.                 host=str(self.pcModel.item(i,0).text())
  89.                 drives=[]
  90.  
  91.                 for j in range(item.rowCount()):
  92.                     if item.child(j,0).checkState():
  93.                         drives.append( str(item.child(j,0).text()[0])+':' )
  94.                
  95.                 if len(drives) <= 0:
  96.                     drives.append('C:')
  97.                
  98.                 hosts.append((host,drives))
  99.  
  100.         return hosts
  101.  
  102.    
  103.     def copiar(self, host, drives=[]):
  104.         source = os.path.abspath(str(self.getSource()) )
  105.        
  106.         for drive in drives:
  107.             if os.path.isdir(source):
  108.                 tree = os.walk(source)
  109.                 for dir in tree:
  110.                     self.printa('copiando arquivos da pasta '+ dir[0])
  111.                     for file in dir[2]:
  112.                         global var_cancelar
  113.                         if var_cancelar:
  114.                             self.printa('OPERACAO CANCELADA PELO USUARIO',QColor(255,0,0))
  115.                             return
  116.                        
  117.                         pathSource = dir[0]+'\\'+file
  118.                         pathDest = str(drive) + os.path.splitdrive(pathSource)[1]
  119.                         self.printa('copiando arquivo '+pathSource+'  --> '+host + '\\' + pathDest)
  120.                         try:
  121.                             nft.netcopy(host, pathSource, pathDest)
  122.                         except Exception, err:
  123.                             self.printa(err, QColor(0255,0,0))
  124.                        
  125.             elif os.path.isfile(source):
  126.                 pathDest = str(drive) + os.path.splitdrive(source)[1]
  127.                 self.printa( 'copiando arquivo '+ source+ ' --> '+ host + '\\' + pathDest)
  128.                 nft.netcopy(host, source, pathDest)
  129.                
  130.             else:
  131.                 self.printa('ERROR: INVALID SOURCE PATH', QColor(255,0,0))
  132.  
  133.                        
  134.     def transferir(self):
  135.         thread.start_new_thread(self.transferir_thread, ('thread1',1))
  136.  
  137.     def transferir_thread(self, threadName='', id=1):
  138.         global var_cancelar
  139.         var_cancelar = False
  140.         self.lockui(True)
  141.        
  142.         for host, drives in self.getDestinos():
  143.             self.printa('LOGIN.... '+ host, QColor(0,255,0))
  144.             for conta in self.contas:
  145.                 user, passwd = conta
  146.                 try:
  147.                     nft.wnet_connect(host, user, passwd)
  148.                 except Exception, err:
  149.                     if isinstance(err, nft.win32wnet.error) and err[0] == 1326:
  150.                         if conta == self.contas[len(self.contas)-1]:
  151.                             self.printa( 'ERROR: FALHA DE AUTENTICACAO NO COMPUTADOR '+ host, QColor(255,0,0))
  152.                     #else:
  153.                     #    sys.stderr.write('ERROR: '+ err)
  154.                        
  155.                 else:
  156.                     self.printa('log com sucesso em ' + host, QColor(0,255,0))
  157.                     try:
  158.                         self.copiar(host, drives)
  159.                     except Exception, err:
  160.                         self.printa('ERROR: FALHA NA TRANSFERENCIA DO ARQUIVO', QColor(255,0,0))
  161.                         self.printa(str(err), QColor(255,0,0))
  162.                     break
  163.  
  164.         self.lockui(False)
  165.         self.printa()
  166.         self.printa('CONCLUIDO!!!', QColor(0,0,255))
  167.         QMessageBox.information(self,'Concluido', 'COPIAS COMPLETAS', QMessageBox.Ok)
  168.        
  169.  
  170.  
  171.     def cancelar(self):
  172.         global var_cancelar
  173.         var_cancelar = True
  174.         self.txtSaida.append('')
  175.         self.printa('CANCELANDO.... ', QColor(255,0,0))        
  176.         self.lockui(False)
  177.        
  178.            
  179.  
  180. if __name__ == '__main__':
  181.  
  182.     a = QApplication(sys.argv)
  183.     q = window()
  184.     q.show()
  185.     sys.exit(a.exec_())