[fix][ui] using the sleep function wrongly within the Qt threads

This commit is contained in:
Vinicius Moreira
2020-06-25 14:48:50 -03:00
parent 9d86c97a80
commit 89989ab79d
6 changed files with 25 additions and 33 deletions

View File

@@ -42,6 +42,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- not calling initial required tasks after enabling a new package type on settings
- not updating the type filters if only one type is available after refreshing the table
- displaying the type filters on the search results when there is only one type available after some actions finish
- using the sleep function wrongly within the Qt threads (causes random crashes)
- minor fixes
- Tray
- update notifications not working on Ubuntu 18.04

View File

@@ -27,7 +27,7 @@ class DatabaseUpdater(Thread):
self.http_client = http_client
self.logger = logger
self.db_locks = db_locks
self.sleep = interval
self.sleep_time = interval
self.i18n = i18n
self.task_man = task_man
self.task_id = 'appim_db'
@@ -103,7 +103,7 @@ class DatabaseUpdater(Thread):
while True:
self.download_databases()
self.logger.info('Sleeping')
time.sleep(self.sleep)
time.sleep(self.sleep_time)
class SymlinksVerifier(Thread):

View File

@@ -1,11 +1,9 @@
import os
import time
import traceback
from pathlib import Path
from threading import Thread
from typing import Tuple, Dict, Optional, Set
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtCore import Qt, QSize, QTimer
from PyQt5.QtGui import QIcon, QPixmap, QIntValidator, QCursor
from PyQt5.QtWidgets import QRadioButton, QGroupBox, QCheckBox, QComboBox, QGridLayout, QWidget, \
QLabel, QSizePolicy, QLineEdit, QToolButton, QHBoxLayout, QFormLayout, QFileDialog, QTabWidget, QVBoxLayout, \
@@ -600,26 +598,23 @@ class InputFilter(QLineEdit):
super(InputFilter, self).__init__()
self.on_key_press = on_key_press
self.last_text = ''
self.typing = None
self.typing = QTimer()
self.typing.timeout.connect(self.notify_text_change)
def notify_text_change(self):
time.sleep(2)
text = self.text().strip()
if text != self.last_text:
self.last_text = text
self.on_key_press()
self.typing = None
def keyPressEvent(self, event):
super(InputFilter, self).keyPressEvent(event)
if self.typing:
if self.typing.isActive():
return
self.typing = Thread(target=self.notify_text_change, daemon=True)
self.typing.start()
self.typing.start(2000)
def get_text(self):
return self.last_text

View File

@@ -1,6 +1,5 @@
import datetime
import operator
import time
from functools import reduce
from typing import Tuple
@@ -42,7 +41,7 @@ class Prepare(QThread, TaskManager):
self.signal_ask_password.emit()
while self.waiting_password:
time.sleep(0.1) # waiting for user input
self.msleep(100) # waiting for user input
return self.password_response
@@ -83,12 +82,12 @@ class CheckFinished(QThread):
self.finished = None
def run(self):
time.sleep(3)
self.sleep(3)
while True:
if self.total == self.finished:
break
time.sleep(0.01)
self.msleep(10)
self.signal_finished.emit()
@@ -112,7 +111,7 @@ class EnableSkip(QThread):
self.signal_timeout.emit()
break
time.sleep(0.1)
self.msleep(100)
class PreparePanel(QWidget, TaskManager):

View File

@@ -1,14 +1,15 @@
import os
import re
import requests
import time
import traceback
from PyQt5.QtCore import QThread, pyqtSignal
from datetime import datetime, timedelta
from io import StringIO
from pathlib import Path
from typing import List, Type, Set, Tuple
import requests
from PyQt5.QtCore import QThread, pyqtSignal
from bauh import LOGS_PATH
from bauh.api.abstract.cache import MemoryCache
from bauh.api.abstract.controller import SoftwareManager, UpgradeRequirement, UpgradeRequirements
@@ -73,7 +74,7 @@ class AsyncAction(QThread, ProcessWatcher):
def wait_user(self):
while self.wait_confirmation:
time.sleep(0.01)
self.msleep(10)
def print(self, msg: str):
if msg:
@@ -670,7 +671,7 @@ class AnimateProgress(QThread):
self.increment = 5
self.stop = False
self.limit = 100
self.sleep = 0.05
self.wait_time = 50
self.last_progress = 0
self.manual = False
self.paused = False
@@ -680,7 +681,7 @@ class AnimateProgress(QThread):
self.increment = 5
self.stop = False
self.limit = 100
self.sleep = 0.05
self.wait_time = 50
self.last_progress = 0
self.manual = False
self.paused = False
@@ -724,7 +725,7 @@ class AnimateProgress(QThread):
self.progress_value += current_increment
time.sleep(self.sleep)
super(AnimateProgress, self).msleep(self.wait_time)
self.signal_change.emit(100)
self._reset()
@@ -766,7 +767,7 @@ class NotifyPackagesReady(QThread):
if not to_verify:
break
time.sleep(0.1)
self.msleep(100)
self.pkgs = None
self.work = True
@@ -787,7 +788,7 @@ class NotifyInstalledLoaded(QThread):
self.loaded = True
def run(self):
time.sleep(0.1)
self.msleep(100)
self.signal_loaded.emit()
@@ -828,7 +829,7 @@ class LaunchPackage(AsyncAction):
def run(self):
if self.pkg:
try:
time.sleep(0.25)
super(LaunchPackage, self).msleep(250)
self.manager.launch(self.pkg.model)
self.notify_finished(True)
except:
@@ -911,7 +912,7 @@ class ApplyFilters(AsyncAction):
self.signal_table.emit(pkgs_info)
while self.wait_table_update:
time.sleep(0.005)
super(ApplyFilters, self).msleep(5)
self.notify_finished()

View File

@@ -1,4 +1,4 @@
import datetime
import logging
import logging
import operator
import time
@@ -507,11 +507,7 @@ class ManageWindow(QWidget):
def stop_notifying_package_states(self):
if self.thread_notify_pkgs_ready.isRunning():
self.signal_stop_notifying.emit()
expires_at = datetime.datetime.now() + datetime.timedelta(seconds=5)
while datetime.datetime.now() < expires_at and self.thread_notify_pkgs_ready.isRunning():
time.sleep(0.1)
self.thread_notify_pkgs_ready.wait(1000)
def _update_table_and_upgrades(self, pkgs_info: dict):
self._update_table(pkgs_info=pkgs_info, signal=True)