not1mm 24.4.1.2__py3-none-any.whl → 24.4.2.1__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 +137 -90
- not1mm/bandmap.py +50 -23
- not1mm/checkwindow.py +45 -21
- not1mm/data/checkwindow.ui +1 -1
- not1mm/data/cty.json +1 -1
- not1mm/data/vfo.ui +18 -0
- not1mm/lib/about.py +1 -1
- not1mm/lib/edit_contact.py +1 -1
- not1mm/lib/edit_macro.py +1 -1
- not1mm/lib/edit_opon.py +1 -1
- not1mm/lib/edit_station.py +2 -1
- not1mm/lib/lookup.py +6 -0
- not1mm/lib/multicast.py +7 -5
- not1mm/lib/new_contest.py +1 -1
- not1mm/lib/select_contest.py +1 -1
- not1mm/lib/settings.py +1 -1
- not1mm/lib/version.py +1 -1
- not1mm/logwindow.py +59 -23
- not1mm/plugins/10_10_fall_cw.py +1 -1
- not1mm/plugins/10_10_spring_cw.py +1 -2
- not1mm/plugins/10_10_summer_phone.py +1 -1
- not1mm/plugins/10_10_winter_phone.py +1 -1
- not1mm/plugins/arrl_10m.py +1 -1
- not1mm/plugins/arrl_dx_cw.py +1 -1
- not1mm/plugins/arrl_dx_ssb.py +1 -1
- not1mm/plugins/arrl_field_day.py +1 -1
- not1mm/plugins/arrl_rtty_ru.py +1 -1
- not1mm/plugins/arrl_ss_cw.py +3 -3
- not1mm/plugins/arrl_ss_phone.py +3 -3
- not1mm/plugins/arrl_vhf_jan.py +1 -1
- not1mm/plugins/arrl_vhf_jun.py +1 -1
- not1mm/plugins/arrl_vhf_sep.py +1 -1
- not1mm/plugins/canada_day.py +1 -1
- not1mm/plugins/cq_160_cw.py +1 -1
- not1mm/plugins/cq_160_ssb.py +1 -1
- not1mm/plugins/cq_wpx_cw.py +1 -1
- not1mm/plugins/cq_wpx_ssb.py +1 -1
- not1mm/plugins/cq_ww_cw.py +1 -1
- not1mm/plugins/cq_ww_ssb.py +1 -1
- not1mm/plugins/cwt.py +1 -1
- not1mm/plugins/general_logging.py +1 -1
- not1mm/plugins/iaru_hf.py +1 -1
- not1mm/plugins/jidx_cw.py +1 -1
- not1mm/plugins/jidx_ph.py +1 -1
- not1mm/plugins/naqp_cw.py +1 -1
- not1mm/plugins/naqp_ssb.py +1 -1
- not1mm/plugins/phone_weekly_test.py +1 -1
- not1mm/plugins/stew_perry_topband.py +1 -1
- not1mm/plugins/winter_field_day.py +1 -1
- not1mm/vfo.py +55 -25
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/METADATA +9 -8
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/RECORD +56 -56
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/LICENSE +0 -0
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/WHEEL +0 -0
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/entry_points.txt +0 -0
- {not1mm-24.4.1.2.dist-info → not1mm-24.4.2.1.dist-info}/top_level.txt +0 -0
not1mm/data/vfo.ui
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
<ui version="4.0">
|
3
3
|
<class>DockWidget</class>
|
4
4
|
<widget class="QDockWidget" name="DockWidget">
|
5
|
+
<property name="windowModality">
|
6
|
+
<enum>Qt::ApplicationModal</enum>
|
7
|
+
</property>
|
5
8
|
<property name="geometry">
|
6
9
|
<rect>
|
7
10
|
<x>0</x>
|
@@ -10,6 +13,14 @@
|
|
10
13
|
<height>132</height>
|
11
14
|
</rect>
|
12
15
|
</property>
|
16
|
+
<property name="font">
|
17
|
+
<font>
|
18
|
+
<family>JetBrains Mono</family>
|
19
|
+
</font>
|
20
|
+
</property>
|
21
|
+
<property name="features">
|
22
|
+
<set>QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
|
23
|
+
</property>
|
13
24
|
<property name="windowTitle">
|
14
25
|
<string>DockWidget</string>
|
15
26
|
</property>
|
@@ -28,9 +39,16 @@
|
|
28
39
|
<widget class="QLCDNumber" name="lcdNumber">
|
29
40
|
<property name="font">
|
30
41
|
<font>
|
42
|
+
<family>JetBrains Mono</family>
|
31
43
|
<pointsize>25</pointsize>
|
32
44
|
</font>
|
33
45
|
</property>
|
46
|
+
<property name="frameShape">
|
47
|
+
<enum>QFrame::NoFrame</enum>
|
48
|
+
</property>
|
49
|
+
<property name="frameShadow">
|
50
|
+
<enum>QFrame::Plain</enum>
|
51
|
+
</property>
|
34
52
|
<property name="digitCount">
|
35
53
|
<number>11</number>
|
36
54
|
</property>
|
not1mm/lib/about.py
CHANGED
not1mm/lib/edit_contact.py
CHANGED
not1mm/lib/edit_macro.py
CHANGED
not1mm/lib/edit_opon.py
CHANGED
not1mm/lib/edit_station.py
CHANGED
not1mm/lib/lookup.py
CHANGED
@@ -8,6 +8,7 @@ HamQTH
|
|
8
8
|
import logging
|
9
9
|
import xmltodict
|
10
10
|
import requests
|
11
|
+
from functools import lru_cache
|
11
12
|
|
12
13
|
logger = logging.getLogger("lookup")
|
13
14
|
|
@@ -21,6 +22,7 @@ class HamDBlookup:
|
|
21
22
|
self.url = "https://api.hamdb.org/"
|
22
23
|
self.error = False
|
23
24
|
|
25
|
+
@lru_cache(maxsize=1000)
|
24
26
|
def lookup(self, call: str) -> tuple:
|
25
27
|
"""
|
26
28
|
Lookup a call on QRZ
|
@@ -172,6 +174,7 @@ class QRZlookup:
|
|
172
174
|
self.session = False
|
173
175
|
self.error = f"{exception}"
|
174
176
|
|
177
|
+
@lru_cache(maxsize=1000)
|
175
178
|
def lookup(self, call: str) -> tuple:
|
176
179
|
"""
|
177
180
|
Lookup a call on QRZ
|
@@ -202,6 +205,7 @@ class QRZlookup:
|
|
202
205
|
root = baseroot.get("QRZDatabase")
|
203
206
|
return root.get("Callsign")
|
204
207
|
|
208
|
+
@lru_cache(maxsize=1000)
|
205
209
|
def parse_lookup(self, query_result):
|
206
210
|
"""
|
207
211
|
Returns gridsquare and name for a callsign looked up by qrz or hamdb.
|
@@ -328,6 +332,7 @@ class HamQTH:
|
|
328
332
|
self.error = session.get("error")
|
329
333
|
logger.info("session: %s", self.session)
|
330
334
|
|
335
|
+
@lru_cache(maxsize=1000)
|
331
336
|
def lookup(self, call: str) -> tuple:
|
332
337
|
"""
|
333
338
|
Lookup a call on HamQTH
|
@@ -364,6 +369,7 @@ class HamQTH:
|
|
364
369
|
the_result = self.parse_lookup(root)
|
365
370
|
return the_result
|
366
371
|
|
372
|
+
@lru_cache(maxsize=1000)
|
367
373
|
def parse_lookup(self, root) -> dict:
|
368
374
|
"""
|
369
375
|
Returns gridsquare and name for a callsign
|
not1mm/lib/multicast.py
CHANGED
@@ -10,7 +10,7 @@ from json import JSONDecodeError, dumps, loads
|
|
10
10
|
|
11
11
|
from dicttoxml import dicttoxml
|
12
12
|
|
13
|
-
from
|
13
|
+
from PyQt6 import QtNetwork
|
14
14
|
|
15
15
|
logger = logging.getLogger("multicast")
|
16
16
|
|
@@ -27,12 +27,14 @@ class Multicast:
|
|
27
27
|
self.interface_ip = interface_ip
|
28
28
|
self.server_udp = QtNetwork.QUdpSocket()
|
29
29
|
b_result = self.server_udp.bind(
|
30
|
-
QtNetwork.QHostAddress.AnyIPv4,
|
30
|
+
QtNetwork.QHostAddress.SpecialAddress.AnyIPv4,
|
31
31
|
int(self.multicast_port),
|
32
|
-
QtNetwork.
|
32
|
+
QtNetwork.QAbstractSocket.BindFlag.ReuseAddressHint,
|
33
33
|
)
|
34
34
|
logger.warn(f"multicast bind {b_result}")
|
35
|
-
join_result = self.server_udp.joinMulticastGroup(
|
35
|
+
join_result = self.server_udp.joinMulticastGroup(
|
36
|
+
QtNetwork.QHostAddress(self.multicast_group)
|
37
|
+
)
|
36
38
|
logger.warn(f"joinMulticastGroup result {join_result}")
|
37
39
|
|
38
40
|
def has_pending_datagrams(self) -> bool:
|
@@ -94,4 +96,4 @@ class Multicast:
|
|
94
96
|
return packet
|
95
97
|
|
96
98
|
def close(self):
|
97
|
-
self.server_udp.close()
|
99
|
+
self.server_udp.close()
|
not1mm/lib/new_contest.py
CHANGED
not1mm/lib/select_contest.py
CHANGED
not1mm/lib/settings.py
CHANGED
not1mm/lib/version.py
CHANGED
not1mm/logwindow.py
CHANGED
@@ -14,9 +14,9 @@ import queue
|
|
14
14
|
from json import loads
|
15
15
|
|
16
16
|
import math
|
17
|
-
from
|
18
|
-
from
|
19
|
-
from
|
17
|
+
from PyQt6 import QtCore, QtGui, QtWidgets, uic
|
18
|
+
from PyQt6.QtCore import QItemSelectionModel
|
19
|
+
from PyQt6.QtWidgets import QDockWidget
|
20
20
|
|
21
21
|
import not1mm.fsutils as fsutils
|
22
22
|
from not1mm.lib.database import DataBase
|
@@ -87,8 +87,8 @@ class LogWindow(QDockWidget):
|
|
87
87
|
21: "UUID",
|
88
88
|
}
|
89
89
|
|
90
|
-
def __init__(self
|
91
|
-
super().__init__(
|
90
|
+
def __init__(self):
|
91
|
+
super().__init__()
|
92
92
|
self.table_loading = True
|
93
93
|
self._udpwatch = None
|
94
94
|
self.udp_fifo = queue.Queue()
|
@@ -103,6 +103,12 @@ class LogWindow(QDockWidget):
|
|
103
103
|
self.database.current_contest = self.pref.get("contest", 0)
|
104
104
|
self.contact = self.database.empty_contact
|
105
105
|
uic.loadUi(fsutils.APP_DATA_PATH / "logwindow.ui", self)
|
106
|
+
self.setFeatures(
|
107
|
+
QDockWidget.DockWidgetFeature.DockWidgetMovable
|
108
|
+
| QDockWidget.DockWidgetFeature.DockWidgetFloatable
|
109
|
+
| QDockWidget.DockWidgetFeature.DockWidgetClosable
|
110
|
+
)
|
111
|
+
self.setAllowedAreas(QtCore.Qt.DockWidgetArea.AllDockWidgetAreas)
|
106
112
|
self.setWindowTitle(
|
107
113
|
f"QSO History - {self.pref.get('current_database', 'ham.db')}"
|
108
114
|
)
|
@@ -112,7 +118,9 @@ class LogWindow(QDockWidget):
|
|
112
118
|
self.checkmark = QtGui.QPixmap(str(fsutils.APP_DATA_PATH / "check.png"))
|
113
119
|
self.checkicon = QtGui.QIcon()
|
114
120
|
self.checkicon.addPixmap(self.checkmark)
|
115
|
-
self.generalLog.setContextMenuPolicy(
|
121
|
+
self.generalLog.setContextMenuPolicy(
|
122
|
+
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
|
123
|
+
)
|
116
124
|
self.generalLog.customContextMenuRequested.connect(self.edit_contact_selected)
|
117
125
|
for column_number, column_name in self.columns.items():
|
118
126
|
self.generalLog.setHorizontalHeaderItem(
|
@@ -125,7 +133,9 @@ class LogWindow(QDockWidget):
|
|
125
133
|
self.generalLog.cellDoubleClicked.connect(self.double_clicked)
|
126
134
|
self.generalLog.cellChanged.connect(self.cell_changed)
|
127
135
|
|
128
|
-
self.focusedLog.setContextMenuPolicy(
|
136
|
+
self.focusedLog.setContextMenuPolicy(
|
137
|
+
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
|
138
|
+
)
|
129
139
|
self.focusedLog.customContextMenuRequested.connect(
|
130
140
|
self.edit_focused_contact_selected
|
131
141
|
)
|
@@ -170,25 +180,47 @@ class LogWindow(QDockWidget):
|
|
170
180
|
dark_palette = QtGui.QPalette()
|
171
181
|
dark_color = QtGui.QColor(56, 56, 56)
|
172
182
|
disabled_color = QtGui.QColor(127, 127, 127)
|
173
|
-
dark_palette.setColor(QtGui.QPalette.Window, dark_color)
|
174
|
-
dark_palette.setColor(
|
175
|
-
|
176
|
-
|
177
|
-
dark_palette.setColor(
|
183
|
+
dark_palette.setColor(QtGui.QPalette.ColorRole.Window, dark_color)
|
184
|
+
dark_palette.setColor(
|
185
|
+
QtGui.QPalette.ColorRole.WindowText, QtGui.QColorConstants.White
|
186
|
+
)
|
187
|
+
dark_palette.setColor(
|
188
|
+
QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
|
189
|
+
)
|
190
|
+
dark_palette.setColor(QtGui.QPalette.ColorRole.AlternateBase, dark_color)
|
191
|
+
dark_palette.setColor(
|
192
|
+
QtGui.QPalette.ColorRole.Text, QtGui.QColorConstants.White
|
193
|
+
)
|
194
|
+
dark_palette.setColor(
|
195
|
+
QtGui.QPalette.ColorGroup.Disabled,
|
196
|
+
QtGui.QPalette.ColorRole.Text,
|
197
|
+
disabled_color,
|
198
|
+
)
|
199
|
+
dark_palette.setColor(QtGui.QPalette.ColorRole.Button, dark_color)
|
178
200
|
dark_palette.setColor(
|
179
|
-
QtGui.QPalette.
|
201
|
+
QtGui.QPalette.ColorRole.ButtonText, QtGui.QColorConstants.White
|
180
202
|
)
|
181
|
-
dark_palette.setColor(QtGui.QPalette.Button, dark_color)
|
182
|
-
dark_palette.setColor(QtGui.QPalette.ButtonText, Qt.white)
|
183
203
|
dark_palette.setColor(
|
184
|
-
QtGui.QPalette.Disabled,
|
204
|
+
QtGui.QPalette.ColorGroup.Disabled,
|
205
|
+
QtGui.QPalette.ColorRole.ButtonText,
|
206
|
+
disabled_color,
|
185
207
|
)
|
186
|
-
dark_palette.setColor(QtGui.QPalette.BrightText, Qt.red)
|
187
|
-
dark_palette.setColor(QtGui.QPalette.Link, QtGui.QColor(42, 130, 218))
|
188
|
-
dark_palette.setColor(QtGui.QPalette.Highlight, QtGui.QColor(42, 130, 218))
|
189
|
-
dark_palette.setColor(QtGui.QPalette.HighlightedText, Qt.black)
|
190
208
|
dark_palette.setColor(
|
191
|
-
QtGui.QPalette.
|
209
|
+
QtGui.QPalette.ColorRole.BrightText, QtGui.QColorConstants.Red
|
210
|
+
)
|
211
|
+
dark_palette.setColor(
|
212
|
+
QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
|
213
|
+
)
|
214
|
+
dark_palette.setColor(
|
215
|
+
QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
|
216
|
+
)
|
217
|
+
dark_palette.setColor(
|
218
|
+
QtGui.QPalette.ColorRole.HighlightedText, QtGui.QColorConstants.Black
|
219
|
+
)
|
220
|
+
dark_palette.setColor(
|
221
|
+
QtGui.QPalette.ColorGroup.Disabled,
|
222
|
+
QtGui.QPalette.ColorRole.HighlightedText,
|
223
|
+
disabled_color,
|
192
224
|
)
|
193
225
|
|
194
226
|
self.setPalette(dark_palette)
|
@@ -761,7 +793,9 @@ class LogWindow(QDockWidget):
|
|
761
793
|
self.generalLog.setItem(
|
762
794
|
number_of_rows, self.get_column("YYYY-MM-DD HH:MM:SS"), first_item
|
763
795
|
)
|
764
|
-
self.generalLog.setCurrentItem(
|
796
|
+
self.generalLog.setCurrentItem(
|
797
|
+
first_item, QItemSelectionModel.SelectionFlag.NoUpdate
|
798
|
+
)
|
765
799
|
self.generalLog.item(
|
766
800
|
number_of_rows, self.get_column("YYYY-MM-DD HH:MM:SS")
|
767
801
|
).setTextAlignment(0x0004 | 0x0080)
|
@@ -946,7 +980,9 @@ class LogWindow(QDockWidget):
|
|
946
980
|
self.focusedLog.setItem(
|
947
981
|
number_of_rows, self.get_column("YYYY-MM-DD HH:MM:SS"), first_item
|
948
982
|
)
|
949
|
-
self.focusedLog.setCurrentItem(
|
983
|
+
self.focusedLog.setCurrentItem(
|
984
|
+
first_item, QItemSelectionModel.SelectionFlag.NoUpdate
|
985
|
+
)
|
950
986
|
try:
|
951
987
|
self.focusedLog.item(
|
952
988
|
number_of_rows, self.get_column("YYYY-MM-DD HH:MM:SS")
|
not1mm/plugins/10_10_fall_cw.py
CHANGED
not1mm/plugins/arrl_10m.py
CHANGED
not1mm/plugins/arrl_dx_cw.py
CHANGED
not1mm/plugins/arrl_dx_ssb.py
CHANGED
not1mm/plugins/arrl_field_day.py
CHANGED
not1mm/plugins/arrl_rtty_ru.py
CHANGED
not1mm/plugins/arrl_ss_cw.py
CHANGED
@@ -7,7 +7,7 @@ import logging
|
|
7
7
|
|
8
8
|
from pathlib import Path
|
9
9
|
|
10
|
-
from
|
10
|
+
from PyQt6 import QtWidgets
|
11
11
|
|
12
12
|
from not1mm.lib.plugin_common import gen_adif
|
13
13
|
from not1mm.lib.version import __version__
|
@@ -138,8 +138,8 @@ def points(self):
|
|
138
138
|
def show_mults(self):
|
139
139
|
"""Return display string for mults"""
|
140
140
|
sql = (
|
141
|
-
"select count(DISTINCT(Sect)) as mults from dxlog "
|
142
|
-
f"where ContestNR = {self.database.current_contest};"
|
141
|
+
"select count(DISTINCT(Sect)) as mults from dxlog "
|
142
|
+
f"where ContestNR = {self.database.current_contest};"
|
143
143
|
)
|
144
144
|
result = self.database.exec_sql(sql)
|
145
145
|
return int(result.get("mults", 0))
|
not1mm/plugins/arrl_ss_phone.py
CHANGED
@@ -7,7 +7,7 @@ import logging
|
|
7
7
|
|
8
8
|
from pathlib import Path
|
9
9
|
|
10
|
-
from
|
10
|
+
from PyQt6 import QtWidgets
|
11
11
|
|
12
12
|
from not1mm.lib.plugin_common import gen_adif
|
13
13
|
from not1mm.lib.version import __version__
|
@@ -138,8 +138,8 @@ def points(self):
|
|
138
138
|
def show_mults(self):
|
139
139
|
"""Return display string for mults"""
|
140
140
|
sql = (
|
141
|
-
"select count(DISTINCT(Sect)) as mults from dxlog "
|
142
|
-
f"where ContestNR = {self.database.current_contest};"
|
141
|
+
"select count(DISTINCT(Sect)) as mults from dxlog "
|
142
|
+
f"where ContestNR = {self.database.current_contest};"
|
143
143
|
)
|
144
144
|
result = self.database.exec_sql(sql)
|
145
145
|
return int(result.get("mults", 0))
|
not1mm/plugins/arrl_vhf_jan.py
CHANGED
not1mm/plugins/arrl_vhf_jun.py
CHANGED
not1mm/plugins/arrl_vhf_sep.py
CHANGED
not1mm/plugins/canada_day.py
CHANGED
not1mm/plugins/cq_160_cw.py
CHANGED
not1mm/plugins/cq_160_ssb.py
CHANGED
not1mm/plugins/cq_wpx_cw.py
CHANGED
not1mm/plugins/cq_wpx_ssb.py
CHANGED
not1mm/plugins/cq_ww_cw.py
CHANGED
not1mm/plugins/cq_ww_ssb.py
CHANGED
not1mm/plugins/cwt.py
CHANGED
not1mm/plugins/iaru_hf.py
CHANGED
not1mm/plugins/jidx_cw.py
CHANGED
not1mm/plugins/jidx_ph.py
CHANGED
not1mm/plugins/naqp_cw.py
CHANGED
not1mm/plugins/naqp_ssb.py
CHANGED