Skip to content
This repository was archived by the owner on Apr 28, 2025. It is now read-only.

Commit 8894c96

Browse files
committed
simplified display_qr thread
1 parent 21b4f8f commit 8894c96

File tree

1 file changed

+28
-46
lines changed

1 file changed

+28
-46
lines changed

seedqreader.py

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from yaml.loader import SafeLoader as Loader
1111

1212
from PySide6.QtWidgets import QApplication, QMainWindow
13-
from PySide6.QtGui import QImage, QPixmap, QPalette, QColor
13+
from PySide6.QtGui import QImage, QPixmap, QPalette, QColor, QColorConstants
1414
from PySide6.QtCore import Qt, QFile, QThread, Signal
1515
from PySide6.QtUiTools import QUiLoader
1616
from PySide6.QtGui import QTextOption
@@ -174,7 +174,6 @@ def check_complete_ur(self):
174174

175175
@staticmethod
176176
def from_string(data, max=MAX_LEN, type=None, format=None):
177-
178177
if (max and len(data) > max) or format == 'UR':
179178
out = MultiQRCode()
180179
out.data = data
@@ -218,7 +217,6 @@ def from_string(data, max=MAX_LEN, type=None, format=None):
218217
ur = UR(out.data_type, _UR(data).to_cbor())
219218
out.encoder = UREncoder(ur, max)
220219
out.total_sequences = out.encoder.fountain_encoder.seq_len()
221-
222220
else:
223221
out = QRCode()
224222
out.data = data
@@ -250,7 +248,6 @@ def next(self) -> str:
250248

251249

252250
class ReadQR(QThread):
253-
254251
data = Signal(object)
255252
video_stream = Signal(object)
256253

@@ -313,8 +310,7 @@ def run(self):
313310
return
314311

315312
def decode(self, data):
316-
317-
# Multipart QR Code case
313+
'''Multipart QR Code case'''
318314

319315
# specter format
320316
if re.match(r'^p\d+of\d+\s', data, re.IGNORECASE):
@@ -335,7 +331,8 @@ def decode(self, data):
335331
self.parent.ui.read_progress.setValue(progress)
336332
self.parent.ui.read_progress.setFormat(f"{self.qr_data.sequences_count}/{self.qr_data.total_sequences}")
337333
self.parent.ui.read_progress.setVisible(True)
338-
334+
335+
# UR format
339336
elif re.match(r'^UR:', data, re.IGNORECASE):
340337

341338
if not self.qr_data:
@@ -354,13 +351,11 @@ def decode(self, data):
354351
self.parent.ui.read_progress.setFormat(f"{self.qr_data.sequences_count}/{self.qr_data.total_sequences}")
355352
self.parent.ui.read_progress.setVisible(True)
356353

357-
354+
# Other format
358355
else:
359356
self.qr_data = QRCode()
360357
self.qr_data.append(data)
361358

362-
363-
364359
def on_finnish(self):
365360
if self.capture:
366361
self.capture.release()
@@ -371,46 +366,38 @@ def on_finnish(self):
371366

372367

373368
class DisplayQR(QThread):
374-
375369
video_stream = Signal(object)
376370

377371
def __init__(self, parent, delay):
378372
QThread.__init__(self)
379373
self.parent = parent
380374
self.set_delay(delay)
381375
self.qr_data: QRCode | MultiQRCode = None
382-
self.stop = False
376+
self.stop = True
383377

384378
def set_delay(self, delay):
385379
self.delay = delay
386380

387381
def run(self):
388382
self.stop = False
389383
if self.qr_data.total_sequences > 1 or self.qr_data.qr_type == qr_type.UR:
384+
remove_qr = True
390385
while not self.stop:
391386
data = self.qr_data.next()
392-
393387
self.display_qr(data)
394388
self.parent.ui.steps.setText(self.qr_data.step())
395389
if self.qr_data.total_sequences == 1:
390+
remove_qr = False
396391
break
397-
if not self.stop:
398-
self.msleep(self.delay)
399-
400-
if self.qr_data.total_sequences == 1:
401-
while not self.stop:
402-
self.msleep(self.delay)
403-
404-
self.parent.ui.steps.setText('')
405-
392+
self.msleep(self.delay)
393+
if remove_qr:
394+
self.video_stream.emit(None)
406395
elif self.qr_data.total_sequences == 1:
407396
data = self.qr_data.data
408397
self.display_qr(data)
409-
while not self.stop:
410-
self.msleep(self.delay)
398+
self.parent.ui.steps.setText('')
411399

