10
10
from yaml .loader import SafeLoader as Loader
11
11
12
12
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
14
14
from PySide6 .QtCore import Qt , QFile , QThread , Signal
15
15
from PySide6 .QtUiTools import QUiLoader
16
16
from PySide6 .QtGui import QTextOption
@@ -174,7 +174,6 @@ def check_complete_ur(self):
174
174
175
175
@staticmethod
176
176
def from_string (data , max = MAX_LEN , type = None , format = None ):
177
-
178
177
if (max and len (data ) > max ) or format == 'UR' :
179
178
out = MultiQRCode ()
180
179
out .data = data
@@ -218,7 +217,6 @@ def from_string(data, max=MAX_LEN, type=None, format=None):
218
217
ur = UR (out .data_type , _UR (data ).to_cbor ())
219
218
out .encoder = UREncoder (ur , max )
220
219
out .total_sequences = out .encoder .fountain_encoder .seq_len ()
221
-
222
220
else :
223
221
out = QRCode ()
224
222
out .data = data
@@ -250,7 +248,6 @@ def next(self) -> str:
250
248
251
249
252
250
class ReadQR (QThread ):
253
-
254
251
data = Signal (object )
255
252
video_stream = Signal (object )
256
253
@@ -313,8 +310,7 @@ def run(self):
313
310
return
314
311
315
312
def decode (self , data ):
316
-
317
- # Multipart QR Code case
313
+ '''Multipart QR Code case'''
318
314
319
315
# specter format
320
316
if re .match (r'^p\d+of\d+\s' , data , re .IGNORECASE ):
@@ -335,7 +331,8 @@ def decode(self, data):
335
331
self .parent .ui .read_progress .setValue (progress )
336
332
self .parent .ui .read_progress .setFormat (f"{ self .qr_data .sequences_count } /{ self .qr_data .total_sequences } " )
337
333
self .parent .ui .read_progress .setVisible (True )
338
-
334
+
335
+ # UR format
339
336
elif re .match (r'^UR:' , data , re .IGNORECASE ):
340
337
341
338
if not self .qr_data :
@@ -354,13 +351,11 @@ def decode(self, data):
354
351
self .parent .ui .read_progress .setFormat (f"{ self .qr_data .sequences_count } /{ self .qr_data .total_sequences } " )
355
352
self .parent .ui .read_progress .setVisible (True )
356
353
357
-
354
+ # Other format
358
355
else :
359
356
self .qr_data = QRCode ()
360
357
self .qr_data .append (data )
361
358
362
-
363
-
364
359
def on_finnish (self ):
365
360
if self .capture :
366
361
self .capture .release ()
@@ -371,46 +366,38 @@ def on_finnish(self):
371
366
372
367
373
368
class DisplayQR (QThread ):
374
-
375
369
video_stream = Signal (object )
376
370
377
371
def __init__ (self , parent , delay ):
378
372
QThread .__init__ (self )
379
373
self .parent = parent
380
374
self .set_delay (delay )
381
375
self .qr_data : QRCode | MultiQRCode = None
382
- self .stop = False
376
+ self .stop = True
383
377
384
378
def set_delay (self , delay ):
385
379
self .delay = delay
386
380
387
381
def run (self ):
388
382
self .stop = False
389
383
if self .qr_data .total_sequences > 1 or self .qr_data .qr_type == qr_type .UR :
384
+ remove_qr = True
390
385
while not self .stop :
391
386
data = self .qr_data .next ()
392
-
393
387
self .display_qr (data )
394
388
self .parent .ui .steps .setText (self .qr_data .step ())
395
389
if self .qr_data .total_sequences == 1 :
390
+ remove_qr = False
396
391
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 )
406
395
elif self .qr_data .total_sequences == 1 :
407
396
data = self .qr_data .data
408
397
self .display_qr (data )
409
- while not self .stop :
410
- self .msleep (self .delay )
398
+ self .parent .ui .steps .setText ('' )
411
399
412
400
def display_qr (self , data ):
413
-
414
401
qr = qrcode .QRCode ()
415
402
qr .add_data (data )
416
403
qr .make (fit = False )
@@ -425,14 +412,8 @@ def display_qr(self, data):
425
412
scaled_pixmap = pixmap .scaled (self .parent .ui .video_out .size (), Qt .KeepAspectRatio )
426
413
self .video_stream .emit (scaled_pixmap )
427
414
428
- def on_stop (self ):
429
- self .video_stream .emit (None )
430
- self .stop = True
431
-
432
415
433
416
class MainWindow (QMainWindow ):
434
- stop_display = Signal ()
435
-
436
417
def __init__ (self , loader ):
437
418
super ().__init__ ()
438
419
@@ -499,17 +480,14 @@ def __init__(self, loader):
499
480
self .init_qr ()
500
481
501
482
def init_qr (self ):
502
-
503
483
self .read_qr = ReadQR (self )
504
484
self .read_qr .video_stream .connect (self .upd_camera_stream )
505
485
self .read_qr .data .connect (self .on_qr_data_read )
506
486
507
- self .display_qr = DisplayQR (self ,self .ui .delay_slider .value ())
487
+ self .display_qr = DisplayQR (self , self .ui .delay_slider .value ())
508
488
self .display_qr .video_stream .connect (self .on_qr_display )
509
- self .stop_display .connect (self .display_qr .on_stop )
510
489
511
490
def load_config (self ):
512
-
513
491
if not os .path .exists ('config' ):
514
492
f = open ('config' , 'w' )
515
493
f .close ()
@@ -617,25 +595,29 @@ def on_delay_slider_move(self):
617
595
def on_btn_generate (self ):
618
596
data : str = self .ui .data_out .toPlainText ()
619
597
data .replace (' ' , '' ).replace ('\n ' , '' )
620
- if not self .display_qr .isRunning () and data != '' :
621
598
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 ()
626
601
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
+
629
608
if not qr :
630
609
print ("error creating MultiQRCode" )
631
610
return
611
+
632
612
self .display_qr .qr_data = qr
633
613
self .display_qr .start ()
634
614
635
615
self .ui .btn_generate .setText (STOP_QR_TXT )
636
-
637
616
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
+
639
621
self .ui .btn_generate .setText (GENERATE_TXT )
640
622
641
623
def on_btn_clear (self ):
@@ -702,7 +684,6 @@ def radio_select(self):
702
684
return
703
685
704
686
def on_radio_toggled (self ):
705
-
706
687
self .radio_select ()
707
688
self .load_config ()
708
689
@@ -712,7 +693,6 @@ def on_radio_toggled(self):
712
693
self .ui .data_out .setPlainText ('' )
713
694
714
695
def on_btn_save (self ):
715
-
716
696
self .load_config ()
717
697
self .config [self .radio_selected ] = self .ui .data_out .toPlainText ()
718
698
self .dump_config ()
@@ -741,6 +721,8 @@ def on_btn_save(self):
741
721
palette .setColor (QPalette .Link , QColor (42 , 130 , 218 ))
742
722
palette .setColor (QPalette .Highlight , QColor (42 , 130 , 218 ))
743
723
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 )
744
726
app .setPalette (palette )
745
727
746
728
main_win = MainWindow (loader )
0 commit comments