not1mm 25.3.19.1__py3-none-any.whl → 25.3.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 CHANGED
@@ -68,6 +68,7 @@ from not1mm.checkwindow import CheckWindow
68
68
  from not1mm.bandmap import BandMapWindow
69
69
  from not1mm.vfo import VfoWindow
70
70
  from not1mm.ratewindow import RateWindow
71
+ from not1mm.statistics import StatsWindow
71
72
  from not1mm.radio import Radio
72
73
  from not1mm.voice_keying import Voice
73
74
  from not1mm.lookupservice import LookupService
@@ -132,6 +133,7 @@ class MainWindow(QtWidgets.QMainWindow):
132
133
  "checkwindow": False,
133
134
  "vfowindow": False,
134
135
  "ratewindow": False,
136
+ "statisticswindow": False,
135
137
  "darkmode": True,
136
138
  }
137
139
  appstarted = False
@@ -177,6 +179,8 @@ class MainWindow(QtWidgets.QMainWindow):
177
179
  bandmap_window = None
178
180
  vfo_window = None
179
181
  rate_window = None
182
+ statistics_window = None
183
+ settings = None
180
184
  lookup_service = None
181
185
  fldigi_util = None
182
186
  rtc_service = None
@@ -238,6 +242,7 @@ class MainWindow(QtWidgets.QMainWindow):
238
242
  self.actionBandmap.triggered.connect(self.launch_bandmap_window)
239
243
  self.actionCheck_Window.triggered.connect(self.launch_check_window)
240
244
  self.actionRate_Window.triggered.connect(self.launch_rate_window)
245
+ self.actionStatistics.triggered.connect(self.launch_stats_window)
241
246
  self.actionVFO.triggered.connect(self.launch_vfo)
242
247
  self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
243
248
  self.actionLoad_Call_History_File.triggered.connect(self.load_call_history)
@@ -249,7 +254,7 @@ class MainWindow(QtWidgets.QMainWindow):
249
254
  lambda x: self.generate_cabrillo("utf-8")
250
255
  )
251
256
  self.actionGenerate_ADIF.triggered.connect(self.generate_adif)
252
- self. actionGenerate_EDI.triggered.connect(self.generate_edi)
257
+ self.actionGenerate_EDI.triggered.connect(self.generate_edi)
253
258
 
