not1mm 23.8.5__py3-none-any.whl → 23.8.6__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/checkwindow.py CHANGED
@@ -2,7 +2,7 @@
2
2
  """
3
3
  Check Window
4
4
  """
5
- # pylint: disable=no-name-in-module, unused-import, no-member
5
+ # pylint: disable=no-name-in-module, unused-import, no-member, invalid-name
6
6
 
7
7
  import logging
8
8
  import pkgutil
@@ -67,9 +67,11 @@ class MainWindow(QMainWindow):
67
67
  self.masterList.clear()
68
68
  self.telnetList.clear()
69
69
  self.callhistoryList.clear()
70
- self.logList.hide()
70
+ # self.logList.hide()
71
71
  self.telnetList.hide()
72
+ self.telnetListLabel.hide()
72
73
  self.callhistoryList.hide()
74
+ self.callhistoryListLabel.hide()
73
75
  self.mscp = SCP(WORKING_PATH)
74
76
  self._udpwatch = None
75
77
  self.udp_fifo = queue.Queue()
@@ -127,6 +129,7 @@ class MainWindow(QMainWindow):
127
129
  if json_data.get("cmd", "") == "CALLCHANGED":
128
130
  call = json_data.get("call", "")
129
131
  self.master_list(call)
132
+ self.log_list(call)
130
133
  if json_data.get("cmd", "") == "NEWDB":
131
134
  ...
132
135
  # self.load_new_db()
@@ -149,6 +152,16 @@ class MainWindow(QMainWindow):
149
152
  self.masterList.addItem(listItem)
150
153
  self.masterList.show()
151
154
 
155
+ def log_list(self, call: str) -> None:
156
+ """Parse calls in log for matches"""
157
+ self.logList.clear()
158
+ if call:
159
+ result = self.database.get_like_calls_and_bands(call)
160
+ for calls in result:
161
+ listItem = QListWidgetItem(calls)
162
+ self.logList.addItem(listItem)
163
+ self.logList.show()
164
+
152
165
 
153
166
  def load_fonts_from_dir(directory: str) -> set:
