unsent files fixes - part 1
This commit is contained in:
		| @@ -16,7 +16,7 @@ class FileTransfersMessagesService: | |||||||
|         status = FILE_TRANSFER_STATE['RUNNING'] if accepted else FILE_TRANSFER_STATE['INCOMING_NOT_STARTED'] |         status = FILE_TRANSFER_STATE['RUNNING'] if accepted else FILE_TRANSFER_STATE['INCOMING_NOT_STARTED'] | ||||||
|         tm = TransferMessage(author, util.get_unix_time(), status, size, file_name, friend.number, file_number) |         tm = TransferMessage(author, util.get_unix_time(), status, size, file_name, friend.number, file_number) | ||||||
|  |  | ||||||
|         if self._is_active(friend.number): |         if self._is_friend_active(friend.number): | ||||||
|             self._create_file_transfer_item(tm) |             self._create_file_transfer_item(tm) | ||||||
|             self._messages.scrollToBottom() |             self._messages.scrollToBottom() | ||||||
|         else: |         else: | ||||||
| @@ -31,7 +31,7 @@ class FileTransfersMessagesService: | |||||||
|         status = FILE_TRANSFER_STATE['OUTGOING_NOT_STARTED'] |         status = FILE_TRANSFER_STATE['OUTGOING_NOT_STARTED'] | ||||||
|         tm = TransferMessage(author, util.get_unix_time(), status, size, file_name, friend.number, file_number) |         tm = TransferMessage(author, util.get_unix_time(), status, size, file_name, friend.number, file_number) | ||||||
|  |  | ||||||
|         if self._is_active(friend.number): |         if self._is_friend_active(friend.number): | ||||||
|             self._create_file_transfer_item(tm) |             self._create_file_transfer_item(tm) | ||||||
|             self._messages.scrollToBottom() |             self._messages.scrollToBottom() | ||||||
|  |  | ||||||
| @@ -40,16 +40,18 @@ class FileTransfersMessagesService: | |||||||
|         return tm |         return tm | ||||||
|  |  | ||||||
|     def add_inline_message(self, transfer, index): |     def add_inline_message(self, transfer, index): | ||||||
|         if self._is_active(transfer.friend_number): |         if self._is_friend_active(transfer.friend_number): | ||||||
|             count = self._messages.count() |             count = self._messages.count() | ||||||
|             if count + index + 1 >= 0: |             if count + index + 1 >= 0: | ||||||
|                 self._create_inline_item(transfer.data, count + index + 1) |                 self._create_inline_item(transfer.data, count + index + 1) | ||||||
|  |  | ||||||
|     def add_unsent_file_message(self, friend, file_path, data): |     def add_unsent_file_message(self, friend, file_path, data): | ||||||
|         tm = UnsentFileMessage(file_path, data, util.get_unix_time()) |         author = MessageAuthor(self._profile.name, MESSAGE_AUTHOR['ME']) | ||||||
|  |         size = os.path.getsize(file_path) if data is None else len(data) | ||||||
|  |         tm = UnsentFileMessage(file_path, data, util.get_unix_time(), author, size, friend.number) | ||||||
|         friend.append_message(tm) |         friend.append_message(tm) | ||||||
|  |  | ||||||
|         if self._is_active(friend.number): |         if self._is_friend_active(friend.number): | ||||||
|             self._create_unsent_file_item(tm) |             self._create_unsent_file_item(tm) | ||||||
|             self._messages.scrollToBottom() |             self._messages.scrollToBottom() | ||||||
|  |  | ||||||
| @@ -59,7 +61,7 @@ class FileTransfersMessagesService: | |||||||
|     # Private methods |     # Private methods | ||||||
|     # ----------------------------------------------------------------------------------------------------------------- |     # ----------------------------------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|     def _is_active(self, friend_number): |     def _is_friend_active(self, friend_number): | ||||||
|         if not self._contacts_manager.is_active_a_friend(): |         if not self._contacts_manager.is_active_a_friend(): | ||||||
|             return False |             return False | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| from history.database import MESSAGE_AUTHOR | from history.database import MESSAGE_AUTHOR | ||||||
|  | import os.path | ||||||
| from ui.messages_widgets import * | from ui.messages_widgets import * | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -16,8 +17,18 @@ PAGE_SIZE = 42 | |||||||
| class MessageAuthor: | class MessageAuthor: | ||||||
|  |  | ||||||
|     def __init__(self, author_name, author_type): |     def __init__(self, author_name, author_type): | ||||||
|         self.name = author_name |         self._name = author_name | ||||||
|         self.type = author_type |         self._type = author_type | ||||||
|  |  | ||||||
|  |     def get_name(self): | ||||||
|  |         return self._name | ||||||
|  |  | ||||||
|  |     name = property(get_name) | ||||||
|  |  | ||||||
|  |     def get_type(self): | ||||||
|  |         return self._type | ||||||
|  |  | ||||||
|  |     type = property(get_type) | ||||||
|  |  | ||||||
|  |  | ||||||
| class Message: | class Message: | ||||||
| @@ -139,7 +150,10 @@ class TransferMessage(Message): | |||||||
|         self._friend_number, self._file_number = friend_number, file_number |         self._friend_number, self._file_number = friend_number, file_number | ||||||
|  |  | ||||||
|     def is_active(self, file_number): |     def is_active(self, file_number): | ||||||
|         return self._file_number == file_number and self._state not in (2, 3) |         if self._file_number != file_number: | ||||||
|  |             return False | ||||||
|  |  | ||||||
|  |         return self._state not in (FILE_TRANSFER_STATE['FINISHED'], FILE_TRANSFER_STATE['CANCELLED']) | ||||||
|  |  | ||||||
|     def get_friend_number(self): |     def get_friend_number(self): | ||||||
|         return self._friend_number |         return self._friend_number | ||||||
| @@ -178,10 +192,11 @@ class TransferMessage(Message): | |||||||
|         return FileTransferItem(self, *args) |         return FileTransferItem(self, *args) | ||||||
|  |  | ||||||
|  |  | ||||||
| class UnsentFileMessage(Message): | class UnsentFileMessage(TransferMessage): | ||||||
|  |  | ||||||
|     def __init__(self, path, data, time): |     def __init__(self, path, data, time, author, size, friend_number): | ||||||
|         super().__init__(MESSAGE_TYPE['FILE_TRANSFER'], 0, time) |         file_name = os.path.basename(path) | ||||||
|  |         super().__init__(author, time, FILE_TRANSFER_STATE['UNSENT'], size, file_name, friend_number, -1) | ||||||
|         self._data, self._path = data, path |         self._data, self._path = data, path | ||||||
|  |  | ||||||
|     def get_data(self): |     def get_data(self): | ||||||
| @@ -189,11 +204,6 @@ class UnsentFileMessage(Message): | |||||||
|  |  | ||||||
|     data = property(get_data) |     data = property(get_data) | ||||||
|  |  | ||||||
|     def get_state(self): |  | ||||||
|         return FILE_TRANSFER_STATE['UNSENT'] |  | ||||||
|  |  | ||||||
|     state = property(get_state) |  | ||||||
|  |  | ||||||
|     def get_path(self): |     def get_path(self): | ||||||
|         return self._path |         return self._path | ||||||
|  |  | ||||||
|   | |||||||
| @@ -316,8 +316,8 @@ class MainWindow(QtWidgets.QMainWindow): | |||||||
|  |  | ||||||
|         def load(pos): |         def load(pos): | ||||||
|             if not pos: |             if not pos: | ||||||
|                 friend = self._contacts_manager.get_curr_friend() |                 contact = self._contacts_manager.get_curr_contact() | ||||||
|                 self._history_loader.load_history(friend) |                 self._history_loader.load_history(contact) | ||||||
|                 self.messages.verticalScrollBar().setValue(1) |                 self.messages.verticalScrollBar().setValue(1) | ||||||
|         self.messages.verticalScrollBar().valueChanged.connect(load) |         self.messages.verticalScrollBar().valueChanged.connect(load) | ||||||
|         self.messages.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) |         self.messages.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) | ||||||
|   | |||||||
| @@ -253,7 +253,8 @@ class FileTransferItem(QtWidgets.QListWidget): | |||||||
|         icon = QtGui.QIcon(pixmap) |         icon = QtGui.QIcon(pixmap) | ||||||
|         self.cancel.setIcon(icon) |         self.cancel.setIcon(icon) | ||||||
|         self.cancel.setIconSize(QtCore.QSize(30, 30)) |         self.cancel.setIconSize(QtCore.QSize(30, 30)) | ||||||
|         self.cancel.setVisible(transfer_message.state in ACTIVE_FILE_TRANSFERS) |         self.cancel.setVisible(transfer_message.state in ACTIVE_FILE_TRANSFERS or | ||||||
|  |                                transfer_message.state == FILE_TRANSFER_STATE['UNSENT']) | ||||||
|         self.cancel.clicked.connect( |         self.cancel.clicked.connect( | ||||||
|             lambda: self.cancel_transfer(transfer_message.friend_number, transfer_message.file_number)) |             lambda: self.cancel_transfer(transfer_message.friend_number, transfer_message.file_number)) | ||||||
|         self.cancel.setStyleSheet('QPushButton:hover { border: 1px solid #3A3939; background-color: none;}') |         self.cancel.setStyleSheet('QPushButton:hover { border: 1px solid #3A3939; background-color: none;}') | ||||||
| @@ -268,6 +269,9 @@ class FileTransferItem(QtWidgets.QListWidget): | |||||||
|         elif transfer_message.state == FILE_TRANSFER_STATE['PAUSED_BY_USER']:  # setup for continue |         elif transfer_message.state == FILE_TRANSFER_STATE['PAUSED_BY_USER']:  # setup for continue | ||||||
|             self.accept_or_pause.setVisible(True) |             self.accept_or_pause.setVisible(True) | ||||||
|             self.button_update('resume') |             self.button_update('resume') | ||||||
|  |         elif transfer_message.state == FILE_TRANSFER_STATE['UNSENT']: | ||||||
|  |             self.accept_or_pause.setVisible(False) | ||||||
|  |             self.setStyleSheet('QListWidget { border: 1px solid #FF8000; }') | ||||||
|         else:  # pause |         else:  # pause | ||||||
|             self.accept_or_pause.setVisible(True) |             self.accept_or_pause.setVisible(True) | ||||||
|             self.button_update('pause') |             self.button_update('pause') | ||||||
| @@ -382,17 +386,12 @@ class FileTransferItem(QtWidgets.QListWidget): | |||||||
|                 self.state = state |                 self.state = state | ||||||
|                 self.time_left.setVisible(True) |                 self.time_left.setVisible(True) | ||||||
|  |  | ||||||
|     @staticmethod |  | ||||||
|     def mark_as_sent(): |  | ||||||
|         return False |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class UnsentFileItem(FileTransferItem): | class UnsentFileItem(FileTransferItem): | ||||||
|  |  | ||||||
|     def __init__(self, transfer_message, file_transfer_handler, settings, width, parent=None): |     def __init__(self, transfer_message, file_transfer_handler, settings, width, parent=None): | ||||||
|         super().__init__(transfer_message, file_transfer_handler, settings, width, parent) |         super().__init__(transfer_message, file_transfer_handler, settings, width, parent) | ||||||
|         self._time = time |         self._time = time | ||||||
|         self.pb.setVisible(False) |  | ||||||
|         movie = QtGui.QMovie(util.join_path(util.get_images_directory(), 'spinner.gif')) |         movie = QtGui.QMovie(util.join_path(util.get_images_directory(), 'spinner.gif')) | ||||||
|         self.time.setMovie(movie) |         self.time.setMovie(movie) | ||||||
|         movie.start() |         movie.start() | ||||||
| @@ -448,7 +447,3 @@ class InlineImageItem(QtWidgets.QScrollArea): | |||||||
|             if directory: |             if directory: | ||||||
|                 fl = QtCore.QFile(directory + '/toxygen_inline_' + util.curr_time().replace(':', '_') + '.png') |                 fl = QtCore.QFile(directory + '/toxygen_inline_' + util.curr_time().replace(':', '_') + '.png') | ||||||
|                 self._pixmap.save(fl, 'PNG') |                 self._pixmap.save(fl, 'PNG') | ||||||
|  |  | ||||||
|     @staticmethod |  | ||||||
|     def mark_as_sent(): |  | ||||||
|         return False |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user