254
259
  self.actionConfiguration_Settings.triggered.connect(
255
260
  self.edit_configuration_settings
@@ -654,6 +659,17 @@ class MainWindow(QtWidgets.QMainWindow):
654
659
  self.rate_window.hide()
655
660
  self.rate_window.message.connect(self.dockwidget_message)
656
661
 
662
+ self.show_splash_msg("Setting up StatisticsWindow.")
663
+ self.statistics_window = StatsWindow()
664
+ self.statistics_window.setObjectName("statistics-window")
665
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
666
+ self.statistics_window.setFeatures(dockfeatures)
667
+ self.addDockWidget(
668
+ Qt.DockWidgetArea.RightDockWidgetArea, self.statistics_window
669
+ )
670
+ self.statistics_window.hide()
671
+ self.statistics_window.message.connect(self.dockwidget_message)
672
+
657
673
  self.show_splash_msg("Setting up VFOWindow.")
658
674
  self.vfo_window = VfoWindow()
659
675
  self.vfo_window.setObjectName("vfo-window")
@@ -714,6 +730,15 @@ class MainWindow(QtWidgets.QMainWindow):
714
730
  self.rate_window.hide()
715
731
  self.rate_window.setActive(False)
716
732
 
733
+ self.actionStatistics.setChecked(self.pref.get("statisticswindow", False))
734
+ if self.actionStatistics.isChecked():
735
+ self.statistics_window.show()
736
+ self.statistics_window.setActive(True)
737
+ self.statistics_window.get_run_and_total_qs()
738
+ else:
739
+ self.statistics_window.hide()
740
+ self.statistics_window.setActive(False)
741
+
717
742
  self.actionVFO.setChecked(self.pref.get("vfowindow", False))
718
743
  if self.actionVFO.isChecked():
719
744
  self.vfo_window.show()
@@ -990,6 +1015,8 @@ class MainWindow(QtWidgets.QMainWindow):
990
1015
  self.vfo_window.msg_from_main(cmd)
991
1016
  if self.rate_window:
992
1017
  self.rate_window.msg_from_main(cmd)
1018
+ if self.statistics_window:
1019
+ self.statistics_window.msg_from_main(cmd)
993
1020
 
994
1021
  if setdarkmode:
995
1022
  darkPalette = QPalette()
@@ -1331,6 +1358,9 @@ class MainWindow(QtWidgets.QMainWindow):
1331
1358
  self.log_window.msg_from_main(cmd)
1332
1359
  if self.rate_window:
1333
1360
  self.rate_window.msg_from_main(cmd)
1361
+ if self.statistics_window:
1362
+ self.statistics_window.msg_from_main(cmd)
1363
+
1334
1364
  self.clearinputs()
1335
1365
  self.edit_station_settings()
1336
1366
 
@@ -1370,6 +1400,9 @@ class MainWindow(QtWidgets.QMainWindow):
1370
1400
  self.log_window.msg_from_main(cmd)
1371
1401
  if self.rate_window:
1372
1402
  self.rate_window.msg_from_main(cmd)
1403
+ if self.statistics_window:
1404
+ self.statistics_window.msg_from_main(cmd)
1405
+
1373
1406
  self.clearinputs()
1374
1407
  self.open_contest()
1375
1408
 
@@ -1662,6 +1695,9 @@ class MainWindow(QtWidgets.QMainWindow):
1662
1695
  self.log_window.msg_from_main(cmd)
1663
1696
  if self.rate_window:
1664
1697
  self.rate_window.msg_from_main(cmd)
1698
+ if self.statistics_window:
1699
+ self.statistics_window.msg_from_main(cmd)
1700
+
1665
1701
  if hasattr(self.contest, "columns"):
1666
1702
  cmd = {}
1667
1703
  cmd["cmd"] = "SHOWCOLUMNS"
@@ -1884,6 +1920,17 @@ class MainWindow(QtWidgets.QMainWindow):
1884
1920
  self.rate_window.hide()
1885
1921
  self.rate_window.setActive(False)
1886
1922
 
1923
+ def launch_stats_window(self) -> None:
1924
+ """Launch the check window"""
1925
+ self.pref["statisticswindow"] = self.actionStatistics.isChecked()
1926
+ self.write_preference()
1927
+ if self.actionStatistics.isChecked():
1928
+ self.statistics_window.show()
1929
+ self.statistics_window.setActive(True)
1930
+ else:
1931
+ self.statistics_window.hide()
1932
+ self.statistics_window.setActive(False)
1933
+
1887
1934
  def launch_vfo(self) -> None:
1888
1935
  """Launch the VFO window"""
1889
1936
  self.pref["vfowindow"] = self.actionVFO.isChecked()
@@ -2535,6 +2582,8 @@ class MainWindow(QtWidgets.QMainWindow):
2535
2582
  self.log_window.msg_from_main(cmd)
2536
2583
  if self.check_window:
2537
2584
  self.check_window.msg_from_main(cmd)
2585
+ if self.statistics_window:
2586
+ self.statistics_window.msg_from_main(cmd)
2538
2587
 
2539
2588
  def update_rtc_xml(self):
2540
2589
  """Update RTC XML"""
@@ -3332,7 +3381,7 @@ class MainWindow(QtWidgets.QMainWindow):
3332
3381
  if "ARRL Sweepstakes" in self.contest.name:
3333
3382
  self.contest.parse_exchange(self)
3334
3383
  return
3335
- if hasattr(self.contest, "call_parse_exchange_on_edit"):
3384
+ if hasattr(self.contest, "call_parse_exchange_on_edit"):
3336
3385
  if self.contest.advance_on_space:
3337
3386
  self.contest.parse_exchange(self)
3338
3387
  if hasattr(self.contest, "advance_on_space"):
not1mm/data/main.ui CHANGED
@@ -1511,10 +1511,11 @@
1511
1511
  <property name="title">
1512
1512
  <string>Window</string>
1513
1513
  </property>
1514
- <addaction name="actionLog_Window"/>
1515
1514
  <addaction name="actionBandmap"/>
1516
1515
  <addaction name="actionCheck_Window"/>
1516
+ <addaction name="actionLog_Window"/>
1517
1517
  <addaction name="actionRate_Window"/>
1518
+ <addaction name="actionStatistics"/>
1518
1519
  <addaction name="actionVFO"/>
1519
1520
  </widget>
1520
1521
  <widget class="QMenu" name="menuOther">
@@ -1780,7 +1781,7 @@
1780
1781
  <property name="shortcutVisibleInContextMenu">
1781
1782
  <bool>false</bool>
1782
1783
  </property>
1783
- </action>
1784
+ </action>
1784
1785
  <action name="actionGenerate_EDI">
1785
1786
  <property name="text">
1786
1787
  <string>Generate EDI</string>
@@ -2057,6 +2058,22 @@
2057
2058
  <string>Command Buttons</string>
2058
2059
  </property>
2059
2060
  </action>
2061
+ <action name="actionStatistics">
2062
+ <property name="checkable">
2063
+ <bool>true</bool>
2064
+ </property>
2065
+ <property name="text">
2066
+ <string>Statistics</string>
2067
+ </property>
2068
+ <property name="font">
2069
+ <font>
2070
+ <family>JetBrains Mono ExtraLight</family>
2071
+ </font>
2072
+ </property>
2073
+ <property name="shortcut">
2074
+ <string>Alt+S</string>
2075
+ </property>
2076
+ </action>
2060
2077
  </widget>
2061
2078
  <resources/>
2062
2079
  <connections/>
@@ -0,0 +1,47 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>DockWidget</class>
4
+ <widget class="QDockWidget" name="DockWidget">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>294</width>
10
+ <height>192</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>Stats</string>
15
+ </property>
16
+ <widget class="QWidget" name="dockWidgetContents">
17
+ <layout class="QGridLayout" name="gridLayout">
18
+ <item row="1" column="2">
19
+ <widget class="QTableWidget" name="tableWidget">
20
+ <column>
21
+ <property name="text">
22
+ <string>Band</string>
23
+ </property>
24
+ </column>
25
+ <column>
26
+ <property name="text">
27
+ <string>QSO's</string>
28
+ </property>
29
+ </column>
30
+ <column>
31
+ <property name="text">
32
+ <string>Calls</string>
33
+ </property>
34
+ </column>
35
+ <column>
36
+ <property name="text">
37
+ <string>Points</string>
38
+ </property>
39
+ </column>
40
+ </widget>
41
+ </item>
42
+ </layout>
43
+ </widget>
44
+ </widget>
45
+ <resources/>
46
+ <connections/>
47
+ </ui>
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.3.19.1"
3
+ __version__ = "25.3.23"
not1mm/statistics.py ADDED
@@ -0,0 +1,152 @@
1
+ import datetime
2
+ import logging
3
+ import os
4
+
5
+ # import sys
6
+
7
+ from PyQt6 import uic, QtWidgets
8
+ from PyQt6.QtWidgets import QDockWidget
9
+
10
+ # from PyQt6.QtGui import QColorConstants, QPalette, QColor
11
+ from PyQt6.QtCore import pyqtSignal
12
+
13
+ import not1mm.fsutils as fsutils
14
+ from not1mm.lib.database import DataBase
15
+
16
+ from json import loads
17
+ from json.decoder import JSONDecodeError
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class StatsWindow(QDockWidget):
23
+ """The stats window. Shows something important."""
24
+
25
+ message = pyqtSignal(dict)
26
+ dbname = None
27
+ pref = {}
28
+ poll_time = datetime.datetime.now() + datetime.timedelta(milliseconds=1000)
29
+
30
+ def __init__(self):
31
+ super().__init__()
32
+ self.active = False
33
+ self.load_pref()
34
+ self.dbname = fsutils.USER_DATA_PATH / self.pref.get(
35
+ "current_database", "ham.db"
36
+ )
37
+ self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
38
+ self.database.current_contest = self.pref.get("contest", 0)
39
+ self.load_pref()
40
+ self.dbname = fsutils.USER_DATA_PATH / self.pref.get(
41
+ "current_database", "ham.db"
42
+ )
43
+ self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
44
+ self.database.current_contest = self.pref.get("contest", 0)
45
+ uic.loadUi(fsutils.APP_DATA_PATH / "statistics.ui", self)
46
+
47
+ def msg_from_main(self, packet):
48
+ """"""
49
+ if packet.get("cmd", "") == "DARKMODE":
50
+ self.setDarkMode(packet.get("state", False))
51
+ return
52
+
53
+ if self.active is False:
54
+ return
55
+
56
+ if packet.get("cmd", "") == "UPDATELOG":
57
+ logger.debug("External refresh command.")
58
+ self.get_run_and_total_qs()
59
+ return
60
+
61
+ if packet.get("cmd", "") == "NEWDB":
62
+ self.load_pref()
63
+ self.dbname = fsutils.USER_DATA_PATH / self.pref.get(
64
+ "current_database", "ham.db"
65
+ )
66
+ self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
67
+ self.database.current_contest = self.pref.get("contest", 0)
68
+
69
+ def setActive(self, mode: bool) -> None:
70
+ self.active = bool(mode)
71
+
72
+ def setDarkMode(self, dark: bool) -> None:
73
+ """Forces a darkmode palette."""
74
+
75
+ def load_pref(self) -> None:
76
+ """
77
+ Load preference file to get current db filename and sets the initial darkmode state.
78
+
79
+ Parameters
80
+ ----------
81
+ None
82
+
83
+ Returns
84
+ -------
85
+ None
86
+ """
87
+ try:
88
+ if os.path.exists(fsutils.CONFIG_FILE):
89
+ with open(
90
+ fsutils.CONFIG_FILE, "rt", encoding="utf-8"
91
+ ) as file_descriptor:
92
+ self.pref = loads(file_descriptor.read())
93
+ logger.info(f"loaded config file from {fsutils.CONFIG_FILE}")
94
+ else:
95
+ self.pref["current_database"] = "ham.db"
96
+
97
+ except (IOError, JSONDecodeError) as exception:
98
+ logger.critical("Error: %s", exception)
99
+ self.setDarkMode(self.pref.get("darkmode", False))
100
+
101
+ def get_run_and_total_qs(self):
102
+ """get numbers"""
103
+ self.tableWidget.clear()
104
+ self.tableWidget.setColumnCount(4)
105
+ self.tableWidget.setHorizontalHeaderLabels(["BAND", "QSO", "CALLS", "POINTS"])
106
+ self.tableWidget.verticalHeader().setVisible(False)
107
+ self.tableWidget.setEditTriggers(
108
+ QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers
109
+ )
110
+ self.tableWidget.setSelectionMode(
111
+ QtWidgets.QAbstractItemView.SelectionMode.NoSelection
112
+ )
113
+ query = f"select DISTINCT(Band) as band from DXLOG where ContestNR = {self.database.current_contest};"
114
+ result = self.database.exec_sql_mult(query)
115
+ self.tableWidget.setRowCount(len(result) + 1)
116
+ row = 0
117
+ for band in result:
118
+ query = f"select count(*) as qs, count(DISTINCT(Call)) as calls, sum(Points) as points from DXLOG where ContestNR = {self.database.current_contest} and Band = '{band['band']}';"
119
+ result = self.database.exec_sql(query)
120
+ item = QtWidgets.QTableWidgetItem(str(band["band"]))
121
+ item.setTextAlignment(0x0002)
122
+ self.tableWidget.setItem(row, 0, item)
123
+ item = QtWidgets.QTableWidgetItem(str(result["qs"]))
124
+ item.setTextAlignment(0x0002)
125
+ self.tableWidget.setItem(row, 1, item)
126
+ item = QtWidgets.QTableWidgetItem(str(result["calls"]))
127
+ item.setTextAlignment(0x0002)
128
+ self.tableWidget.setItem(row, 2, item)
129
+ item = QtWidgets.QTableWidgetItem(str(result["points"]))
130
+ item.setTextAlignment(0x0002)
131
+ self.tableWidget.setItem(row, 3, item)
132
+ row += 1
133
+ query = f"select count(*) as qs, count(DISTINCT(Call)) as calls, sum(Points) as points from DXLOG where ContestNR = {self.database.current_contest};"
134
+ result = self.database.exec_sql(query)
135
+ item = QtWidgets.QTableWidgetItem("TOTAL")
136
+ item.setTextAlignment(0x0002)
137
+ self.tableWidget.setItem(row, 0, item)
138
+ item = QtWidgets.QTableWidgetItem(str(result["qs"]))
139
+ item.setTextAlignment(0x0002)
140
+ self.tableWidget.setItem(row, 1, item)
141
+ item = QtWidgets.QTableWidgetItem(str(result["calls"]))
142
+ item.setTextAlignment(0x0002)
143
+ self.tableWidget.setItem(row, 2, item)
144
+ item = QtWidgets.QTableWidgetItem(str(result["points"]))
145
+ item.setTextAlignment(0x0002)
146
+ self.tableWidget.setItem(row, 3, item)
147
+ self.tableWidget.resizeColumnsToContents()
148
+ self.tableWidget.resizeRowsToContents()
149
+
150
+
151
+ if __name__ == "__main__":
152
+ print("This is not a program.\nTry Again.")
@@ -1,13 +1,13 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.3.19.1
3
+ Version: 25.3.23
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
+ License-Expression: GPL-3.0-or-later
6
7
  Project-URL: Homepage, https://github.com/mbridak/not1mm
7
8
  Project-URL: Bug Tracker, https://github.com/mbridak/not1mm/issues
8
9
  Classifier: Programming Language :: Python :: 3
9
10
  Classifier: Development Status :: 5 - Production/Stable
10
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
11
11
  Classifier: Environment :: X11 Applications :: Qt
12
12
  Classifier: Operating System :: POSIX :: Linux
13
13
  Classifier: Intended Audience :: End Users/Desktop
@@ -28,6 +28,7 @@ Requires-Dist: notctyparser>=23.6.21
28
28
  Requires-Dist: rapidfuzz
29
29
  Requires-Dist: appdata
30
30
  Requires-Dist: Levenshtein
31
+ Dynamic: license-file
31
32
 
32
33
  # Not1MM
33
34
  <!-- markdownlint-disable MD001 MD033 -->
@@ -246,6 +247,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
246
247
 
247
248
  ## Recent Changes
248
249
 
250
+ - [25-3-23] Add a statistics window.
249
251
  - [25-3-19-1] Add EA His Maj King of Spain SSB.
250
252
  - [25-3-19] Merged PR from @DD5ML Adding DARC VHF.
251
253
  - [25-3-18] Add His Maj King of Spain CW
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=SiXK9Vyxo-gNMy2cDz2KbN21ho5AhkahDavI0KmIiUQ,149512
2
+ not1mm/__main__.py,sha256=TKA6hSE2A2SZpXvMySGXNVgfE3UKhvzSC8tSzzVZTBs,151537
3
3
  not1mm/bandmap.py,sha256=mdSK6oj8plEmr6WVYkzPTCfsHWKl9lea3R14cmRsAI4,31531
4
4
  not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
@@ -8,6 +8,7 @@ not1mm/lookupservice.py,sha256=GkY_qHZfrW6XHf8upIoaG4hCFqm0fg6Ganu9ConGrIc,2628
8
8
  not1mm/radio.py,sha256=_b-tSFuDLoBKnABxrsafGQu2p33U-KOubY7-qgLV2yg,5408
9
9
  not1mm/ratewindow.py,sha256=UVkQt0nSB2COQlJQV6tFtsz4mP7d-Wj9jcjqvZw934Q,9891
10
10
  not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
11
+ not1mm/statistics.py,sha256=UW9FKFkJArqSnkrfMKnSi0eL-Nj5iUcIYBffeUtz8NU,5717
11
12
  not1mm/test.py,sha256=RN71m2S9MPIOJMaoCi0wZhwEhpEZunvtosZxaKahRB4,101
12
13
  not1mm/vfo.py,sha256=ggPyWtxMbdSE5RwdK0nDRwDNqOxdpb_pvnzZdbzZVQE,11136
13
14
  not1mm/voice_keying.py,sha256=HZImqC5NgnyW2nknNYQ3b7I8-6S_hxpq5G4RcIRXn_k,3005
@@ -32,7 +33,7 @@ not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcC
32
33
  not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
33
34
  not1mm/data/logwindow.ui,sha256=f7vULj96tHIQuR1nJMyvPHHcmVgzkhv9D1isyojsnFU,1458
34
35
  not1mm/data/logwindowx.ui,sha256=CwpI-h7cI1yqyldH9quKftsdHL5lTyL9ABOcf80nfqc,1632
35
- not1mm/data/main.ui,sha256=k7qmK-rnAN62t_YWyN5ZKK3-p1a3KREAVqU-SzKxEG8,63389
36
+ not1mm/data/main.ui,sha256=-yhNNnaqYiAXueK4wKg3qn4tqo4EUlcSm88qQfXUVOM,63800
36
37
  not1mm/data/new_contest.ui,sha256=m41EGeg1yPSUZAkF8jA2z1EKytZD9hZYiQDh1sjE2ac,24602
37
38
  not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
38
39
  not1mm/data/opon.ui,sha256=QDicqAk2lORG2UWsHa6jHlsGn6uzrrI2R4HSAocpPes,2258
@@ -46,6 +47,7 @@ not1mm/data/rttymacros.txt,sha256=FQ2BnAChXF5w-tzmMnBOE8IgvviAEsd3cmmz4b8GOPk,46
46
47
  not1mm/data/settings.ui,sha256=rZmhUjFAyCA8B-cd4Ljrvz5qC3NKy6S3feYVh5WX-tw,40084
47
48
  not1mm/data/splash.png,sha256=85_BQotR1q24uCthrKm4SB_6ZOMwRjR-Jdp1XBHSTyg,5368
48
49
  not1mm/data/ssbmacros.txt,sha256=Q7MrkaBntbeg4yQSoMv3NLoM24V4y_RVati3_wmb0mY,464
50
+ not1mm/data/statistics.ui,sha256=8hW3SxJzB4nsxo1DcJTF9oH4dPjvxo27qutAQsgl0dY,1073
49
51
  not1mm/data/vfo.ui,sha256=-fmFMJLPDz0jmsOdCljL7vfmlAQgwyHkGZjomlIN3gc,2076
50
52
  not1mm/data/phonetics/0.wav,sha256=0OpYiR-3MK6fVHE6MB-HeOxSAPiDNMjqvx5JcIZtsQk,42590
51
53
  not1mm/data/phonetics/1.wav,sha256=OEAavA8cfVxFZwaT0HY9Wg9NAGEPKBhwhEdzGXkQs_U,30248
@@ -116,7 +118,7 @@ not1mm/lib/plugin_common.py,sha256=D1OBjyLmX7zuSPqgTCmHwXzAKA12J_zTQItvyIem-4Y,1
116
118
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
117
119
  not1mm/lib/settings.py,sha256=mXffn8Xaj5KATPQinNBR0V5DbHWQPsRfh24_axWGYuk,15254
118
120
  not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
119
- not1mm/lib/version.py,sha256=D36haw75BmT7nbfjzMyIS7VQGPLJvRzA8aVsd7gzB5Y,50
121
+ not1mm/lib/version.py,sha256=vU3m0t16VI6NkKZdHZ_j-a-BN1_FKkNq--xKAoyB-bM,48
120
122
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
121
123
  not1mm/plugins/10_10_fall_cw.py,sha256=P63dEhRmvsEV7ixHYg-qhs5zzj0_DJXjjPHQBQr8Wwg,14731
122
124
  not1mm/plugins/10_10_spring_cw.py,sha256=S_z-KbExH4_kfRbKo07zM-iVlJUKxFwzbm6LRnXYyNU,14734
@@ -171,9 +173,9 @@ not1mm/plugins/ref_ssb.py,sha256=tGK5XeFrc3z7l8OViG9DM3rc4HLUBF9S3SUkaAPrjQk,215
171
173
  not1mm/plugins/stew_perry_topband.py,sha256=LHt0WnWMRS_m5nO9BOIQs0kO38M6x-k4eaA4nbEqDVA,15353
172
174
  not1mm/plugins/weekly_rtty.py,sha256=4gfFg25KGkU9tKmwslHLc38qPAXuRGWNX48n582NC7w,20078
173
175
  not1mm/plugins/winter_field_day.py,sha256=jLgEr95hJCZoc3Fi95PiNeB06thPQHFI3zOHmR6NprE,15234
174
- not1mm-25.3.19.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
175
- not1mm-25.3.19.1.dist-info/METADATA,sha256=1edRS2VupikCzWq1a2BhoJ_6Uc18pGQ7Waj5wgIFOMo,37226
176
- not1mm-25.3.19.1.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
177
- not1mm-25.3.19.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
178
- not1mm-25.3.19.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
179
- not1mm-25.3.19.1.dist-info/RECORD,,
176
+ not1mm-25.3.23.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
177
+ not1mm-25.3.23.dist-info/METADATA,sha256=O3nl8WeblJtv9jbNlPSOSg8o6eiVleC_h6pxrDWRB_8,37243
178
+ not1mm-25.3.23.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
179
+ not1mm-25.3.23.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
180
+ not1mm-25.3.23.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
181
+ not1mm-25.3.23.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.1.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5