file transfers - time, window settings, statuses fix

This commit is contained in:
ingvar1995 2016-06-17 14:53:33 +03:00
parent e375dca9cc
commit 0e86fd66df
4 changed files with 52 additions and 13 deletions

View File

@ -35,9 +35,9 @@ ALLOWED_FILES = ('toxygen_inline.png', 'utox-inline.png', 'sticker.png')
class StateSignal(QtCore.QObject): class StateSignal(QtCore.QObject):
try: try:
signal = QtCore.Signal(int, float) # state and progress signal = QtCore.Signal(int, float, int) # state and progress
except: except:
signal = QtCore.pyqtSignal(int, float) # state and progress - pyqt4 signal = QtCore.pyqtSignal(int, float, int) # state and progress - pyqt4
class FileTransfer(QtCore.QObject): class FileTransfer(QtCore.QObject):
@ -64,7 +64,12 @@ class FileTransfer(QtCore.QObject):
self._state_changed.signal.connect(handler) self._state_changed.signal.connect(handler)
def signal(self): def signal(self):
self._state_changed.signal.emit(self.state, self._done / self._size if self._size else 0) percentage = self._done / self._size if self._size else 0
if self._creation_time is None or not percentage:
t = -1
else:
t = ((time() - self._creation_time) / percentage) * (1 - percentage)
self._state_changed.signal.emit(self.state, percentage, int(t))
def get_file_number(self): def get_file_number(self):
return self._file_number return self._file_number
@ -124,6 +129,8 @@ class SendTransfer(FileTransfer):
:param position: start position in file :param position: start position in file
:param size: chunk max size :param size: chunk max size
""" """
if self._creation_time is None:
self._creation_time = time()
if size: if size:
self._file.seek(position) self._file.seek(position)
data = self._file.read(size) data = self._file.read(size)
@ -166,6 +173,8 @@ class SendFromBuffer(FileTransfer):
return self._data return self._data
def send_chunk(self, position, size): def send_chunk(self, position, size):
if self._creation_time is None:
self._creation_time = time()
if size: if size:
data = self._data[position:position + size] data = self._data[position:position + size]
self._tox.file_send_chunk(self._friend_number, self._file_number, position, data) self._tox.file_send_chunk(self._friend_number, self._file_number, position, data)
@ -210,11 +219,13 @@ class ReceiveTransfer(FileTransfer):
:param position: position in file to save data :param position: position in file to save data
:param data: raw data (string) :param data: raw data (string)
""" """
if self._creation_time is None:
self._creation_time = time()
if data is None: if data is None:
self._file.close() self._file.close()
self.state = TOX_FILE_TRANSFER_STATE['FINISHED'] self.state = TOX_FILE_TRANSFER_STATE['FINISHED']
self._state_changed.signal.emit(self.state, 1) self._state_changed.signal.emit(self.state, 1)
else: else: # TODO: improve
data = ''.join(chr(x) for x in data) data = ''.join(chr(x) for x in data)
if self._file_size < position: if self._file_size < position:
self._file.seek(0, 2) self._file.seek(0, 2)
@ -243,6 +254,8 @@ class ReceiveToBuffer(FileTransfer):
return self._data return self._data
def write_chunk(self, position, data): def write_chunk(self, position, data):
if self._creation_time is None:
self._creation_time = time()
if data is None: if data is None:
self.state = TOX_FILE_TRANSFER_STATE['FINISHED'] self.state = TOX_FILE_TRANSFER_STATE['FINISHED']
self._state_changed.signal.emit(self.state, 1) self._state_changed.signal.emit(self.state, 1)

View File

