Example #1
0
 def start_upload(self):
     if not self.image_list.unsaved_files_dialog(with_discard=False):
         return
     # make list of items to upload
     upload_list = []
     for image in self.image_list.get_selected_images():
         params = self.get_upload_params(image)
         if not params:
             continue
         convert = self.get_conversion_function(image, params)
         if convert == 'omit':
             continue
         upload_list.append((image, convert, params))
     if not upload_list:
         self.upload_button.setChecked(False)
         return
     self.upload_button.set_checked(True)
     self.upload_config.setEnabled(False)
     self.user_connect.setEnabled(False)
     # do uploading in separate thread, so GUI can continue
     self.upload_worker = UploadWorker(self.session_factory, upload_list)
     thread = QtCore.QThread(self)
     self.upload_worker.moveToThread(thread)
     self.upload_worker.upload_error.connect(
         self.upload_error, Qt.BlockingQueuedConnection)
     self.abort_upload.connect(
         self.upload_worker.abort_upload, Qt.DirectConnection)
     self.upload_worker.upload_progress.connect(self.upload_progress)
     thread.started.connect(self.upload_worker.start)
     self.upload_worker.finished.connect(self.uploader_finished)
     self.upload_worker.finished.connect(thread.quit)
     self.upload_worker.finished.connect(self.upload_worker.deleteLater)
     thread.finished.connect(thread.deleteLater)
     thread.start()
Example #2
0
 def __init__(self, session_factory, params):
     super(UploadWorker, self).__init__()
     self.session = session_factory(auto_refresh=False)
     self.params = params
     self.fileobj = None
     self.thread = QtCore.QThread(self)
     self.moveToThread(self.thread)
Example #3
0
 def copy_selected(self, move=False):
     copy_list = []
     for item in self.file_list_widget.selectedItems():
         name = item.data(Qt.UserRole)
         info = self.file_data[name]
         if (move and 'path' in info
                 and self.image_list.get_image(info['path'])):
             # don't rename an open file
             logger.warning('Please close image %s before moving it',
                            info['name'])
         else:
             copy_list.append(info)
     if not copy_list:
         return
     if move:
         self.move_button.set_checked(True)
         self.copy_button.setEnabled(False)
     else:
         self.copy_button.set_checked(True)
         self.move_button.setEnabled(False)
     self.last_file_copied = None, datetime.min
     # start file copier in a separate thread
     self.file_copier = FileCopier(self.source, copy_list, move,
                                   self.updating)
     self.file_copier_thread = QtCore.QThread(self)
     self.file_copier.moveToThread(self.file_copier_thread)
     self.file_copier.output.connect(self.file_copied)
     self.file_copier_thread.started.connect(self.file_copier.start)
     self.file_copier_thread.start()
Example #4
0
 def start_upload(self):
     if not self.image_list.unsaved_files_dialog(with_discard=False):
         return
     # make list of items to upload
     self.upload_list = []
     for image in self.image_list.get_selected_images():
         params = self.get_upload_params(image)
         if not params:
             continue
         convert = self.get_conversion_function(image, params)
         if convert == 'omit':
             continue
         self.upload_list.append((image, convert, params))
     if not self.upload_list:
         self.upload_button.setChecked(False)
         return
     self.upload_button.set_checked(True)
     # start uploading in separate thread, so GUI can continue
     self.upload_worker = UploadWorker(self.session_factory)
     self.upload_worker_thread = QtCore.QThread(self)
     self.upload_worker.moveToThread(self.upload_worker_thread)
     self.upload_file.connect(self.upload_worker.upload_file)
     self.upload_worker.upload_progress.connect(
         self.total_progress.setValue)
     self.upload_worker.upload_file_done.connect(self.upload_file_done)
     self.upload_worker_thread.started.connect(self.upload_worker.start)
     self.upload_worker_thread.start()
     self.upload_config.setEnabled(False)
     self.user_connect.setEnabled(False)
     self.uploads_done = 0
     self.next_upload()
