11from __future__ import annotations
22
33import logging
4+ import threading
45import warnings
56from functools import lru_cache
67import os .path as os_path
@@ -381,20 +382,29 @@ def __init__(self, *args, **kwargs):
381382 QtWidgets .QAbstractItemView .SelectionBehavior .SelectRows )
382383
383384 self ._jobs = None
385+ self ._finished_uploads = []
386+ self ._on_update_job_status_lock = threading .Lock ()
384387
385388 settings = QtCore .QSettings ()
386389 if bool (int (settings .value ("debug/without timers" , "0" ))):
387390 self .timer = None
388391 else :
389392 self .timer = QtCore .QTimer ()
390- self .timer .timeout .connect (self .update_job_status )
391- self .timer .start (1000 )
392- self ._finished_uploads = []
393+ self .timer .timeout .connect (self .on_update_job_status )
394+ self .timer .start (500 )
393395
394396 # signals
395397 self .itemSelectionChanged .connect (self .on_selection )
396398 self .itemClicked .connect (self .on_selection )
397399
400+ # Set columns and spacing for upload table
401+ self .setColumnCount (6 )
402+ header = self .horizontalHeader ()
403+ header .setSectionResizeMode (
404+ 0 , QtWidgets .QHeaderView .ResizeMode .ResizeToContents )
405+ header .setSectionResizeMode (
406+ 1 , QtWidgets .QHeaderView .ResizeMode .Stretch )
407+
398408 @property
399409 def jobs (self ):
400410 """Upload job list
@@ -430,12 +440,12 @@ def set_job_list(self, jobs):
430440 @QtCore .pyqtSlot (str )
431441 def on_job_abort (self , dataset_id ):
432442 self .jobs .abort_job (dataset_id )
433- self .update_job_status ()
443+ self .on_update_job_status ()
434444
435445 @QtCore .pyqtSlot (str )
436446 def on_job_delete (self , dataset_id ):
437447 self .jobs .remove_job (dataset_id )
438- self .update_job_status ()
448+ self .on_update_job_status ()
439449
440450 @QtCore .pyqtSlot ()
441451 def on_selection (self ):
@@ -460,7 +470,7 @@ def on_upload_finished(self, dataset_id):
460470 self .logger .error (tb .format_exc ())
461471
462472 @QtCore .pyqtSlot ()
463- def update_job_status (self ):
473+ def on_update_job_status (self ):
464474 """Update UI with information from self.jobs (UploadJobList)"""
465475 # Let everyone know when a job is done
466476 for job in self .jobs :
@@ -470,13 +480,18 @@ def update_job_status(self):
470480 if not self .isVisible () or not self .jobs :
471481 # Don't update the UI if nobody is looking anyway.
472482 return
483+ if self ._on_update_job_status_lock .locked ():
484+ return
485+
486+ with self ._on_update_job_status_lock :
487+ self .update_job_status ()
488+
489+ def update_job_status (self ):
473490 # disable updates
474491 self .setUpdatesEnabled (False )
475492 # make sure the length of the table is long enough
476493 self .setRowCount (len (self .jobs ))
477494 if self .jobs :
478- self .setColumnCount (6 )
479-
480495 for row , job in enumerate (self .jobs ):
481496 status = job .get_status ()
482497 self .set_label_item (row , 0 , job .dataset_id [:5 ])
@@ -486,12 +501,9 @@ def update_job_status(self):
486501 self .set_label_item (row , 4 , job .get_rate_string ())
487502 self .set_actions_item (row , 5 , job )
488503
489- # spacing (did not work in __init__)
490- header = self .horizontalHeader ()
491- header .setSectionResizeMode (
492- 0 , QtWidgets .QHeaderView .ResizeMode .ResizeToContents )
493- header .setSectionResizeMode (
494- 1 , QtWidgets .QHeaderView .ResizeMode .Stretch )
504+ QtWidgets .QApplication .processEvents (
505+ QtCore .QEventLoop .ProcessEventsFlag .AllEvents , 300 )
506+
495507 # enable updates again
496508 self .setUpdatesEnabled (True )
497509
@@ -504,11 +516,13 @@ def set_label_item(self, row, col, label):
504516 item = self .item (row , col )
505517 if item is None :
506518 item = QtWidgets .QTableWidgetItem (label )
519+ item .setToolTip (label )
507520 item .setFlags (QtCore .Qt .ItemFlag .ItemIsEnabled )
508521 self .setItem (row , col , item )
509522 else :
510523 if item .text () != label :
511524 item .setText (label )
525+ item .setToolTip (label )
512526
513527 def set_actions_item (self , row , col , job ):
514528 """Set/Create a TableCellActions widget in the table
0 commit comments