not1mm 24.3.25__tar.gz → 24.3.25.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {not1mm-24.3.25 → not1mm-24.3.25.1}/PKG-INFO +2 -1
- {not1mm-24.3.25 → not1mm-24.3.25.1}/README.md +1 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/__main__.py +56 -6
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/bandmap.py +45 -7
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/checkwindow.py +2 -2
- not1mm-24.3.25.1/not1mm/lib/version.py +3 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/logwindow.py +2 -4
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/vfo.py +2 -2
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/PKG-INFO +2 -1
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/SOURCES.txt +0 -6
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/top_level.txt +0 -2
- {not1mm-24.3.25 → not1mm-24.3.25.1}/pyproject.toml +3 -1
- not1mm-24.3.25/not1mm/lib/version.py +0 -3
- not1mm-24.3.25/not1mm/testing/fakeflrig.py +0 -88
- not1mm-24.3.25/not1mm/testing/flrigclient.py +0 -54
- not1mm-24.3.25/not1mm/testing/multicast_listener.py +0 -46
- not1mm-24.3.25/not1mm/testing/n1mm_listener.py +0 -47
- not1mm-24.3.25/not1mm/testing/simulant.py +0 -384
- not1mm-24.3.25/not1mm/testing/test.py +0 -8
- {not1mm-24.3.25 → not1mm-24.3.25.1}/LICENSE +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/__init__.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/MASTER.SCP +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/about.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/bandmap.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/check.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/checkwindow.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/configuration.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/contests.sql +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/cty.json +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/cwmacros.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/donors.html +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/editcontact.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/editmacro.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/greendot.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/logwindow.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/main.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/new_contest.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/not1mm.html +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/opon.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/0.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/1.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/2.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/3.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/4.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/5.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/6.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/7.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/73.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/8.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/9.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/a.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/again.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/b.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/c.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/contest.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/cq.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/d.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/e.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/f.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/g.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/h.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/i.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/j.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/k.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/k6gte.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/l.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/m.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/mynumber.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/n.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/nil.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/o.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/p.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/q.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/r.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/roger.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/s.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/space.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/t.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/thankyou.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/u.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/v.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/w.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/x.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/y.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/yourcall.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/phonetics/z.wav +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/pickcontest.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/radio_green.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/radio_grey.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/radio_red.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/reddot.png +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/settings.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/ssbmacros.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/data/vfo.ui +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/fsutils.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/__init__.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/about.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/cat_interface.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/cwinterface.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/database.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/edit_contact.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/edit_macro.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/edit_opon.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/edit_station.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/ham_utility.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/lookup.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/multicast.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/n1mm.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/new_contest.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/plugin_common.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/select_contest.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/settings.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/super_check_partial.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/lib/versiontest.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/10_10_fall_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/10_10_spring_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/10_10_summer_phone.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/10_10_winter_phone.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/__init__.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_10m.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_dx_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_dx_ssb.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_field_day.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_rtty_ru.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_ss_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_ss_phone.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_vhf_jan.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_vhf_jun.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/arrl_vhf_sep.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/canada_day.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_160_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_160_ssb.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_wpx_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_wpx_ssb.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_ww_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cq_ww_ssb.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/cwt.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/general_logging.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/iaru_hf.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/jidx_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/jidx_ph.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/naqp_cw.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/naqp_ssb.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/phone_weekly_test.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/stew_perry_topband.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm/plugins/winter_field_day.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/dependency_links.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/entry_points.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/not1mm.egg-info/requires.txt +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/setup.cfg +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/testing/detectdark.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/testing/test.py +0 -0
- {not1mm-24.3.25 → not1mm-24.3.25.1}/usb_vfo_knob/code.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.3.25
|
3
|
+
Version: 24.3.25.1
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
Project-URL: Homepage, https://github.com/mbridak/not1mm
|
@@ -167,6 +167,7 @@ I wish to thank those who've contributed to the project.
|
|
167
167
|
|
168
168
|
## Recent Changes
|
169
169
|
|
170
|
+
- [24-3-25-1] Dark mode sorted out. Atleast for me...
|
170
171
|
- [24-3-25] Yanked version 24-3-24-1. Fixed widget focus issues.
|
171
172
|
- [24-3-24-1] Killed an SQL query bug causing crash when pressing arrow down.
|
172
173
|
- [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
|
@@ -136,6 +136,7 @@ I wish to thank those who've contributed to the project.
|
|
136
136
|
|
137
137
|
## Recent Changes
|
138
138
|
|
139
|
+
- [24-3-25-1] Dark mode sorted out. Atleast for me...
|
139
140
|
- [24-3-25] Yanked version 24-3-24-1. Fixed widget focus issues.
|
140
141
|
- [24-3-24-1] Killed an SQL query bug causing crash when pressing arrow down.
|
141
142
|
- [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
|
@@ -501,12 +501,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
501
501
|
|
502
502
|
if dark:
|
503
503
|
darkPalette = QtGui.QPalette()
|
504
|
-
darkColor = QtGui.QColor(
|
505
|
-
|
504
|
+
darkColor = QtGui.QColor(56, 56, 56)
|
506
505
|
disabledColor = QtGui.QColor(127, 127, 127)
|
507
506
|
darkPalette.setColor(QtGui.QPalette.Window, darkColor)
|
508
507
|
darkPalette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
509
|
-
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(
|
508
|
+
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(45, 45, 45))
|
510
509
|
darkPalette.setColor(QtGui.QPalette.AlternateBase, darkColor)
|
511
510
|
darkPalette.setColor(QtGui.QPalette.Text, Qt.white)
|
512
511
|
darkPalette.setColor(
|
@@ -524,6 +523,21 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
524
523
|
darkPalette.setColor(
|
525
524
|
QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, disabledColor
|
526
525
|
)
|
526
|
+
dark_button_style = (
|
527
|
+
"QPushButton {"
|
528
|
+
"background-color: rgb(56,56,56);"
|
529
|
+
"color: white;"
|
530
|
+
"border-style: outset;"
|
531
|
+
"border-width: 2px;"
|
532
|
+
"border-radius: 5px;"
|
533
|
+
"border-color: rgb(45,45,45);"
|
534
|
+
"padding: 6px;"
|
535
|
+
"}"
|
536
|
+
"QPushButton:pressed {"
|
537
|
+
"background-color: rgb(127, 127, 127);"
|
538
|
+
"border-style: inset;"
|
539
|
+
"}"
|
540
|
+
)
|
527
541
|
self.current_palette = darkPalette
|
528
542
|
self.setPalette(darkPalette)
|
529
543
|
self.text_color = Qt.white
|
@@ -538,7 +552,18 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
538
552
|
self.other_1.setPalette(darkPalette)
|
539
553
|
self.other_2.setPalette(darkPalette)
|
540
554
|
self.cw_entry.setPalette(darkPalette)
|
541
|
-
|
555
|
+
self.F1.setStyleSheet(dark_button_style)
|
556
|
+
self.F2.setStyleSheet(dark_button_style)
|
557
|
+
self.F3.setStyleSheet(dark_button_style)
|
558
|
+
self.F4.setStyleSheet(dark_button_style)
|
559
|
+
self.F5.setStyleSheet(dark_button_style)
|
560
|
+
self.F6.setStyleSheet(dark_button_style)
|
561
|
+
self.F7.setStyleSheet(dark_button_style)
|
562
|
+
self.F8.setStyleSheet(dark_button_style)
|
563
|
+
self.F9.setStyleSheet(dark_button_style)
|
564
|
+
self.F10.setStyleSheet(dark_button_style)
|
565
|
+
self.F11.setStyleSheet(dark_button_style)
|
566
|
+
self.F12.setStyleSheet(dark_button_style)
|
542
567
|
else:
|
543
568
|
palette = self.style().standardPalette()
|
544
569
|
self.current_palette = palette
|
@@ -555,6 +580,33 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
555
580
|
self.other_2.setPalette(palette)
|
556
581
|
self.cw_entry.setPalette(palette)
|
557
582
|
self.text_color = Qt.black
|
583
|
+
light_button_style = (
|
584
|
+
"QPushButton {"
|
585
|
+
"background-color: rgb(245,245,245);"
|
586
|
+
"color: rgb(52,52,52);"
|
587
|
+
"border-style: outset;"
|
588
|
+
"border-width: 2px;"
|
589
|
+
"border-radius: 5px;"
|
590
|
+
"border-color: rgb(150,150,150);"
|
591
|
+
"padding: 6px;"
|
592
|
+
"}"
|
593
|
+
"QPushButton:pressed {"
|
594
|
+
"background-color: rgb(127, 127, 127);"
|
595
|
+
"border-style: inset;"
|
596
|
+
"}"
|
597
|
+
)
|
598
|
+
self.F1.setStyleSheet(light_button_style)
|
599
|
+
self.F2.setStyleSheet(light_button_style)
|
600
|
+
self.F3.setStyleSheet(light_button_style)
|
601
|
+
self.F4.setStyleSheet(light_button_style)
|
602
|
+
self.F5.setStyleSheet(light_button_style)
|
603
|
+
self.F6.setStyleSheet(light_button_style)
|
604
|
+
self.F7.setStyleSheet(light_button_style)
|
605
|
+
self.F8.setStyleSheet(light_button_style)
|
606
|
+
self.F9.setStyleSheet(light_button_style)
|
607
|
+
self.F10.setStyleSheet(light_button_style)
|
608
|
+
self.F11.setStyleSheet(light_button_style)
|
609
|
+
self.F12.setStyleSheet(light_button_style)
|
558
610
|
|
559
611
|
def set_radio_icon(self, state: int) -> None:
|
560
612
|
"""
|
@@ -3270,9 +3322,7 @@ logging.basicConfig(
|
|
3270
3322
|
)
|
3271
3323
|
logging.getLogger("PyQt5.uic.uiparser").setLevel("INFO")
|
3272
3324
|
logging.getLogger("PyQt5.uic.properties").setLevel("INFO")
|
3273
|
-
os.environ["QT_QPA_PLATFORMTHEME"] = "gnome"
|
3274
3325
|
app = QtWidgets.QApplication(sys.argv)
|
3275
|
-
|
3276
3326
|
families = load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
|
3277
3327
|
logger.info(f"font families {families}")
|
3278
3328
|
window = MainWindow()
|
@@ -369,12 +369,12 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
369
369
|
|
370
370
|
if setdarkmode:
|
371
371
|
darkPalette = QtGui.QPalette()
|
372
|
-
darkColor = QtGui.QColor(
|
372
|
+
darkColor = QtGui.QColor(56, 56, 56)
|
373
373
|
self.text_color = Qt.white
|
374
374
|
disabledColor = QtGui.QColor(127, 127, 127)
|
375
375
|
darkPalette.setColor(QtGui.QPalette.Window, darkColor)
|
376
376
|
darkPalette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
377
|
-
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(
|
377
|
+
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(45, 45, 45))
|
378
378
|
darkPalette.setColor(QtGui.QPalette.AlternateBase, darkColor)
|
379
379
|
darkPalette.setColor(QtGui.QPalette.Text, Qt.white)
|
380
380
|
darkPalette.setColor(
|
@@ -396,12 +396,50 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
396
396
|
self.setPalette(darkPalette)
|
397
397
|
self.callsignField.setPalette(darkPalette)
|
398
398
|
self.update()
|
399
|
+
dark_button_style = (
|
400
|
+
"QPushButton {"
|
401
|
+
"background-color: rgb(56,56,56);"
|
402
|
+
"color: white;"
|
403
|
+
"border-style: outset;"
|
404
|
+
"border-width: 2px;"
|
405
|
+
"border-radius: 5px;"
|
406
|
+
"border-color: rgb(45,45,45);"
|
407
|
+
"padding: 6px;"
|
408
|
+
"}"
|
409
|
+
"QPushButton:pressed {"
|
410
|
+
"background-color: rgb(127, 127, 127);"
|
411
|
+
"border-style: inset;"
|
412
|
+
"}"
|
413
|
+
)
|
414
|
+
self.connectButton.setStyleSheet(dark_button_style)
|
415
|
+
self.clearButton.setStyleSheet(dark_button_style)
|
416
|
+
self.zoominButton.setStyleSheet(dark_button_style)
|
417
|
+
self.zoomoutButton.setStyleSheet(dark_button_style)
|
399
418
|
else:
|
400
419
|
palette = self.style().standardPalette()
|
401
420
|
self.setPalette(palette)
|
402
421
|
self.callsignField.setPalette(palette)
|
403
422
|
self.text_color = Qt.black
|
404
423
|
self.update()
|
424
|
+
light_button_style = (
|
425
|
+
"QPushButton {"
|
426
|
+
"background-color: rgb(245,245,245);"
|
427
|
+
"color: rgb(52,52,52);"
|
428
|
+
"border-style: outset;"
|
429
|
+
"border-width: 2px;"
|
430
|
+
"border-radius: 5px;"
|
431
|
+
"border-color: rgb(150,150,150);"
|
432
|
+
"padding: 6px;"
|
433
|
+
"}"
|
434
|
+
"QPushButton:pressed {"
|
435
|
+
"background-color: rgb(127, 127, 127);"
|
436
|
+
"border-style: inset;"
|
437
|
+
"}"
|
438
|
+
)
|
439
|
+
self.connectButton.setStyleSheet(light_button_style)
|
440
|
+
self.clearButton.setStyleSheet(light_button_style)
|
441
|
+
self.zoominButton.setStyleSheet(light_button_style)
|
442
|
+
self.zoomoutButton.setStyleSheet(light_button_style)
|
405
443
|
|
406
444
|
def connect(self):
|
407
445
|
"""Connect to the cluster."""
|
@@ -417,7 +455,7 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
417
455
|
port = self.settings.get("cluster_port", 7373)
|
418
456
|
logger.info(f"connecting to dx cluster {server} {port}")
|
419
457
|
self.socket.connectToHost(server, port)
|
420
|
-
self.connectButton.setStyleSheet("color: white;")
|
458
|
+
# self.connectButton.setStyleSheet("color: white;")
|
421
459
|
self.connectButton.setText("Connecting")
|
422
460
|
self.connected = True
|
423
461
|
|
@@ -854,13 +892,13 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
854
892
|
logger.debug(f"couldn't parse freq from datablock {data}")
|
855
893
|
return
|
856
894
|
if self.callsignField.text().upper() in data:
|
857
|
-
self.connectButton.setStyleSheet("color: green;")
|
895
|
+
# self.connectButton.setStyleSheet("color: green;")
|
858
896
|
self.connectButton.setText("Connected")
|
859
897
|
logger.debug(f"callsign login acknowledged {data}")
|
860
898
|
|
861
899
|
def maybeconnected(self) -> None:
|
862
900
|
"""Update visual state of the connect button."""
|
863
|
-
self.connectButton.setStyleSheet("color: yellow;")
|
901
|
+
# self.connectButton.setStyleSheet("color: yellow;")
|
864
902
|
self.connectButton.setText("Connecting")
|
865
903
|
|
866
904
|
def socket_error(self) -> None:
|
@@ -870,7 +908,7 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
870
908
|
def disconnected(self) -> None:
|
871
909
|
"""Called when socket is disconnected."""
|
872
910
|
self.connected = False
|
873
|
-
self.connectButton.setStyleSheet("color: red;")
|
911
|
+
# self.connectButton.setStyleSheet("color: red;")
|
874
912
|
self.connectButton.setText("Closed")
|
875
913
|
|
876
914
|
def send_command(self, cmd: str) -> None:
|
@@ -899,7 +937,7 @@ class BandMapWindow(QtWidgets.QDockWidget):
|
|
899
937
|
logger.info("Closing dx cluster connection")
|
900
938
|
self.socket.close()
|
901
939
|
self.connected = False
|
902
|
-
self.connectButton.setStyleSheet("color: red;")
|
940
|
+
# self.connectButton.setStyleSheet("color: red;")
|
903
941
|
self.connectButton.setText("Closed")
|
904
942
|
|
905
943
|
def closeEvent(self, _event: QtGui.QCloseEvent) -> None:
|
@@ -63,11 +63,11 @@ class CheckWindow(QWidget):
|
|
63
63
|
|
64
64
|
if dark:
|
65
65
|
darkPalette = QtGui.QPalette()
|
66
|
-
darkColor = QtGui.QColor(
|
66
|
+
darkColor = QtGui.QColor(56, 56, 56)
|
67
67
|
disabledColor = QtGui.QColor(127, 127, 127)
|
68
68
|
darkPalette.setColor(QtGui.QPalette.Window, darkColor)
|
69
69
|
darkPalette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
70
|
-
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(
|
70
|
+
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(45, 45, 45))
|
71
71
|
darkPalette.setColor(QtGui.QPalette.AlternateBase, darkColor)
|
72
72
|
darkPalette.setColor(QtGui.QPalette.Text, Qt.white)
|
73
73
|
darkPalette.setColor(
|
@@ -25,8 +25,6 @@ from not1mm.lib.n1mm import N1MM
|
|
25
25
|
|
26
26
|
logger = logging.getLogger(__name__)
|
27
27
|
|
28
|
-
# os.environ["QT_QPA_PLATFORMTHEME"] = "gnome"
|
29
|
-
|
30
28
|
|
31
29
|
def safe_float(the_input: any, default=0.0) -> float:
|
32
30
|
"""
|
@@ -168,11 +166,11 @@ class LogWindow(QtWidgets.QWidget):
|
|
168
166
|
|
169
167
|
if dark:
|
170
168
|
dark_palette = QtGui.QPalette()
|
171
|
-
dark_color = QtGui.QColor(
|
169
|
+
dark_color = QtGui.QColor(56, 56, 56)
|
172
170
|
disabled_color = QtGui.QColor(127, 127, 127)
|
173
171
|
dark_palette.setColor(QtGui.QPalette.Window, dark_color)
|
174
172
|
dark_palette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
175
|
-
dark_palette.setColor(QtGui.QPalette.Base, QtGui.QColor(
|
173
|
+
dark_palette.setColor(QtGui.QPalette.Base, QtGui.QColor(45, 45, 45))
|
176
174
|
dark_palette.setColor(QtGui.QPalette.AlternateBase, dark_color)
|
177
175
|
dark_palette.setColor(QtGui.QPalette.Text, Qt.white)
|
178
176
|
dark_palette.setColor(
|
@@ -65,11 +65,11 @@ class VfoWindow(QWidget):
|
|
65
65
|
|
66
66
|
if dark:
|
67
67
|
darkPalette = QtGui.QPalette()
|
68
|
-
darkColor = QtGui.QColor(
|
68
|
+
darkColor = QtGui.QColor(56, 56, 56)
|
69
69
|
disabledColor = QtGui.QColor(127, 127, 127)
|
70
70
|
darkPalette.setColor(QtGui.QPalette.Window, darkColor)
|
71
71
|
darkPalette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
72
|
-
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(
|
72
|
+
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(45, 45, 45))
|
73
73
|
darkPalette.setColor(QtGui.QPalette.AlternateBase, darkColor)
|
74
74
|
darkPalette.setColor(QtGui.QPalette.Text, Qt.white)
|
75
75
|
darkPalette.setColor(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.3.25
|
3
|
+
Version: 24.3.25.1
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
Project-URL: Homepage, https://github.com/mbridak/not1mm
|
@@ -167,6 +167,7 @@ I wish to thank those who've contributed to the project.
|
|
167
167
|
|
168
168
|
## Recent Changes
|
169
169
|
|
170
|
+
- [24-3-25-1] Dark mode sorted out. Atleast for me...
|
170
171
|
- [24-3-25] Yanked version 24-3-24-1. Fixed widget focus issues.
|
171
172
|
- [24-3-24-1] Killed an SQL query bug causing crash when pressing arrow down.
|
172
173
|
- [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
|
@@ -146,12 +146,6 @@ not1mm/plugins/naqp_ssb.py
|
|
146
146
|
not1mm/plugins/phone_weekly_test.py
|
147
147
|
not1mm/plugins/stew_perry_topband.py
|
148
148
|
not1mm/plugins/winter_field_day.py
|
149
|
-
not1mm/testing/fakeflrig.py
|
150
|
-
not1mm/testing/flrigclient.py
|
151
|
-
not1mm/testing/multicast_listener.py
|
152
|
-
not1mm/testing/n1mm_listener.py
|
153
|
-
not1mm/testing/simulant.py
|
154
|
-
not1mm/testing/test.py
|
155
149
|
testing/detectdark.py
|
156
150
|
testing/test.py
|
157
151
|
usb_vfo_knob/code.py
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "not1mm"
|
7
|
-
version = "24.3.25"
|
7
|
+
version = "24.3.25.1"
|
8
8
|
description = "NOT1MM Logger"
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.9"
|
@@ -43,6 +43,8 @@ classifiers = [
|
|
43
43
|
[tool.setuptools.packages.find]
|
44
44
|
where = ["."]
|
45
45
|
|
46
|
+
exclude = ["not1mm.testing*", "not1mm.not1mm.testing*", "testing*", "usb_vfo_knob*",]
|
47
|
+
|
46
48
|
[tool.setuptools.package-data]
|
47
49
|
"not1mm.data" = ["*.json", "*.txt", "*.SCP", "*.ui", "*.ttf", "*.desktop", "*.png", "*.qss", "*.sql", "*.html",]
|
48
50
|
"not1mm.data.phonetics" = ["*.wav",]
|
@@ -1,88 +0,0 @@
|
|
1
|
-
"""Main PC does not have radio attached. So we'll make a fake flrig server."""
|
2
|
-
import logging
|
3
|
-
from xmlrpc.server import SimpleXMLRPCServer
|
4
|
-
from xmlrpc.server import SimpleXMLRPCRequestHandler
|
5
|
-
|
6
|
-
|
7
|
-
logging.basicConfig(level=logging.WARNING)
|
8
|
-
|
9
|
-
radio_state = {
|
10
|
-
"freq": "14032000",
|
11
|
-
"mode": "CW",
|
12
|
-
"bw": "50",
|
13
|
-
"ptt": 0,
|
14
|
-
}
|
15
|
-
|
16
|
-
|
17
|
-
class RequestHandler(SimpleXMLRPCRequestHandler):
|
18
|
-
"""Doc String"""
|
19
|
-
|
20
|
-
rpc_paths = ("/RPC2",)
|
21
|
-
|
22
|
-
|
23
|
-
def get_vfo():
|
24
|
-
"""return frequency in hz"""
|
25
|
-
return str(int(radio_state["freq"]))
|
26
|
-
|
27
|
-
|
28
|
-
def set_vfo(freq):
|
29
|
-
"""set frequency in hz"""
|
30
|
-
logging.warning("%s", f"Frequency set to: {freq} {type(freq)}")
|
31
|
-
radio_state["freq"] = freq
|
32
|
-
return 0
|
33
|
-
|
34
|
-
|
35
|
-
def set_frequency(freq):
|
36
|
-
"""seturn frequency in hz"""
|
37
|
-
logging.warning("%s", f"Frequency set to: {freq} {type(freq)}")
|
38
|
-
radio_state["freq"] = freq
|
39
|
-
return 0
|
40
|
-
|
41
|
-
|
42
|
-
def get_mode():
|
43
|
-
"""return mode"""
|
44
|
-
return radio_state["mode"]
|
45
|
-
|
46
|
-
|
47
|
-
def set_mode(mode):
|
48
|
-
"""set frequency in hz"""
|
49
|
-
logging.warning("%s", f"Mode set to: {mode}")
|
50
|
-
radio_state["mode"] = mode
|
51
|
-
return 0
|
52
|
-
|
53
|
-
|
54
|
-
def get_bw():
|
55
|
-
"""return bandwidth"""
|
56
|
-
return [radio_state["bw"], ""]
|
57
|
-
|
58
|
-
|
59
|
-
def set_bw(bandwidth):
|
60
|
-
"""set bandwidth"""
|
61
|
-
radio_state["bw"] = bandwidth
|
62
|
-
|
63
|
-
|
64
|
-
def get_version():
|
65
|
-
"""return flrig version"""
|
66
|
-
return "1.4.8"
|
67
|
-
|
68
|
-
|
69
|
-
print("Stupid server to fake an flrig CAT control server.")
|
70
|
-
|
71
|
-
# Create server
|
72
|
-
with SimpleXMLRPCServer(
|
73
|
-
("0.0.0.0", 12345),
|
74
|
-
requestHandler=RequestHandler,
|
75
|
-
logRequests=False,
|
76
|
-
allow_none=True,
|
77
|
-
) as server:
|
78
|
-
server.register_function(get_vfo, name="rig.get_vfo")
|
79
|
-
server.register_function(get_mode, name="rig.get_mode")
|
80
|
-
server.register_function(set_vfo, name="rig.set_vfo")
|
81
|
-
server.register_function(set_frequency, name="rig.set_frequency")
|
82
|
-
server.register_function(set_mode, name="rig.set_mode")
|
83
|
-
server.register_function(get_bw, name="rig.get_bw")
|
84
|
-
server.register_function(set_bw, name="rig.set_bw")
|
85
|
-
server.register_function(get_version, name="main.get_version")
|
86
|
-
|
87
|
-
server.register_introspection_functions()
|
88
|
-
server.serve_forever()
|
@@ -1,54 +0,0 @@
|
|
1
|
-
"""Fake client to test flrig"""
|
2
|
-
import xmlrpc.client
|
3
|
-
|
4
|
-
TARGET = "http://localhost:12345"
|
5
|
-
server = xmlrpc.client.ServerProxy(TARGET)
|
6
|
-
|
7
|
-
try: # show the version
|
8
|
-
response = server.main.get_version()
|
9
|
-
print(f"Version: {response} {type(response)}")
|
10
|
-
except ConnectionRefusedError as exception:
|
11
|
-
print(f"{exception}")
|
12
|
-
except xmlrpc.client.Fault as exception:
|
13
|
-
print(f"{exception}")
|
14
|
-
|
15
|
-
try: # get the vfo
|
16
|
-
response = server.rig.get_vfo()
|
17
|
-
print(f"VFO: {response} {type(response)}")
|
18
|
-
except ConnectionRefusedError as exception:
|
19
|
-
print(f"{exception}")
|
20
|
-
except xmlrpc.client.Fault as exception:
|
21
|
-
print(f"{exception}")
|
22
|
-
|
23
|
-
try: # set the vfo
|
24
|
-
response = server.rig.set_vfo(float(7035000.0))
|
25
|
-
print(f"Setting VFO: {response} {type(response)}")
|
26
|
-
except ConnectionRefusedError as exception:
|
27
|
-
print(f"{exception}")
|
28
|
-
except xmlrpc.client.Fault as exception:
|
29
|
-
print(f"{exception}")
|
30
|
-
|
31
|
-
try: # get the vfo
|
32
|
-
response = server.rig.get_vfo()
|
33
|
-
print(f"VFO: {response} {type(response)}")
|
34
|
-
except ConnectionRefusedError as exception:
|
35
|
-
print(f"{exception}")
|
36
|
-
except xmlrpc.client.Fault as exception:
|
37
|
-
print(f"{exception}")
|
38
|
-
|
39
|
-
try: # set the frequency
|
40
|
-
response = server.rig.set_frequency(float(7350000.0))
|
41
|
-
print(f"Setting Frequency: {response} {type(response)}")
|
42
|
-
except ConnectionRefusedError as exception:
|
43
|
-
print(f"{exception}")
|
44
|
-
except xmlrpc.client.Fault as exception:
|
45
|
-
print(f"{exception}")
|
46
|
-
|
47
|
-
|
48
|
-
try: # get the vfo
|
49
|
-
response = server.rig.get_vfo()
|
50
|
-
print(f"VFO: {response} {type(response)}")
|
51
|
-
except ConnectionRefusedError as exception:
|
52
|
-
print(f"{exception}")
|
53
|
-
except xmlrpc.client.Fault as exception:
|
54
|
-
print(f"{exception}")
|
@@ -1,46 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""Test multicasting"""
|
3
|
-
# pylint: disable=invalid-name
|
4
|
-
import socket
|
5
|
-
import time
|
6
|
-
import threading
|
7
|
-
import queue
|
8
|
-
|
9
|
-
multicast_port = 2239
|
10
|
-
multicast_group = "224.1.1.1"
|
11
|
-
interface_ip = "0.0.0.0"
|
12
|
-
|
13
|
-
fifo = queue.Queue()
|
14
|
-
|
15
|
-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
16
|
-
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
17
|
-
s.bind(("", multicast_port))
|
18
|
-
mreq = socket.inet_aton(multicast_group) + socket.inet_aton(interface_ip)
|
19
|
-
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, bytes(mreq))
|
20
|
-
s.settimeout(0.1)
|
21
|
-
|
22
|
-
|
23
|
-
def watch_udp():
|
24
|
-
"""watch udp"""
|
25
|
-
while True:
|
26
|
-
try:
|
27
|
-
datagram = s.recv(1500)
|
28
|
-
except socket.timeout:
|
29
|
-
time.sleep(1)
|
30
|
-
continue
|
31
|
-
if datagram:
|
32
|
-
fifo.put(datagram)
|
33
|
-
|
34
|
-
|
35
|
-
_udpwatch = threading.Thread(
|
36
|
-
target=watch_udp,
|
37
|
-
daemon=True,
|
38
|
-
)
|
39
|
-
_udpwatch.start()
|
40
|
-
|
41
|
-
while 1:
|
42
|
-
# print("Waiting...")
|
43
|
-
while not fifo.empty():
|
44
|
-
timestamp = time.strftime("%H:%M:%S", time.gmtime())
|
45
|
-
print(f"[{timestamp}] {fifo.get()}\n")
|
46
|
-
time.sleep(1)
|
@@ -1,47 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""Test multicasting"""
|
3
|
-
# pylint: disable=invalid-name
|
4
|
-
import socket
|
5
|
-
import time
|
6
|
-
import threading
|
7
|
-
import queue
|
8
|
-
import xmltodict
|
9
|
-
|
10
|
-
multicast_port = 12061
|
11
|
-
multicast_group = "127.0.0.1"
|
12
|
-
interface_ip = "0.0.0.0"
|
13
|
-
|
14
|
-
fifo = queue.Queue()
|
15
|
-
|
16
|
-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
17
|
-
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
18
|
-
s.bind(("127.0.0.1", multicast_port))
|
19
|
-
# mreq = socket.inet_aton(multicast_group) + socket.inet_aton(interface_ip)
|
20
|
-
# s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, bytes(mreq))
|
21
|
-
s.settimeout(0.1)
|
22
|
-
|
23
|
-
|
24
|
-
def watch_udp():
|
25
|
-
"""watch udp"""
|
26
|
-
while True:
|
27
|
-
try:
|
28
|
-
datagram = s.recv(1500)
|
29
|
-
except socket.timeout:
|
30
|
-
time.sleep(1)
|
31
|
-
continue
|
32
|
-
if datagram:
|
33
|
-
fifo.put(datagram)
|
34
|
-
|
35
|
-
|
36
|
-
_udpwatch = threading.Thread(
|
37
|
-
target=watch_udp,
|
38
|
-
daemon=True,
|
39
|
-
)
|
40
|
-
_udpwatch.start()
|
41
|
-
|
42
|
-
while 1:
|
43
|
-
# print("Waiting...")
|
44
|
-
while not fifo.empty():
|
45
|
-
timestamp = time.strftime("%H:%M:%S", time.gmtime())
|
46
|
-
print(f"[{timestamp}] {xmltodict.parse(fifo.get())}\n")
|
47
|
-
time.sleep(1)
|