412400
def display_qr(self, data):
413-
414401
qr = qrcode.QRCode()
415402
qr.add_data(data)
416403
qr.make(fit=False)
@@ -425,14 +412,8 @@ def display_qr(self, data):
425412
scaled_pixmap = pixmap.scaled(self.parent.ui.video_out.size(), Qt.KeepAspectRatio)
426413
self.video_stream.emit(scaled_pixmap)
427414

428-
def on_stop(self):
429-
self.video_stream.emit(None)
430-
self.stop = True
431-
432415

433416
class MainWindow(QMainWindow):
434-
stop_display = Signal()
435-
436417
def __init__(self, loader):
437418
super().__init__()
438419

@@ -499,17 +480,14 @@ def __init__(self, loader):
499480
self.init_qr()
500481

501482
def init_qr(self):
502-
503483
self.read_qr = ReadQR(self)
504484
self.read_qr.video_stream.connect(self.upd_camera_stream)
505485
self.read_qr.data.connect(self.on_qr_data_read)
506486

507-
self.display_qr = DisplayQR(self,self.ui.delay_slider.value())
487+
self.display_qr = DisplayQR(self, self.ui.delay_slider.value())
508488
self.display_qr.video_stream.connect(self.on_qr_display)
509-
self.stop_display.connect(self.display_qr.on_stop)
510489

511490
def load_config(self):
512-
513491
if not os.path.exists('config'):
514492
f = open('config', 'w')
515493
f.close()
@@ -617,25 +595,29 @@ def on_delay_slider_move(self):
617595
def on_btn_generate(self):
618596
data: str = self.ui.data_out.toPlainText()
619597
data.replace(' ', '').replace('\n', '')
620-
if not self.display_qr.isRunning() and data != '':
621598

622-
if self.ui.no_split.isChecked():
623-
_max = None
624-
else:
625-
_max = self.ui.send_slider.value()
599+
if not self.display_qr.isRunning() and self.display_qr.stop and data != '':
600+
_max = None if self.ui.no_split.isChecked() else self.ui.send_slider.value()
626601

627-
# print(f"max={_max}")
628-
qr = MultiQRCode.from_string(data, max=_max, type=self.data_type, format=self.format)
602+
try:
603+
qr = MultiQRCode.from_string(data, max=_max, type=self.data_type, format=self.format)
604+
except:
605+
print("error creating MultiQRCode", self.format)
606+
return
607+
629608
if not qr:
630609
print("error creating MultiQRCode")
631610
return
611+
632612
self.display_qr.qr_data = qr
633613
self.display_qr.start()
634614

635615
self.ui.btn_generate.setText(STOP_QR_TXT)
636-
637616
else:
638-
self.stop_display.emit()
617+
self.display_qr.stop = True
618+
self.ui.steps.setText('')
619+
self.display_qr.video_stream.emit(None)
620+
639621
self.ui.btn_generate.setText(GENERATE_TXT)
640622

641623
def on_btn_clear(self):
@@ -702,7 +684,6 @@ def radio_select(self):
702684
return
703685

704686
def on_radio_toggled(self):
705-
706687
self.radio_select()
707688
self.load_config()
708689

@@ -712,7 +693,6 @@ def on_radio_toggled(self):
712693
self.ui.data_out.setPlainText('')
713694

714695
def on_btn_save(self):
715-
716696
self.load_config()
717697
self.config[self.radio_selected] = self.ui.data_out.toPlainText()
718698
self.dump_config()
@@ -741,6 +721,8 @@ def on_btn_save(self):
741721
palette.setColor(QPalette.Link, QColor(42, 130, 218))
742722
palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
743723
palette.setColor(QPalette.HighlightedText, Qt.black)
724+
palette.setColor(QPalette.ColorGroup.Disabled, QPalette.Button, QColorConstants.DarkGray)
725+
palette.setColor(QPalette.ColorGroup.Disabled, QPalette.ButtonText, QColorConstants.Black)
744726
app.setPalette(palette)
745727

746728
main_win = MainWindow(loader)

0 commit comments

Comments
 (0)