not1mm 24.11.19__py3-none-any.whl → 24.11.23__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 +59 -62
- not1mm/data/donors.html +1 -0
- not1mm/lib/cat_interface.py +16 -1
- not1mm/lib/version.py +1 -1
- not1mm/plugins/general_logging.py +113 -0
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/METADATA +5 -4
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/RECORD +11 -11
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/WHEEL +1 -1
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/LICENSE +0 -0
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/entry_points.txt +0 -0
- {not1mm-24.11.19.dist-info → not1mm-24.11.23.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -256,7 +256,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
256
256
|
self.actionNew_Database.triggered.connect(self.new_database)
|
257
257
|
self.actionOpen_Database.triggered.connect(self.open_database)
|
258
258
|
|
259
|
-
self.actionEdit_Macros.triggered.connect(self.
|
259
|
+
self.actionEdit_Macros.triggered.connect(self.edit_macros)
|
260
260
|
|
261
261
|
self.actionAbout.triggered.connect(self.show_about_dialog)
|
262
262
|
self.actionHotKeys.triggered.connect(self.show_key_help)
|
@@ -659,7 +659,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
659
659
|
self.show_splash_msg("Loading contest.")
|
660
660
|
self.load_contest()
|
661
661
|
self.show_splash_msg("Reading macros.")
|
662
|
-
self.
|
662
|
+
self.read_macros()
|
663
663
|
|
664
664
|
self.show_splash_msg("Starting FlDigi watcher.")
|
665
665
|
self.fldigi_watcher = FlDigiWatcher()
|
@@ -1627,6 +1627,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1627
1627
|
cmd["COLUMNS"] = self.contest.columns
|
1628
1628
|
if self.log_window:
|
1629
1629
|
self.log_window.msg_from_main(cmd)
|
1630
|
+
self.read_macros()
|
1630
1631
|
|
1631
1632
|
def check_for_new_cty(self) -> None:
|
1632
1633
|
"""
|
@@ -1971,6 +1972,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1971
1972
|
if self.pref.get("cwtype") == 3 and self.rig_control is not None:
|
1972
1973
|
if self.rig_control.interface == "flrig":
|
1973
1974
|
self.rig_control.cat.set_flrig_cw_speed(self.cw_speed.value())
|
1975
|
+
elif self.rig_control.interface == "rigctld":
|
1976
|
+
self.rig_control.cat.set_rigctl_cw_speed(self.cw_speed.value())
|
1974
1977
|
|
1975
1978
|
def stop_cw(self):
|
1976
1979
|
""""""
|
@@ -2802,7 +2805,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2802
2805
|
"""
|
2803
2806
|
self.pref["run_state"] = self.radioButton_run.isChecked()
|
2804
2807
|
self.write_preference()
|
2805
|
-
self.
|
2808
|
+
self.read_macros()
|
2806
2809
|
self.check_esm()
|
2807
2810
|
|
2808
2811
|
def write_preference(self) -> None:
|
@@ -3349,7 +3352,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3349
3352
|
self.set_band_indicator(band)
|
3350
3353
|
self.set_window_title()
|
3351
3354
|
self.clearinputs()
|
3352
|
-
self.
|
3355
|
+
self.read_macros()
|
3353
3356
|
return
|
3354
3357
|
if mode in (
|
3355
3358
|
"DIGI-U",
|
@@ -3370,7 +3373,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3370
3373
|
self.set_band_indicator(band)
|
3371
3374
|
self.set_window_title()
|
3372
3375
|
self.clearinputs()
|
3373
|
-
self.
|
3376
|
+
self.read_macros()
|
3374
3377
|
return
|
3375
3378
|
if mode == "SSB":
|
3376
3379
|
if intended_freq:
|
@@ -3391,7 +3394,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3391
3394
|
self.set_band_indicator(band)
|
3392
3395
|
self.set_window_title()
|
3393
3396
|
self.clearinputs()
|
3394
|
-
self.
|
3397
|
+
self.read_macros()
|
3395
3398
|
|
3396
3399
|
def check_callsign(self, callsign) -> None:
|
3397
3400
|
"""
|
@@ -3478,7 +3481,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3478
3481
|
self.current_mode = "CW"
|
3479
3482
|
self.sent.setText("599")
|
3480
3483
|
self.receive.setText("599")
|
3481
|
-
self.
|
3484
|
+
self.read_macros()
|
3482
3485
|
if self.contest:
|
3483
3486
|
if self.contest.name == "ICWC Medium Speed Test":
|
3484
3487
|
self.contest.prefill(self)
|
@@ -3488,14 +3491,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3488
3491
|
self.current_mode = "SSB"
|
3489
3492
|
self.sent.setText("59")
|
3490
3493
|
self.receive.setText("59")
|
3491
|
-
self.
|
3494
|
+
self.read_macros()
|
3492
3495
|
return
|
3493
3496
|
if mode in ("RTTY", "DIGI-U", "DIGI-L"):
|
3494
3497
|
if self.current_mode != "RTTY":
|
3495
3498
|
self.current_mode = "RTTY"
|
3496
3499
|
self.sent.setText("599")
|
3497
3500
|
self.receive.setText("599")
|
3498
|
-
self.
|
3501
|
+
self.read_macros()
|
3499
3502
|
|
3500
3503
|
def get_opon(self) -> None:
|
3501
3504
|
"""
|
@@ -3662,18 +3665,13 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3662
3665
|
except TypeError as err:
|
3663
3666
|
logger.debug(f"{err=} {vfo=} {the_dict=}")
|
3664
3667
|
|
3665
|
-
def
|
3666
|
-
"""
|
3667
|
-
|
3668
|
-
|
3669
|
-
|
3670
|
-
|
3671
|
-
|
3672
|
-
|
3673
|
-
Returns
|
3674
|
-
-------
|
3675
|
-
None
|
3676
|
-
"""
|
3668
|
+
def get_macro_filename(self):
|
3669
|
+
""""""
|
3670
|
+
# Have not1mm check in USER_DATA_PATH for the existence of a folder with the contests name.
|
3671
|
+
# If it exists, check to see if a cw/ssb/rtty macro files exists within it and load them before
|
3672
|
+
# falling back to the default ones.
|
3673
|
+
# If user selects menu option to edit the current macro file, make the previous checks, if the
|
3674
|
+
# specific one does not exist, copy the default to the contest directory and edit that copy.
|
3677
3675
|
if self.radio_state.get("mode") in ("CW", "CW-L", "CW-R", "CWR"):
|
3678
3676
|
macro_file = "cwmacros.txt"
|
3679
3677
|
elif self.radio_state.get("mode") in (
|
@@ -3693,8 +3691,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3693
3691
|
macro_file = "rttymacros.txt"
|
3694
3692
|
else:
|
3695
3693
|
macro_file = "ssbmacros.txt"
|
3694
|
+
|
3695
|
+
try:
|
3696
|
+
if not (fsutils.USER_DATA_PATH / self.contest.name).exists():
|
3697
|
+
os.mkdir(fsutils.USER_DATA_PATH / self.contest.name)
|
3698
|
+
except AttributeError:
|
3699
|
+
return ""
|
3700
|
+
|
3696
3701
|
if not (fsutils.USER_DATA_PATH / macro_file).exists():
|
3697
|
-
logger.debug("copying default macro file.")
|
3698
3702
|
try:
|
3699
3703
|
copyfile(
|
3700
3704
|
fsutils.APP_DATA_PATH / macro_file,
|
@@ -3702,57 +3706,50 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3702
3706
|
)
|
3703
3707
|
except IOError as err:
|
3704
3708
|
logger.critical(f"Error {err} copying macro file.")
|
3709
|
+
|
3710
|
+
if not (fsutils.USER_DATA_PATH / self.contest.name / macro_file).exists():
|
3711
|
+
try:
|
3712
|
+
copyfile(
|
3713
|
+
fsutils.APP_DATA_PATH / macro_file,
|
3714
|
+
fsutils.USER_DATA_PATH / self.contest.name / macro_file,
|
3715
|
+
)
|
3716
|
+
except IOError as err:
|
3717
|
+
logger.critical(f"Error {err} copying macro file.")
|
3718
|
+
|
3719
|
+
return fsutils.USER_DATA_PATH / self.contest.name / macro_file
|
3720
|
+
|
3721
|
+
def edit_macros(self) -> None:
|
3722
|
+
"""
|
3723
|
+
Calls the default text editor to edit the CW macro file.
|
3724
|
+
|
3725
|
+
Parameters
|
3726
|
+
----------
|
3727
|
+
None
|
3728
|
+
|
3729
|
+
Returns
|
3730
|
+
-------
|
3731
|
+
None
|
3732
|
+
"""
|
3733
|
+
|
3734
|
+
macro_file = self.get_macro_filename()
|
3735
|
+
|
3705
3736
|
try:
|
3706
|
-
fsutils.openFileWithOS(
|
3737
|
+
fsutils.openFileWithOS(macro_file)
|
3707
3738
|
except FileNotFoundError | PermissionError | OSError as err:
|
3708
|
-
logger.critical(
|
3709
|
-
|
3710
|
-
)
|
3711
|
-
self.read_cw_macros()
|
3739
|
+
logger.critical(f"Could not open file {macro_file} {err}")
|
3740
|
+
self.read_macros()
|
3712
3741
|
|
3713
|
-
def
|
3742
|
+
def read_macros(self) -> None:
|
3714
3743
|
"""
|
3715
3744
|
Reads in the CW macros, firsts it checks to see if the file exists. If it does not,
|
3716
3745
|
and this has been packaged with pyinstaller it will copy the default file from the
|
3717
3746
|
temp directory this is running from... In theory.
|
3718
3747
|
"""
|
3719
3748
|
|
3720
|
-
|
3721
|
-
"CW",
|
3722
|
-
"CW-L",
|
3723
|
-
"CW-R",
|
3724
|
-
):
|
3725
|
-
macro_file = "cwmacros.txt"
|
3726
|
-
elif self.radio_state.get("mode") in (
|
3727
|
-
"RTTY",
|
3728
|
-
"RTTY-R",
|
3729
|
-
"LSB-D",
|
3730
|
-
"USB-D",
|
3731
|
-
"AM-D",
|
3732
|
-
"FM-D",
|
3733
|
-
"DIGI-U",
|
3734
|
-
"DIGI-L",
|
3735
|
-
"RTTYR",
|
3736
|
-
"PKTLSB",
|
3737
|
-
"PKTUSB",
|
3738
|
-
):
|
3739
|
-
macro_file = "rttymacros.txt"
|
3740
|
-
else:
|
3741
|
-
macro_file = "ssbmacros.txt"
|
3749
|
+
macro_file = self.get_macro_filename()
|
3742
3750
|
|
3743
|
-
if not (fsutils.USER_DATA_PATH / macro_file).exists():
|
3744
|
-
logger.debug("copying default macro file.")
|
3745
|
-
try:
|
3746
|
-
copyfile(
|
3747
|
-
fsutils.APP_DATA_PATH / macro_file,
|
3748
|
-
fsutils.USER_DATA_PATH / macro_file,
|
3749
|
-
)
|
3750
|
-
except IOError as err:
|
3751
|
-
logger.critical(f"Error {err} copying macro file.")
|
3752
3751
|
try:
|
3753
|
-
with open(
|
3754
|
-
fsutils.USER_DATA_PATH / macro_file, "r", encoding="utf-8"
|
3755
|
-
) as file_descriptor:
|
3752
|
+
with open(macro_file, "r", encoding="utf-8") as file_descriptor:
|
3756
3753
|
for line in file_descriptor:
|
3757
3754
|
mode, fkey, buttonname, cwtext = line.split("|")
|
3758
3755
|
if mode.strip().upper() == "R" and self.pref.get("run_state"):
|
not1mm/data/donors.html
CHANGED
not1mm/lib/cat_interface.py
CHANGED
@@ -9,7 +9,7 @@ rig.cwio_send n:i cwio transmit 1/0 (on/off)
|
|
9
9
|
command lines to test the CW API via XMLRPC
|
10
10
|
|
11
11
|
Setting WPM
|
12
|
-
curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
|
12
|
+
curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
|
13
13
|
|
14
14
|
Setting the text to send
|
15
15
|
curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
|
@@ -178,6 +178,21 @@ class CAT:
|
|
178
178
|
self.__initialize_rigctrld()
|
179
179
|
return False
|
180
180
|
|
181
|
+
def set_rigctl_cw_speed(self, speed):
|
182
|
+
"""Set CW speed via rigctld"""
|
183
|
+
if self.rigctrlsocket:
|
184
|
+
try:
|
185
|
+
self.online = True
|
186
|
+
self.rigctrlsocket.send(bytes(f"L KEYSPD {speed}\n", "utf-8"))
|
187
|
+
_ = self.__get_serial_string()
|
188
|
+
return
|
189
|
+
except socket.error as exception:
|
190
|
+
self.online = False
|
191
|
+
logger.debug("set_level_rigctld: %s", f"{exception}")
|
192
|
+
self.rigctrlsocket = None
|
193
|
+
return
|
194
|
+
self.__initialize_rigctrld()
|
195
|
+
|
181
196
|
def sendcwxmlrpc(self, texttosend):
|
182
197
|
"""Add text to flrig's cw send buffer."""
|
183
198
|
logger.debug(f"{texttosend=}")
|
not1mm/lib/version.py
CHANGED
@@ -126,3 +126,116 @@ def cabrillo(self, file_encoding):
|
|
126
126
|
|
127
127
|
def recalculate_mults(self):
|
128
128
|
"""Recalculates multipliers after change in logged qso."""
|
129
|
+
|
130
|
+
|
131
|
+
def process_esm(self, new_focused_widget=None, with_enter=False):
|
132
|
+
"""ESM State Machine"""
|
133
|
+
|
134
|
+
# self.pref["run_state"]
|
135
|
+
|
136
|
+
# -----===== Assigned F-Keys =====-----
|
137
|
+
# self.esm_dict["CQ"]
|
138
|
+
# self.esm_dict["EXCH"]
|
139
|
+
# self.esm_dict["QRZ"]
|
140
|
+
# self.esm_dict["AGN"]
|
141
|
+
# self.esm_dict["HISCALL"]
|
142
|
+
# self.esm_dict["MYCALL"]
|
143
|
+
# self.esm_dict["QSOB4"]
|
144
|
+
|
145
|
+
# ----==== text fields ====----
|
146
|
+
# self.callsign
|
147
|
+
# self.sent
|
148
|
+
# self.receive
|
149
|
+
# self.other_1
|
150
|
+
# self.other_2
|
151
|
+
|
152
|
+
if new_focused_widget is not None:
|
153
|
+
self.current_widget = self.inputs_dict.get(new_focused_widget)
|
154
|
+
|
155
|
+
# print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
|
156
|
+
|
157
|
+
for a_button in [
|
158
|
+
self.F1,
|
159
|
+
self.F2,
|
160
|
+
self.F3,
|
161
|
+
self.F4,
|
162
|
+
self.F5,
|
163
|
+
self.F6,
|
164
|
+
self.F7,
|
165
|
+
self.F8,
|
166
|
+
self.F9,
|
167
|
+
self.F10,
|
168
|
+
self.F11,
|
169
|
+
self.F12,
|
170
|
+
]:
|
171
|
+
self.restore_button_color(a_button)
|
172
|
+
|
173
|
+
buttons_to_send = []
|
174
|
+
|
175
|
+
if self.pref.get("run_state"):
|
176
|
+
if self.current_widget == "callsign":
|
177
|
+
if len(self.callsign.text()) < 3:
|
178
|
+
self.make_button_green(self.esm_dict["CQ"])
|
179
|
+
buttons_to_send.append(self.esm_dict["CQ"])
|
180
|
+
elif len(self.callsign.text()) > 2:
|
181
|
+
self.make_button_green(self.esm_dict["HISCALL"])
|
182
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
183
|
+
buttons_to_send.append(self.esm_dict["HISCALL"])
|
184
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
185
|
+
|
186
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
187
|
+
if self.other_2.text() == "" and self.other_1.text() == "":
|
188
|
+
self.make_button_green(self.esm_dict["AGN"])
|
189
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
190
|
+
else:
|
191
|
+
self.make_button_green(self.esm_dict["QRZ"])
|
192
|
+
buttons_to_send.append(self.esm_dict["QRZ"])
|
193
|
+
buttons_to_send.append("LOGIT")
|
194
|
+
|
195
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
196
|
+
for button in buttons_to_send:
|
197
|
+
if button:
|
198
|
+
if button == "LOGIT":
|
199
|
+
self.save_contact()
|
200
|
+
continue
|
201
|
+
self.process_function_key(button)
|
202
|
+
else:
|
203
|
+
if self.current_widget == "callsign":
|
204
|
+
if len(self.callsign.text()) > 2:
|
205
|
+
self.make_button_green(self.esm_dict["MYCALL"])
|
206
|
+
buttons_to_send.append(self.esm_dict["MYCALL"])
|
207
|
+
|
208
|
+
elif self.current_widget in ["other_1", "other_2"]:
|
209
|
+
if self.other_2.text() == "" and self.other_1.text() == "":
|
210
|
+
self.make_button_green(self.esm_dict["AGN"])
|
211
|
+
buttons_to_send.append(self.esm_dict["AGN"])
|
212
|
+
else:
|
213
|
+
self.make_button_green(self.esm_dict["EXCH"])
|
214
|
+
buttons_to_send.append(self.esm_dict["EXCH"])
|
215
|
+
buttons_to_send.append("LOGIT")
|
216
|
+
if with_enter is True and bool(len(buttons_to_send)):
|
217
|
+
for button in buttons_to_send:
|
218
|
+
if button:
|
219
|
+
if button == "LOGIT":
|
220
|
+
self.save_contact()
|
221
|
+
continue
|
222
|
+
self.process_function_key(button)
|
223
|
+
|
224
|
+
|
225
|
+
def populate_history_info_line(self):
|
226
|
+
result = self.database.fetch_call_history(self.callsign.text())
|
227
|
+
if result:
|
228
|
+
self.history_info.setText(
|
229
|
+
f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('UserText','...')}"
|
230
|
+
)
|
231
|
+
else:
|
232
|
+
self.history_info.setText("")
|
233
|
+
|
234
|
+
|
235
|
+
def check_call_history(self):
|
236
|
+
""""""
|
237
|
+
result = self.database.fetch_call_history(self.callsign.text())
|
238
|
+
if result:
|
239
|
+
self.history_info.setText(f"{result.get('UserText','')}")
|
240
|
+
if self.other_1.text() == "":
|
241
|
+
self.other_1.setText(f"{result.get('Name', '')}")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.11.
|
3
|
+
Version: 24.11.23
|
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
|
@@ -24,7 +24,7 @@ Requires-Dist: pyserial
|
|
24
24
|
Requires-Dist: sounddevice
|
25
25
|
Requires-Dist: soundfile
|
26
26
|
Requires-Dist: numpy
|
27
|
-
Requires-Dist: notctyparser
|
27
|
+
Requires-Dist: notctyparser>=23.6.21
|
28
28
|
Requires-Dist: rapidfuzz
|
29
29
|
Requires-Dist: appdata
|
30
30
|
Requires-Dist: Levenshtein
|
@@ -205,7 +205,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
205
205
|
|
206
206
|
## List of should be working contests, those in bold have ESM
|
207
207
|
|
208
|
-
- General Logging (There are better general loggers like QLog, KLog, CQRLog)
|
208
|
+
- **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
|
209
209
|
- 10 10 Fall CW
|
210
210
|
- 10 10 Spring CW
|
211
211
|
- 10 10 Summer Phone
|
@@ -238,6 +238,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
238
238
|
|
239
239
|
## Recent Changes (Polishing the Turd)
|
240
240
|
|
241
|
+
- [24-11-23] Made macros per contest.
|
242
|
+
- [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
|
241
243
|
- [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
|
242
244
|
- [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
|
243
245
|
- [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
|
@@ -953,7 +955,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
|
|
953
955
|
|
954
956
|
Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
|
955
957
|
|
956
|
-
|
957
958
|
## Contest specific notes
|
958
959
|
|
959
960
|
I found it might be beneficial to have a section devoted to wierd quirky things
|
@@ -1,5 +1,5 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=IKdrA6p-ScJtcuD9s0J4QsYNxqbobTJkIQs6nz4qw3o,142522
|
3
3
|
not1mm/bandmap.py,sha256=X6mMHXS1kXBbUPZCaKgiVJ6Dz6DE6LEQqtEXfT3telg,30811
|
4
4
|
not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
@@ -20,7 +20,7 @@ not1mm/data/configuration.ui,sha256=iva5exfJJFBiiITpz6vgCB8e_j0lgsLeVWOltxtUk4g,
|
|
20
20
|
not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
|
21
21
|
not1mm/data/cty.json,sha256=dPG9K1Pm4Rxd4uJom_gQ8y-sbqiZfILpl4kBAFnOveU,4877142
|
22
22
|
not1mm/data/cwmacros.txt,sha256=NztufsX6R52gAO7VyJ2AHr7wOh41pJTwHKh5Lcs32ds,468
|
23
|
-
not1mm/data/donors.html,sha256=
|
23
|
+
not1mm/data/donors.html,sha256=XCh7XR5SyPzFx88UEaNLIGg41bMVcaNEO5L_c9Lrd2k,146
|
24
24
|
not1mm/data/editcontact.ui,sha256=TNOsXETYfDaON4wj6AkzCJ-n2SmbNRO2-g2SLl5m8s0,27437
|
25
25
|
not1mm/data/editmacro.ui,sha256=Vg-S62ogKYcWlDDlza_JYyZkCQfa8mCfF-cFqpBej-w,2700
|
26
26
|
not1mm/data/greendot.png,sha256=6h6KFMj5mmu07ppPWXXewH0PLAvbOOre-5z6rpzWLLo,474
|
@@ -95,7 +95,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
|
|
95
95
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
96
96
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
97
97
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
98
|
-
not1mm/lib/cat_interface.py,sha256
|
98
|
+
not1mm/lib/cat_interface.py,sha256=-RGssRLL8_iuf6hPAsQZ9itoDISTx0XT-nD3jJ4LKss,24475
|
99
99
|
not1mm/lib/cwinterface.py,sha256=yQL8Dif9oOIynaRItHgvcmu4mYv1TnTpqCHPtkeb09o,4472
|
100
100
|
not1mm/lib/database.py,sha256=nqWp2eJ7JfUTqaQ9AVbx3XjgtlRnYY9ruTQCv2YRreY,48310
|
101
101
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
@@ -114,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=AABdx9DoTT8Znrup7AkfmKGC22hshMsEypiMqV0iKw0,1
|
|
114
114
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
115
115
|
not1mm/lib/settings.py,sha256=Xt0WE2ro_kUYdugQ0Pe1SQX07MHrJ0jyQqDqAKKqxuU,13564
|
116
116
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
117
|
-
not1mm/lib/version.py,sha256=
|
117
|
+
not1mm/lib/version.py,sha256=i-XV0bR64KuRtURdg5UiGO_HwzJh30A1goTNLNf275w,49
|
118
118
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
119
119
|
not1mm/plugins/10_10_fall_cw.py,sha256=r2YkRNiMS_3hXrf3zeiijzW24roilyIXnwXwTd07X8M,11208
|
120
120
|
not1mm/plugins/10_10_spring_cw.py,sha256=EBBcVgxDhtAK7cGHq9LOU6LhY9vSqlk7GEkApn3KRYM,11213
|
@@ -142,7 +142,7 @@ not1mm/plugins/cq_ww_rtty.py,sha256=Pfpr8xWJwp2NOci-WQMTUZaMpAtsUGq1jrIIUv6lQ2Y,
|
|
142
142
|
not1mm/plugins/cq_ww_ssb.py,sha256=2zhIbqthXLekQhK22icOScegm6kYZLbmpPMZYEmIM5I,17001
|
143
143
|
not1mm/plugins/cwt.py,sha256=3gA1DqiXxj5NARdG5i0PyFmuq3XSXn6LisZxD5jFs4M,17034
|
144
144
|
not1mm/plugins/darc_xmas.py,sha256=GdtAQVCLogKGzZaexJfzsZms5SbLLlO1YweFPjgvYWw,18458
|
145
|
-
not1mm/plugins/general_logging.py,sha256=
|
145
|
+
not1mm/plugins/general_logging.py,sha256=NV_FCgpAEEQrVRxMDD7nQ2krJgPrhtopizxrGndtUNk,6686
|
146
146
|
not1mm/plugins/helvetia.py,sha256=SRKn7jflfYPUNrvmErDM44af5YWUe57h7JkIwFSbT0Q,19609
|
147
147
|
not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=b-WA-KcixXNTozO5lfqujeCBXFRuM_Ubm_9MIwlrhIs,13555
|
148
148
|
not1mm/plugins/iaru_fieldday_r1_ssb.py,sha256=gQH2XQuE-ywaGq2sde-sPP1_C6_Y81v3FPDiE2BJixA,13560
|
@@ -162,9 +162,9 @@ not1mm/plugins/ref_ssb.py,sha256=G2Gz4kApchmOZQVnBexEokSEvdb-mZWJAfyJ1D6JDGY,204
|
|
162
162
|
not1mm/plugins/stew_perry_topband.py,sha256=Gy_vv6tgkR-3vmvsUVO0pVfHMkUJSxpt7G4secn0RH8,15084
|
163
163
|
not1mm/plugins/weekly_rtty.py,sha256=PI0_AtEdZZKGAuKnP-b2EYn9xwCN1Ablk38trbNP3Rc,19603
|
164
164
|
not1mm/plugins/winter_field_day.py,sha256=9w3tDL9ZWiENSTERc3vzDbBktvI7pnyNvlH6fDjAi08,14841
|
165
|
-
not1mm-24.11.
|
166
|
-
not1mm-24.11.
|
167
|
-
not1mm-24.11.
|
168
|
-
not1mm-24.11.
|
169
|
-
not1mm-24.11.
|
170
|
-
not1mm-24.11.
|
165
|
+
not1mm-24.11.23.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
166
|
+
not1mm-24.11.23.dist-info/METADATA,sha256=7la-wqRZm6lciPrTOHi8B_ly4eoiBqCUowixz38RbSU,36652
|
167
|
+
not1mm-24.11.23.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
168
|
+
not1mm-24.11.23.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
169
|
+
not1mm-24.11.23.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
170
|
+
not1mm-24.11.23.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|