154
167
  """
@@ -21,17 +21,69 @@
21
21
  </property>
22
22
  <widget class="QWidget" name="centralwidget">
23
23
  <layout class="QGridLayout" name="gridLayout">
24
- <item row="0" column="0">
24
+ <item row="1" column="1">
25
+ <widget class="QListWidget" name="masterList"/>
26
+ </item>
27
+ <item row="1" column="3">
28
+ <widget class="QListWidget" name="callhistoryList"/>
29
+ </item>
30
+ <item row="1" column="2">
31
+ <widget class="QListWidget" name="telnetList"/>
32
+ </item>
33
+ <item row="1" column="0">
25
34
  <widget class="QListWidget" name="logList"/>
26
35
  </item>
36
+ <item row="0" column="0">
37
+ <widget class="QLabel" name="logListLabel">
38
+ <property name="font">
39
+ <font>
40
+ <family>JetBrains Mono</family>
41
+ <pointsize>10</pointsize>
42
+ </font>
43
+ </property>
44
+ <property name="text">
45
+ <string>Log</string>
46
+ </property>
47
+ </widget>
48
+ </item>
27
49
  <item row="0" column="1">
28
- <widget class="QListWidget" name="masterList"/>
50
+ <widget class="QLabel" name="masterListLabel">
51
+ <property name="font">
52
+ <font>
53
+ <family>JetBrains Mono</family>
54
+ <pointsize>10</pointsize>
55
+ </font>
56
+ </property>
57
+ <property name="text">
58
+ <string>Master</string>
59
+ </property>
60
+ </widget>
29
61
  </item>
30
62
  <item row="0" column="2">
31
- <widget class="QListWidget" name="telnetList"/>
63
+ <widget class="QLabel" name="telnetListLabel">
64
+ <property name="font">
65
+ <font>
66
+ <family>JetBrains Mono</family>
67
+ <pointsize>10</pointsize>
68
+ </font>
69
+ </property>
70
+ <property name="text">
71
+ <string>Telnet</string>
72
+ </property>
73
+ </widget>
32
74
  </item>
33
75
  <item row="0" column="3">
34
- <widget class="QListWidget" name="callhistoryList"/>
76
+ <widget class="QLabel" name="callhistoryListLabel">
77
+ <property name="font">
78
+ <font>
79
+ <family>JetBrains Mono</family>
80
+ <pointsize>10</pointsize>
81
+ </font>
82
+ </property>
83
+ <property name="text">
84
+ <string>Call</string>
85
+ </property>
86
+ </widget>
35
87
  </item>
36
88
  </layout>
37
89
  </widget>
not1mm/lib/database.py CHANGED
@@ -920,6 +920,43 @@ class DataBase:
920
920
  logger.debug("%s", exception)
921
921
  return {}
922
922
 
923
+ def get_like_calls_and_bands(self, call: str) -> dict:
924
+ """
925
+ Returns a dict like:
926
+ {'K5TUX': [14.0, 21.0], 'N2CQR': [14.0], 'NE4RD': [14.0]}
927
+ """
928
+ try:
929
+ with sqlite3.connect(self.database) as conn:
930
+ conn.row_factory = self.row_factory
931
+ cursor = conn.cursor()
932
+ cursor.execute(
933
+ f"select call, band from DXLOG where call like '%{call}%' and ContestNR = {self.current_contest};"
934
+ )
935
+ result = cursor.fetchall()
936
+ worked_list = {}
937
+ # This converts a list of dicts like:
938
+ # [
939
+ # {"Call": "K5TUX", "Band": 14.0},
940
+ # {"Call": "K5TUX", "Band": 21.0},
941
+ # {"Call": "N2CQR", "Band": 14.0},
942
+ # {"Call": "NE4RD", "Band": 14.0},
943
+ # ]
944
+ #
945
+ # To:
946
+ # {'K5TUX': [14.0, 21.0], 'N2CQR': [14.0], 'NE4RD': [14.0]}
947
+ for worked_dict in result:
948
+ call = worked_dict.get("Call")
949
+ if call in worked_list:
950
+ bandlist = worked_list[call]
951
+ bandlist.append(worked_dict["Band"])
952
+ worked_list[call] = bandlist
953
+ continue
954
+ worked_list[call] = [worked_dict["Band"]]
955
+ return worked_list
956
+ except sqlite3.OperationalError as exception:
957
+ logger.debug("%s", exception)
958
+ return {}
959
+
923
960
  def get_unique_band_and_mode(self) -> dict:
924
961
  """get count of unique band and mode as {mult: x}"""
925
962
  try:
not1mm/lib/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  """It's the version"""
2
- __version__ = "23.8.5"
2
+ __version__ = "23.8.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 23.8.5
3
+ Version: 23.8.6
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
@@ -89,6 +89,7 @@ Requires-Dist: notctyparser >=23.6.21
89
89
  - [Editing a contact](#editing-a-contact)
90
90
  - [Recalulate Mults](#recalulate-mults)
91
91
  - [Bandmap](#bandmap)
92
+ - [Check Window](#check-window)
92
93
  - [Cabrillo](#cabrillo)
93
94
  - [ADIF](#adif)
94
95
  - [Dupe checking](#dupe-checking)
@@ -150,6 +151,7 @@ I wish to thank those who've contributed to the project.
150
151
 
151
152
  ## Recent Changes
152
153
 
154
+ - [23-8-6] Add parsing of local log to check window.
153
155
  - [23-8-5] Add Check Window. Moved MASTER.SCP stuff to it's own class. Close sub windows when main app closes.
154
156
 
155
157
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -477,6 +479,14 @@ VFO indicator now displays as small triangle in the frequency tickmarks. A small
477
479
 
478
480
  Clicked on spots now tune the radio and set the callsign field. Previously worked calls are displayed in red.
479
481
 
482
+ ## Check Window
483
+
484
+ `Window`>`Check Window`
485
+
486
+ As you enter a callsign, the Check Window will show probable matches to calls either in the MASTER.SCP file, or your local log. The MASTER.SCP column will show results for strings of 3 or more matching from the start of the call string. The local log column will show matches of any length appearing anywhere in the string.
487
+
488
+ ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
489
+
480
490
  ## Cabrillo
481
491
 
482
492
  Click on `File` > `Generate Cabrillo`
@@ -1,7 +1,7 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  not1mm/__main__.py,sha256=epgycpDTK2ELV0NNwQcoukeC7sJVSdSkoD4pSurn5d0,96702
3
3
  not1mm/bandmap.py,sha256=5mANS6F9c11CrEzHD5EL2sTYB_d-ncvRofrLg8bHMP0,26884
4
- not1mm/checkwindow.py,sha256=xo5iPKtuLnjnwMQJgZ8YBpZpAE_siwsn8ZGLmdrqgyg,5955
4
+ not1mm/checkwindow.py,sha256=gJYc67pMKbxNQMPGJ1PI41nKWGXvG1_H1n9gQRvXsJA,6451
5
5
  not1mm/logwindow.py,sha256=DOv2L3wEWzxrIFb5mAg6yaIoW9ejSbcuLN6D5HiLgf8,34331
6
6
  not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
7
7
  not1mm/data/MASTER.SCP,sha256=J7Xi62-SF0vO8X1IvQE5O-dESikT6OVmrT_x80F7f4Y,657382
@@ -9,7 +9,7 @@ not1mm/data/about.ui,sha256=7TqvtXFFm0Rmcu0bmLupwpO1CsK8MekfZ09_xn6kZrQ,2067
9
9
  not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6u5LUIqAYidOQ,224
10
10
  not1mm/data/bandmap.ui,sha256=FB2NaxSK-ZZvfYHU9Mu8FkQxTeVHcFGV40zIqgBXAFo,5246
11
11
  not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
12
- not1mm/data/checkwindow.ui,sha256=bTL12pHPn28RGApBK5DamLwg1eqtAePt2A7rMzcaPDc,1227
12
+ not1mm/data/checkwindow.ui,sha256=nc4FRc4D3ozC1jhm96Q2y6rolayKF6OwMrbCSaQ-vbg,2572
13
13
  not1mm/data/configuration.ui,sha256=-6LKpkTWFuWy9gVBeQ5k3fg5Mw01rwAxp6fQag0E38c,41522
14
14
  not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
15
15
  not1mm/data/cty.json,sha256=0l3wUE5vsc9yknd59ffRLFtAPcnXNl2IaKAmQojGBGI,4667346
@@ -83,7 +83,7 @@ not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  not1mm/lib/about.py,sha256=O9i8ypv2W9KZkPAp2bcRI0J5RgPE5R1vMfU8ZGlok_E,379
84
84
  not1mm/lib/cat_interface.py,sha256=eKsxC42Mm9wv7E2YQmgL7tLA2Gom-vCVaHHRf2Kitdk,15676
85
85
  not1mm/lib/cwinterface.py,sha256=fZ5BXVyF7by0yGTJVznUTjRCxRt3lJaUIsNC-_mCGP4,3123
86
- not1mm/lib/database.py,sha256=wE95yuMKZDOS_QVxyItzrV8WxAoFwS-zV309r2ojx0w,38549
86
+ not1mm/lib/database.py,sha256=j_AHxc_cW8vyfwmNrqO9DUPW2HnJqtMKKQeqq233A64,40117
87
87
  not1mm/lib/edit_contact.py,sha256=YwuX-BuIa7AuPtLRENs4jTzxOrtk6MCxZj3BR_bDPW8,357
88
88
  not1mm/lib/edit_macro.py,sha256=lyToZb1nmcONNFh6W35NzYHLU48gbAs2_OsnuRQGHck,559
89
89
  not1mm/lib/edit_opon.py,sha256=GqAOJMiC265_4YRVbkT1PflBuCa4HiCNfRhq8-J6ZVY,363
@@ -96,7 +96,7 @@ not1mm/lib/new_contest.py,sha256=mHKNCS3iKOKN-bT9d8ZK3JemThOZFQ0ikfUSS0-ZTpY,354
96
96
  not1mm/lib/select_contest.py,sha256=XQdRUkPAIHIMVsilm82M54b_v9yWpYrZ1nfInJrtZoo,363
97
97
  not1mm/lib/settings.py,sha256=tkCWgJ3CpNkGR_IyCTOCIlO6PEPZCShHO9FL-9Wono8,6885
98
98
  not1mm/lib/super_check_partial.py,sha256=GlXgtIblL602iW-V6Mmdf5S4FxtzJ95TbPMMa9xXUfg,1692
99
- not1mm/lib/version.py,sha256=NfJFpkXN95Iiyp3XnM8yOFhMtcjiBBJrWKnDDFlCnrQ,46
99
+ not1mm/lib/version.py,sha256=hATNe5bxbwO_Se-Zg1fJdhcw2L9NT4hAiGokiArFTD4,46
100
100
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
101
101
  not1mm/plugins/10_10_fall_cw.py,sha256=uV66Mmj6vuNGgY_4PX4lKWvvkyqBQNDf8gAAGTIoKxE,13883
102
102
  not1mm/plugins/10_10_spring_cw.py,sha256=yAxvP1fR5vg4cqpADvG0BN-ibjW7lSAcn-p9VzXNW3g,13888
@@ -128,9 +128,9 @@ not1mm/testing/multicast_listener.py,sha256=2CkiyZ4EQxBX68_1QzGIX9g_UB9-CQq63OH-
128
128
  not1mm/testing/n1mm_listener.py,sha256=UD-qyKEnppQua330WEFKMvMJaNjnYKi7dDuX_RGB5lQ,1099
129
129
  not1mm/testing/test.py,sha256=wGblvMlyOCVkEiHbxE6wvLsorim15ehL72_EZLQeWkk,1660
130
130
  testing/test.py,sha256=icT6vZPbJaZWJbEZ09nSbPmTFeiaL7LbXqM_sjhDisI,471
131
- not1mm-23.8.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
132
- not1mm-23.8.5.dist-info/METADATA,sha256=AM3B7rI-zFqC3DmAgSQeWrfHWxIJsX9WJXM6xpLVXKM,23401
133
- not1mm-23.8.5.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
134
- not1mm-23.8.5.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
135
- not1mm-23.8.5.dist-info/top_level.txt,sha256=-NwUrh4k1kzpOvf720xYWSTKSlr-zNSIz3D_eplrxLs,15
136
- not1mm-23.8.5.dist-info/RECORD,,
131
+ not1mm-23.8.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
132
+ not1mm-23.8.6.dist-info/METADATA,sha256=nvBHO-Wu4EX-eMTfuwrP4zuRJaqT7aOsIPqWXlT5xPM,23938
133
+ not1mm-23.8.6.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
134
+ not1mm-23.8.6.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
135
+ not1mm-23.8.6.dist-info/top_level.txt,sha256=-NwUrh4k1kzpOvf720xYWSTKSlr-zNSIz3D_eplrxLs,15
136
+ not1mm-23.8.6.dist-info/RECORD,,