class Window(QWidget): def __init__(self, client, mainwindow): QWidget.__init__(self) self.mainwindow = mainwindow self.que = '' self.client = client self.arbol = Arbol('') self.crear_arbol('') self.treeView = QTreeView() self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect(self.openmenu) self.model = QStandardItemModel() self.additems(self.model, self.arbol) self.treeView.setModel(self.model) self.model.setHorizontalHeaderLabels([self.tr("Dropbox")]) layout = QVBoxLayout() layout.addWidget(self.treeView) self.setLayout(layout) def init_GUI(self): self.model = QStandardItemModel() self.additems(self.model, self.arbol) self.treeView.setModel(self.model) self.model.setHorizontalHeaderLabels([self.tr("Dropbox")]) def additems(self, parent, elements): for text in elements.hijos.keys(): nombre = elements.hijos[text].nombre item = QStandardItem(nombre) parent.appendRow(item) if elements.hijos[text]: self.additems(item, elements.hijos[text]) def crear_arbol(self, path): lista = self.client.files_list_folder('').entries lista2 = self.client.files_list_folder('', recursive=True).entries for text in lista: nombre = text.name path_nuevo = text.path_lower if type(text) == FolderMetadata: self.arbol.agregar_nodo(path_nuevo, nombre, '013', '') else: self.arbol.agregar_nodo(path_nuevo, nombre, '012', '') for text in lista2: nombre = text.name path_nuevo = text.path_lower nombre2 = path_nuevo.split('/') padre = path_nuevo.replace('/{}'.format(nombre2[-1]), '') if type(text) == FolderMetadata: self.arbol.agregar_nodo(path_nuevo, nombre, '013', padre) else: self.arbol.agregar_nodo(path_nuevo, nombre, '012', padre) def agregar_archivo(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': self.mainwindow.padre = nodo.id_nodo self.mainwindow.botonnuevo_archivo() else: self.mainwindow.padre = nodo.id_padre self.mainwindow.botonnuevo_archivo() def agregar_carpeta(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': self.mainwindow.padre = nodo.id_nodo self.mainwindow.botonnueva_carpeta() else: self.mainwindow.padre = nodo.id_padre self.mainwindow.botonnueva_carpeta() def crear_carpeta(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText(self, "Titulo", "Nombre de la nueva carpeta:") if ok: if texto == '': pass else: if nodo.valor == '012': nombre = nodo.id_padre + '/' + texto try: self.client.files_create_folder(nombre) self.form.arbol.agregar_nodo(id_nodo=nombre, nombre=texto, valor='013', id_padre=nodo.id_padre) self.statusBar().showMessage( 'Carpeta agregada: {}'.format(nombre)) self.form.init_GUI() except dropbox.exceptions.ApiError: self.statusBar().showMessage( 'Nombre de carpeta ya existe: {}'.format(nombre)) elif nodo.valor == '013': nombre = nodo.id_nodo + '/' + texto try: self.client.files_create_folder(nombre) self.form.arbol.agregar_nodo(id_nodo=nombre, nombre=texto, valor='013', id_padre=nodo.id_nodo) self.statusBar().showMessage( 'Carpeta agregada: {}'.format(nombre)) self.form.init_GUI() except dropbox.exceptions.ApiError: self.statusBar().showMessage( 'Nombre de carpeta ya existe: {}'.format(nombre)) def descargar_archivo(self): fileName = QFileDialog.getExistingDirectory( self, 'Escoge Carpeta de descarga', QDir.rootPath()) if fileName: nodo = self.arbol.obtener_nodo_nombre(self.que) nombre = nodo.id_nodo.split('/') self.client.files_download_to_file(fileName + '\\' + nombre[-1], nodo.id_nodo) self.mainwindow.statusBar().showMessage('Descargado: {}'.format( nombre[-1])) def descargar_carpeta(self): fileName = QFileDialog.getExistingDirectory( self, 'Escoge Carpeta de descarga', QDir.rootPath()) if fileName: os.makedirs("{}".format(str(fileName + '\\' + self.que))) nodo = self.arbol.obtener_nodo_nombre(self.que) self.mainwindow.statusBar().showMessage('Descargando: {}'.format( self.que)) self.mandar_descarga_carpeta(fileName + '\\' + self.que, nodo) self.mainwindow.statusBar().showMessage( 'Listo la descarga: {}'.format(self.que)) def borrar(self): nodo = self.arbol.obtener_nodo_nombre(self.que) self.client.files_delete(nodo.id_nodo) self.mainwindow.statusBar().showMessage('Borrando: {}'.format( self.que)) self.arbol.borrar_nodo(id_padre=nodo.id_padre, id_nodo=nodo.id_nodo) self.mainwindow.statusBar().showMessage('Listo: {}'.format(self.que)) self.init_GUI() def mandar_descarga_carpeta(self, path, nodo): for i in nodo.hijos.keys(): archivo = nodo.hijos[i].valor if archivo == '012': self.client.files_download_to_file( path + '\\' + nodo.hijos[i].nombre, nodo.hijos[i].id_nodo) else: os.makedirs("{}".format(str(path + '\\' + nodo.hijos[i].nombre))) self.mandar_descarga_carpeta( str(path + '\\' + nodo.hijos[i].nombre), nodo.hijos[i]) def historial(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '012': data = self.client.files_list_revisions(nodo.id_nodo, limit=10).entries self.historia = Historial(data) self.historia.table.show() elif nodo.valor == '013': data = [] for i in nodo.hijos.values(): if i.valor == '012': data2 = self.client.files_list_revisions(i.id_nodo, limit=10).entries data += data2 self.historia2 = Historial(data) self.historia2.table.show() def mover(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText( self, "Mover", "Ingresa nombre de la carpeta contenedora(dropbox para carpeta principal):" ) if ok: if texto == '': pass else: if texto == 'dropbox': try: self.client.files_move(nodo.id_nodo, '/' + nodo.nombre) aux = self.arbol.sacar_nodo(nodo) aux.agregando_a_arbol(self.arbol, '') except dropbox.exceptions.ApiError: self.mainwindow.statusBar().showMessage( 'Carpeta ya existe con el mismo nombre en el destino' ) else: nodo_llegada = self.arbol.obtener_nodo_nombre(texto) if nodo_llegada is not None and nodo_llegada.valor == '013': try: self.client.files_move( nodo.id_nodo, nodo_llegada.id_nodo + '/' + nodo.nombre) aux = self.arbol.sacar_nodo(nodo) aux.agregando_a_arbol(self.arbol, nodo_llegada.id_nodo) except dropbox.exceptions.ApiError: otra = self.mainwindow.statusBar() otra.showMessage( 'Carpeta ya existe con el mismo nombre en el destino' ) elif nodo_llegada is not None and nodo_llegada.valor == '012': otra = self.mainwindow.statusBar() otra.showMessage('Tienes que moverlo a una carpeta') else: otra = self.mainwindow.statusBar() otra.showMessage('Tienes que moverlo a una carpeta') self.init_GUI() def renombrar(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText( self, "Renombrar", "Nuevo nombre con la extencion si es archivo:") if ok: if texto == '': pass else: if self.arbol.obtener_nodo_nombre(texto) is None: if nodo.valor == '012': numero = texto.find('.') if numero != -1: if texto.split('.')[1] == nodo.nombre.split( '.')[1]: id_padre = nodo.id_padre nuevo_id = id_padre + '/' + texto self.client.files_move(nodo.id_nodo, nuevo_id) aux = self.arbol.sacar_nodo(nodo) self.arbol.agregar_nodo(id_nodo=nuevo_id, valor=nodo.valor, id_padre=id_padre, nombre=texto) for i in aux.hijos.values(): i.agregando_a_arbol(self.arbol, nuevo_id) self.init_GUI() else: self.mainwindow.statusBar().showMessage( 'Falta la extencion') else: self.mainwindow.statusBar().showMessage( 'Falta la extencion') elif nodo.valor == '013': id_padre = nodo.id_padre nuevo_id = id_padre + '/' + texto try: self.client.files_move(nodo.id_nodo, nuevo_id) aux = self.arbol.sacar_nodo(nodo) self.arbol.agregar_nodo(id_nodo=nuevo_id, valor=nodo.valor, id_padre=id_padre, nombre=texto) for i in aux.hijos.values(): i.agregando_a_arbol(self.arbol, nuevo_id) self.init_GUI() except dropbox.exceptions.ApiError: self.mainwindow.statusBar().showMessage( 'Nombre ya existe, escoja uno diferente') else: self.mainwindow.statusBar().showMessage( 'Nombre ya existe, escoja uno diferente') def openmenu(self, position): indexes = self.treeView.selectedIndexes() ver_status = QAction(QIcon(None), '&Agregar Archivo', self) ver_status.setStatusTip('Agregar Archivo') ver_status.triggered.connect(self.agregar_archivo) ver_status2 = QAction(QIcon(None), '&Agregar Carpeta', self) ver_status2.setStatusTip('Agregar Carpeta') ver_status2.triggered.connect(self.agregar_carpeta) ver_status3 = QAction(QIcon(None), '&Descargar Archivo', self) ver_status3.setStatusTip('Descargando Archivo') ver_status3.triggered.connect(self.descargar_archivo) ver_status4 = QAction(QIcon(None), '&Descargar Carpeta', self) ver_status4.setStatusTip('Descargando Carpeta') ver_status4.triggered.connect(self.descargar_carpeta) ver_status5 = QAction(QIcon(None), '&Borrar Archivo', self) ver_status5.setStatusTip('Borrando Archivo') ver_status5.triggered.connect(self.borrar) ver_status6 = QAction(QIcon(None), '&Borrar Carpeta', self) ver_status6.setStatusTip('Borrando Carpeta') ver_status6.triggered.connect(self.borrar) ver_status10 = QAction(QIcon(None), '&Crear Carpeta', self) ver_status10.setStatusTip('Crear Carpeta') ver_status10.triggered.connect(self.crear_carpeta) ver_status7 = QAction(QIcon(None), '&Ver Historial', self) ver_status7.setStatusTip('Ver Historial') ver_status7.triggered.connect(self.historial) ver_status8 = QAction(QIcon(None), '&Mover', self) ver_status8.setStatusTip('Mover') ver_status8.triggered.connect(self.mover) ver_status9 = QAction(QIcon(None), '&Renombrar', self) ver_status9.setStatusTip('Renombrar') ver_status9.triggered.connect(self.renombrar) menu = QMenu() if len(indexes) > 0: self.que = indexes[0].data() menu.addAction(ver_status) menu.addAction(ver_status2) nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': menu.addAction(ver_status4) menu.addAction(ver_status6) else: menu.addAction(ver_status3) menu.addAction(ver_status5) menu.addAction(ver_status10) menu.addAction(ver_status7) menu.addAction(ver_status8) menu.addAction(ver_status9) menu.exec_(self.treeView.viewport().mapToGlobal(position)) def salir(self): QCoreApplication.instance().quit()
class Window(QWidget): def __init__(self, client, mainwindow): QWidget.__init__(self) self.mainwindow = mainwindow self.que = '' self.client = client self.arbol = Arbol('') self.crear_arbol('') self.treeView = QTreeView() self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect(self.openmenu) self.model = QStandardItemModel() self.additems(self.model, self.arbol) self.treeView.setModel(self.model) self.model.setHorizontalHeaderLabels([self.tr("Dropbox")]) layout = QVBoxLayout() layout.addWidget(self.treeView) self.setLayout(layout) def init_GUI(self): self.model = QStandardItemModel() self.additems(self.model, self.arbol) self.treeView.setModel(self.model) self.model.setHorizontalHeaderLabels([self.tr("Dropbox")]) def additems(self, parent, elements): for text in elements.hijos.keys(): nombre = elements.hijos[text].nombre item = QStandardItem(nombre) parent.appendRow(item) if elements.hijos[text]: self.additems(item, elements.hijos[text]) def crear_arbol(self, path): lista = self.client.files_list_folder('').entries lista2 = self.client.files_list_folder('', recursive=True).entries for text in lista: nombre = text.name path_nuevo = text.path_lower if type(text) == FolderMetadata: self.arbol.agregar_nodo(path_nuevo, nombre, '013', '') else: self.arbol.agregar_nodo(path_nuevo, nombre, '012', '') for text in lista2: nombre = text.name path_nuevo = text.path_lower nombre2 = path_nuevo.split('/') padre = path_nuevo.replace('/{}'.format(nombre2[-1]), '') if type(text) == FolderMetadata: self.arbol.agregar_nodo(path_nuevo, nombre, '013', padre) else: self.arbol.agregar_nodo(path_nuevo, nombre, '012', padre) def agregar_archivo(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': self.mainwindow.padre = nodo.id_nodo self.mainwindow.botonnuevo_archivo() else: self.mainwindow.padre = nodo.id_padre self.mainwindow.botonnuevo_archivo() def agregar_carpeta(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': self.mainwindow.padre = nodo.id_nodo self.mainwindow.botonnueva_carpeta() else: self.mainwindow.padre = nodo.id_padre self.mainwindow.botonnueva_carpeta() def crear_carpeta(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText(self, "Titulo", "Nombre de la nueva carpeta:") if ok: if texto == '': pass else: if nodo.valor == '012': nombre = nodo.id_padre + '/' + texto try: self.client.files_create_folder(nombre) self.form.arbol.agregar_nodo(id_nodo=nombre, nombre=texto, valor='013', id_padre=nodo.id_padre) self.statusBar().showMessage('Carpeta agregada: {}'.format(nombre)) self.form.init_GUI() except dropbox.exceptions.ApiError: self.statusBar().showMessage('Nombre de carpeta ya existe: {}'.format(nombre)) elif nodo.valor == '013': nombre = nodo.id_nodo + '/' + texto try: self.client.files_create_folder(nombre) self.form.arbol.agregar_nodo(id_nodo=nombre, nombre=texto, valor='013', id_padre=nodo.id_nodo) self.statusBar().showMessage('Carpeta agregada: {}'.format(nombre)) self.form.init_GUI() except dropbox.exceptions.ApiError: self.statusBar().showMessage('Nombre de carpeta ya existe: {}'.format(nombre)) def descargar_archivo(self): fileName = QFileDialog.getExistingDirectory(self, 'Escoge Carpeta de descarga', QDir.rootPath()) if fileName: nodo = self.arbol.obtener_nodo_nombre(self.que) nombre = nodo.id_nodo.split('/') self.client.files_download_to_file(fileName + '\\' + nombre[-1], nodo.id_nodo) self.mainwindow.statusBar().showMessage('Descargado: {}'.format(nombre[-1])) def descargar_carpeta(self): fileName = QFileDialog.getExistingDirectory(self, 'Escoge Carpeta de descarga', QDir.rootPath()) if fileName: os.makedirs("{}".format(str(fileName + '\\' + self.que))) nodo = self.arbol.obtener_nodo_nombre(self.que) self.mainwindow.statusBar().showMessage('Descargando: {}'.format(self.que)) self.mandar_descarga_carpeta(fileName + '\\' + self.que, nodo) self.mainwindow.statusBar().showMessage('Listo la descarga: {}'.format(self.que)) def borrar(self): nodo = self.arbol.obtener_nodo_nombre(self.que) self.client.files_delete(nodo.id_nodo) self.mainwindow.statusBar().showMessage('Borrando: {}'.format(self.que)) self.arbol.borrar_nodo(id_padre=nodo.id_padre, id_nodo=nodo.id_nodo) self.mainwindow.statusBar().showMessage('Listo: {}'.format(self.que)) self.init_GUI() def mandar_descarga_carpeta(self, path, nodo): for i in nodo.hijos.keys(): archivo = nodo.hijos[i].valor if archivo == '012': self.client.files_download_to_file(path + '\\' + nodo.hijos[i].nombre, nodo.hijos[i].id_nodo) else: os.makedirs("{}".format(str(path + '\\' + nodo.hijos[i].nombre))) self.mandar_descarga_carpeta(str(path + '\\' + nodo.hijos[i].nombre), nodo.hijos[i]) def historial(self): nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '012': data = self.client.files_list_revisions(nodo.id_nodo, limit=10).entries self.historia = Historial(data) self.historia.table.show() elif nodo.valor == '013': data = [] for i in nodo.hijos.values(): if i.valor == '012': data2 = self.client.files_list_revisions(i.id_nodo, limit=10).entries data += data2 self.historia2 = Historial(data) self.historia2.table.show() def mover(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText(self, "Mover", "Ingresa nombre de la carpeta contenedora(dropbox para carpeta principal):") if ok: if texto == '': pass else: if texto == 'dropbox': try: self.client.files_move(nodo.id_nodo, '/' + nodo.nombre) aux = self.arbol.sacar_nodo(nodo) aux.agregando_a_arbol(self.arbol, '') except dropbox.exceptions.ApiError: self.mainwindow.statusBar().showMessage('Carpeta ya existe con el mismo nombre en el destino') else: nodo_llegada = self.arbol.obtener_nodo_nombre(texto) if nodo_llegada is not None and nodo_llegada.valor == '013': try: self.client.files_move(nodo.id_nodo, nodo_llegada.id_nodo + '/' + nodo.nombre) aux = self.arbol.sacar_nodo(nodo) aux.agregando_a_arbol(self.arbol, nodo_llegada.id_nodo) except dropbox.exceptions.ApiError: otra = self.mainwindow.statusBar() otra.showMessage('Carpeta ya existe con el mismo nombre en el destino') elif nodo_llegada is not None and nodo_llegada.valor == '012': otra = self.mainwindow.statusBar() otra.showMessage('Tienes que moverlo a una carpeta') else: otra = self.mainwindow.statusBar() otra.showMessage('Tienes que moverlo a una carpeta') self.init_GUI() def renombrar(self): nodo = self.arbol.obtener_nodo_nombre(self.que) texto, ok = QInputDialog.getText(self, "Renombrar", "Nuevo nombre con la extencion si es archivo:") if ok: if texto == '': pass else: if self.arbol.obtener_nodo_nombre(texto) is None: if nodo.valor == '012': numero = texto.find('.') if numero != -1: if texto.split('.')[1] == nodo.nombre.split('.')[1]: id_padre = nodo.id_padre nuevo_id = id_padre + '/' + texto self.client.files_move(nodo.id_nodo, nuevo_id) aux = self.arbol.sacar_nodo(nodo) self.arbol.agregar_nodo(id_nodo=nuevo_id, valor=nodo.valor, id_padre=id_padre, nombre=texto) for i in aux.hijos.values(): i.agregando_a_arbol(self.arbol, nuevo_id) self.init_GUI() else: self.mainwindow.statusBar().showMessage('Falta la extencion') else: self.mainwindow.statusBar().showMessage('Falta la extencion') elif nodo.valor == '013': id_padre = nodo.id_padre nuevo_id = id_padre + '/' + texto try: self.client.files_move(nodo.id_nodo, nuevo_id) aux = self.arbol.sacar_nodo(nodo) self.arbol.agregar_nodo(id_nodo=nuevo_id, valor=nodo.valor, id_padre=id_padre, nombre=texto) for i in aux.hijos.values(): i.agregando_a_arbol(self.arbol, nuevo_id) self.init_GUI() except dropbox.exceptions.ApiError: self.mainwindow.statusBar().showMessage('Nombre ya existe, escoja uno diferente') else: self.mainwindow.statusBar().showMessage('Nombre ya existe, escoja uno diferente') def openmenu(self, position): indexes = self.treeView.selectedIndexes() ver_status = QAction(QIcon(None), '&Agregar Archivo', self) ver_status.setStatusTip('Agregar Archivo') ver_status.triggered.connect(self.agregar_archivo) ver_status2 = QAction(QIcon(None), '&Agregar Carpeta', self) ver_status2.setStatusTip('Agregar Carpeta') ver_status2.triggered.connect(self.agregar_carpeta) ver_status3 = QAction(QIcon(None), '&Descargar Archivo', self) ver_status3.setStatusTip('Descargando Archivo') ver_status3.triggered.connect(self.descargar_archivo) ver_status4 = QAction(QIcon(None), '&Descargar Carpeta', self) ver_status4.setStatusTip('Descargando Carpeta') ver_status4.triggered.connect(self.descargar_carpeta) ver_status5 = QAction(QIcon(None), '&Borrar Archivo', self) ver_status5.setStatusTip('Borrando Archivo') ver_status5.triggered.connect(self.borrar) ver_status6 = QAction(QIcon(None), '&Borrar Carpeta', self) ver_status6.setStatusTip('Borrando Carpeta') ver_status6.triggered.connect(self.borrar) ver_status10 = QAction(QIcon(None), '&Crear Carpeta', self) ver_status10.setStatusTip('Crear Carpeta') ver_status10.triggered.connect(self.crear_carpeta) ver_status7 = QAction(QIcon(None), '&Ver Historial', self) ver_status7.setStatusTip('Ver Historial') ver_status7.triggered.connect(self.historial) ver_status8 = QAction(QIcon(None), '&Mover', self) ver_status8.setStatusTip('Mover') ver_status8.triggered.connect(self.mover) ver_status9 = QAction(QIcon(None), '&Renombrar', self) ver_status9.setStatusTip('Renombrar') ver_status9.triggered.connect(self.renombrar) menu = QMenu() if len(indexes) > 0: self.que = indexes[0].data() menu.addAction(ver_status) menu.addAction(ver_status2) nodo = self.arbol.obtener_nodo_nombre(self.que) if nodo.valor == '013': menu.addAction(ver_status4) menu.addAction(ver_status6) else: menu.addAction(ver_status3) menu.addAction(ver_status5) menu.addAction(ver_status10) menu.addAction(ver_status7) menu.addAction(ver_status8) menu.addAction(ver_status9) menu.exec_(self.treeView.viewport().mapToGlobal(position)) def salir(self): QCoreApplication.instance().quit()