not1mm 24.12.12__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 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/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.12.12"
3
+ __version__ = "24.12.14"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.12.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,7 @@ 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.
242
243
  - [24-12-12] Add a try exception for a unicode decode error.
243
244
  - [24-12-11-1] Add RTC to RAC Canada Day, ARRL VHF, ARRL Field Day, ARRL SS, ARRL DX, 10 10
244
245
  - [24-12-11] Add RTC to IARU HF, IARU Field Day, DARC XMAS, CQ WW, CQ WPX
@@ -638,9 +639,13 @@ On the Options TAB you can:
638
639
  not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
639
640
  No setup is needed to be done on not1mm's side. That's good because I'm lazy.
640
641
 
641
- 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
642
643
  way. It just keeps asking what was the last QSO and compares it to the previous response.
643
- 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
+ ![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
644
649
 
645
650
  The F1-F12 function keys be sent to fldigi via XMLRPC. Fldigi will be placed into TX
646
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=wwuwQHChnYEWWMkiE5XsudVb52VodXSSMkKdXdWY2JU,144688
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
@@ -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=yAurAH4NwToockk48vMPVmWZYRz1mdfkTVfSbkg_zDo,49
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.12.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
168
- not1mm-24.12.12.dist-info/METADATA,sha256=2qZYg1xVhtAnfiw5S7YNJqqLAc5KOTUkP51qfmvHIXY,36168
169
- not1mm-24.12.12.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
170
- not1mm-24.12.12.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
171
- not1mm-24.12.12.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
172
- not1mm-24.12.12.dist-info/RECORD,,
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,,
@@ -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)