コード例 #1
0
ファイル: upload.py プロジェクト: yeungocanh/jundownload
 def upload(self):
     # login = self.storagonSDK.login(self.mainWindow.username, self.mainWindow.password)
     # if login:
     if self.mainWindow.logined:
         filename = str(self.upload_file).split('/').pop().split('#')[0]
         self.chooseFileToDownload(filename)
         if filename in self.threaddownload.keys():
                 th = self.threaddownload[filename]
                 # thread bi pause, gio cho download tiep
                 if th.downloadFolder == self.fileSavePath and th.pausenow:
                     th.pausenow = False
         else:
             self.th = UploadThread(self, filename, self.upload_file, self.mainWindow.username, self.mainWindow.password, folder_id=None)
             self.th.start()
             self.threaddownload[filename] = self.th
             self.mainWindow.trayIcon.showMessage('Uploading ', filename.decode('utf-8'))
             self.th.finished.connect(lambda: self.upload_complete_signal.emit(str(filename)))
     else:
         self.mainWindow.alertAutoClose('Error', "You have not login")
コード例 #2
0
ファイル: upload.py プロジェクト: yeungocanh/jundownload
class tabUpload(QtGui.QWidget):
    trigger = pyqtSignal(long, str)
    input_link_signal = pyqtSignal(str)

    def __init__(self, mainWindow, upload_complete_signal):
        super(tabUpload, self).__init__(mainWindow)
        self.mainWindow = mainWindow
        self.storagonSDK = StoragonSDK(serverURL)
        self.upload_complete_signal = upload_complete_signal
        self.Ui_tabDownloadForm = Ui_tabUploadForm()
        self.Ui_tabDownloadForm.setupUi(self)
        self.table = self.Ui_tabDownloadForm.tableWidget
        self.table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.table.customContextMenuRequested.connect(self.openDownloadMenu)
        self.setTableWidth()
        self.show()
        self.mainWindow = mainWindow
        self.trigger.connect(self.updateStatus)
        self.input_link_signal.connect(self.chooseFileToDownload)
        self.queue = Queue(maxsize=10)
        # self.Ui_tabDownloadForm.btn_addfile.setIcon(QtGui.QIcon(resource_path('add.png')))
        self.clip = self.mainWindow.clip
        # self.Ui_tabDownloadForm.btn_addfile.setIconSize(QtCore.QSize(24, 24))
        self.Ui_tabDownloadForm.choose_upload_file.setIcon(QtGui.QIcon(resource_path('upload2.png')))
        self.max_thread_upload = 4
        self.running_thread = 0
        self.fileSavePath = os.path.expanduser("~")
        self.upload_file = None
        self.Ui_tabDownloadForm.choose_upload_file.clicked.connect(self.choose_path)
        self.file_to_download = []
        self.threaddownload = {}
        self.temp_filename = ''

    def choose_path(self):
        f = str(QFileDialog.getOpenFileName(self, "Select File to Upload"))
        self.upload_file = f
        self.upload()

    def upload(self):
        # login = self.storagonSDK.login(self.mainWindow.username, self.mainWindow.password)
        # if login:
        if self.mainWindow.logined:
            filename = str(self.upload_file).split('/').pop().split('#')[0]
            self.chooseFileToDownload(filename)
            if filename in self.threaddownload.keys():
                    th = self.threaddownload[filename]
                    # thread bi pause, gio cho download tiep
                    if th.downloadFolder == self.fileSavePath and th.pausenow:
                        th.pausenow = False
            else:
                self.th = UploadThread(self, filename, self.upload_file, self.mainWindow.username, self.mainWindow.password, folder_id=None)
                self.th.start()
                self.threaddownload[filename] = self.th
                self.mainWindow.trayIcon.showMessage('Uploading ', filename.decode('utf-8'))
                self.th.finished.connect(lambda: self.upload_complete_signal.emit(str(filename)))
        else:
            self.mainWindow.alertAutoClose('Error', "You have not login")
            # sys.exit(1)

    def updateStatus(self, threadID, status=None, file_size=None, speed=None, links=None, error=None):
        # print "Update status here"
        threadID = unicode(threadID)
        num_row = self.table.rowCount()
        for i in range(num_row):
            try:
                filename = unicode(self.table.item(i, 0).text())
            except:
                continue
            if filename == threadID:
                if file_size:
                    size_item = self.table.item(i, 1)
                    size_item.setText(str(file_size) + ' byte')
                if speed:
                    status_item = self.table.item(i, 2)
                    message = status + " " + speed
                    status_item.setText(str(message))
                elif error:
                    error_item = self.table.item(i, 2)
                    error_item.setText("Error: " + str(error))
                    self.running_thread -= 1
                elif status:
                    status_item = self.table.item(i, 2)
                    status_item.setText(status)
                    # self.table.update(self.table.indexFromItem(status_item))
                    if status == 'Completed':
                        print("Upload Complete !")
                        self.running_thread -= 1
                        status_item = self.table.item(i, 2)
                        status_item.setText(status)
                        if links:
                            status_item = self.table.item(i, 3)
                            status_item.setText(links)
                return True

    def setTableWidth(self):
        width = QtGui.QDesktopWidget().width() / 8
        for i in range(self.table.columnCount()):
            self.table.setColumnWidth(i, width)

    def openDownloadMenu(self, position):
        menu = QtGui.QMenu(self)
        Action_pause = menu.addAction('&Pause')
        Action_pause.triggered.connect(self.run_pause_selected)
        Action_resume = menu.addAction('&Resume')
        Action_resume.triggered.connect(self.run_resume_selected)
        Action_stop = menu.addAction('&Stop And Remove')
        Action_stop.triggered.connect(self.run_remove_selected)
        Action_coppy = menu.addAction('&Coppy Download Link')
        Action_coppy.triggered.connect(self.coppy_download_link)
        menu.exec_(self.table.viewport().mapToGlobal(position))

    def openFolderPath(self, path):
        if sys.platform == 'darwin':
            subprocess.call(['open', '--', path])
        elif sys.platform == 'linux2':
            os.system('xdg-open {0}'.format(path))
        elif sys.platform == 'win32':
            print ("Path : %s" % path)
            ctypes.windll.shell32.ShellExecuteW(None, u'open', u'explorer.exe',
                                                u'/n,/select, ' + path, None, 1)

    def coppy_download_link(self):
        rows = self.table.selectionModel().selectedRows()
        for row in rows:
            r = row.row()
            status = str(self.table.item(r, 2).text())
            if status.find('Completed') != -1:
                link_download = unicode(self.table.item(r, 3).text())
                self.clip.setText(link_download)
                QtGui.QMessageBox.information(self, 'Infomation', "Link Coppied", QtGui.QMessageBox.Ok)

    def run_pause_selected(self):
        row_selected = list(set([item.row() for item in self.table.selectedItems()]))

        if not row_selected:
            QtGui.QMessageBox.warning(self, 'Warning', "Please Choose File(s) To Pause", QtGui.QMessageBox.Ok)
        else:
            for row in row_selected:
                filename = unicode(self.table.item(row, 0).text())
                for threadID in self.threaddownload.keys():
                    if threadID == filename:
                        th = self.threaddownload[threadID]
                        if not th.pausenow:
                            th.pausenow = True
                            self.running_thread -= 1
                            status_item = self.table.item(row, 2)
                            message = "Paused"
                            status_item.setText(str(message))

    def run_resume_selected(self):
        row_selected = list(set([item.row() for item in self.table.selectedItems()]))
        if not row_selected:
            row_selected = range(self.table.rowCount())
        error = 0
        list_remove_thread = []
        for row in row_selected:
            filename = unicode(self.table.item(row, 0).text())
            for threadID in self.threaddownload.keys():
                if threadID == filename:
                    th = self.threaddownload[threadID]
                    if th.pausenow:
                        if self.running_thread < self.maxthreaddownload:
                            th.pausenow = False
                            self.running_thread += 1
                        else:
                            error = 1
                    else:
                        status = self.table.item(row, 2).text()
                        # Thread bi loi va gio nguoi dung resume
                        if status.find('Error') != -1:
                            if self.running_thread < self.maxthreaddownload:
                                self.fileToDownload.append(filename)
                                list_remove_thread.append(filename)
                                self.running_thread -= 1
                            else:
                                error = 1
            if list_remove_thread:
                for th in list_remove_thread:
                    del self.threaddownload[th]
                self.download()
        if error == 1:
            QtGui.QMessageBox.warning(self, 'Warning', "Number Of Running Thread Is Maximum. Please" +
                                      "Wait Until Other Files Completed", QtGui.QMessageBox.Ok)

    def run_remove_selected(self):
        row_selected = list(set([item.row() for item in self.table.selectedItems()]))
        while len(row_selected):
            row = row_selected.pop(0)
            if len(row_selected):
                row_selected = [row - 1 for row in row_selected]
            file_path = unicode(self.table.item(row, 0).text())
            status = unicode(self.table.item(row, 2).text())
            self.table.removeRow(row)

    def showinputbox(self):
        if self.inputbox is None:
            self.inputbox = tabDownload_InputBox(tab_download=self)

    def chooseFileToDownload(self, filename):
        curRow = self.table.rowCount()
        self.table.insertRow(curRow)
        self.table.setItem(curRow, 0, QtGui.QTableWidgetItem(filename.decode('utf-8')))
        self.table.setItem(curRow, 1, QtGui.QTableWidgetItem(u'Updating...'))
        self.table.setItem(curRow, 2, QtGui.QTableWidgetItem(u'Ready'))
        self.table.setItem(curRow, 3, QtGui.QTableWidgetItem())