not1mm 24.12.11.1__py3-none-any.whl → 24.12.14__py3-none-any.whl
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/__main__.py +15 -12
- not1mm/lib/cat_interface.py +4 -2
- not1mm/lib/version.py +1 -1
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/METADATA +9 -3
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/RECORD +9 -10
- not1mm/lib/fldigi_watcher.py +0 -33
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/LICENSE +0 -0
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/WHEEL +0 -0
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/entry_points.txt +0 -0
- {not1mm-24.12.11.1.dist-info → not1mm-24.12.14.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -33,7 +33,7 @@ except OSError as exception:
|
|
33
33
|
print(exception)
|
34
34
|
print("portaudio is not installed")
|
35
35
|
sd = None
|
36
|
-
from PyQt6 import QtCore, QtGui, QtWidgets, uic
|
36
|
+
from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
|
37
37
|
from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
|
38
38
|
from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
|
39
39
|
from PyQt6.QtWidgets import QFileDialog, QSplashScreen, QApplication
|
@@ -66,7 +66,6 @@ from not1mm.lib.settings import Settings
|
|
66
66
|
from not1mm.lib.version import __version__
|
67
67
|
from not1mm.lib.versiontest import VersionTest
|
68
68
|
from not1mm.lib.ft8_watcher import FT8Watcher
|
69
|
-
from not1mm.lib.fldigi_watcher import FlDigiWatcher
|
70
69
|
from not1mm.lib.fldigi_sendstring import FlDigi_Comm
|
71
70
|
|
72
71
|
import not1mm.fsutils as fsutils
|
@@ -174,10 +173,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
174
173
|
|
175
174
|
radio_thread = QThread()
|
176
175
|
voice_thread = QThread()
|
177
|
-
fldigi_thread = QThread()
|
178
176
|
rtc_thread = QThread()
|
179
177
|
|
180
|
-
fldigi_watcher = None
|
181
178
|
rig_control = None
|
182
179
|
log_window = None
|
183
180
|
check_window = None
|
@@ -668,14 +665,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
668
665
|
self.show_splash_msg("Reading macros.")
|
669
666
|
self.read_macros()
|
670
667
|
|
671
|
-
self.show_splash_msg("Starting FlDigi watcher.")
|
672
|
-
self.fldigi_watcher = FlDigiWatcher()
|
673
|
-
self.fldigi_watcher.moveToThread(self.fldigi_thread)
|
674
|
-
self.fldigi_thread.started.connect(self.fldigi_watcher.run)
|
675
|
-
self.fldigi_thread.finished.connect(self.fldigi_watcher.deleteLater)
|
676
|
-
self.fldigi_watcher.poll_callback.connect(self.fldigi_qso)
|
677
|
-
self.fldigi_thread.start()
|
678
|
-
|
679
668
|
self.show_splash_msg("Restoring window states.")
|
680
669
|
self.settings = QSettings("K6GTE", "not1mm")
|
681
670
|
if self.settings.value("windowState") is not None:
|
@@ -718,6 +707,20 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
718
707
|
"You can udate to the current version by using:\npip install -U not1mm"
|
719
708
|
)
|
720
709
|
|
710
|
+
self.udp_socket = QtNetwork.QUdpSocket()
|
711
|
+
b_result = self.udp_socket.bind(
|
712
|
+
QtNetwork.QHostAddress.SpecialAddress.AnyIPv4, 9876
|
713
|
+
)
|
714
|
+
logger.info(f"bind {b_result}")
|
715
|
+
self.udp_socket.readyRead.connect(self.fldigi_on_udp_socket_ready_read)
|
716
|
+
|
717
|
+
def fldigi_on_udp_socket_ready_read(self):
|
718
|
+
""""""
|
719
|
+
datagram, sender_host, sender_port_number = self.udp_socket.readDatagram(
|
720
|
+
self.udp_socket.pendingDatagramSize()
|
721
|
+
)
|
722
|
+
self.fldigi_qso(datagram.decode())
|
723
|
+
|
721
724
|
def load_call_history(self) -> None:
|
722
725
|
"""Display filepicker and load chosen call history file."""
|
723
726
|
filename = self.filepicker("other")
|
not1mm/lib/cat_interface.py
CHANGED
@@ -122,7 +122,7 @@ class CAT:
|
|
122
122
|
def __initialize_rigctrld(self):
|
123
123
|
try:
|
124
124
|
self.rigctrlsocket = socket.socket()
|
125
|
-
self.rigctrlsocket.settimeout(0.
|
125
|
+
self.rigctrlsocket.settimeout(0.5)
|
126
126
|
self.rigctrlsocket.connect((self.host, self.port))
|
127
127
|
logger.debug("Connected to rigctrld")
|
128
128
|
self.online = True
|
@@ -146,12 +146,14 @@ class CAT:
|
|
146
146
|
"""Gets any serial data waiting"""
|
147
147
|
dump = ""
|
148
148
|
thegrab = ""
|
149
|
+
self.rigctrlsocket.settimeout(0.1)
|
149
150
|
try:
|
150
151
|
while True:
|
151
152
|
thegrab += self.rigctrlsocket.recv(1024).decode()
|
152
153
|
dump += thegrab
|
153
|
-
except socket.error:
|
154
|
+
except (socket.error, UnicodeDecodeError):
|
154
155
|
...
|
156
|
+
self.rigctrlsocket.settimeout(0.5)
|
155
157
|
return dump
|
156
158
|
|
157
159
|
def sendcw(self, texttosend):
|
not1mm/lib/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.12.
|
3
|
+
Version: 24.12.14
|
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
|
@@ -239,6 +239,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
239
239
|
|
240
240
|
## Recent Changes (Polishing the Turd)
|
241
241
|
|
242
|
+
- [24-12-14] Changed method of detecting fldigi QSOs. See docs.
|
243
|
+
- [24-12-12] Add a try exception for a unicode decode error.
|
242
244
|
- [24-12-11-1] Add RTC to RAC Canada Day, ARRL VHF, ARRL Field Day, ARRL SS, ARRL DX, 10 10
|
243
245
|
- [24-12-11] Add RTC to IARU HF, IARU Field Day, DARC XMAS, CQ WW, CQ WPX
|
244
246
|
- [24-12-9] Add RTC to Winter Field Day, Stew Perry, REF, RAEM, NAQP, LZ-DX, JIDX
|
@@ -637,9 +639,13 @@ On the Options TAB you can:
|
|
637
639
|
not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
|
638
640
|
No setup is needed to be done on not1mm's side. That's good because I'm lazy.
|
639
641
|
|
640
|
-
not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
|
642
|
+
~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
|
641
643
|
way. It just keeps asking what was the last QSO and compares it to the previous response.
|
642
|
-
If it's different, it's new
|
644
|
+
If it's different, it's new.~~
|
645
|
+
|
646
|
+
not1mm watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
|
647
|
+
|
648
|
+

|
643
649
|
|
644
650
|
The F1-F12 function keys be sent to fldigi via XMLRPC. Fldigi will be placed into TX
|
645
651
|
mode, the message will be sent and a ^r will be tacked onto the end to place it back into
|
@@ -1,5 +1,5 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=bThSgJVaz1ae0Y-ayJpuYn8NvAPiBXOTvy-PctnLkg4,144712
|
3
3
|
not1mm/bandmap.py,sha256=zD3aUf36NVQCy0plAcZLNxYhSEM9xZ8J1Cu9vrcFPYA,31136
|
4
4
|
not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
@@ -96,7 +96,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
|
|
96
96
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
97
97
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
98
98
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
99
|
-
not1mm/lib/cat_interface.py,sha256=
|
99
|
+
not1mm/lib/cat_interface.py,sha256=weOH3Gds2ISEdZ2uZkHOv5tBZu-hoSwYKlrFUlg_KK4,25202
|
100
100
|
not1mm/lib/cwinterface.py,sha256=yQL8Dif9oOIynaRItHgvcmu4mYv1TnTpqCHPtkeb09o,4472
|
101
101
|
not1mm/lib/database.py,sha256=mm3vJgKmAQcUn4Ej--feR0yc_RhWTN01JIwMelI1EdI,48971
|
102
102
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
@@ -104,7 +104,6 @@ not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
|
|
104
104
|
not1mm/lib/edit_opon.py,sha256=j3qJ1aBsQoIOnQ9yiBl3lyeISvKTP0I_rtBYBPAfgeI,359
|
105
105
|
not1mm/lib/edit_station.py,sha256=doL21Hs6jzIE43ohAopdFt_iqnRJZHFcqzcnCS0-iio,1965
|
106
106
|
not1mm/lib/fldigi_sendstring.py,sha256=EeXSBRKgyUEzNyHBjMtHiFe-iOU3TcWcCCX77t0ur_I,602
|
107
|
-
not1mm/lib/fldigi_watcher.py,sha256=reZz3fZLDoJVVZhJD9nIssk2aczCzadDSQTVu-5mTCM,919
|
108
107
|
not1mm/lib/ft8_watcher.py,sha256=BFmVIsnbwuRMWoe-dIBybuCgi0WFmr8Km0O9l4eiwMM,4624
|
109
108
|
not1mm/lib/ham_utility.py,sha256=WMmYLDI_fJHHsn0wkpGVit2Hv8fo6r9ybexXROia8Cg,11967
|
110
109
|
not1mm/lib/lookup.py,sha256=KECMDi9tflRDzgTLeDfDl7HGWWRHvW3HCjNHyyjoWaY,10835
|
@@ -115,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=-cvXtEAUgZ7GtxaNiwVdHbZ-7wEBeoMPRZXNdCxnPyA,1
|
|
115
114
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
116
115
|
not1mm/lib/settings.py,sha256=j5lIMLHJ-eqIaVr_QhI82gkbOl17_C-5suRkWbHYET8,14717
|
117
116
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
118
|
-
not1mm/lib/version.py,sha256=
|
117
|
+
not1mm/lib/version.py,sha256=DDYJZfbw95B2hyfICy7lNMJfrh774wLa8A8CrBkeWpg,49
|
119
118
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
120
119
|
not1mm/plugins/10_10_fall_cw.py,sha256=5QUyGMvGBC-HxcY_z9QbfuxSg3f7p6C9K4qhTxgZE7k,14719
|
121
120
|
not1mm/plugins/10_10_spring_cw.py,sha256=XjYFM263WYyG6nVQzPObW4YC7Z9L93rixSOcVsxPvH4,14722
|
@@ -164,9 +163,9 @@ not1mm/plugins/ref_ssb.py,sha256=vfS9-mcnbw2znRvU4jh20JqI9BXap8jV65OV5mbCkCk,209
|
|
164
163
|
not1mm/plugins/stew_perry_topband.py,sha256=D1hekmMbx-i4BhaP2uzOK3OzaVVMMdgcN3RmfweNqHo,15341
|
165
164
|
not1mm/plugins/weekly_rtty.py,sha256=huZszbZsIh4vF3cP80UyPzy3qxIoHdEiT1b6KuvwgYc,20083
|
166
165
|
not1mm/plugins/winter_field_day.py,sha256=cSCFwy1LOoDDA9Zs1LHRG3r8spDMSKDisxyPxnVrLjw,15149
|
167
|
-
not1mm-24.12.
|
168
|
-
not1mm-24.12.
|
169
|
-
not1mm-24.12.
|
170
|
-
not1mm-24.12.
|
171
|
-
not1mm-24.12.
|
172
|
-
not1mm-24.12.
|
166
|
+
not1mm-24.12.14.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
167
|
+
not1mm-24.12.14.dist-info/METADATA,sha256=2p57a8FUbeXcEWuyk1vSjfDHqXntbNL02NdZkVT73-8,36440
|
168
|
+
not1mm-24.12.14.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
169
|
+
not1mm-24.12.14.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
170
|
+
not1mm-24.12.14.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
171
|
+
not1mm-24.12.14.dist-info/RECORD,,
|
not1mm/lib/fldigi_watcher.py
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
import xmlrpc.client
|
2
|
-
from PyQt6.QtCore import QObject, pyqtSignal, QThread, QEventLoop
|
3
|
-
|
4
|
-
|
5
|
-
class FlDigiWatcher(QObject):
|
6
|
-
"""fldigi watcher"""
|
7
|
-
|
8
|
-
poll_callback = pyqtSignal(str)
|
9
|
-
time_to_quit = False
|
10
|
-
|
11
|
-
def __init__(self):
|
12
|
-
super().__init__()
|
13
|
-
...
|
14
|
-
|
15
|
-
self.target = "http://127.0.0.1:7362"
|
16
|
-
self.payload = ""
|
17
|
-
self.response = ""
|
18
|
-
|
19
|
-
def run(self):
|
20
|
-
while not self.time_to_quit:
|
21
|
-
try:
|
22
|
-
server = xmlrpc.client.ServerProxy(self.target)
|
23
|
-
self.response = server.logbook.last_record()
|
24
|
-
except OSError:
|
25
|
-
QThread.msleep(100)
|
26
|
-
continue
|
27
|
-
if self.payload != self.response:
|
28
|
-
self.payload = self.response
|
29
|
-
try:
|
30
|
-
self.poll_callback.emit(self.payload)
|
31
|
-
except QEventLoop:
|
32
|
-
...
|
33
|
-
QThread.msleep(100)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|