not1mm 24.11.21__py3-none-any.whl → 24.11.24__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
@@ -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.edit_cw_macros)
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.read_cw_macros()
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
  """
@@ -2804,7 +2805,7 @@ class MainWindow(QtWidgets.QMainWindow):
2804
2805
  """
2805
2806
  self.pref["run_state"] = self.radioButton_run.isChecked()
2806
2807
  self.write_preference()
2807
- self.read_cw_macros()
2808
+ self.read_macros()
2808
2809
  self.check_esm()
2809
2810
 
2810
2811
  def write_preference(self) -> None:
@@ -3351,7 +3352,7 @@ class MainWindow(QtWidgets.QMainWindow):
3351
3352
  self.set_band_indicator(band)
3352
3353
  self.set_window_title()
3353
3354
  self.clearinputs()
3354
- self.read_cw_macros()
3355
+ self.read_macros()
3355
3356
  return
3356
3357
  if mode in (
3357
3358
  "DIGI-U",
@@ -3372,7 +3373,7 @@ class MainWindow(QtWidgets.QMainWindow):
3372
3373
  self.set_band_indicator(band)
3373
3374
  self.set_window_title()
3374
3375
  self.clearinputs()
3375
- self.read_cw_macros()
3376
+ self.read_macros()
3376
3377
  return
3377
3378
  if mode == "SSB":
3378
3379
  if intended_freq:
@@ -3393,7 +3394,7 @@ class MainWindow(QtWidgets.QMainWindow):
3393
3394
  self.set_band_indicator(band)
3394
3395
  self.set_window_title()
3395
3396
  self.clearinputs()
3396
- self.read_cw_macros()
3397
+ self.read_macros()
3397
3398
 
3398
3399
  def check_callsign(self, callsign) -> None:
3399
3400
  """
@@ -3480,7 +3481,7 @@ class MainWindow(QtWidgets.QMainWindow):
3480
3481
  self.current_mode = "CW"
3481
3482
  self.sent.setText("599")
3482
3483
  self.receive.setText("599")
3483
- self.read_cw_macros()
3484
+ self.read_macros()
3484
3485
  if self.contest:
3485
3486
  if self.contest.name == "ICWC Medium Speed Test":
3486
3487
  self.contest.prefill(self)
@@ -3490,14 +3491,14 @@ class MainWindow(QtWidgets.QMainWindow):
3490
3491
  self.current_mode = "SSB"
3491
3492
  self.sent.setText("59")
3492
3493
  self.receive.setText("59")
3493
- self.read_cw_macros()
3494
+ self.read_macros()
3494
3495
  return
3495
3496
  if mode in ("RTTY", "DIGI-U", "DIGI-L"):
3496
3497
  if self.current_mode != "RTTY":
3497
3498
  self.current_mode = "RTTY"
3498
3499
  self.sent.setText("599")
3499
3500
  self.receive.setText("599")
3500
- self.read_cw_macros()
3501
+ self.read_macros()
3501
3502
 
3502
3503
  def get_opon(self) -> None:
3503
3504
  """
@@ -3664,18 +3665,13 @@ class MainWindow(QtWidgets.QMainWindow):
3664
3665
  except TypeError as err:
3665
3666
  logger.debug(f"{err=} {vfo=} {the_dict=}")
3666
3667
 
3667
- def edit_cw_macros(self) -> None:
3668
- """
3669
- Calls the default text editor to edit the CW macro file.
3670
-
3671
- Parameters
3672
- ----------
3673
- None
3674
-
3675
- Returns
3676
- -------
3677
- None
3678
- """
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.
3679
3675
  if self.radio_state.get("mode") in ("CW", "CW-L", "CW-R", "CWR"):
3680
3676
  macro_file = "cwmacros.txt"
3681
3677
  elif self.radio_state.get("mode") in (
@@ -3695,8 +3691,14 @@ class MainWindow(QtWidgets.QMainWindow):
3695
3691
  macro_file = "rttymacros.txt"
3696
3692
  else:
3697
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
+
3698
3701
  if not (fsutils.USER_DATA_PATH / macro_file).exists():
3699
- logger.debug("copying default macro file.")
3700
3702
  try:
3701
3703
  copyfile(
3702
3704
  fsutils.APP_DATA_PATH / macro_file,
@@ -3704,57 +3706,50 @@ class MainWindow(QtWidgets.QMainWindow):
3704
3706
  )
3705
3707
  except IOError as err:
3706
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
+
3707
3736
  try:
3708
- fsutils.openFileWithOS(fsutils.USER_DATA_PATH / macro_file)
3737
+ fsutils.openFileWithOS(macro_file)
3709
3738
  except FileNotFoundError | PermissionError | OSError as err:
3710
- logger.critical(
3711
- f"Could not open file {fsutils.USER_DATA_PATH / macro_file} {err}"
3712
- )
3713
- self.read_cw_macros()
3739
+ logger.critical(f"Could not open file {macro_file} {err}")
3740
+ self.read_macros()
3714
3741
 
3715
- def read_cw_macros(self) -> None:
3742
+ def read_macros(self) -> None:
3716
3743
  """
3717
3744
  Reads in the CW macros, firsts it checks to see if the file exists. If it does not,
3718
3745
  and this has been packaged with pyinstaller it will copy the default file from the
3719
3746
  temp directory this is running from... In theory.
3720
3747
  """
3721
3748
 
3722
- if self.radio_state.get("mode") in (
3723
- "CW",
3724
- "CW-L",
3725
- "CW-R",
3726
- ):
3727
- macro_file = "cwmacros.txt"
3728
- elif self.radio_state.get("mode") in (
3729
- "RTTY",
3730
- "RTTY-R",
3731
- "LSB-D",
3732
- "USB-D",
3733
- "AM-D",
3734
- "FM-D",
3735
- "DIGI-U",
3736
- "DIGI-L",
3737
- "RTTYR",
3738
- "PKTLSB",
3739
- "PKTUSB",
3740
- ):
3741
- macro_file = "rttymacros.txt"
3742
- else:
3743
- macro_file = "ssbmacros.txt"
3749
+ macro_file = self.get_macro_filename()
3744
3750
 
3745
- if not (fsutils.USER_DATA_PATH / macro_file).exists():
3746
- logger.debug("copying default macro file.")
3747
- try:
3748
- copyfile(
3749
- fsutils.APP_DATA_PATH / macro_file,
3750
- fsutils.USER_DATA_PATH / macro_file,
3751
- )
3752
- except IOError as err:
3753
- logger.critical(f"Error {err} copying macro file.")
3754
3751
  try:
3755
- with open(
3756
- fsutils.USER_DATA_PATH / macro_file, "r", encoding="utf-8"
3757
- ) as file_descriptor:
3752
+ with open(macro_file, "r", encoding="utf-8") as file_descriptor:
3758
3753
  for line in file_descriptor:
3759
3754
  mode, fkey, buttonname, cwtext = line.split("|")
3760
3755
  if mode.strip().upper() == "R" and self.pref.get("run_state"):
not1mm/data/donors.html CHANGED
@@ -1,4 +1,8 @@
1
1
  <p>
2
+ <h4><center>To donate visit:</center></h4>
3
+ <center>https://paypal.me/k6gte</center>
4
+ </p>
5
+ <p>
2
6
  <h2>
3
7
  <center>Donors</center>
4
8
  </h2>
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.11.21"
3
+ __version__ = "24.11.24"
@@ -433,3 +433,94 @@ def recalculate_mults(self):
433
433
  else:
434
434
  contact["IsMultiplier1"] = 0
435
435
  self.database.change_contact(contact)
436
+
437
+
438
+ def process_esm(self, new_focused_widget=None, with_enter=False):
439
+ """ESM State Machine"""
440
+
441
+ # self.pref["run_state"]
442
+
443
+ # -----===== Assigned F-Keys =====-----
444
+ # self.esm_dict["CQ"]
445
+ # self.esm_dict["EXCH"]
446
+ # self.esm_dict["QRZ"]
447
+ # self.esm_dict["AGN"]
448
+ # self.esm_dict["HISCALL"]
449
+ # self.esm_dict["MYCALL"]
450
+ # self.esm_dict["QSOB4"]
451
+
452
+ # ----==== text fields ====----
453
+ # self.callsign
454
+ # self.sent
455
+ # self.receive
456
+ # self.other_1
457
+ # self.other_2
458
+
459
+ if new_focused_widget is not None:
460
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
461
+
462
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
463
+
464
+ for a_button in [
465
+ self.esm_dict["CQ"],
466
+ self.esm_dict["EXCH"],
467
+ self.esm_dict["QRZ"],
468
+ self.esm_dict["AGN"],
469
+ self.esm_dict["HISCALL"],
470
+ self.esm_dict["MYCALL"],
471
+ self.esm_dict["QSOB4"],
472
+ ]:
473
+ if a_button is not None:
474
+ self.restore_button_color(a_button)
475
+
476
+ buttons_to_send = []
477
+
478
+ if self.pref.get("run_state"):
479
+ if self.current_widget == "callsign":
480
+ if len(self.callsign.text()) < 3:
481
+ self.make_button_green(self.esm_dict["CQ"])
482
+ buttons_to_send.append(self.esm_dict["CQ"])
483
+ elif len(self.callsign.text()) > 2:
484
+ self.make_button_green(self.esm_dict["HISCALL"])
485
+ self.make_button_green(self.esm_dict["EXCH"])
486
+ buttons_to_send.append(self.esm_dict["HISCALL"])
487
+ buttons_to_send.append(self.esm_dict["EXCH"])
488
+
489
+ elif self.current_widget in ["other_2"]:
490
+ if self.other_2.text() == "":
491
+ self.make_button_green(self.esm_dict["AGN"])
492
+ buttons_to_send.append(self.esm_dict["AGN"])
493
+ else:
494
+ self.make_button_green(self.esm_dict["QRZ"])
495
+ buttons_to_send.append(self.esm_dict["QRZ"])
496
+ buttons_to_send.append("LOGIT")
497
+
498
+ if with_enter is True and bool(len(buttons_to_send)):
499
+ for button in buttons_to_send:
500
+ if button:
501
+ if button == "LOGIT":
502
+ self.save_contact()
503
+ continue
504
+ self.process_function_key(button)
505
+ else:
506
+ if self.current_widget == "callsign":
507
+ if len(self.callsign.text()) > 2:
508
+ self.make_button_green(self.esm_dict["MYCALL"])
509
+ buttons_to_send.append(self.esm_dict["MYCALL"])
510
+
511
+ elif self.current_widget in ["other_2"]:
512
+ if self.other_2.text() == "":
513
+ self.make_button_green(self.esm_dict["AGN"])
514
+ buttons_to_send.append(self.esm_dict["AGN"])
515
+ else:
516
+ self.make_button_green(self.esm_dict["EXCH"])
517
+ buttons_to_send.append(self.esm_dict["EXCH"])
518
+ buttons_to_send.append("LOGIT")
519
+
520
+ if with_enter is True and bool(len(buttons_to_send)):
521
+ for button in buttons_to_send:
522
+ if button:
523
+ if button == "LOGIT":
524
+ self.save_contact()
525
+ continue
526
+ self.process_function_key(button)
@@ -433,3 +433,94 @@ def recalculate_mults(self):
433
433
  else:
434
434
  contact["IsMultiplier1"] = 0
435
435
  self.database.change_contact(contact)
436
+
437
+
438
+ def process_esm(self, new_focused_widget=None, with_enter=False):
439
+ """ESM State Machine"""
440
+
441
+ # self.pref["run_state"]
442
+
443
+ # -----===== Assigned F-Keys =====-----
444
+ # self.esm_dict["CQ"]
445
+ # self.esm_dict["EXCH"]
446
+ # self.esm_dict["QRZ"]
447
+ # self.esm_dict["AGN"]
448
+ # self.esm_dict["HISCALL"]
449
+ # self.esm_dict["MYCALL"]
450
+ # self.esm_dict["QSOB4"]
451
+
452
+ # ----==== text fields ====----
453
+ # self.callsign
454
+ # self.sent
455
+ # self.receive
456
+ # self.other_1
457
+ # self.other_2
458
+
459
+ if new_focused_widget is not None:
460
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
461
+
462
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
463
+
464
+ for a_button in [
465
+ self.esm_dict["CQ"],
466
+ self.esm_dict["EXCH"],
467
+ self.esm_dict["QRZ"],
468
+ self.esm_dict["AGN"],
469
+ self.esm_dict["HISCALL"],
470
+ self.esm_dict["MYCALL"],
471
+ self.esm_dict["QSOB4"],
472
+ ]:
473
+ if a_button is not None:
474
+ self.restore_button_color(a_button)
475
+
476
+ buttons_to_send = []
477
+
478
+ if self.pref.get("run_state"):
479
+ if self.current_widget == "callsign":
480
+ if len(self.callsign.text()) < 3:
481
+ self.make_button_green(self.esm_dict["CQ"])
482
+ buttons_to_send.append(self.esm_dict["CQ"])
483
+ elif len(self.callsign.text()) > 2:
484
+ self.make_button_green(self.esm_dict["HISCALL"])
485
+ self.make_button_green(self.esm_dict["EXCH"])
486
+ buttons_to_send.append(self.esm_dict["HISCALL"])
487
+ buttons_to_send.append(self.esm_dict["EXCH"])
488
+
489
+ elif self.current_widget in ["other_2"]:
490
+ if self.other_2.text() == "":
491
+ self.make_button_green(self.esm_dict["AGN"])
492
+ buttons_to_send.append(self.esm_dict["AGN"])
493
+ else:
494
+ self.make_button_green(self.esm_dict["QRZ"])
495
+ buttons_to_send.append(self.esm_dict["QRZ"])
496
+ buttons_to_send.append("LOGIT")
497
+
498
+ if with_enter is True and bool(len(buttons_to_send)):
499
+ for button in buttons_to_send:
500
+ if button:
501
+ if button == "LOGIT":
502
+ self.save_contact()
503
+ continue
504
+ self.process_function_key(button)
505
+ else:
506
+ if self.current_widget == "callsign":
507
+ if len(self.callsign.text()) > 2:
508
+ self.make_button_green(self.esm_dict["MYCALL"])
509
+ buttons_to_send.append(self.esm_dict["MYCALL"])
510
+
511
+ elif self.current_widget in ["other_2"]:
512
+ if self.other_2.text() == "":
513
+ self.make_button_green(self.esm_dict["AGN"])
514
+ buttons_to_send.append(self.esm_dict["AGN"])
515
+ else:
516
+ self.make_button_green(self.esm_dict["EXCH"])
517
+ buttons_to_send.append(self.esm_dict["EXCH"])
518
+ buttons_to_send.append("LOGIT")
519
+
520
+ if with_enter is True and bool(len(buttons_to_send)):
521
+ for button in buttons_to_send:
522
+ if button:
523
+ if button == "LOGIT":
524
+ self.save_contact()
525
+ continue
526
+ self.process_function_key(button)
not1mm/plugins/iaru_hf.py CHANGED
@@ -379,3 +379,113 @@ def cabrillo(self, file_encoding):
379
379
 
380
380
  def recalculate_mults(self):
381
381
  """Recalculates multipliers after change in logged qso."""
382
+
383
+
384
+ def process_esm(self, new_focused_widget=None, with_enter=False):
385
+ """ESM State Machine"""
386
+
387
+ # self.pref["run_state"]
388
+
389
+ # -----===== Assigned F-Keys =====-----
390
+ # self.esm_dict["CQ"]
391
+ # self.esm_dict["EXCH"]
392
+ # self.esm_dict["QRZ"]
393
+ # self.esm_dict["AGN"]
394
+ # self.esm_dict["HISCALL"]
395
+ # self.esm_dict["MYCALL"]
396
+ # self.esm_dict["QSOB4"]
397
+
398
+ # ----==== text fields ====----
399
+ # self.callsign
400
+ # self.sent
401
+ # self.receive
402
+ # self.other_1
403
+ # self.other_2
404
+
405
+ if new_focused_widget is not None:
406
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
407
+
408
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
409
+
410
+ for a_button in [
411
+ self.esm_dict["CQ"],
412
+ self.esm_dict["EXCH"],
413
+ self.esm_dict["QRZ"],
414
+ self.esm_dict["AGN"],
415
+ self.esm_dict["HISCALL"],
416
+ self.esm_dict["MYCALL"],
417
+ self.esm_dict["QSOB4"],
418
+ ]:
419
+ if a_button is not None:
420
+ self.restore_button_color(a_button)
421
+
422
+ buttons_to_send = []
423
+
424
+ if self.pref.get("run_state"):
425
+ if self.current_widget == "callsign":
426
+ if len(self.callsign.text()) < 3:
427
+ self.make_button_green(self.esm_dict["CQ"])
428
+ buttons_to_send.append(self.esm_dict["CQ"])
429
+ elif len(self.callsign.text()) > 2:
430
+ self.make_button_green(self.esm_dict["HISCALL"])
431
+ self.make_button_green(self.esm_dict["EXCH"])
432
+ buttons_to_send.append(self.esm_dict["HISCALL"])
433
+ buttons_to_send.append(self.esm_dict["EXCH"])
434
+
435
+ elif self.current_widget in ["other_2"]:
436
+ if self.other_2.text() == "":
437
+ self.make_button_green(self.esm_dict["AGN"])
438
+ buttons_to_send.append(self.esm_dict["AGN"])
439
+ else:
440
+ self.make_button_green(self.esm_dict["QRZ"])
441
+ buttons_to_send.append(self.esm_dict["QRZ"])
442
+ buttons_to_send.append("LOGIT")
443
+
444
+ if with_enter is True and bool(len(buttons_to_send)):
445
+ for button in buttons_to_send:
446
+ if button:
447
+ if button == "LOGIT":
448
+ self.save_contact()
449
+ continue
450
+ self.process_function_key(button)
451
+ else:
452
+ if self.current_widget == "callsign":
453
+ if len(self.callsign.text()) > 2:
454
+ self.make_button_green(self.esm_dict["MYCALL"])
455
+ buttons_to_send.append(self.esm_dict["MYCALL"])
456
+
457
+ elif self.current_widget in ["other_2"]:
458
+ if self.other_2.text() == "":
459
+ self.make_button_green(self.esm_dict["AGN"])
460
+ buttons_to_send.append(self.esm_dict["AGN"])
461
+ else:
462
+ self.make_button_green(self.esm_dict["EXCH"])
463
+ buttons_to_send.append(self.esm_dict["EXCH"])
464
+ buttons_to_send.append("LOGIT")
465
+
466
+ if with_enter is True and bool(len(buttons_to_send)):
467
+ for button in buttons_to_send:
468
+ if button:
469
+ if button == "LOGIT":
470
+ self.save_contact()
471
+ continue
472
+ self.process_function_key(button)
473
+
474
+
475
+ def populate_history_info_line(self):
476
+ result = self.database.fetch_call_history(self.callsign.text())
477
+ if result:
478
+ self.history_info.setText(
479
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
480
+ )
481
+ else:
482
+ self.history_info.setText("")
483
+
484
+
485
+ def check_call_history(self):
486
+ """"""
487
+ result = self.database.fetch_call_history(self.callsign.text())
488
+ if result:
489
+ self.history_info.setText(f"{result.get('UserText','')}")
490
+ if self.other_2.text() == "":
491
+ self.other_2.setText(f"{result.get('Exch1', '')}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.21
3
+ Version: 24.11.24
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
@@ -221,8 +221,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
221
221
  - **CWOps CWT**
222
222
  - **DARC Xmas**
223
223
  - **Helvetia**
224
- - IARU Fieldday R1 CW, SSB
225
- - IARU HF
224
+ - **IARU Fieldday R1 CW, SSB**
225
+ - **IARU HF**
226
226
  - **ICWC MST**
227
227
  - **Japan International DX CW, SSB**
228
228
  - **K1USN Slow Speed Test**
@@ -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-24] Added ESM to IARU HF and FieldDay.
242
+ - [24-11-23] Made macros per contest.
241
243
  - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
242
244
  - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
243
245
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=gTvMiyHVY5BEFCOCKT7_q6IkcYu1BDU3treXZk3jQ_8,142394
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=XCh7XR5SyPzFx88UEaNLIGg41bMVcaNEO5L_c9Lrd2k,146
23
+ not1mm/data/donors.html,sha256=DtH9DoDZoMLJf6adisJT8jCcnyhmj4gzHhX5UmmDgjI,239
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
@@ -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=2KuOTzQ3XUC08hkaFvx9RVIiA2YL9VANgy4nxwliSJQ,49
117
+ not1mm/lib/version.py,sha256=ddqZBy3zla-M51uDFW1jsP62ZHX9yMyEpfCi9nVIfjg,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
@@ -144,9 +144,9 @@ not1mm/plugins/cwt.py,sha256=3gA1DqiXxj5NARdG5i0PyFmuq3XSXn6LisZxD5jFs4M,17034
144
144
  not1mm/plugins/darc_xmas.py,sha256=GdtAQVCLogKGzZaexJfzsZms5SbLLlO1YweFPjgvYWw,18458
145
145
  not1mm/plugins/general_logging.py,sha256=NV_FCgpAEEQrVRxMDD7nQ2krJgPrhtopizxrGndtUNk,6686
146
146
  not1mm/plugins/helvetia.py,sha256=SRKn7jflfYPUNrvmErDM44af5YWUe57h7JkIwFSbT0Q,19609
147
- not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=b-WA-KcixXNTozO5lfqujeCBXFRuM_Ubm_9MIwlrhIs,13555
148
- not1mm/plugins/iaru_fieldday_r1_ssb.py,sha256=gQH2XQuE-ywaGq2sde-sPP1_C6_Y81v3FPDiE2BJixA,13560
149
- not1mm/plugins/iaru_hf.py,sha256=PVdShWxugsn211ti8mfoWBveQyIkN8XFDMQO4tfNUEY,11846
147
+ not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=oWeFuKxvY15vRiUh2vW3z3o7mxJMae7vfpKx4OFU_yA,16816
148
+ not1mm/plugins/iaru_fieldday_r1_ssb.py,sha256=HylTAcNs0DSii5EDzMQlocjs4k7rQ579YvLrwn6sqIQ,16821
149
+ not1mm/plugins/iaru_hf.py,sha256=RcVf0UFaHX0eSpUZMMGHC0HTsOy_SwTH9Yi9SeJNQUA,15715
150
150
  not1mm/plugins/icwc_mst.py,sha256=K1tgNXiknGbnvxG4sEZQCgZnjI6x3OYRI_4Djmr8E2Q,15976
151
151
  not1mm/plugins/jidx_cw.py,sha256=KJOE3fU0KVMqD5IqvnN3YDHPEwrMx3yJZBmCtAIP7WQ,15650
152
152
  not1mm/plugins/jidx_ph.py,sha256=1l92EmDZJFRGZjR1VrISgFc8KoHVfmJvLsaVsuufIMs,14599
@@ -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.21.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
166
- not1mm-24.11.21.dist-info/METADATA,sha256=xa2JnhPq2yIm7akc8rqc6RMn53bqVd5LqqAoHIfevns,36614
167
- not1mm-24.11.21.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
168
- not1mm-24.11.21.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
169
- not1mm-24.11.21.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
170
- not1mm-24.11.21.dist-info/RECORD,,
165
+ not1mm-24.11.24.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
166
+ not1mm-24.11.24.dist-info/METADATA,sha256=2W_0n3y2ITtAWE0uFKxK5J1IIuH9Iy6Fu-sckNYXL50,36708
167
+ not1mm-24.11.24.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
168
+ not1mm-24.11.24.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
169
+ not1mm-24.11.24.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
170
+ not1mm-24.11.24.dist-info/RECORD,,