@ -155,19 +155,19 @@ class ContactItem(QtGui.QWidget):
self.avatar_label.setGeometry(QtCore.QRect(3, 3, 64, 64)) self.avatar_label.setGeometry(QtCore.QRect(3, 3, 64, 64))
self.avatar_label.setScaledContents(True) self.avatar_label.setScaledContents(True)
self.name = DataLabel(self) self.name = DataLabel(self)
self.name.setGeometry(QtCore.QRect(75, 10, 160, 25)) self.name.setGeometry(QtCore.QRect(75, 10, 150, 25))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
font.setBold(True) font.setBold(True)
self.name.setFont(font) self.name.setFont(font)
self.status_message = DataLabel(self) self.status_message = DataLabel(self)
self.status_message.setGeometry(QtCore.QRect(75, 30, 180, 20)) self.status_message.setGeometry(QtCore.QRect(75, 30, 170, 20))
font.setPointSize(10) font.setPointSize(10)
font.setBold(False) font.setBold(False)
self.status_message.setFont(font) self.status_message.setFont(font)
self.connection_status = StatusCircle(self) self.connection_status = StatusCircle(self)
self.connection_status.setGeometry(QtCore.QRect(243, 5, 32, 32)) self.connection_status.setGeometry(QtCore.QRect(230, 5, 32, 32))
self.messages = UnreadMessagesCount(self) self.messages = UnreadMessagesCount(self)
self.messages.setGeometry(QtCore.QRect(52, 50, 30, 20)) self.messages.setGeometry(QtCore.QRect(52, 50, 30, 20))
@ -291,7 +291,7 @@ class FileTransferItem(QtGui.QListWidget):
self.pb.setVisible(state in SHOW_PROGRESS_BAR) self.pb.setVisible(state in SHOW_PROGRESS_BAR)
self.file_name = DataLabel(self) self.file_name = DataLabel(self)
self.file_name.setGeometry(QtCore.QRect(210, 7, width - 400, 20)) self.file_name.setGeometry(QtCore.QRect(210, 7, width - 440, 20))
font.setPointSize(12) font.setPointSize(12)
self.file_name.setFont(font) self.file_name.setFont(font)
file_size = size / 1024 file_size = size / 1024
@ -305,6 +305,11 @@ class FileTransferItem(QtGui.QListWidget):
self.file_name.setText(file_data) self.file_name.setText(file_data)
self.file_name.setToolTip(file_name) self.file_name.setToolTip(file_name)
self.saved_name = file_name self.saved_name = file_name
self.time_left = QtGui.QLabel(self)
self.time_left.setGeometry(QtCore.QRect(width - 83, 7, 30, 20))
font.setPointSize(10)
self.time_left.setFont(font)
self.time_left.setVisible(state == TOX_FILE_TRANSFER_STATE['RUNNING'])
self.setFocusPolicy(QtCore.Qt.NoFocus) self.setFocusPolicy(QtCore.Qt.NoFocus)
self.paused = False self.paused = False
@ -345,9 +350,12 @@ class FileTransferItem(QtGui.QListWidget):
self.accept_or_pause.setIcon(icon) self.accept_or_pause.setIcon(icon)
self.accept_or_pause.setIconSize(QtCore.QSize(30, 30)) self.accept_or_pause.setIconSize(QtCore.QSize(30, 30))
@QtCore.Slot(int, float) @QtCore.Slot(int, float, int)
def update(self, state, progress): def update(self, state, progress, time):
self.pb.setValue(int(progress * 100)) self.pb.setValue(int(progress * 100))
if time + 1:
m, s = divmod(time, 60)
self.time_left.setText('{0:02d}:{0:02d}'.format(m, s))
if self.state != state: if self.state != state:
if state == TOX_FILE_TRANSFER_STATE['CANCELLED']: if state == TOX_FILE_TRANSFER_STATE['CANCELLED']:
self.setStyleSheet('QListWidget { border: 1px solid #B40404; }') self.setStyleSheet('QListWidget { border: 1px solid #B40404; }')
@ -355,29 +363,36 @@ class FileTransferItem(QtGui.QListWidget):
self.accept_or_pause.setVisible(False) self.accept_or_pause.setVisible(False)
self.pb.setVisible(False) self.pb.setVisible(False)
self.state = state self.state = state
self.time_left.setVisible(False)
elif state == TOX_FILE_TRANSFER_STATE['FINISHED']: elif state == TOX_FILE_TRANSFER_STATE['FINISHED']:
self.accept_or_pause.setVisible(False) self.accept_or_pause.setVisible(False)
self.pb.setVisible(False) self.pb.setVisible(False)
self.cancel.setVisible(False) self.cancel.setVisible(False)
self.setStyleSheet('QListWidget { border: 1px solid green; }') self.setStyleSheet('QListWidget { border: 1px solid green; }')
self.state = state self.state = state
self.time_left.setVisible(False)
elif state == TOX_FILE_TRANSFER_STATE['PAUSED_BY_FRIEND']: elif state == TOX_FILE_TRANSFER_STATE['PAUSED_BY_FRIEND']:
self.accept_or_pause.setVisible(False) self.accept_or_pause.setVisible(False)
self.setStyleSheet('QListWidget { border: 1px solid #FF8000; }') self.setStyleSheet('QListWidget { border: 1px solid #FF8000; }')
self.state = state self.state = state
self.time_left.setVisible(False)
elif state == TOX_FILE_TRANSFER_STATE['PAUSED_BY_USER']: elif state == TOX_FILE_TRANSFER_STATE['PAUSED_BY_USER']:
self.button_update('resume') # setup button continue self.button_update('resume') # setup button continue
self.setStyleSheet('QListWidget { border: 1px solid green; }') self.setStyleSheet('QListWidget { border: 1px solid green; }')
self.state = state self.state = state
self.time_left.setVisible(False)
elif state == TOX_FILE_TRANSFER_STATE['OUTGOING_NOT_STARTED']: elif state == TOX_FILE_TRANSFER_STATE['OUTGOING_NOT_STARTED']:
self.setStyleSheet('QListWidget { border: 1px solid #FF8000; }') self.setStyleSheet('QListWidget { border: 1px solid #FF8000; }')
self.accept_or_pause.setVisible(False) self.accept_or_pause.setVisible(False)
self.time_left.setVisible(False)
self.pb.setVisible(False) self.pb.setVisible(False)
elif not self.paused: # active elif not self.paused: # active
self.pb.setVisible(True)
self.accept_or_pause.setVisible(True) # setup to pause self.accept_or_pause.setVisible(True) # setup to pause
self.button_update('pause') self.button_update('pause')
self.setStyleSheet('QListWidget { border: 1px solid green; }') self.setStyleSheet('QListWidget { border: 1px solid green; }')
self.state = state self.state = state
self.time_left.setVisible(True)
def mark_as_sent(self): def mark_as_sent(self):
return False return False