Example #5
0
 def copy_selected(self):
     copy_list = []
     for item in self.file_list_widget.selectedItems():
         name = item.data(Qt.UserRole)
         copy_list.append(self.file_data[name])
     if not copy_list:
         return
     self.copy_button.set_checked(True)
     self.last_file_copied = None, datetime.min
     # start file writer in a thread
     self.file_writer = FileWriter()
     self.file_writer_thread = QtCore.QThread(self)
     self.file_writer.moveToThread(self.file_writer_thread)
     self.file_writer.output.connect(self.file_copied)
     self.file_writer_thread.start()
     # start file reader in another thread
     self.file_reader = FileReader(self.source, copy_list)
     self.file_reader_thread = QtCore.QThread(self)
     self.file_reader.moveToThread(self.file_reader_thread)
     self.file_reader.output.connect(self.file_writer.input)
     self.file_reader_thread.started.connect(self.file_reader.start)
     self.file_reader_thread.start()
Example #6
0
 def authorise(self):
     with Busy():
         # do full authentication procedure
         if self.auth_server:
             self.auth_server.running = False
             self.auth_server_thread.quit()
         self.auth_server = AuthServer()
         self.auth_server_thread = QtCore.QThread(self)
         self.auth_server.moveToThread(self.auth_server_thread)
         self.auth_server.response.connect(self.auth_response)
         self.auth_server_thread.started.connect(self.auth_server.start)
         self.auth_server_thread.start()
         redirect_uri = 'http://127.0.0.1:' + str(self.auth_server.port)
         auth_url = self.session.get_auth_url(redirect_uri)
         if not webbrowser.open(auth_url, new=2, autoraise=0):
             logger.error('Failed to open web browser')
             self.auth_server.running = False
             self.auth_server = None
             self.auth_server_thread.quit()
Example #7
0
 def authorise(self):
     with Busy():
         # do full authentication procedure
         http_server = HTTPServer(('127.0.0.1', 0), AuthRequestHandler)
         redirect_uri = 'http://127.0.0.1:' + str(http_server.server_port)
         auth_url = self.session.get_auth_url(redirect_uri)
         if not auth_url:
             logger.error('Failed to get auth URL')
             http_server.server_close()
             return
         server = AuthServer()
         thread = QtCore.QThread(self)
         server.moveToThread(thread)
         server.server = http_server
         server.response.connect(self.auth_response)
         thread.started.connect(server.handle_requests)
         server.finished.connect(thread.quit)
         server.finished.connect(server.deleteLater)
         thread.finished.connect(thread.deleteLater)
         thread.start()
         if QtGui.QDesktopServices.openUrl(QtCore.QUrl(auth_url)):
             return
         logger.error('Failed to open web browser')
Example #8
0
 def copy_selected(self, move=False):
     copy_list = []
     for item in self.file_list_widget.selectedItems():
         name = item.data(Qt.UserRole)
         info = self.file_data[name]
         if (move and 'path' in info
                 and self.image_list.get_image(info['path'])):
             # don't rename an open file
             logger.warning('Please close image %s before moving it',
                            info['name'])
         else:
             copy_list.append(info)
     if not copy_list:
         return
     if move:
         self.move_button.set_checked(True)
         self.copy_button.setEnabled(False)
     else:
         self.copy_button.set_checked(True)
         self.move_button.setEnabled(False)
     last_file_copied = None, datetime.min
     copier_result = deque()
     # start file copier in a separate thread
     self.file_copier = FileCopier(self.source, copy_list, move,
                                   copier_result)
     copier_thread = QtCore.QThread(self)
     self.file_copier.moveToThread(copier_thread)
     copier_thread.started.connect(self.file_copier.start)
     copier_thread.start()
     # show files as they're copied
     while self.file_copier.running:
         if copier_result:
             info, status = copier_result.popleft()
             if not info:
                 # copier thread has finished
                 break
             if status != 'ok':
                 self._fail()
                 break
             if last_file_copied[1] < info['timestamp']:
                 last_file_copied = info['dest_path'], info['timestamp']
             for n in range(self.file_list_widget.count()):
                 item = self.file_list_widget.item(n)
                 if item.data(Qt.UserRole) == info['name']:
                     item.setFlags(Qt.NoItemFlags)
                     self.file_list_widget.scrollToItem(
                         item, QtWidgets.QAbstractItemView.PositionAtTop)
                     self.selection_changed()
                     break
             self.image_list.open_file(info['dest_path'])
         else:
             # wait for copier result
             self.app.processEvents()
     self.move_button.set_checked(False)
     self.copy_button.set_checked(False)
     self.file_copier = None
     copier_thread.quit()
     copier_thread.wait()
     if last_file_copied[0]:
         self.config_store.set(self.config_section, 'last_transfer',
                               last_file_copied[1].isoformat(' '))
         self.image_list.done_opening(last_file_copied[0])
     self.list_files()