View File

@ -182,7 +182,7 @@ class MainWindow(QtGui.QMainWindow):
Form.status_message.setFont(font) Form.status_message.setFont(font)
Form.status_message.setObjectName("status_message") Form.status_message.setObjectName("status_message")
self.connection_status = Form.connection_status = StatusCircle(Form) self.connection_status = Form.connection_status = StatusCircle(Form)
Form.connection_status.setGeometry(QtCore.QRect(245, 35, 32, 32)) Form.connection_status.setGeometry(QtCore.QRect(230, 35, 32, 32))
self.avatar_label.mouseReleaseEvent = self.profile_settings self.avatar_label.mouseReleaseEvent = self.profile_settings
self.status_message.mouseReleaseEvent = self.profile_settings self.status_message.mouseReleaseEvent = self.profile_settings
self.name.mouseReleaseEvent = self.profile_settings self.name.mouseReleaseEvent = self.profile_settings
@ -256,7 +256,8 @@ class MainWindow(QtGui.QMainWindow):
def initUI(self, tox): def initUI(self, tox):
self.setMinimumSize(920, 500) self.setMinimumSize(920, 500)
self.setGeometry(400, 400, 920, 500) s = Settings.get_instance()
self.setGeometry(s['x'], s['y'], s['width'], s['height'])
self.setWindowTitle('Toxygen') self.setWindowTitle('Toxygen')
os.chdir(curr_directory() + '/images/') os.chdir(curr_directory() + '/images/')
main = QtGui.QWidget() main = QtGui.QWidget()
@ -311,6 +312,12 @@ class MainWindow(QtGui.QMainWindow):
def closeEvent(self, *args, **kwargs): def closeEvent(self, *args, **kwargs):
self.profile.save_history() self.profile.save_history()
self.profile.close() self.profile.close()
s = Settings.get_instance()
s['x'] = self.pos().x()
s['y'] = self.pos().y()
s['width'] = self.width()
s['height'] = self.height()
s.save()
QtGui.QApplication.closeAllWindows() QtGui.QApplication.closeAllWindows()
def resizeEvent(self, *args, **kwargs): def resizeEvent(self, *args, **kwargs):

View File

@ -86,7 +86,11 @@ class Settings(Singleton, dict):
'notes': {}, 'notes': {},
'smileys': True, 'smileys': True,
'smiley_pack': 'default', 'smiley_pack': 'default',
'mirror_mode': False 'mirror_mode': False,
'width': 920,
'height': 500,
'x': 400,
'y': 400
} }
@staticmethod @staticmethod